{"id":3707,"date":"2025-12-29T23:13:08","date_gmt":"2025-12-29T20:13:08","guid":{"rendered":"https:\/\/www.dchost.com\/blog\/php-session-ve-queue-iscileri-icin-ayri-php-fpm-islem-havuzu-kurmak\/"},"modified":"2025-12-29T23:13:08","modified_gmt":"2025-12-29T20:13:08","slug":"php-session-ve-queue-iscileri-icin-ayri-php-fpm-islem-havuzu-kurmak","status":"publish","type":"post","link":"https:\/\/www.dchost.com\/blog\/php-session-ve-queue-iscileri-icin-ayri-php-fpm-islem-havuzu-kurmak\/","title":{"rendered":"PHP Session ve Queue \u0130\u015f\u00e7ileri \u0130\u00e7in Ayr\u0131 PHP-FPM \u0130\u015flem Havuzu Kurmak"},"content":{"rendered":"<div class=\"dchost-blog-content-wrapper\"><div id=\"toc_container\" class=\"toc_transparent no_bullets\"><p class=\"toc_title\">\u0130&ccedil;indekiler<\/p><ul class=\"toc_list\"><li><a href=\"#PHP_Session_ve_Queue_Iscilerini_Neden_Ayirmak_Zorundayiz\"><span class=\"toc_number toc_depth_1\">1<\/span> PHP Session ve Queue \u0130\u015f\u00e7ilerini Neden Ay\u0131rmak Zorunday\u0131z?<\/a><\/li><li><a href=\"#Problemin_Koku_Ayni_Havuzda_Farkli_Is_Yukleri\"><span class=\"toc_number toc_depth_1\">2<\/span> Problemin K\u00f6k\u00fc: Ayn\u0131 Havuzda Farkl\u0131 \u0130\u015f Y\u00fckleri<\/a><\/li><li><a href=\"#Mimari_Yaklasim_Izole_Havuz_ve_Isci_Katmanlari\"><span class=\"toc_number toc_depth_1\">3<\/span> Mimari Yakla\u015f\u0131m: \u0130zole Havuz ve \u0130\u015f\u00e7i Katmanlar\u0131<\/a><\/li><li><a href=\"#PHP-FPM_ile_Session_Agirlikli_ve_Stateless_Havuzlari_Ayirmak\"><span class=\"toc_number toc_depth_1\">4<\/span> PHP-FPM ile Session A\u011f\u0131rl\u0131kl\u0131 ve Stateless Havuzlar\u0131 Ay\u0131rmak<\/a><ul><li><a href=\"#Ornek_PHP-FPM_Havuz_Konfigurasyonu\"><span class=\"toc_number toc_depth_2\">4.1<\/span> \u00d6rnek PHP-FPM Havuz Konfig\u00fcrasyonu<\/a><\/li><li><a href=\"#Nginx_ile_Havuzlari_Sanal_Hostlara_Baglamak\"><span class=\"toc_number toc_depth_2\">4.2<\/span> Nginx ile Havuzlar\u0131 Sanal Host\u2019lara Ba\u011flamak<\/a><\/li><\/ul><\/li><li><a href=\"#Queue_Iscilerini_PHP-FPMden_Koparmak_Supervisor_systemd\"><span class=\"toc_number toc_depth_1\">5<\/span> Queue \u0130\u015f\u00e7ilerini PHP-FPM\u2019den Koparmak: Supervisor + systemd<\/a><ul><li><a href=\"#Supervisor_Konfigurasyonu_ile_Queue_Iscileri\"><span class=\"toc_number toc_depth_2\">5.1<\/span> Supervisor Konfig\u00fcrasyonu ile Queue \u0130\u015f\u00e7ileri<\/a><\/li><li><a href=\"#Supervisori_systemd_ile_Izole_Etmek\"><span class=\"toc_number toc_depth_2\">5.2<\/span> Supervisor\u2019\u0131 systemd ile \u0130zole Etmek<\/a><\/li><li><a href=\"#Supervisor_Yerine_Dogrudan_systemd_Kullanmak\"><span class=\"toc_number toc_depth_2\">5.3<\/span> Supervisor Yerine Do\u011frudan systemd Kullanmak<\/a><\/li><\/ul><\/li><li><a href=\"#Kaynak_Planlama_Kac_FPM_Sureci_Kac_Queue_Iscisi\"><span class=\"toc_number toc_depth_1\">6<\/span> Kaynak Planlama: Ka\u00e7 FPM S\u00fcreci, Ka\u00e7 Queue \u0130\u015f\u00e7isi?<\/a><ul><li><a href=\"#Adim_1_PHP-FPM_Havuz_RAM_Hesabi\"><span class=\"toc_number toc_depth_2\">6.1<\/span> Ad\u0131m 1: PHP-FPM Havuz RAM Hesab\u0131<\/a><\/li><li><a href=\"#Adim_2_Queue_Iscisi_RAM_Hesabi\"><span class=\"toc_number toc_depth_2\">6.2<\/span> Ad\u0131m 2: Queue \u0130\u015f\u00e7isi RAM Hesab\u0131<\/a><\/li><\/ul><\/li><li><a href=\"#Gercek_Senaryolar_WooCommerce_Laravel_API_ve_Raporlama\"><span class=\"toc_number toc_depth_1\">7<\/span> Ger\u00e7ek Senaryolar: WooCommerce, Laravel API ve Raporlama<\/a><ul><li><a href=\"#1_WooCommerce_Promosyon_Kampanyasi\"><span class=\"toc_number toc_depth_2\">7.1<\/span> 1. WooCommerce + Promosyon Kampanyas\u0131<\/a><\/li><li><a href=\"#2_Laravel_API_Mobil_Uygulama\"><span class=\"toc_number toc_depth_2\">7.2<\/span> 2. Laravel API + Mobil Uygulama<\/a><\/li><li><a href=\"#3_Agir_Raporlama_ve_Batch_Isleri\"><span class=\"toc_number toc_depth_2\">7.3<\/span> 3. A\u011f\u0131r Raporlama ve Batch \u0130\u015fleri<\/a><\/li><\/ul><\/li><li><a href=\"#Loglama_Izlenebilirlik_ve_Sorun_Giderme\"><span class=\"toc_number toc_depth_1\">8<\/span> Loglama, \u0130zlenebilirlik ve Sorun Giderme<\/a><\/li><li><a href=\"#DCHost_Altyapisinda_Izole_Havuz_Mimarisi_Nasil_Konumlanir\"><span class=\"toc_number toc_depth_1\">9<\/span> DCHost Altyap\u0131s\u0131nda \u0130zole Havuz Mimarisi Nas\u0131l Konumlan\u0131r?<\/a><\/li><li><a href=\"#Ozet_ve_Sonraki_Adimlar\"><span class=\"toc_number toc_depth_1\">10<\/span> \u00d6zet ve Sonraki Ad\u0131mlar<\/a><\/li><\/ul><\/div>\n<h2><span id=\"PHP_Session_ve_Queue_Iscilerini_Neden_Ayirmak_Zorundayiz\">PHP Session ve Queue \u0130\u015f\u00e7ilerini Neden Ay\u0131rmak Zorunday\u0131z?<\/span><\/h2>\n<p>PHP ile yaz\u0131lm\u0131\u015f modern uygulamalarda (Laravel, Symfony, WooCommerce, \u00f6zel paneller vb.) ayn\u0131 sunucuda iki \u00e7ok farkl\u0131 i\u015f y\u00fck\u00fcn\u00fc bir arada ko\u015fturuyoruz: kullan\u0131c\u0131 oturumlar\u0131n\u0131 y\u00f6neten k\u0131sa \u00f6m\u00fcrl\u00fc HTTP istekleri ve dakikalarca s\u00fcrebilen, CPU ve I\/O t\u00fcketen queue (kuyruk) i\u015f\u00e7ileri. Kapasite analizi veya mimari tasar\u0131m toplant\u0131lar\u0131nda grafikleri a\u00e7t\u0131\u011f\u0131m\u0131zda genelde \u015funu g\u00f6r\u00fcyoruz: kampanya d\u00f6nemlerinde kuyruk i\u015f\u00e7ileri h\u0131zla \u00f6l\u00e7eklenmi\u015f, PHP-FPM s\u00fcreci say\u0131s\u0131 artm\u0131\u015f, ama frontend taraf\u0131nda oturum a\u00e7maya \u00e7al\u0131\u015fan kullan\u0131c\u0131lar 502 hatalar\u0131 veya yava\u015f yan\u0131tlarla bo\u011fu\u015fuyor. Sebep \u00e7o\u011fu zaman k\u00f6t\u00fc kod de\u011fil; ayn\u0131 i\u015flem havuzunda birbirine z\u0131t karakterde iki i\u015f y\u00fck\u00fcn\u00fc, tek bir kaynak havuzundan besliyor olmam\u0131z.<\/p>\n<p>Bu yaz\u0131da, DCHost taraf\u0131nda s\u0131k\u00e7a kurdu\u011fumuz <strong>izole havuz mimarisi<\/strong>ni ad\u0131m ad\u0131m anlataca\u011f\u0131z: PHP session a\u011f\u0131rl\u0131kl\u0131 istekler i\u00e7in ayr\u0131 PHP-FPM havuzlar\u0131, stateless API istekleri i\u00e7in ayr\u0131 havuzlar ve queue i\u015f\u00e7ileri i\u00e7in Supervisor + systemd ile s\u0131n\u0131rland\u0131r\u0131lm\u0131\u015f ba\u011f\u0131ms\u0131z bir katman. Ama\u00e7, hem son kullan\u0131c\u0131ya h\u0131zl\u0131 yan\u0131t verebilmek, hem de kuyruk i\u015f\u00e7ilerini g\u00f6n\u00fcl rahatl\u0131\u011f\u0131yla agresif \u00e7al\u0131\u015ft\u0131rabilmek. Yol \u00fczerinde session kilitlenmesi, FPM t\u0131kanmas\u0131, OOM killer ve CPU patlamas\u0131 gibi klasik sorunlara da de\u011finece\u011fiz.<\/p>\n<h2><span id=\"Problemin_Koku_Ayni_Havuzda_Farkli_Is_Yukleri\">Problemin K\u00f6k\u00fc: Ayn\u0131 Havuzda Farkl\u0131 \u0130\u015f Y\u00fckleri<\/span><\/h2>\n<p>Standart bir LEMP\/LAMP kurulumunda genellikle tek bir <code>www<\/code> isimli PHP-FPM havuzu olur. T\u00fcm sanal hostlar bu havuza ba\u011flan\u0131r; hem oturum alan kullan\u0131c\u0131 istekleri hem de arka planda \u00e7al\u0131\u015fan i\u015fler ayn\u0131 i\u015flem havuzunu payla\u015f\u0131r. Bu model k\u00fc\u00e7\u00fck siteler i\u00e7in fena de\u011fildir ama trafik ve i\u015f y\u00fck\u00fc b\u00fcy\u00fcd\u00fc\u011f\u00fcnde a\u015fa\u011f\u0131daki sorunlar ba\u015flar:<\/p>\n<ul>\n<li><strong>Session kilitlenmesi:<\/strong> Dosya tabanl\u0131 ya da Redis tabanl\u0131 PHP session\u2019lar, s\u00fcre\u00e7 baz\u0131nda kilitlenebilir. Uzun s\u00fcren bir istek oturumu a\u00e7\u0131k tuttu\u011funda, ayn\u0131 oturuma sahip di\u011fer istekler beklemeye ba\u015flar.<\/li>\n<li><strong>PHP-FPM saturasyonu:<\/strong> Queue i\u015f\u00e7ileri veya a\u011f\u0131r rapor istekleri FPM \u00e7ocuk s\u00fcre\u00e7lerini doldurur; yeni gelen HTTP istekleri bekler, sonunda timeout ile 502\/504 \u00fcretir.<\/li>\n<li><strong>OPcache ve memory bask\u0131s\u0131:<\/strong> Ayn\u0131 havuzda onlarca farkl\u0131 i\u015f, ortak OPcache ve memory limitlerini payla\u015f\u0131r. B\u00fcy\u00fck queue job\u2019lar\u0131, frontend i\u00e7in ayr\u0131lan RAM\u2019i sessizce t\u00fcketebilir.<\/li>\n<li><strong>Farkl\u0131 SLA\u2019ler:<\/strong> Kullan\u0131c\u0131 iste\u011fi i\u00e7in 300 ms hedeflerken, rapor \u00fcreten queue job\u2019unuzun 120 sn \u00e7al\u0131\u015fmas\u0131 gayet normal olabilir. Tek havuzda ikisini dengelemek zordur.<\/li>\n<\/ul>\n<p>Bu tabloya, yanl\u0131\u015f se\u00e7ilmi\u015f session ve cache altyap\u0131s\u0131n\u0131 da eklerseniz sorun katlan\u0131r. Session ve cache taraf\u0131ndaki se\u00e7eneklerin performansa etkisini detayl\u0131 olarak anlatt\u0131\u011f\u0131m\u0131z <a href=\"https:\/\/www.dchost.com\/blog\/php-session-ve-cache-depolamasini-dogru-secmek-dosya-redis-ve-memcachedin-wordpress-ve-laravel-performansina-etkisi\/\">PHP session ve cache depolamas\u0131n\u0131 do\u011fru se\u00e7me rehberimizi<\/a> bu yaz\u0131dan sonra mutlaka okuman\u0131z\u0131 \u00f6neririz.<\/p>\n<h2><span id=\"Mimari_Yaklasim_Izole_Havuz_ve_Isci_Katmanlari\">Mimari Yakla\u015f\u0131m: \u0130zole Havuz ve \u0130\u015f\u00e7i Katmanlar\u0131<\/span><\/h2>\n<p>DCHost olarak \u00f6nerdi\u011fimiz mimariyi iki ana katmana ay\u0131r\u0131yoruz:<\/p>\n<ul>\n<li><strong>1) PHP-FPM havuz katman\u0131:<\/strong> HTTP isteklerini kar\u015f\u0131layan, Nginx\/Apache arkas\u0131nda \u00e7al\u0131\u015fan k\u0131sa \u00f6m\u00fcrl\u00fc s\u00fcre\u00e7ler. Burada da kendi i\u00e7inde <em>session a\u011f\u0131rl\u0131kl\u0131<\/em> ve <em>stateless<\/em> havuzlar a\u00e7\u0131yoruz.<\/li>\n<li><strong>2) Queue i\u015f\u00e7i katman\u0131:<\/strong> php-cli ile \u00e7al\u0131\u015fan, Supervisor ve systemd taraf\u0131ndan y\u00f6netilen, FPM\u2019den tamamen ba\u011f\u0131ms\u0131z i\u015f\u00e7iler. CPU ve RAM limitleri ayr\u0131.<\/li>\n<\/ul>\n<p>Bu sayede \u00fc\u00e7 \u00f6nemli hedefe ula\u015f\u0131yoruz:<\/p>\n<ul>\n<li>\u00d6n y\u00fczdeki kullan\u0131c\u0131 isteklerini, arka plandaki batch i\u015flerden izole etmek.<\/li>\n<li>Session kilitlenmesini, uzun ya\u015fayan s\u00fcre\u00e7ler y\u00fcz\u00fcnden yay\u0131lmas\u0131n\u0131 engellemek.<\/li>\n<li>Kaynaklar\u0131 (CPU, RAM, I\/O) hem FPM havuzlar\u0131 aras\u0131nda hem de kuyruk i\u015f\u00e7ileri ile adil bi\u00e7imde payla\u015fmak.<\/li>\n<\/ul>\n<p>Kuyruk ve arka plan i\u015fleri taraf\u0131n\u0131n detayl\u0131 genel resmini merak ediyorsan\u0131z, ad\u0131m ad\u0131m \u00f6rneklerle anlatt\u0131\u011f\u0131m\u0131z <a href=\"https:\/\/www.dchost.com\/blog\/vps-uzerinde-arka-plan-isleri-ve-kuyruk-yonetimi-laravel-queue-supervisor-systemd-ve-pm2\/\">VPS \u00fczerinde arka plan i\u015fleri ve kuyruk y\u00f6netimi yaz\u0131m\u0131z<\/a> bu makalenin do\u011fal tamamlay\u0131c\u0131s\u0131d\u0131r.<\/p>\n<h2><span id=\"PHP-FPM_ile_Session_Agirlikli_ve_Stateless_Havuzlari_Ayirmak\">PHP-FPM ile Session A\u011f\u0131rl\u0131kl\u0131 ve Stateless Havuzlar\u0131 Ay\u0131rmak<\/span><\/h2>\n<p>\u00d6nce HTTP taraf\u0131n\u0131 d\u00fczenleyelim. Hedefimiz en az iki ayr\u0131 FPM havuzu:<\/p>\n<ul>\n<li><strong>session_pool:<\/strong> Kullan\u0131c\u0131 oturumu y\u00f6neten frontend ve admin istekleri. \u00d6rne\u011fin WordPress, WooCommerce, geleneksel paneller.<\/li>\n<li><strong>api_pool:<\/strong> JWT veya token tabanl\u0131, m\u00fcmk\u00fcn oldu\u011funca stateless API istekleri.<\/li>\n<\/ul>\n<p>Bu sayede, API taraf\u0131nda daha agresif concurrency ayarlar\u0131 kullanabilirken, session havuzunda daha korumac\u0131 davranabiliriz.<\/p>\n<h3><span id=\"Ornek_PHP-FPM_Havuz_Konfigurasyonu\">\u00d6rnek PHP-FPM Havuz Konfig\u00fcrasyonu<\/span><\/h3>\n<p>Tipik bir Debian\/Ubuntu sunucusunda PHP-FPM havuz dosyalar\u0131 <code>\/etc\/php\/8.2\/fpm\/pool.d\/<\/code> alt\u0131nda bulunur. Versiyon ve da\u011f\u0131t\u0131ma g\u00f6re yol de\u011fi\u015febilir, mant\u0131k ayn\u0131d\u0131r.<\/p>\n<pre class=\"language-bash line-numbers\"><code class=\"language-bash\">; \/etc\/php\/8.2\/fpm\/pool.d\/session_pool.conf\n[session_pool]\nuser = www-data\ngroup = www-data\nlisten = \/run\/php\/php8.2-fpm-session.sock\nlisten.owner = www-data\nlisten.group = www-data\n\npm = dynamic\npm.max_children = 30\npm.start_servers = 5\npm.min_spare_servers = 5\npm.max_spare_servers = 10\npm.max_requests = 1000\n\n; Session a\u011f\u0131rl\u0131kl\u0131 havuz - biraz daha uzun timeout\nrequest_terminate_timeout = 60s\n\n; Session handler ve path\nphp_admin_value[session.save_handler] = redis\nphp_admin_value[session.save_path] = &quot;tcp:\/\/127.0.0.1:6379?database=2&quot;\nphp_admin_value[session.gc_maxlifetime] = 1440\nphp_admin_value[session.cookie_httponly] = 1\nphp_admin_value[session.cookie_secure] = 1\n\n; Slow log\nrequest_slowlog_timeout = 5s\nslowlog = \/var\/log\/php8.2-fpm-session.slow.log\n<\/code><\/pre>\n<pre class=\"language-bash line-numbers\"><code class=\"language-bash\">; \/etc\/php\/8.2\/fpm\/pool.d\/api_pool.conf\n[api_pool]\nuser = www-data\ngroup = www-data\nlisten = \/run\/php\/php8.2-fpm-api.sock\nlisten.owner = www-data\nlisten.group = www-data\n\npm = dynamic\npm.max_children = 50\npm.start_servers = 10\npm.min_spare_servers = 5\npm.max_spare_servers = 20\npm.max_requests = 2000\n\n; API genellikle stateless, session kapat\u0131labilir\nphp_admin_value[session.auto_start] = 0\nphp_admin_value[session.use_cookies] = 0\n\nrequest_terminate_timeout = 15s\nrequest_slowlog_timeout = 2s\nslowlog = \/var\/log\/php8.2-fpm-api.slow.log\n<\/code><\/pre>\n<p>Buradaki baz\u0131 kritik noktalar:<\/p>\n<ul>\n<li><strong>pm.max_children:<\/strong> Havuz ba\u015f\u0131na ayn\u0131 anda ka\u00e7 PHP s\u00fcreci a\u00e7\u0131laca\u011f\u0131n\u0131 belirler. Bunu belirlerken RAM hesab\u0131 yapmak zorundas\u0131n\u0131z. Bu konuda detayl\u0131 bir hesaplama rehberine ihtiyac\u0131n\u0131z varsa, <a href=\"https:\/\/www.dchost.com\/blog\/wordpress-ve-woocommerce-icin-php-fpm-ayarlari-pm-pm-max_children-ve-pm-max_requests-hesaplama-rehberi\/\">WordPress ve WooCommerce i\u00e7in PHP-FPM ayarlar\u0131 rehberimizde<\/a> form\u00fclleri ad\u0131m ad\u0131m anlatt\u0131k.<\/li>\n<li><strong>request_terminate_timeout:<\/strong> Session havuzunda biraz daha uzun b\u0131rakabilir, API havuzunda agresif kesebilirsiniz. B\u00f6ylece hatal\u0131 veya tak\u0131l\u0131 kalan istekler havuzu kilitlemez.<\/li>\n<li><strong>session handler:<\/strong> Session havuzunda Redis kullanmak, dosya tabanl\u0131 session\u2019a g\u00f6re \u00e7ok daha sa\u011fl\u0131kl\u0131 olur. \u00dcstteki ayar bunun basit bir \u00f6rne\u011fi.<\/li>\n<\/ul>\n<h3><span id=\"Nginx_ile_Havuzlari_Sanal_Hostlara_Baglamak\">Nginx ile Havuzlar\u0131 Sanal Host\u2019lara Ba\u011flamak<\/span><\/h3>\n<p>\u015eimdi bu iki havuzu Nginx taraf\u0131nda do\u011fru sanal host\u2019lara ba\u011flayal\u0131m. \u00d6rne\u011fin <code>www.site.com<\/code> session havuzuna, <code>api.site.com<\/code> ise api havuzuna gitsin:<\/p>\n<pre class=\"language-nginx line-numbers\"><code class=\"language-nginx\">upstream php_session_pool {\n    server unix:\/run\/php\/php8.2-fpm-session.sock;\n}\n\nupstream php_api_pool {\n    server unix:\/run\/php\/php8.2-fpm-api.sock;\n}\n\nserver {\n    server_name www.site.com;\n    root \/var\/www\/site\/public;\n\n    location ~ .php$ {\n        include fastcgi_params;\n        fastcgi_split_path_info ^(.+.php)(\/.+)$;\n        fastcgi_pass php_session_pool;\n        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;\n    }\n}\n\nserver {\n    server_name api.site.com;\n    root \/var\/www\/site\/public;\n\n    location ~ .php$ {\n        include fastcgi_params;\n        fastcgi_split_path_info ^(.+.php)(\/.+)$;\n        fastcgi_pass php_api_pool;\n        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;\n    }\n}\n<\/code><\/pre>\n<p>Bu ayr\u0131m\u0131n getirileri:<\/p>\n<ul>\n<li>Frontend\u2019de oturum a\u00e7an kullan\u0131c\u0131lar, uzun s\u00fcren API isteklerinden etkilenmez.<\/li>\n<li>API taraf\u0131nda daha fazla concurrency, daha d\u00fc\u015f\u00fck timeout ve daha agresif FPM ayarlar\u0131 kullanabilirsiniz.<\/li>\n<li>Slow log ve hata log\u2019lar\u0131n\u0131 havuz baz\u0131nda ay\u0131rabildi\u011finiz i\u00e7in, hangi katman\u0131n sorun \u00e7\u0131kard\u0131\u011f\u0131n\u0131 \u00e7ok daha net g\u00f6r\u00fcrs\u00fcn\u00fcz.<\/li>\n<\/ul>\n<h2><span id=\"Queue_Iscilerini_PHP-FPMden_Koparmak_Supervisor_systemd\">Queue \u0130\u015f\u00e7ilerini PHP-FPM\u2019den Koparmak: Supervisor + systemd<\/span><\/h2>\n<p>Bir\u00e7ok Laravel veya Symfony projesinde queue i\u015f\u00e7ileri <code>php-cli<\/code> ile, genellikle Supervisor taraf\u0131ndan y\u00f6netilir. Yani teknik olarak PHP-FPM\u2019in kendisini kullanmazlar. Yine de ayn\u0131 sunucunun CPU ve RAM\u2019ini t\u00fckettikleri i\u00e7in, <strong>do\u011fru izole edilmediklerinde FPM havuzlar\u0131na ciddi zarar verebilirler<\/strong>. Buradaki hedefimiz:<\/p>\n<ul>\n<li>Queue i\u015f\u00e7ilerini ayr\u0131 bir systemd cgroup\u2019una almak,<\/li>\n<li>Gerekirse Supervisor\u2019\u0131 bu cgroup i\u00e7inde ko\u015fturmak,<\/li>\n<li>\u0130\u015f\u00e7i say\u0131s\u0131 ve memory limitleri ile PHP-FPM havuzunun g\u00fcvenli s\u0131n\u0131rlar\u0131n\u0131 korumak.<\/li>\n<\/ul>\n<h3><span id=\"Supervisor_Konfigurasyonu_ile_Queue_Iscileri\">Supervisor Konfig\u00fcrasyonu ile Queue \u0130\u015f\u00e7ileri<\/span><\/h3>\n<p>Laravel \u00f6rne\u011fi \u00fczerinden gidelim. Supervisor konfig\u00fcrasyonumuz \u015f\u00f6yle olabilir:<\/p>\n<pre class=\"language-bash line-numbers\"><code class=\"language-bash\">; \/etc\/supervisor\/conf.d\/laravel-queue.conf\n[program:laravel-queue]\nprocess_name=%(program_name)s_%(process_num)02d\ncommand=\/usr\/bin\/php -d memory_limit=512M \/var\/www\/site\/artisan queue:work \n    --sleep=1 --tries=3 --queue=default\n\nnumprocs=4\nautostart=true\nautorestart=true\nuser=www-data\nredirect_stderr=true\nstdout_logfile=\/var\/log\/supervisor\/laravel-queue.log\nstopwaitsecs=60\n<\/code><\/pre>\n<p>Buradaki kritik noktalar:<\/p>\n<ul>\n<li><strong>numprocs=4:<\/strong> Ayn\u0131 anda 4 i\u015f\u00e7i s\u00fcreci \u00e7al\u0131\u015facak. Bu say\u0131y\u0131 CPU ve RAM b\u00fct\u00e7enize g\u00f6re ayarlay\u0131n.<\/li>\n<li><strong>memory_limit=512M:<\/strong> Queue i\u015f\u00e7ileri i\u00e7in PHP memory limitini frontend\u2019den farkl\u0131 tan\u0131ml\u0131yoruz. B\u00f6ylece a\u011f\u0131r job\u2019lar i\u00e7in esneklik sa\u011flarken, limit a\u015f\u0131m\u0131 durumunda s\u00fcre\u00e7ler kontroll\u00fc bi\u00e7imde \u00f6l\u00fcr.<\/li>\n<li><strong>stdout_logfile:<\/strong> Log\u2019lar\u0131 ayr\u0131 bir yerde tutup, izleme sistemlerine besleyebilirsiniz.<\/li>\n<\/ul>\n<p>Laravel taraf\u0131nda queue ve Horizon optimizasyonlar\u0131n\u0131 daha derinlemesine incelemek isterseniz, <a href=\"https:\/\/www.dchost.com\/blog\/laravel-prod-ortam-optimizasyonu-nasil-yapilir-php%E2%80%91fpm-opcache-octane-queue-horizon-ve-redisi-el-ele-calistirmak\/\">Laravel prod ortam optimizasyonu rehberimizde<\/a> ger\u00e7ek d\u00fcnya ayar \u00f6rnekleri bulabilirsiniz.<\/p>\n<h3><span id=\"Supervisori_systemd_ile_Izole_Etmek\">Supervisor\u2019\u0131 systemd ile \u0130zole Etmek<\/span><\/h3>\n<p>Supervisor tek ba\u015f\u0131na \u00e7al\u0131\u015fan bir s\u00fcre\u00e7tir; onu da <strong>ayr\u0131 bir systemd servisi olarak<\/strong> konumland\u0131r\u0131r ve bu servise kaynak limitleri vererek FPM\u2019den ay\u0131r\u0131r\u0131z. \u00d6rnek bir unit dosyas\u0131:<\/p>\n<pre class=\"language-bash line-numbers\"><code class=\"language-bash\"># \/etc\/systemd\/system\/supervisor-queue.service\n[Unit]\nDescription=Supervisor for Laravel Queue Workers\nAfter=network.target\n\n[Service]\nType=simple\nUser=root\nGroup=root\n\nExecStart=\/usr\/bin\/supervisord -n -c \/etc\/supervisor\/supervisord.conf\nRestart=always\nRestartSec=5\n\n# Kaynak limitleri\nCPUAccounting=yes\nCPUQuota=150%%\nMemoryAccounting=yes\nMemoryMax=4G\nIOAccounting=yes\nIOWeight=200\n\n[Install]\nWantedBy=multi-user.target\n<\/code><\/pre>\n<p>A\u00e7\u0131klamalar:<\/p>\n<ul>\n<li><strong>CPUQuota=150%:<\/strong> 4 vCPU\u2019lu bir <a href=\"https:\/\/www.dchost.com\/tr\/vps\">VPS<\/a>\u2019te bu servis toplam CPU\u2019nun yakla\u015f\u0131k 1.5 \u00e7ekirde\u011fine kadar \u00e7\u0131kabilir. B\u00f6ylece kuyru\u011fu h\u0131zland\u0131r\u0131rken, FPM\u2019e de nefes alan\u0131 b\u0131rak\u0131r\u0131z.<\/li>\n<li><strong>MemoryMax=4G:<\/strong> Queue i\u015f\u00e7ilerinin toplamda 4 GB\u2019tan fazla RAM yemesine izin vermiyoruz. Limit a\u015f\u0131l\u0131rsa systemd s\u00fcre\u00e7leri \u00f6ld\u00fcr\u00fcr; en az\u0131ndan PHP-FPM\u2019i ve t\u00fcm sistemi a\u015fa\u011f\u0131 \u00e7ekmezler.<\/li>\n<li><strong>IOWeight=200:<\/strong> Disk I\/O \u00f6nceli\u011fini ayarlayarak, FPM havuzlar\u0131n\u0131n disk kuyru\u011funda bo\u011fulmas\u0131n\u0131 engelleyebilirsiniz.<\/li>\n<\/ul>\n<p>Bu servisi etkinle\u015ftirmek i\u00e7in:<\/p>\n<pre class=\"language-bash line-numbers\"><code class=\"language-bash\">systemctl daemon-reload\nsystemctl enable supervisor-queue\nsystemctl start supervisor-queue\n<\/code><\/pre>\n<p>B\u00f6ylece queue taraf\u0131, PHP-FPM\u2019den hem proses hem de cgroup d\u00fczeyinde ayr\u0131lm\u0131\u015f olur. RAM ve OOM killer davran\u0131\u015f\u0131n\u0131n sistem genelinde nas\u0131l i\u015fledi\u011fini daha detayl\u0131 anlamak isterseniz, <a href=\"https:\/\/www.dchost.com\/blog\/vpste-ram-swap-ve-oom-killer-yonetimi\/\">VPS\u2019te RAM, swap ve OOM killer y\u00f6netimi yaz\u0131m\u0131z<\/a> tam bu noktada \u00e7ok faydal\u0131.<\/p>\n<h3><span id=\"Supervisor_Yerine_Dogrudan_systemd_Kullanmak\">Supervisor Yerine Do\u011frudan systemd Kullanmak<\/span><\/h3>\n<p>Yeni projelerde pek \u00e7ok ekip, ek bir ba\u011f\u0131ml\u0131l\u0131k kullanmamak i\u00e7in Supervisor yerine <strong>do\u011frudan systemd unit<\/strong> ile Laravel queue i\u015f\u00e7ilerini ko\u015fturmay\u0131 tercih ediyor. \u00d6rne\u011fin:<\/p>\n<pre class=\"language-bash line-numbers\"><code class=\"language-bash\"># \/etc\/systemd\/system\/laravel-queue@.service\n[Unit]\nDescription=Laravel Queue Worker %i\nAfter=network.target\n\n[Service]\nUser=www-data\nGroup=www-data\n\nExecStart=\/usr\/bin\/php -d memory_limit=512M \/var\/www\/site\/artisan queue:work \n    --sleep=1 --tries=3 --queue=default\n\nRestart=always\nRestartSec=3\n\nCPUAccounting=yes\nCPUQuota=50%%\nMemoryAccounting=yes\nMemoryMax=1G\n\n[Install]\nWantedBy=multi-user.target\n<\/code><\/pre>\n<p>Ard\u0131ndan \u00f6rne\u011fin 4 i\u015f\u00e7i ba\u015flatmak i\u00e7in:<\/p>\n<pre class=\"language-bash line-numbers\"><code class=\"language-bash\">systemctl enable laravel-queue@1 laravel-queue@2 laravel-queue@3 laravel-queue@4\nsystemctl start  laravel-queue@1 laravel-queue@2 laravel-queue@3 laravel-queue@4\n<\/code><\/pre>\n<p>Bu yakla\u015f\u0131mda Supervisor yok, her i\u015f\u00e7i kendi systemd servisi olarak izleniyor. Loglar <code>journalctl<\/code> \u00fczerinden takip edilebilir. Hangi yolu se\u00e7ece\u011finiz ekibinizin al\u0131\u015fkanl\u0131klar\u0131na ba\u011fl\u0131; ancak hangi yolu se\u00e7erseniz se\u00e7in, temel prensip de\u011fi\u015fmiyor: <strong>queue i\u015f\u00e7ileri FPM havuzundan mant\u0131ksal ve kaynak baz\u0131nda izole olmal\u0131<\/strong>.<\/p>\n<h2><span id=\"Kaynak_Planlama_Kac_FPM_Sureci_Kac_Queue_Iscisi\">Kaynak Planlama: Ka\u00e7 FPM S\u00fcreci, Ka\u00e7 Queue \u0130\u015f\u00e7isi?<\/span><\/h2>\n<p>\u0130zole mimarinin ba\u015far\u0131l\u0131 olmas\u0131 i\u00e7in, arkas\u0131nda sa\u011flam bir kapasite hesab\u0131 olmas\u0131 gerekir. Kaba bir kural k\u00fcmesiyle gidelim; diyelim ki elinizde 4 vCPU, 8 GB RAM\u2019li bir NVMe VPS var ve \u00fcst\u00fcnde tek bir Laravel + k\u00fc\u00e7\u00fck admin paneli + API ko\u015fuyor.<\/p>\n<h3><span id=\"Adim_1_PHP-FPM_Havuz_RAM_Hesabi\">Ad\u0131m 1: PHP-FPM Havuz RAM Hesab\u0131<\/span><\/h3>\n<p>\u00d6nce ortalama bir PHP s\u00fcrecinin ne kadar RAM t\u00fcketti\u011fine bak\u0131n. \u00d6rne\u011fin \u015fu komutla FPM s\u00fcre\u00e7lerini incelersiniz:<\/p>\n<pre class=\"language-bash line-numbers\"><code class=\"language-bash\">ps -o pid,cmd,%mem,rss --sort=-%mem | grep &quot;php-fpm: pool&quot; | head -n 10\n<\/code><\/pre>\n<p>Diyelim ki session havuzundaki bir PHP s\u00fcreci ortalama 80 MB, API havuzundaki ise 60 MB kullan\u0131yor. Toplam kullan\u0131labilir RAM\u2019den (OS, MySQL\/Redis, kuyruk i\u015f\u00e7ileri vb. d\u00fc\u015ft\u00fckten sonra) FPM i\u00e7in 4 GB ay\u0131rd\u0131\u011f\u0131n\u0131z\u0131 varsayal\u0131m:<\/p>\n<ul>\n<li>Session havuzu: 2 GB \u2192 <code>2GB \/ 80MB \u2248 25<\/code> s\u00fcre\u00e7 \u2192 <code>pm.max_children = 25<\/code><\/li>\n<li>API havuzu: 2 GB \u2192 <code>2GB \/ 60MB \u2248 33<\/code> s\u00fcre\u00e7 \u2192 <code>pm.max_children = 30-32<\/code> aral\u0131\u011f\u0131 g\u00fcvenli olur.<\/li>\n<\/ul>\n<h3><span id=\"Adim_2_Queue_Iscisi_RAM_Hesabi\">Ad\u0131m 2: Queue \u0130\u015f\u00e7isi RAM Hesab\u0131<\/span><\/h3>\n<p>Queue i\u015f\u00e7ileri i\u00e7in de benzer bir hesap yap\u0131n. \u00d6zellikle rapor, PDF \u00fcretimi, resim i\u015fleme gibi yo\u011fun i\u015flerde bir i\u015f\u00e7i 300-400 MB\u2019a kadar \u00e7\u0131kabiliyor. Diyelim ki job ba\u015f\u0131na ortalama 350 MB ve biz queue taraf\u0131na 2 GB RAM ay\u0131rmak istiyoruz:<\/p>\n<ul>\n<li><code>2GB \/ 350MB \u2248 5<\/code> i\u015f\u00e7i \u2192 5 worker makul. Supervisor\u2019da <code>numprocs=5<\/code> veya systemd\u2019de 5 unit.<\/li>\n<li>\u00dcst\u00fcne <code>MemoryMax=2G<\/code> gibi cgroup limiti koydu\u011funuzda, bu s\u0131n\u0131r a\u015f\u0131lsa bile OOM killer\u2019\u0131n t\u00fcm sistemi de\u011fil sadece ilgili servisi hedef almas\u0131n\u0131 sa\u011flars\u0131n\u0131z.<\/li>\n<\/ul>\n<p>Bu hesaplar kaba ama sizi do\u011fru band\u0131n i\u00e7ine sokar. Ger\u00e7ek trafik alt\u0131nda <code>htop<\/code>, <code>atop<\/code>, <code>iotop<\/code> ve uygulama log\u2019lar\u0131 ile ince ayar yapman\u0131z gerekir. \u0130zleme taraf\u0131n\u0131 yap\u0131land\u0131rmak i\u00e7in <a href=\"https:\/\/www.dchost.com\/blog\/vps-kaynak-kullanimi-izleme-rehberi-htop-iotop-netdata-ve-prometheus\/\">VPS kaynak kullan\u0131m\u0131 izleme rehberimiz<\/a> pratik bir ba\u015flang\u0131\u00e7 noktas\u0131 sunuyor.<\/p>\n<h2><span id=\"Gercek_Senaryolar_WooCommerce_Laravel_API_ve_Raporlama\">Ger\u00e7ek Senaryolar: WooCommerce, Laravel API ve Raporlama<\/span><\/h2>\n<p>Bu mimarinin somut faydas\u0131n\u0131 g\u00f6rmek i\u00e7in \u00fc\u00e7 yayg\u0131n senaryoya bakal\u0131m.<\/p>\n<h3><span id=\"1_WooCommerce_Promosyon_Kampanyasi\">1. WooCommerce + Promosyon Kampanyas\u0131<\/span><\/h3>\n<p>WooCommerce ma\u011fazan\u0131zda yo\u011fun indirim d\u00f6nemi ba\u015fl\u0131yor. \u00d6n y\u00fczde kullan\u0131c\u0131lar sepetlerini dolduruyor, ayn\u0131 anda kuyrukta fatura PDF\u2019leri ve stok senkronizasyon job\u2019lar\u0131 \u00e7al\u0131\u015f\u0131yor. Tek FPM havuzu kulland\u0131\u011f\u0131n\u0131zda \u015fu riskler var:<\/p>\n<ul>\n<li>Kuyruktan tetiklenen yo\u011fun PHP s\u00fcre\u00e7leri FPM \u00e7ocuklar\u0131n\u0131 doldurur.<\/li>\n<li>Session dosyalar\u0131 kilitlenir, kullan\u0131c\u0131lar sepet sayfas\u0131nda bekler.<\/li>\n<li>MySQL ba\u011flant\u0131 say\u0131s\u0131 kontrols\u00fcz artar, veritaban\u0131 da zorlan\u0131r.<\/li>\n<\/ul>\n<p>\u0130zole havuz mimarisinde ise:<\/p>\n<ul>\n<li>Frontend\u2019in ba\u011fl\u0131 oldu\u011fu <code>session_pool<\/code> i\u00e7in daha korumac\u0131 <code>pm.max_children<\/code> ve <code>request_terminate_timeout<\/code> de\u011ferleri belirlersiniz.<\/li>\n<li>API ve admin taraf\u0131n\u0131 ayr\u0131 havuza al\u0131r, gerekiyorsa farkl\u0131 timeout\u2019lar uygulars\u0131n\u0131z.<\/li>\n<li>Queue i\u015f\u00e7ileri asla FPM havuzuna kar\u0131\u015fmad\u0131\u011f\u0131 i\u00e7in, kuyrukta patlama olsa da kullan\u0131c\u0131lar oturum a\u00e7maya devam eder.<\/li>\n<\/ul>\n<h3><span id=\"2_Laravel_API_Mobil_Uygulama\">2. Laravel API + Mobil Uygulama<\/span><\/h3>\n<p>Mobil uygulaman\u0131z tamamen Laravel API \u00fczerinde \u00e7al\u0131\u015f\u0131yor. Oturum cookie\u2019si yok, her istek JWT ta\u015f\u0131yor. Bu API\u2019yi <code>api_pool<\/code> havuzuna alarak:<\/p>\n<ul>\n<li>Session overhead\u2019ini ortadan kald\u0131r\u0131rs\u0131n\u0131z.<\/li>\n<li>Daha k\u0131sa <code>request_terminate_timeout<\/code> ve daha y\u00fcksek <code>pm.max_children<\/code> ile agresif \u00f6l\u00e7ekleme yapabilirsiniz.<\/li>\n<li>Arka planda \u00e7al\u0131\u015fan yo\u011fun queue i\u015flerine ra\u011fmen API yan\u0131t s\u00fcrelerini daha dar bir bantta tutars\u0131n\u0131z.<\/li>\n<\/ul>\n<p>Bu senaryoda, Laravel\u2019in HTTP ve queue katmanlar\u0131n\u0131n birlikte nas\u0131l optimize edilece\u011fini merak ediyorsan\u0131z, <a href=\"https:\/\/www.dchost.com\/blog\/laravel-prod-ortam-optimizasyonu-nasil-yapilir-php%E2%80%91fpm-opcache-octane-queue-horizon-ve-redisi-el-ele-calistirmak\/\">Laravel prod ortam optimizasyonu yaz\u0131m\u0131zda<\/a> Octane, Redis ve Horizon ile bir \u00fcst seviyeye ge\u00e7i\u015fi de detayland\u0131rd\u0131k.<\/p>\n<h3><span id=\"3_Agir_Raporlama_ve_Batch_Isleri\">3. A\u011f\u0131r Raporlama ve Batch \u0130\u015fleri<\/span><\/h3>\n<p>Gece \u00e7al\u0131\u015fan raporlama job\u2019lar\u0131, g\u00fcn i\u00e7inde gelen sipari\u015f verilerini \u00f6zetliyor, PDF \u00e7\u0131kt\u0131lar\u0131 \u00fcretiyor, \u00fc\u00e7\u00fcnc\u00fc parti servislerle entegrasyon yap\u0131yor. Bu i\u015flerin \u00e7al\u0131\u015fma saatleri ve SLA\u2019si genellikle farkl\u0131d\u0131r; birka\u00e7 dakika ge\u00e7 \u00e7\u0131kmas\u0131 sorun de\u011fildir ama kullan\u0131c\u0131 oturumu bir saniye bile beklememelidir.<\/p>\n<p>Bu durumda yapman\u0131z gerekenler:<\/p>\n<ul>\n<li>Rapor job\u2019lar\u0131n\u0131 ayr\u0131 bir queue ismine (\u00f6rne\u011fin <code>reports<\/code>) ta\u015f\u0131y\u0131n.<\/li>\n<li>Bu queue i\u00e7in farkl\u0131 bir systemd unit veya Supervisor program tan\u0131m\u0131 yap\u0131n; daha d\u00fc\u015f\u00fck <code>CPUQuota<\/code> ve <code>IOWeight<\/code> verin.<\/li>\n<li>FPM havuzlar\u0131n\u0131 g\u00fcn i\u00e7i ve gece y\u00fcklerine g\u00f6re izleyip, gerekiyorsa cron ya da systemd timer ile gece i\u015f\u00e7i say\u0131s\u0131n\u0131 artt\u0131r\u0131p sabah azalt\u0131n.<\/li>\n<\/ul>\n<h2><span id=\"Loglama_Izlenebilirlik_ve_Sorun_Giderme\">Loglama, \u0130zlenebilirlik ve Sorun Giderme<\/span><\/h2>\n<p>Havuzlar\u0131 ve i\u015f\u00e7i katmanlar\u0131n\u0131 ay\u0131rd\u0131\u011f\u0131n\u0131zda, loglama ve izleme de do\u011fal olarak daha net hale gelir. \u00d6nerdi\u011fimiz pratikler:<\/p>\n<ul>\n<li><strong>Havuz bazl\u0131 slow log:<\/strong> Her FPM havuzu i\u00e7in ayr\u0131 <code>slowlog<\/code> dosyas\u0131 tan\u0131mlay\u0131n. B\u00f6ylece frontend mi, API mi, admin mi t\u0131kanm\u0131\u015f \u00e7ok net g\u00f6r\u00fcrs\u00fcn\u00fcz.<\/li>\n<li><strong>Queue log\u2019lar\u0131n\u0131 ay\u0131r\u0131n:<\/strong> Supervisor veya systemd \u00fczerinden gelen log\u2019lar\u0131 ayr\u0131 dosyalara ya da merkezi log sistemine (Loki, ELK vb.) ak\u0131t\u0131n.<\/li>\n<li><strong>Kaynak metrikleri:<\/strong> FPM havuzlar\u0131n\u0131n s\u00fcre\u00e7 say\u0131s\u0131, kuyruk uzunluklar\u0131, CPU\/RAM kullan\u0131m\u0131n\u0131 bir panelde toplay\u0131n. DCHost VPS altyap\u0131s\u0131nda Prometheus + Grafana ile bu metrikleri toplam\u0131\u015f bir\u00e7ok projeye destek veriyoruz.<\/li>\n<\/ul>\n<p>\u0130yi haber \u015fu ki; izole mimaride bir problem \u00e7\u0131kt\u0131\u011f\u0131nda <em>\u201cher \u015fey yava\u015f\u201d<\/em> yerine <em>\u201capi_pool CPU\u2019ya bindiriyor\u201d<\/em> veya <em>\u201cqueue i\u015f\u00e7ileri MemoryMax\u2019e tak\u0131lm\u0131\u015f\u201d<\/em> gibi \u00e7ok daha net c\u00fcmleler kurabiliyorsunuz. Bu da m\u00fcdahaleyi hem daha h\u0131zl\u0131 hem de daha az stresli hale getiriyor.<\/p>\n<h2><span id=\"DCHost_Altyapisinda_Izole_Havuz_Mimarisi_Nasil_Konumlanir\">DCHost Altyap\u0131s\u0131nda \u0130zole Havuz Mimarisi Nas\u0131l Konumlan\u0131r?<\/span><\/h2>\n<p>\u0130zole havuz mimarisi, \u00f6zellikle <strong>NVMe diskli VPS ve <a href=\"https:\/\/www.dchost.com\/tr\/fiziksel-sunucu\">dedicated sunucu<\/a>larda<\/strong> en iyi sonucu veriyor. \u00c7\u00fcnk\u00fc FPM havuzlar\u0131, veritaban\u0131 ve queue i\u015f\u00e7ileri ayn\u0131 fiziksel kaynaklar\u0131 payla\u015f\u0131yor ve disk I\/O performans\u0131 burada kritik hale geliyor. DCHost olarak sa\u011flad\u0131\u011f\u0131m\u0131z VPS ve fiziksel sunucu altyap\u0131lar\u0131nda, m\u00fc\u015fterilerimizin b\u00fcy\u00fck k\u0131sm\u0131:<\/p>\n<ul>\n<li>En az iki PHP-FPM havuzu (session + API),<\/li>\n<li>Ayr\u0131 cgroup\u2019larda \u00e7al\u0131\u015fan queue i\u015f\u00e7ileri,<\/li>\n<li>Redis tabanl\u0131 session + cache katman\u0131,<\/li>\n<li>Ve \u00e7o\u011fu zaman ayr\u0131 bir veritaban\u0131 sunucusu<\/li>\n<\/ul>\n<p>ile bu modeli uyguluyor. Veritaban\u0131 ve uygulama sunucusunu ay\u0131rman\u0131n ne zaman mant\u0131kl\u0131 hale geldi\u011fini merak ediyorsan\u0131z, <a href=\"https:\/\/www.dchost.com\/blog\/veritabani-sunucusunu-uygulama-sunucusundan-ayirmak-ne-zaman-mantikli\/\">veritaban\u0131 sunucusunu uygulamadan ay\u0131rma rehberimiz<\/a> de g\u00fczel tamamlay\u0131c\u0131 olur.<\/p>\n<p>E\u011fer \u015fu an tek PHP-FPM havuzu, tek Supervisor s\u00fcreci ve kar\u0131\u015f\u0131k job\u2019larla ilerliyorsan\u0131z; \u00f6nce k\u00fc\u00e7\u00fckten ba\u015flay\u0131n: <strong>iki FPM havuzu + limitli queue servisi<\/strong>. Ard\u0131ndan trafik ve metrikleri izleyip, gerektik\u00e7e ek havuz veya ek queue grubu tan\u0131mlay\u0131n. Bu ge\u00e7i\u015fi DCHost \u00fczerinde yeni bir VPS veya dedicated sunucu ile <em>ye\u015fil alan<\/em> (greenfield) olarak da planlayabilirsiniz; eski mimariyi klonlay\u0131p, bu yaz\u0131daki ad\u0131mlarla ad\u0131m ad\u0131m sertle\u015ftirmeniz m\u00fcmk\u00fcn.<\/p>\n<h2><span id=\"Ozet_ve_Sonraki_Adimlar\">\u00d6zet ve Sonraki Ad\u0131mlar<\/span><\/h2>\n<p>PHP d\u00fcnyas\u0131nda performans ve stabilite sorunlar\u0131n\u0131n \u00f6nemli bir k\u0131sm\u0131, hatal\u0131 koddan \u00e7ok <strong>yanl\u0131\u015f kaynak payla\u015f\u0131m\u0131ndan<\/strong> kaynaklan\u0131yor. Session y\u00f6neten k\u0131sa \u00f6m\u00fcrl\u00fc HTTP istekleri ile a\u011f\u0131r queue job\u2019lar\u0131n\u0131 ayn\u0131 havuzda ko\u015fturdu\u011funuzda, en ufak bir dalgalanmada t\u00fcm sistemin dengesinin bozulmas\u0131 ka\u00e7\u0131n\u0131lmaz. Bu yaz\u0131da anlatt\u0131\u011f\u0131m\u0131z izole havuz mimarisiyle:<\/p>\n<ul>\n<li>PHP-FPM taraf\u0131nda session ve API isteklerini ayr\u0131 havuzlarda tutarak concurrency ve timeout\u2019lar\u0131 ince ayar yapabildik.<\/li>\n<li>Queue i\u015f\u00e7ilerini Supervisor ve\/veya systemd ile ba\u011f\u0131ms\u0131z bir katmana al\u0131p, CPU ve RAM limitleriyle FPM\u2019i koruma alt\u0131na ald\u0131k.<\/li>\n<li>Kaynak planlama, loglama ve izleme sayesinde sorun \u00e7\u0131kt\u0131\u011f\u0131nda k\u00f6k sebebe \u00e7ok daha h\u0131zl\u0131 ula\u015fabilece\u011fimizi g\u00f6sterdik.<\/li>\n<\/ul>\n<p>\u015eimdi s\u0131rada kendi projeniz var. Mevcut PHP-FPM ve queue mimarinizi g\u00f6zden ge\u00e7irip, hangi havuzlar\u0131n ayr\u0131lmas\u0131 gerekti\u011fini bir listeye d\u00f6kebilirsiniz. DCHost altyap\u0131s\u0131nda yeni bir NVMe VPS veya dedicated sunucu planl\u0131yorsan\u0131z, kapasite ve mimari tasar\u0131m\u0131 beraber yapal\u0131m; PHP-FPM havuz ayarlar\u0131ndan queue i\u015f\u00e7ilerine kadar u\u00e7tan uca bir yap\u0131 kurmak bizim g\u00fcnl\u00fck i\u015fimiz. \u0130sterseniz \u00f6nce <a href=\"https:\/\/www.dchost.com\/blog\/vps-uzerinde-arka-plan-isleri-ve-kuyruk-yonetimi-laravel-queue-supervisor-systemd-ve-pm2\/\">kuyruk y\u00f6netimi<\/a> ve <a href=\"https:\/\/www.dchost.com\/blog\/php-session-ve-cache-depolamasini-dogru-secmek-dosya-redis-ve-memcachedin-wordpress-ve-laravel-performansina-etkisi\/\">session\/cache se\u00e7imi<\/a> yaz\u0131lar\u0131m\u0131z\u0131 da okuyup b\u00fcy\u00fck resmi tamamlayabilirsiniz. Bundan sonras\u0131, birka\u00e7 iyi planlanm\u0131\u015f havuz dosyas\u0131 ve do\u011fru sistemd ayarlar\u0131yla olduk\u00e7a keyifli bir yolculuk.<\/p>\n<\/div>","protected":false},"excerpt":{"rendered":"<p>\u0130&ccedil;indekiler1 PHP Session ve Queue \u0130\u015f\u00e7ilerini Neden Ay\u0131rmak Zorunday\u0131z?2 Problemin K\u00f6k\u00fc: Ayn\u0131 Havuzda Farkl\u0131 \u0130\u015f Y\u00fckleri3 Mimari Yakla\u015f\u0131m: \u0130zole Havuz ve \u0130\u015f\u00e7i Katmanlar\u01314 PHP-FPM ile Session A\u011f\u0131rl\u0131kl\u0131 ve Stateless Havuzlar\u0131 Ay\u0131rmak4.1 \u00d6rnek PHP-FPM Havuz Konfig\u00fcrasyonu4.2 Nginx ile Havuzlar\u0131 Sanal Host\u2019lara Ba\u011flamak5 Queue \u0130\u015f\u00e7ilerini PHP-FPM\u2019den Koparmak: Supervisor + systemd5.1 Supervisor Konfig\u00fcrasyonu ile Queue \u0130\u015f\u00e7ileri5.2 Supervisor\u2019\u0131 systemd [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":3708,"comment_status":"","ping_status":"","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[26],"tags":[],"class_list":["post-3707","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-teknoloji"],"_links":{"self":[{"href":"https:\/\/www.dchost.com\/blog\/wp-json\/wp\/v2\/posts\/3707","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.dchost.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.dchost.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.dchost.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.dchost.com\/blog\/wp-json\/wp\/v2\/comments?post=3707"}],"version-history":[{"count":0,"href":"https:\/\/www.dchost.com\/blog\/wp-json\/wp\/v2\/posts\/3707\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.dchost.com\/blog\/wp-json\/wp\/v2\/media\/3708"}],"wp:attachment":[{"href":"https:\/\/www.dchost.com\/blog\/wp-json\/wp\/v2\/media?parent=3707"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.dchost.com\/blog\/wp-json\/wp\/v2\/categories?post=3707"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.dchost.com\/blog\/wp-json\/wp\/v2\/tags?post=3707"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}