{"id":4103,"date":"2026-01-03T21:13:32","date_gmt":"2026-01-03T18:13:32","guid":{"rendered":"https:\/\/www.dchost.com\/blog\/laravel-horizon-ve-queue-isleri-icin-vps-kaynak-planlama\/"},"modified":"2026-01-03T21:13:32","modified_gmt":"2026-01-03T18:13:32","slug":"laravel-horizon-ve-queue-isleri-icin-vps-kaynak-planlama","status":"publish","type":"post","link":"https:\/\/www.dchost.com\/blog\/laravel-horizon-ve-queue-isleri-icin-vps-kaynak-planlama\/","title":{"rendered":"Laravel Horizon ve Queue \u0130\u015fleri \u0130\u00e7in VPS Kaynak Planlama"},"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=\"#Laravel_Horizon_ve_Queue_Isleri_Icin_Kaynak_Planlama_Neden_Ayri_Ele_Alinmali\"><span class=\"toc_number toc_depth_1\">1<\/span> Laravel Horizon ve Queue \u0130\u015fleri \u0130\u00e7in Kaynak Planlama Neden Ayr\u0131 Ele Al\u0131nmal\u0131?<\/a><\/li><li><a href=\"#On_Hazirlik_Queue_Islerinizi_Dogru_Tanimlamak\"><span class=\"toc_number toc_depth_1\">2<\/span> \u00d6n Haz\u0131rl\u0131k: Queue \u0130\u015flerinizi Do\u011fru Tan\u0131mlamak<\/a><ul><li><a href=\"#1_Is_Tiplerini_Siniflandirin_CPU-bound_IO-bound_Karma\"><span class=\"toc_number toc_depth_2\">2.1<\/span> 1) \u0130\u015f Tiplerini S\u0131n\u0131fland\u0131r\u0131n: CPU-bound, IO-bound, Karma<\/a><\/li><li><a href=\"#2_Ortalama_Is_Suresini_ve_Hacmini_Olcun\"><span class=\"toc_number toc_depth_2\">2.2<\/span> 2) Ortalama \u0130\u015f S\u00fcresini ve Hacmini \u00d6l\u00e7\u00fcn<\/a><\/li><\/ul><\/li><li><a href=\"#CPU_Planlama_Kac_vCPU_ve_Kac_Worker\"><span class=\"toc_number toc_depth_1\">3<\/span> CPU Planlama: Ka\u00e7 vCPU ve Ka\u00e7 Worker?<\/a><ul><li><a href=\"#CPU-bagimli_Isler_Icin_Worker_Sayisi\"><span class=\"toc_number toc_depth_2\">3.1<\/span> CPU-ba\u011f\u0131ml\u0131 \u0130\u015fler \u0130\u00e7in Worker Say\u0131s\u0131<\/a><\/li><li><a href=\"#IO-bagimli_Isler_Icin_Worker_Sayisi\"><span class=\"toc_number toc_depth_2\">3.2<\/span> IO-ba\u011f\u0131ml\u0131 \u0130\u015fler \u0130\u00e7in Worker Say\u0131s\u0131<\/a><\/li><li><a href=\"#Karma_Isler_Icin_Worker_Sayisi\"><span class=\"toc_number toc_depth_2\">3.3<\/span> Karma \u0130\u015fler \u0130\u00e7in Worker Say\u0131s\u0131<\/a><\/li><li><a href=\"#Horizon_Supervisor_Ayarlarini_Bu_Mantiga_Gore_Tasarlayin\"><span class=\"toc_number toc_depth_2\">3.4<\/span> Horizon Supervisor Ayarlar\u0131n\u0131 Bu Mant\u0131\u011fa G\u00f6re Tasarlay\u0131n<\/a><\/li><\/ul><\/li><li><a href=\"#RAM_Planlama_Worker_Basina_Bellek_Hesabi\"><span class=\"toc_number toc_depth_1\">4<\/span> RAM Planlama: Worker Ba\u015f\u0131na Bellek Hesab\u0131<\/a><ul><li><a href=\"#Worker_Basina_Ortalama_Bellek_Kullanimi\"><span class=\"toc_number toc_depth_2\">4.1<\/span> Worker Ba\u015f\u0131na Ortalama Bellek Kullan\u0131m\u0131<\/a><\/li><li><a href=\"#Toplam_RAM_Ihtiyaci_icin_Basit_Formul\"><span class=\"toc_number toc_depth_2\">4.2<\/span> Toplam RAM \u0130htiyac\u0131 i\u00e7in Basit Form\u00fcl<\/a><\/li><li><a href=\"#memory_limit_ve_max_execution_time_Ayarlarinin_Etkisi\"><span class=\"toc_number toc_depth_2\">4.3<\/span> memory_limit ve max_execution_time Ayarlar\u0131n\u0131n Etkisi<\/a><\/li><\/ul><\/li><li><a href=\"#Redis_Planlama_Bellek_Kalicilik_ve_Kuyruk_Derinligi\"><span class=\"toc_number toc_depth_1\">5<\/span> Redis Planlama: Bellek, Kal\u0131c\u0131l\u0131k ve Kuyruk Derinli\u011fi<\/a><ul><li><a href=\"#Kuyruk_Derinligi_ve_Job_Boyutu\"><span class=\"toc_number toc_depth_2\">5.1<\/span> Kuyruk Derinli\u011fi ve Job Boyutu<\/a><\/li><li><a href=\"#maxmemory_ve_Eviction_Politikalari\"><span class=\"toc_number toc_depth_2\">5.2<\/span> maxmemory ve Eviction Politikalar\u0131<\/a><\/li><li><a href=\"#Persistens_AOFRDB_ve_Disk_Etkisi\"><span class=\"toc_number toc_depth_2\">5.3<\/span> Persistens (AOF\/RDB) ve Disk Etkisi<\/a><\/li><\/ul><\/li><li><a href=\"#Queue_Yapisi_ve_Worker_Dagilimini_Tasarlamak\"><span class=\"toc_number toc_depth_1\">6<\/span> Queue Yap\u0131s\u0131 ve Worker Da\u011f\u0131l\u0131m\u0131n\u0131 Tasarlamak<\/a><ul><li><a href=\"#Queuelari_Is_Tipine_Gore_Ayirin\"><span class=\"toc_number toc_depth_2\">6.1<\/span> Queue\u2019lar\u0131 \u0130\u015f Tipine G\u00f6re Ay\u0131r\u0131n<\/a><\/li><li><a href=\"#Supervisor_Bazinda_Worker_Plani_Ornegi\"><span class=\"toc_number toc_depth_2\">6.2<\/span> Supervisor Baz\u0131nda Worker Plan\u0131 \u00d6rne\u011fi<\/a><\/li><li><a href=\"#Job_Timeout_maxAttempts_ve_Hatali_Isleri_Yonetmek\"><span class=\"toc_number toc_depth_2\">6.3<\/span> Job Timeout, maxAttempts ve Hatal\u0131 \u0130\u015fleri Y\u00f6netmek<\/a><\/li><\/ul><\/li><li><a href=\"#Ornek_Senaryolar_Kucuk_SaaStan_Orta_Olcekli_E-ticarete\"><span class=\"toc_number toc_depth_1\">7<\/span> \u00d6rnek Senaryolar: K\u00fc\u00e7\u00fck SaaS\u2019tan Orta \u00d6l\u00e7ekli E-ticarete<\/a><ul><li><a href=\"#Senaryo_1_Kucuk_SaaS_2_vCPU_4_GB_RAM\"><span class=\"toc_number toc_depth_2\">7.1<\/span> Senaryo 1: K\u00fc\u00e7\u00fck SaaS (2 vCPU, 4 GB RAM)<\/a><\/li><li><a href=\"#Senaryo_2_Orta_Olcekli_E-ticaret_4_vCPU_8_GB_RAM\"><span class=\"toc_number toc_depth_2\">7.2<\/span> Senaryo 2: Orta \u00d6l\u00e7ekli E-ticaret (4 vCPU, 8 GB RAM)<\/a><\/li><li><a href=\"#Senaryo_3_Yuksek_Trafikli_Laravel_Uygulamasi\"><span class=\"toc_number toc_depth_2\">7.3<\/span> Senaryo 3: Y\u00fcksek Trafikli Laravel Uygulamas\u0131<\/a><\/li><\/ul><\/li><li><a href=\"#Adim_Adim_Uygulanabilir_Plan_Kendi_Projende_Nasil_Ilerlemelisin\"><span class=\"toc_number toc_depth_1\">8<\/span> Ad\u0131m Ad\u0131m Uygulanabilir Plan: Kendi Projende Nas\u0131l \u0130lerlemelisin?<\/a><\/li><li><a href=\"#Sonuc_Laravel_Horizon_Icin_Kaynak_Planlama_Bir_Kerelik_Degil_Surekli_Bir_Surec\"><span class=\"toc_number toc_depth_1\">9<\/span> Sonu\u00e7: Laravel Horizon \u0130\u00e7in Kaynak Planlama Bir Kerelik De\u011fil, S\u00fcrekli Bir S\u00fcre\u00e7<\/a><\/li><\/ul><\/div>\n<h2><span id=\"Laravel_Horizon_ve_Queue_Isleri_Icin_Kaynak_Planlama_Neden_Ayri_Ele_Alinmali\">Laravel Horizon ve Queue \u0130\u015fleri \u0130\u00e7in Kaynak Planlama Neden Ayr\u0131 Ele Al\u0131nmal\u0131?<\/span><\/h2>\n<p>Laravel ile ciddi bir proje geli\u015ftirdi\u011finiz anda, arka planda \u00e7al\u0131\u015fan kuyruk (queue) i\u015fleri ka\u00e7\u0131n\u0131lmaz hale geliyor: e-posta g\u00f6nderimleri, bildirimler, raporlar, d\u0131\u015f API entegrasyonlar\u0131, medya i\u015fleme, fatura olu\u015fturma, PDF \u00fcretimi ve daha fazlas\u0131. Bu noktada <strong>Laravel Horizon<\/strong>, hem kuyruk i\u015f\u00e7ilerini (worker) y\u00f6netmek hem de metrikleri izlemek i\u00e7in m\u00fcthi\u015f bir aray\u00fcz sunuyor; ancak performans\u0131n ger\u00e7ekten iyi olmas\u0131 i\u00e7in <strong>VPS kaynak planlamas\u0131n\u0131<\/strong> do\u011fru yapman\u0131z gerekiyor.<\/p>\n<p>Bir\u00e7ok ekibin ya\u015fad\u0131\u011f\u0131 ortak sorun \u015fu: Web istekleri i\u00e7in CPU\/RAM planlamas\u0131 yap\u0131lm\u0131\u015f, fakat Horizon ve queue i\u015fleri i\u00e7in ayn\u0131 sunucu, ayn\u0131 kaynaklar ve rastgele bir worker say\u0131s\u0131 kullan\u0131l\u0131yor. Sonu\u00e7ysa tan\u0131d\u0131k: Web taraf\u0131nda zaman zaman 502\/504 hatalar\u0131, cron g\u00f6revlerinin gecikmesi, birikmi\u015f kuyruklar ve bazen de Redis veya PHP s\u00fcre\u00e7lerinin OOM (Out of Memory) sebebiyle \u00f6ld\u00fcr\u00fclmesi.<\/p>\n<p>Bu yaz\u0131da DCHost ekibi olarak, Laravel Horizon ve queue i\u015flerinizi <strong>VPS \u00fczerinde nas\u0131l boyutland\u0131rman\u0131z gerekti\u011fini<\/strong> ad\u0131m ad\u0131m ele alaca\u011f\u0131z. CPU, RAM, Redis ve worker say\u0131s\u0131n\u0131 sadece sezgiyle de\u011fil, <strong>\u00f6l\u00e7\u00fclebilir metrikler<\/strong> ve <strong>basit form\u00fcller<\/strong> \u00fczerinden planlayaca\u011f\u0131z. K\u00fc\u00e7\u00fck bir SaaS, orta \u00f6l\u00e7ekli bir e-ticaret veya y\u00fcksek trafikli bir Laravel uygulamas\u0131 i\u00e7in \u00f6rnek senaryolarla, kendi projenize uyarlayabilece\u011finiz pratik bir rehber \u00e7\u0131karaca\u011f\u0131z.<\/p>\n<h2><span id=\"On_Hazirlik_Queue_Islerinizi_Dogru_Tanimlamak\">\u00d6n Haz\u0131rl\u0131k: Queue \u0130\u015flerinizi Do\u011fru Tan\u0131mlamak<\/span><\/h2>\n<p>Worker say\u0131s\u0131n\u0131 veya Redis belle\u011fini hesaplamadan \u00f6nce, asl\u0131nda \u015fu soruyu netle\u015ftirmeniz gerekiyor: <strong>Queue i\u015fleriniz ne yap\u0131yor?<\/strong> T\u00fcm i\u015fler ayn\u0131 tip de\u011fil ve kaynak t\u00fcketimleri \u00e7ok farkl\u0131.<\/p>\n<h3><span id=\"1_Is_Tiplerini_Siniflandirin_CPU-bound_IO-bound_Karma\">1) \u0130\u015f Tiplerini S\u0131n\u0131fland\u0131r\u0131n: CPU-bound, IO-bound, Karma<\/span><\/h3>\n<p>Genelde queue i\u015fleri \u00fc\u00e7 kategoriye ayr\u0131l\u0131r:<\/p>\n<ul>\n<li><strong>CPU-bound i\u015fler:<\/strong> G\u00f6rsel yeniden boyutlama, yo\u011fun veri i\u015fleme, karma\u015f\u0131k hesaplamalar, PDF render vb. CPU \u00e7ekirde\u011fini uzun s\u00fcre me\u015fgul eder.<\/li>\n<li><strong>IO-bound i\u015fler:<\/strong> E-posta g\u00f6nderimi, \u00fc\u00e7\u00fcnc\u00fc parti API \u00e7a\u011fr\u0131lar\u0131, dosya upload\/download, yava\u015f disk eri\u015fimi gibi, bekleme (I\/O) s\u00fcresi y\u00fcksek, CPU kullan\u0131m\u0131 g\u00f6rece d\u00fc\u015f\u00fck i\u015fler.<\/li>\n<li><strong>Karma i\u015fler:<\/strong> Hem CPU hem IO kullanan, \u00f6rne\u011fin rapor olu\u015ftururken veritaban\u0131ndan \u00e7ok say\u0131da kay\u0131t \u00e7ekip, bunlar\u0131 i\u015fleyen ve sonunda dosya \u00fcreten i\u015fler.<\/li>\n<\/ul>\n<p>Planlama yaparken bu ayr\u0131m kritik, \u00e7\u00fcnk\u00fc <strong>CPU-bound i\u015fler i\u00e7in worker say\u0131s\u0131n\u0131 d\u00fc\u015f\u00fck<\/strong>, <strong>IO-bound i\u015fler i\u00e7in ise daha y\u00fcksek<\/strong> tutabilirsiniz.<\/p>\n<h3><span id=\"2_Ortalama_Is_Suresini_ve_Hacmini_Olcun\">2) Ortalama \u0130\u015f S\u00fcresini ve Hacmini \u00d6l\u00e7\u00fcn<\/span><\/h3>\n<p>Horizon, her job i\u00e7in \u00e7al\u0131\u015ft\u0131rma s\u00fcresi ve ba\u015far\u0131s\u0131zl\u0131k oran\u0131 gibi metrikler sunar. Bunlar\u0131 temel alarak kaba bir kapasite hesab\u0131 yapabilirsiniz:<\/p>\n<ul>\n<li><strong>Ortalama i\u015f s\u00fcresi (t):<\/strong> \u00d6rne\u011fin e-posta g\u00f6nderimi i\u00e7in 200 ms, PDF \u00fcretimi i\u00e7in 5 sn gibi.<\/li>\n<li><strong>Saatlik i\u015f hacmi (N):<\/strong> Zirve saatlerde kuyrukta bekleyecek i\u015f say\u0131s\u0131, \u00f6rne\u011fin promosyon kampanyas\u0131nda saatte 10.000 bildirim.<\/li>\n<\/ul>\n<p>Bu iki de\u011feri bilmek, sizin i\u00e7in en kritik hesap olan <strong>gerekli toplam i\u015f\u00e7i kapasitesi<\/strong>ni \u00e7\u0131kar\u0131rken i\u015fimizi \u00e7ok kolayla\u015ft\u0131r\u0131r. E\u011fer hen\u00fcz Horizon kullanm\u0131yor veya metrik toplam\u0131yorsan\u0131z, en az\u0131ndan birka\u00e7 g\u00fcn boyunca loglayarak i\u015f s\u00fcrelerini \u00f6l\u00e7menizi tavsiye ederim.<\/p>\n<p>Laravel prod ortam\u0131n\u0131 genel olarak optimize etmeye dair daha geni\u015f bir bak\u0131\u015f 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 rehberimizi<\/a> mutlaka okuman\u0131z\u0131 \u00f6neririm.<\/p>\n<h2><span id=\"CPU_Planlama_Kac_vCPU_ve_Kac_Worker\">CPU Planlama: Ka\u00e7 vCPU ve Ka\u00e7 Worker?<\/span><\/h2>\n<p>CPU planlamas\u0131, \u00f6zellikle <strong>Horizon supervisor<\/strong> tan\u0131mlar\u0131n\u0131zda ka\u00e7 worker a\u00e7aca\u011f\u0131n\u0131z\u0131 belirlerken temel al\u0131nmas\u0131 gereken k\u0131s\u0131m. Yanl\u0131\u015f planlama yapt\u0131\u011f\u0131n\u0131zda, ya CPU\u2019yu bo\u011far, web isteklerini yava\u015flat\u0131rs\u0131n\u0131z ya da gereksiz az worker ile kuyruklar\u0131n \u015fi\u015fmesine sebep olursunuz.<\/p>\n<h3><span id=\"CPU-bagimli_Isler_Icin_Worker_Sayisi\">CPU-ba\u011f\u0131ml\u0131 \u0130\u015fler \u0130\u00e7in Worker Say\u0131s\u0131<\/span><\/h3>\n<p>CPU-bound i\u015fler i\u00e7in genel kural \u015fudur:<\/p>\n<ul>\n<li><strong>Worker say\u0131s\u0131 \u2248 vCPU say\u0131s\u0131<\/strong> (veya en fazla vCPU + 1)<\/li>\n<\/ul>\n<p>\u00d6rne\u011fin 4 vCPU\u2019lu bir <a href=\"https:\/\/www.dchost.com\/tr\/vps\">VPS<\/a>\u2019te yo\u011fun g\u00f6r\u00fcnt\u00fc i\u015fleme yapan bir kuyruk varsa, bu kuyruk i\u00e7in 3\u20134 worker\u2019dan fazlas\u0131n\u0131 a\u00e7mak \u00e7o\u011fu zaman zarardan ba\u015fka bir \u015fey getirmez. \u00c7\u00fcnk\u00fc hepsi CPU\u2019yu sonuna kadar kullanmaya \u00e7al\u0131\u015facak ve context-switch maliyetleri artacakt\u0131r.<\/p>\n<p>Basit bir form\u00fclle d\u00fc\u015f\u00fcnelim:<\/p>\n<ul>\n<li>\u0130\u015f ba\u015f\u0131na ortalama s\u00fcre: <strong>t = 5 sn<\/strong><\/li>\n<li>vCPU say\u0131s\u0131: <strong>C = 4<\/strong><\/li>\n<li>Worker say\u0131s\u0131: <strong>W \u2248 C = 4<\/strong><\/li>\n<\/ul>\n<p>Bu durumda teorik maksimum throughput yakla\u015f\u0131k: 4 worker \u00d7 (60 \/ 5) = <strong>saniyede 0,8 i\u015f<\/strong>, yani dakikada 48 i\u015f, saatte 2.880 i\u015f olur. Zirve saatte 2.000 rapor \u00fcretiyorsan\u0131z, bu yap\u0131 yeterlidir; 20.000 rapor \u00fcretmek istiyorsan\u0131z ya i\u015f s\u00fcresini k\u0131saltman\u0131z ya da CPU\u2019yu b\u00fcy\u00fctmeniz gerekir.<\/p>\n<h3><span id=\"IO-bagimli_Isler_Icin_Worker_Sayisi\">IO-ba\u011f\u0131ml\u0131 \u0130\u015fler \u0130\u00e7in Worker Say\u0131s\u0131<\/span><\/h3>\n<p>IO-bound i\u015fler CPU\u2019yu \u00e7ok az kullan\u0131r, \u00e7o\u011fu zaman\u0131 bekleyerek ge\u00e7irir. \u00d6rne\u011fin harici bir e-posta servisine istek atarken veya yava\u015f bir API\u2019yi beklerken CPU bo\u015ftad\u0131r; bu y\u00fczden ayn\u0131 CPU \u00fczerinde <strong>daha fazla worker<\/strong> ko\u015fturabilirsiniz.<\/p>\n<p>Pratikte s\u0131k kulland\u0131\u011f\u0131m\u0131z aral\u0131k:<\/p>\n<ul>\n<li><strong>Worker say\u0131s\u0131 \u2248 vCPU \u00d7 (2 \u2013 4)<\/strong><\/li>\n<\/ul>\n<p>\u00d6rnek:<\/p>\n<ul>\n<li>Ortalama i\u015f s\u00fcresi: <strong>t = 0,2 sn<\/strong> (e-posta kuyru\u011fu)<\/li>\n<li>vCPU say\u0131s\u0131: <strong>C = 2<\/strong><\/li>\n<li>Worker say\u0131s\u0131: <strong>W = 6<\/strong> (3 \u00d7 vCPU)<\/li>\n<\/ul>\n<p>Bu durumda teorik throughput: 6 \u00d7 (60 \/ 0,2) = dakikada 1.800 i\u015f, saatte 108.000 i\u015f. E-posta gibi hafif i\u015fler i\u00e7in olduk\u00e7a tatmin edici.<\/p>\n<h3><span id=\"Karma_Isler_Icin_Worker_Sayisi\">Karma \u0130\u015fler \u0130\u00e7in Worker Say\u0131s\u0131<\/span><\/h3>\n<p>Karma tipte i\u015fler (hem veritaban\u0131 okuyor hem hesaplama yap\u0131yor) i\u00e7in ne \u00e7ok agresif ne de \u00e7ok muhafazak\u00e2r bir yakla\u015f\u0131m gerekiyor. Genelde:<\/p>\n<ul>\n<li><strong>Worker say\u0131s\u0131 \u2248 vCPU \u00d7 1,5 \u2013 2<\/strong><\/li>\n<\/ul>\n<p>4 vCPU\u2019lu bir VPS\u2019te karma i\u015flerin ko\u015fturuldu\u011fu kuyruk i\u00e7in 6\u20138 worker \u00e7o\u011fu projede makul bir ba\u015flang\u0131\u00e7 noktas\u0131d\u0131r.<\/p>\n<h3><span id=\"Horizon_Supervisor_Ayarlarini_Bu_Mantiga_Gore_Tasarlayin\">Horizon Supervisor Ayarlar\u0131n\u0131 Bu Mant\u0131\u011fa G\u00f6re Tasarlay\u0131n<\/span><\/h3>\n<p>Horizon\u2019da <code>config\/horizon.php<\/code> dosyas\u0131nda supervisor tan\u0131mlarken, her supervisor\u2019a \u00f6zel <strong>processes<\/strong> (worker say\u0131s\u0131), <strong>queue listesi<\/strong> ve <strong>balancing<\/strong> stratejisi verebilirsiniz:<\/p>\n<ul>\n<li><strong>processes:<\/strong> Yukar\u0131daki CPU\/IO hesaplar\u0131na g\u00f6re belirleyin.<\/li>\n<li><strong>connection\/queue:<\/strong> A\u011f\u0131r i\u015fleri ayr\u0131 kuyruklara b\u00f6l\u00fcn (\u00f6r. <code>high<\/code>, <code>default<\/code>, <code>emails<\/code>, <code>reports<\/code>).<\/li>\n<li><strong>balance:<\/strong> <code>simple<\/code> veya <code>auto<\/code> ile kuyruklar aras\u0131nda i\u015f\u00e7i da\u011f\u0131l\u0131m\u0131n\u0131 optimize edin.<\/li>\n<\/ul>\n<p>Horizon ve supervisor y\u00f6netimine genel bir giri\u015fe ihtiyac\u0131n\u0131z varsa, <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 rehberimiz<\/a> ba\u015flang\u0131\u00e7 i\u00e7in olduk\u00e7a faydal\u0131 olacakt\u0131r.<\/p>\n<h2><span id=\"RAM_Planlama_Worker_Basina_Bellek_Hesabi\">RAM Planlama: Worker Ba\u015f\u0131na Bellek Hesab\u0131<\/span><\/h2>\n<p>CPU planlamas\u0131 kadar kritik ikinci konu da <strong>RAM kullan\u0131m\u0131<\/strong>. Laravel worker\u2019lar\u0131 PHP CLI s\u00fcre\u00e7leri oldu\u011fu i\u00e7in her biri belirli miktarda bellek kullan\u0131r. Yanl\u0131\u015f hesaplanm\u0131\u015f bir worker say\u0131s\u0131 veya bellek limiti, Redis ve PHP s\u00fcre\u00e7lerinin OOM Killer taraf\u0131ndan \u00f6ld\u00fcr\u00fclmesine yol a\u00e7abilir.<\/p>\n<h3><span id=\"Worker_Basina_Ortalama_Bellek_Kullanimi\">Worker Ba\u015f\u0131na Ortalama Bellek Kullan\u0131m\u0131<\/span><\/h3>\n<p>Worker ba\u015f\u0131na RAM t\u00fcketimi, uygulaman\u0131z\u0131n boyutuna, kullan\u0131lan paketlere ve job\u2019lar\u0131n ne yapt\u0131\u011f\u0131na g\u00f6re de\u011fi\u015fir. Pratikte s\u0131k g\u00f6rd\u00fc\u011f\u00fcm\u00fcz aral\u0131klar:<\/p>\n<ul>\n<li>K\u00fc\u00e7\u00fck projeler: <strong>40\u201380 MB \/ worker<\/strong><\/li>\n<li>Orta projeler: <strong>80\u2013150 MB \/ worker<\/strong><\/li>\n<li>A\u011f\u0131r projeler (b\u00fcy\u00fck ORM modelleri, raporlama): <strong>150\u2013300 MB \/ worker<\/strong><\/li>\n<\/ul>\n<p>Bunu kendi VPS\u2019inizde <code>htop<\/code> veya <code>top<\/code> ile rahatl\u0131kla \u00f6l\u00e7ebilirsiniz. Birka\u00e7 worker ile y\u00fck alt\u0131nda test yap\u0131p, her bir <code>php artisan queue:work<\/code> s\u00fcrecinin RSS de\u011ferine bak\u0131n.<\/p>\n<h3><span id=\"Toplam_RAM_Ihtiyaci_icin_Basit_Formul\">Toplam RAM \u0130htiyac\u0131 i\u00e7in Basit Form\u00fcl<\/span><\/h3>\n<p>Toplam RAM ihtiyac\u0131n\u0131 kabaca \u015f\u00f6yle hesaplayabilirsiniz:<\/p>\n<ul>\n<li><strong>OS + servisler<\/strong> (Nginx, systemd, ufw vs.): ~300\u2013500 MB<\/li>\n<li><strong>PHP-FPM \/ web i\u015flemleri:<\/strong> 500\u20131500 MB (trafi\u011fe ve FPM ayarlar\u0131na g\u00f6re)<\/li>\n<li><strong>Redis:<\/strong> 100\u20131024 MB (kuyruk ve cache y\u00fck\u00fcne g\u00f6re)<\/li>\n<li><strong>Horizon worker\u2019lar\u0131:<\/strong> Worker_say\u0131s\u0131 \u00d7 Worker_RAM<\/li>\n<li><strong>G\u00fcvenlik tamponu:<\/strong> Toplam\u0131n %20\u201330\u2019u<\/li>\n<\/ul>\n<p>\u00d6rne\u011fin:<\/p>\n<ul>\n<li>OS: 500 MB<\/li>\n<li>PHP-FPM: 1000 MB<\/li>\n<li>Redis: 512 MB<\/li>\n<li>Worker say\u0131s\u0131: 10<\/li>\n<li>Worker ba\u015f\u0131 RAM: 100 MB<\/li>\n<\/ul>\n<p>Toplam \u2248 500 + 1000 + 512 + (10 \u00d7 100) = <strong>3.012 MB<\/strong>. G\u00fcvenlik pay\u0131 ile birlikte 3.012 \u00d7 1,3 \u2248 <strong>3,9 GB<\/strong>. Yani burada <strong>4 GB RAM<\/strong>\u2019li bir VPS, alt s\u0131n\u0131rda ama kabul edilebilir; 8 GB ise sizi \u00e7ok daha rahatlat\u0131r.<\/p>\n<p>RAM s\u0131n\u0131rlar\u0131nda \u00e7al\u0131\u015f\u0131rken <strong>swap<\/strong>, <strong>OOM Killer<\/strong> ve bellek bask\u0131s\u0131 konular\u0131n\u0131 iyi anlamak i\u00e7in, <a href=\"https:\/\/www.dchost.com\/blog\/vpste-ram-swap-ve-oom-killer-yonetimi\/\">VPS\u2019te RAM, swap ve OOM Killer y\u00f6netimi<\/a> yaz\u0131m\u0131za da mutlaka g\u00f6z at\u0131n.<\/p>\n<h3><span id=\"memory_limit_ve_max_execution_time_Ayarlarinin_Etkisi\">memory_limit ve max_execution_time Ayarlar\u0131n\u0131n Etkisi<\/span><\/h3>\n<p>PHP\u2019nin <code>memory_limit<\/code> ve <code>max_execution_time<\/code> ayarlar\u0131, queue worker\u2019lar\u0131n\u0131n davran\u0131\u015f\u0131n\u0131 do\u011frudan etkiler:<\/p>\n<ul>\n<li><strong>memory_limit:<\/strong> \u00c7ok d\u00fc\u015f\u00fckse job\u2019lar <code>Allowed memory size exhausted<\/code> hatas\u0131yla patlar; \u00e7ok y\u00fcksekse de birka\u00e7 job belle\u011fi \u015fi\u015firip t\u00fcm sunucuyu kilitleyebilir.<\/li>\n<li><strong>max_execution_time:<\/strong> CLI i\u00e7in genelde <code>0<\/code> (s\u0131n\u0131rs\u0131z) kullan\u0131l\u0131r; ancak job baz\u0131nda <code>timeout<\/code> ayar\u0131yla yine de s\u0131n\u0131r getirebilirsiniz.<\/li>\n<\/ul>\n<p>Genelde worker\u2019lar i\u00e7in 256\u2013512 MB aral\u0131\u011f\u0131 makul bir ba\u015flang\u0131\u00e7t\u0131r. PHP ayarlar\u0131n\u0131 sistematik bir \u015fekilde ele almak isterseniz, <a href=\"https:\/\/www.dchost.com\/blog\/php-ayarlarini-dogru-yapmak-memory_limit-max_execution_time-ve-upload_max_filesize-kac-olmali\/\">PHP ayarlar\u0131 rehberimiz<\/a> sizin i\u00e7in iyi bir referans olacakt\u0131r.<\/p>\n<h2><span id=\"Redis_Planlama_Bellek_Kalicilik_ve_Kuyruk_Derinligi\">Redis Planlama: Bellek, Kal\u0131c\u0131l\u0131k ve Kuyruk Derinli\u011fi<\/span><\/h2>\n<p>Laravel Horizon ile birlikte genellikle <strong>Redis queue driver<\/strong> kullan\u0131yoruz. Redis hem kuyruk verisini hem de bazen cache\/session verilerini ta\u015f\u0131d\u0131\u011f\u0131 i\u00e7in, kapasite planlamas\u0131nda ayr\u0131 bir ba\u015fl\u0131k a\u00e7mak gerekiyor.<\/p>\n<h3><span id=\"Kuyruk_Derinligi_ve_Job_Boyutu\">Kuyruk Derinli\u011fi ve Job Boyutu<\/span><\/h3>\n<p>Redis taraf\u0131nda RAM ihtiyac\u0131n\u0131 kabaca \u015fu form\u00fclle d\u00fc\u015f\u00fcnebilirsiniz:<\/p>\n<ul>\n<li><strong>Toplam kuyruk RAM \u2248 Ortalama job boyutu \u00d7 Maksimum kuyruk derinli\u011fi \u00d7 1,5<\/strong><\/li>\n<\/ul>\n<p>Buradaki 1,5 \u00e7arpan\u0131, Redis\u2019in key yap\u0131lar\u0131 ve ek metadatalar i\u00e7in kabaca bir overhead fakt\u00f6r\u00fcd\u00fcr.<\/p>\n<p>\u00d6rnek:<\/p>\n<ul>\n<li>Ortalama job payload boyutu: <strong>1 KB<\/strong><\/li>\n<li>Maksimum kuyruk derinli\u011fi: <strong>100.000 job<\/strong><\/li>\n<\/ul>\n<p>Toplam \u2248 1 KB \u00d7 100.000 \u00d7 1,5 = <strong>150 MB<\/strong>. Ayn\u0131 Redis i\u00e7inde cache ve session da tutuyorsan\u0131z, \u00f6rne\u011fin 300\u2013400 MB da onlara ay\u0131rman\u0131z gerekebilir. Bu durumda Redis i\u00e7in en az 512\u2013768 MB RAM planlamak mant\u0131kl\u0131 olur.<\/p>\n<h3><span id=\"maxmemory_ve_Eviction_Politikalari\">maxmemory ve Eviction Politikalar\u0131<\/span><\/h3>\n<p>Redis\u2019te <code>maxmemory<\/code> ayar\u0131 ile \u00fcst bellek s\u0131n\u0131r\u0131n\u0131 belirleyebilir, <code>maxmemory-policy<\/code> ile de hangi key\u2019lerin at\u0131laca\u011f\u0131n\u0131 tan\u0131mlayabilirsiniz. Kuyruk verisinin kaybolmas\u0131n\u0131 istemiyorsan\u0131z, genelde:<\/p>\n<ul>\n<li>Kuyruk i\u00e7in ayr\u0131 bir Redis instance\u2019\u0131 kullanmak<\/li>\n<li>Bu instance\u2019ta evicton politikas\u0131n\u0131 \u00e7ok dikkatli se\u00e7mek (veya hi\u00e7 eviction olmamas\u0131n\u0131 sa\u011flamak)<\/li>\n<\/ul>\n<p>en sa\u011fl\u0131kl\u0131 yoldur. Cache verisi kaybolabilir, yeniden olu\u015fturulur; ama kuyruktaki i\u015flerin kaybolmas\u0131 genellikle kabul edilemez.<\/p>\n<p>Redis\u2019i genel olarak hosting performans\u0131 a\u00e7\u0131s\u0131ndan daha derin anlamak i\u00e7in, <a href=\"https:\/\/www.dchost.com\/blog\/redis-cache-nedir-hosting-performansini-nasil-artirir\/\">Redis cache nedir ve hosting performans\u0131n\u0131 nas\u0131l art\u0131r\u0131r<\/a> yaz\u0131m\u0131z\u0131 da inceleyebilirsiniz.<\/p>\n<h3><span id=\"Persistens_AOFRDB_ve_Disk_Etkisi\">Persistens (AOF\/RDB) ve Disk Etkisi<\/span><\/h3>\n<p>Redis\u2019te kal\u0131c\u0131l\u0131k i\u00e7in:<\/p>\n<ul>\n<li><strong>RDB snapshot:<\/strong> Belirli aral\u0131klarla t\u00fcm verinin diske dump edilmesi.<\/li>\n<li><strong>AOF:<\/strong> Her yazma i\u015fleminin append-only log\u2019a eklenmesi.<\/li>\n<\/ul>\n<p>Y\u00fcksek hacimli kuyruklar\u0131n\u0131z varsa, AOF dosyas\u0131 \u00e7ok h\u0131zl\u0131 b\u00fcy\u00fcyebilir. NVMe diskli bir DCHost VPS \u00fczerinde bu y\u00fck genellikle y\u00f6netilebilir olsa da, disk I\/O bask\u0131s\u0131n\u0131 izlemek ve gerekti\u011finde AOF yeniden yazma (rewrite) politikalar\u0131n\u0131 g\u00f6zden ge\u00e7irmek gerekir.<\/p>\n<h2><span id=\"Queue_Yapisi_ve_Worker_Dagilimini_Tasarlamak\">Queue Yap\u0131s\u0131 ve Worker Da\u011f\u0131l\u0131m\u0131n\u0131 Tasarlamak<\/span><\/h2>\n<p>CPU, RAM ve Redis i\u00e7in kabaca bir plan \u00e7\u0131kard\u0131ktan sonra, i\u015fin mimari boyutuna geliyoruz: <strong>Ka\u00e7 kuyruk, hangi i\u015f i\u00e7in ka\u00e7 worker?<\/strong><\/p>\n<h3><span id=\"Queuelari_Is_Tipine_Gore_Ayirin\">Queue\u2019lar\u0131 \u0130\u015f Tipine G\u00f6re Ay\u0131r\u0131n<\/span><\/h3>\n<p>Tek bir <code>default<\/code> kuyru\u011funa her \u015feyi atmak, en s\u0131k g\u00f6rd\u00fc\u011f\u00fcm\u00fcz anti-pattern\u2019lerden biri. Bunun yerine:<\/p>\n<ul>\n<li><strong>high:<\/strong> Kullan\u0131c\u0131y\u0131 do\u011frudan etkileyen h\u0131zl\u0131 i\u015fler (e-posta onay\u0131, kritik bildirimler).<\/li>\n<li><strong>default:<\/strong> Normal \u00f6neme sahip arka plan i\u015fler.<\/li>\n<li><strong>emails:<\/strong> Toplu e-posta ve b\u00fclten g\u00f6nderimi.<\/li>\n<li><strong>reports:<\/strong> A\u011f\u0131r raporlar, d\u0131\u015f sistemlerle toplu senkronizasyon.<\/li>\n<li><strong>low:<\/strong> Gecikmeye daha toleransl\u0131 i\u015fler (log i\u015fleme, analitik vb.).<\/li>\n<\/ul>\n<p>Bu ayr\u0131m, Horizon supervisor\u2019lar arac\u0131l\u0131\u011f\u0131yla her kuyru\u011fa farkl\u0131 say\u0131da worker ve farkl\u0131 kaynak \u00f6nceli\u011fi tan\u0131mlaman\u0131z\u0131 sa\u011flar.<\/p>\n<h3><span id=\"Supervisor_Bazinda_Worker_Plani_Ornegi\">Supervisor Baz\u0131nda Worker Plan\u0131 \u00d6rne\u011fi<\/span><\/h3>\n<p>Diyelim ki 4 vCPU, 8 GB RAM\u2019li bir VPS\u2019iniz var. \u00c7o\u011fu orta \u00f6l\u00e7ekli Laravel projesi i\u00e7in mant\u0131kl\u0131 bir ba\u015flang\u0131\u00e7 yap\u0131s\u0131 \u015f\u00f6yle olabilir:<\/p>\n<ul>\n<li><strong>Supervisor: high<\/strong><br \/>queues: <code>high,default<\/code><br \/>processes: 4 (\u00f6nemli i\u015fler i\u00e7in daha garantili CPU)<\/li>\n<li><strong>Supervisor: emails<\/strong><br \/>queues: <code>emails<\/code><br \/>processes: 4\u20136 (IO-bound oldu\u011fu i\u00e7in daha fazla worker)<\/li>\n<li><strong>Supervisor: reports<\/strong><br \/>queues: <code>reports<\/code><br \/>processes: 2\u20133 (CPU-bound, raporlar daha a\u011f\u0131r)<\/li>\n<\/ul>\n<p>B\u00f6ylece toplam 10\u201313 worker\u2019a ula\u015f\u0131rs\u0131n\u0131z. Daha \u00f6nce hesaplad\u0131\u011f\u0131m\u0131z RAM ve CPU limitlerine uydu\u011funuz s\u00fcrece bu yap\u0131 genellikle dengeli \u00e7al\u0131\u015f\u0131r. Zamanla Horizon istatistiklerini izleyerek, \u00f6zellikle <strong>bekleme s\u00fcrelerine<\/strong> ve <strong>i\u015f ba\u015far\u0131s\u0131zl\u0131k oranlar\u0131na<\/strong> bakarak worker say\u0131lar\u0131n\u0131 yukar\u0131\/a\u015fa\u011f\u0131 \u00e7ekebilirsiniz.<\/p>\n<h3><span id=\"Job_Timeout_maxAttempts_ve_Hatali_Isleri_Yonetmek\">Job Timeout, maxAttempts ve Hatal\u0131 \u0130\u015fleri Y\u00f6netmek<\/span><\/h3>\n<p>Y\u00fcksek concurrency her zaman iyi de\u011fildir; hatal\u0131 job\u2019lar h\u0131zla \u00fcst \u00fcste patlayabilir ve hem Redis\u2019i hem de uygulaman\u0131z\u0131 zorlayabilir. Her job i\u00e7in:<\/p>\n<ul>\n<li><strong>timeout:<\/strong> \u00d6rne\u011fin a\u011f\u0131r rapor i\u00e7in 120\u2013300 sn, e-posta i\u00e7in 30 sn gibi.<\/li>\n<li><strong>maxAttempts:<\/strong> Kritik i\u015flerde 3\u20135, idempotent i\u015flerde biraz daha y\u00fcksek.<\/li>\n<li><strong>failOnTimeout:<\/strong> Zaman a\u015f\u0131m\u0131 durumunda job\u2019un ba\u015far\u0131s\u0131z say\u0131lmas\u0131n\u0131 sa\u011flay\u0131n.<\/li>\n<\/ul>\n<p>Horizon\u2019un <strong>failed jobs<\/strong> ekran\u0131n\u0131 d\u00fczenli takip ederek, \u00f6zellikle belirli tip job\u2019lar\u0131n s\u00fcrekli tekrar kuyru\u011fa at\u0131lmas\u0131n\u0131 ve gereksiz kaynak t\u00fcketmesini \u00f6nleyebilirsiniz.<\/p>\n<h2><span id=\"Ornek_Senaryolar_Kucuk_SaaStan_Orta_Olcekli_E-ticarete\">\u00d6rnek Senaryolar: K\u00fc\u00e7\u00fck SaaS\u2019tan Orta \u00d6l\u00e7ekli E-ticarete<\/span><\/h2>\n<p>Teoriyi prati\u011fe d\u00f6kmek en iyi, somut senaryolarla m\u00fcmk\u00fcn. DCHost taraf\u0131nda s\u0131k g\u00f6rd\u00fc\u011f\u00fcm\u00fcz \u00fc\u00e7 tip projeye g\u00f6re \u00f6rnek VPS ve Horizon konfig\u00fcrasyonu \u00fczerinden gidelim.<\/p>\n<h3><span id=\"Senaryo_1_Kucuk_SaaS_2_vCPU_4_GB_RAM\">Senaryo 1: K\u00fc\u00e7\u00fck SaaS (2 vCPU, 4 GB RAM)<\/span><\/h3>\n<p>\u00d6zellikler:<\/p>\n<ul>\n<li>G\u00fcnl\u00fck 10\u201320 bin sayfa g\u00f6r\u00fcnt\u00fcleme<\/li>\n<li>Kuyrukta \u00e7o\u011funlukla e-posta ve basit bildirim i\u015fleri<\/li>\n<li>Nadiren rapor \u00fcretimi<\/li>\n<\/ul>\n<p>\u00d6nerilen VPS kaynaklar\u0131 (\u00f6rnek):<\/p>\n<ul>\n<li><strong>2 vCPU, 4 GB RAM, NVMe diskli DCHost VPS<\/strong><\/li>\n<li>Redis ve web uygulamas\u0131 ayn\u0131 VPS \u00fczerinde (ama ileride ayr\u0131lmaya haz\u0131r mimari)<\/li>\n<\/ul>\n<p>\u00d6nerilen Horizon yap\u0131s\u0131:<\/p>\n<ul>\n<li><strong>Supervisor: high-default<\/strong><br \/>queues: <code>high,default<\/code><br \/>processes: 2 (CPU-bound olabilecek k\u00fc\u00e7\u00fck i\u015fler i\u00e7in)<\/li>\n<li><strong>Supervisor: emails<\/strong><br \/>queues: <code>emails<\/code><br \/>processes: 3\u20134 (IO-bound)<\/li>\n<\/ul>\n<p>Worker bellek t\u00fcketimi ortalama 70 MB ise, toplam worker RAM t\u00fcketimi \u2248 5\u20136 worker \u00d7 70 MB \u2248 350\u2013420 MB. Geri kalan bellek PHP-FPM, Redis ve OS i\u00e7in yeterlidir. Burada en kritik nokta, <strong>peak saatlerde e-posta kuyru\u011funun \u00e7ok birikmedi\u011fini<\/strong> g\u00f6zlemlemek ve gerekti\u011finde <strong>emails supervisor\u2019\u0131na ge\u00e7ici olarak daha fazla worker vermektir<\/strong>.<\/p>\n<h3><span id=\"Senaryo_2_Orta_Olcekli_E-ticaret_4_vCPU_8_GB_RAM\">Senaryo 2: Orta \u00d6l\u00e7ekli E-ticaret (4 vCPU, 8 GB RAM)<\/span><\/h3>\n<p>\u00d6zellikler:<\/p>\n<ul>\n<li>G\u00fcnl\u00fck 50\u2013200 bin sayfa g\u00f6r\u00fcnt\u00fcleme<\/li>\n<li>Sipari\u015f sonras\u0131 e-posta, stok senkronizasyonu, fatura PDF \u00fcretimi<\/li>\n<li>D\u0131\u015f ERP\/CRM sistemleriyle zamanlanm\u0131\u015f senkronizasyonlar<\/li>\n<\/ul>\n<p>\u00d6nerilen VPS kaynaklar\u0131 (\u00f6rnek):<\/p>\n<ul>\n<li><strong>4 vCPU, 8 GB RAM, NVMe disk<\/strong><\/li>\n<li>\u0130leride veritaban\u0131n\u0131 ayr\u0131 sunucuya ta\u015f\u0131yabilecek mimari<\/li>\n<\/ul>\n<p>\u00d6nerilen Horizon yap\u0131s\u0131:<\/p>\n<ul>\n<li><strong>Supervisor: high<\/strong><br \/>queues: <code>high,default<\/code><br \/>processes: 4<\/li>\n<li><strong>Supervisor: emails<\/strong><br \/>queues: <code>emails<\/code><br \/>processes: 4\u20136<\/li>\n<li><strong>Supervisor: reports<\/strong><br \/>queues: <code>reports<\/code><br \/>processes: 2\u20133 (CPU-bound)<\/li>\n<\/ul>\n<p>Burada toplam 10\u201313 worker\u2019dan bahsediyoruz. Worker ba\u015f\u0131na 120 MB bellek varsayal\u0131m: 13 \u00d7 120 MB \u2248 1,56 GB. OS (~500 MB), PHP-FPM (~1500 MB), Redis (~600 MB) ve g\u00fcvenlik tamponu ile birlikte 8 GB\u2019l\u0131k bir VPS gayet konforlu bir alan sunar.<\/p>\n<p>Bu tip projelerde hem web trafi\u011fi hem de arka plan i\u015fleri ciddi boyuta ula\u015ft\u0131\u011f\u0131ndan, <a href=\"https:\/\/www.dchost.com\/blog\/woocommerce-laravel-ve-node-jsde-dogru-vps-kaynaklarini-nasil-secersin-cpu-ram-nvme-ve-bant-genisligi-rehberi\/\">Laravel i\u00e7in do\u011fru VPS kaynaklar\u0131n\u0131 se\u00e7me rehberi<\/a> ve <a href=\"https:\/\/www.dchost.com\/blog\/wordpress-ve-woocommerce-icin-php-fpm-ayarlari-pm-pm-max_children-ve-pm-max_requests-hesaplama-rehberi\/\">PHP-FPM ayarlar\u0131 hesaplama yaz\u0131s\u0131<\/a> da pratikte \u00e7ok i\u015finize yarar.<\/p>\n<h3><span id=\"Senaryo_3_Yuksek_Trafikli_Laravel_Uygulamasi\">Senaryo 3: Y\u00fcksek Trafikli Laravel Uygulamas\u0131<\/span><\/h3>\n<p>\u00d6zellikler:<\/p>\n<ul>\n<li>G\u00fcnl\u00fck 500k+ sayfa g\u00f6r\u00fcnt\u00fcleme<\/li>\n<li>A\u011f\u0131r analitik, raporlama, video\/g\u00f6rsel i\u015fleme, \u00e7oklu entegrasyon<\/li>\n<li>Onlarca farkl\u0131 job tipi ve karma\u015f\u0131k queue mimarisi<\/li>\n<\/ul>\n<p>Bu seviyede genellikle yakla\u015f\u0131m de\u011fi\u015fiyor:<\/p>\n<ul>\n<li>Web istekleri i\u00e7in ayr\u0131 bir veya birka\u00e7 VPS\/<a href=\"https:\/\/www.dchost.com\/tr\/fiziksel-sunucu\">dedicated sunucu<\/a><\/li>\n<li>Queue\/Horizon i\u00e7in ayr\u0131 bir veya birka\u00e7 VPS\/dedicated sunucu<\/li>\n<li>Redis ve veritaban\u0131 i\u00e7in yine ayr\u0131 sunucular<\/li>\n<\/ul>\n<p>\u00d6rne\u011fin sadece queue i\u015fleri i\u00e7in 8\u201316 vCPU, 16\u201332 GB RAM aral\u0131\u011f\u0131nda bir DCHost VPS veya dedicated sunucu, \u00fczerinde:<\/p>\n<ul>\n<li>CPU-bound a\u011f\u0131r raporlar i\u00e7in 8\u201312 worker<\/li>\n<li>IO-bound bildirim\/e-posta i\u015fleri i\u00e7in 40\u201360 worker<\/li>\n<li>Her bir i\u015f tipi i\u00e7in ayr\u0131 supervisor ve ayr\u0131 timeout\/attempt politikalar\u0131<\/li>\n<\/ul>\n<p>\u015feklinde bir yap\u0131 planlanabilir. Bu noktada mutlaka <strong>load test<\/strong> (k6, JMeter vs.) ve s\u00fcrekli izleme (Prometheus, Netdata) ile ad\u0131m ad\u0131m b\u00fcy\u00fcmek gerekir. Bu tip geli\u015fmi\u015f izleme senaryolar\u0131na ba\u015flang\u0131\u00e7 i\u00e7in, <a href=\"https:\/\/www.dchost.com\/blog\/vps-izleme-ve-uyari-nasil-kurulur-prometheus-grafana-ve-node-exporter-ile-sessiz-alarmlari-konusturmak\/\">VPS izleme ve uyar\u0131 kurulum rehberimiz<\/a> ve <a href=\"https:\/\/www.dchost.com\/blog\/vps-kaynak-kullanimi-izleme-rehberi-htop-iotop-netdata-ve-prometheus\/\">VPS kaynak kullan\u0131m\u0131 izleme rehberi<\/a> iyi bir referanst\u0131r.<\/p>\n<h2><span id=\"Adim_Adim_Uygulanabilir_Plan_Kendi_Projende_Nasil_Ilerlemelisin\">Ad\u0131m Ad\u0131m Uygulanabilir Plan: Kendi Projende Nas\u0131l \u0130lerlemelisin?<\/span><\/h2>\n<p>\u00d6zetle, Laravel Horizon ve queue i\u015fleri i\u00e7in VPS boyutland\u0131rma s\u00fcrecini \u015fu ad\u0131mlarla y\u00f6netebilirsiniz:<\/p>\n<ol>\n<li><strong>\u0130\u015f tiplerini s\u0131n\u0131fland\u0131r:<\/strong> CPU-bound, IO-bound, karma job\u2019lar\u0131 tespit et.<\/li>\n<li><strong>\u0130\u015f s\u00fcrelerini \u00f6l\u00e7:<\/strong> Horizon metrikleriyle her job i\u00e7in ortalama s\u00fcreyi (t) \u00e7\u0131kar.<\/li>\n<li><strong>Saatlik hacmi belirle:<\/strong> Zirve saatlerde beklenen job say\u0131s\u0131n\u0131 (N) tahmin et veya \u00f6l\u00e7.<\/li>\n<li><strong>Gerekli worker kapasitesini hesapla:<\/strong> Basit\u00e7e N \/ (60 \u00d7 60 \/ t) ile \u00e7al\u0131\u015fan thread ihtiyac\u0131n\u0131 g\u00f6r; CPU-bound i\u00e7in W \u2248 vCPU, IO-bound i\u00e7in W \u2248 vCPU \u00d7 (2\u20134) mant\u0131\u011f\u0131yla \u00e7arp\u0131\u015ft\u0131r.<\/li>\n<li><strong>Worker ba\u015f\u0131na RAM\u2019i \u00f6l\u00e7:<\/strong> K\u00fc\u00e7\u00fck bir test ortam\u0131nda i\u015f y\u00fck\u00fc s\u0131ras\u0131nda tek worker\u2019\u0131n RAM kullan\u0131m\u0131n\u0131 htop\/top ile g\u00f6zle.<\/li>\n<li><strong>Toplam RAM hesab\u0131n\u0131 yap:<\/strong> OS + PHP-FPM + Redis + (W \u00d7 Worker_RAM) + %20\u201330 buffer \u015feklinde.<\/li>\n<li><strong>Supervisor yap\u0131land\u0131r:<\/strong> <code>config\/horizon.php<\/code> i\u00e7inde kuyruklara g\u00f6re supervisor\u2019lar ve processes de\u011ferlerini tan\u0131mla.<\/li>\n<li><strong>\u0130zle ve d\u00fczelt:<\/strong> \u0130lk hafta Horizon dashboard, Sunucu load, RAM, Redis kullan\u0131m\u0131n\u0131 s\u00fcrekli izleyip, worker say\u0131lar\u0131n\u0131 k\u00fc\u00e7\u00fck ad\u0131mlarla optimize et.<\/li>\n<\/ol>\n<p>Bu s\u00fcreci do\u011fru kurdu\u011funuzda, kuyruklar\u0131n\u0131z hem daha h\u0131zl\u0131 bo\u015fal\u0131r hem de web isteklerinizin performans\u0131 bozulmaz. DCHost taraf\u0131nda biz de m\u00fc\u015fterilerimize tam olarak bu ad\u0131mlar \u00fczerinden giderek kaynak planlama dan\u0131\u015fmanl\u0131\u011f\u0131 veriyoruz.<\/p>\n<h2><span id=\"Sonuc_Laravel_Horizon_Icin_Kaynak_Planlama_Bir_Kerelik_Degil_Surekli_Bir_Surec\">Sonu\u00e7: Laravel Horizon \u0130\u00e7in Kaynak Planlama Bir Kerelik De\u011fil, S\u00fcrekli Bir S\u00fcre\u00e7<\/span><\/h2>\n<p>Laravel Horizon ve queue i\u015fleri i\u00e7in VPS kaynak planlama, \u201cbir kere ayarlad\u0131m, art\u0131k unuturum\u201d diyebilece\u011finiz bir konu de\u011fil. Trafi\u011finiz art\u0131yor, yeni i\u015f tipleri ekleniyor, Redis\u2019e ekstra cache yap\u0131lar\u0131 ta\u015f\u0131n\u0131yor, raporlar a\u011f\u0131rla\u015f\u0131yor; k\u0131sacas\u0131 zamanla i\u015f y\u00fck\u00fcn\u00fcz evrim ge\u00e7iriyor. Ger\u00e7ek\u00e7i yakla\u015f\u0131m, <strong>\u00f6l\u00e7 \u2013 planla \u2013 uygula \u2013 yeniden \u00f6l\u00e7<\/strong> d\u00f6ng\u00fcs\u00fcn\u00fc kurmak.<\/p>\n<p>Bu yaz\u0131da CPU, RAM, Redis ve worker say\u0131s\u0131n\u0131 form\u00fcllerle ve ger\u00e7ek\u00e7i varsay\u0131mlarla nas\u0131l hesaplayabilece\u011finizi, k\u00fc\u00e7\u00fck SaaS\u2019tan orta \u00f6l\u00e7ekli e-ticarete kadar farkl\u0131 senaryolarda ne t\u00fcr konfig\u00fcrasyonlar kullanabilece\u011finizi birlikte g\u00f6rd\u00fck. Art\u0131k yeni bir DCHost VPS paketi se\u00e7erken veya mevcut sunucunuzu y\u00fckseltirken, \u201cka\u00e7 vCPU, ka\u00e7 GB RAM, ka\u00e7 worker?\u201d sorular\u0131na sezgiyle de\u011fil, <strong>net metrikler ve basit hesaplarla<\/strong> cevap verebilirsiniz.<\/p>\n<p>E\u011fer Laravel tabanl\u0131 projeniz b\u00fcy\u00fcyor ve Horizon\/queue katman\u0131nda zaman zaman kuyruk birikmeleri, ge\u00e7 gelen e-postalar, CPU\/RAM patlamalar\u0131 g\u00f6r\u00fcyorsan\u0131z, DCHost ekibi olarak hem <strong>do\u011fru VPS veya dedicated paketini<\/strong> se\u00e7menizde hem de <strong>Horizon mimarinizi g\u00f6zden ge\u00e7irmenizde<\/strong> yard\u0131mc\u0131 olabiliriz. Projenizin trafik ve job metriklerini birlikte analiz edip, bir kapasite planlama tablosu \u00e7\u0131karal\u0131m; siz de geli\u015ftirmeye odaklan\u0131n, altyap\u0131 taraf\u0131n\u0131 bize b\u0131rak\u0131n.<\/p>\n<\/div>","protected":false},"excerpt":{"rendered":"<p>\u0130&ccedil;indekiler1 Laravel Horizon ve Queue \u0130\u015fleri \u0130\u00e7in Kaynak Planlama Neden Ayr\u0131 Ele Al\u0131nmal\u0131?2 \u00d6n Haz\u0131rl\u0131k: Queue \u0130\u015flerinizi Do\u011fru Tan\u0131mlamak2.1 1) \u0130\u015f Tiplerini S\u0131n\u0131fland\u0131r\u0131n: CPU-bound, IO-bound, Karma2.2 2) Ortalama \u0130\u015f S\u00fcresini ve Hacmini \u00d6l\u00e7\u00fcn3 CPU Planlama: Ka\u00e7 vCPU ve Ka\u00e7 Worker?3.1 CPU-ba\u011f\u0131ml\u0131 \u0130\u015fler \u0130\u00e7in Worker Say\u0131s\u01313.2 IO-ba\u011f\u0131ml\u0131 \u0130\u015fler \u0130\u00e7in Worker Say\u0131s\u01313.3 Karma \u0130\u015fler \u0130\u00e7in Worker Say\u0131s\u01313.4 [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":4104,"comment_status":"","ping_status":"","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[26],"tags":[],"class_list":["post-4103","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\/4103","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=4103"}],"version-history":[{"count":0,"href":"https:\/\/www.dchost.com\/blog\/wp-json\/wp\/v2\/posts\/4103\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.dchost.com\/blog\/wp-json\/wp\/v2\/media\/4104"}],"wp:attachment":[{"href":"https:\/\/www.dchost.com\/blog\/wp-json\/wp\/v2\/media?parent=4103"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.dchost.com\/blog\/wp-json\/wp\/v2\/categories?post=4103"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.dchost.com\/blog\/wp-json\/wp\/v2\/tags?post=4103"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}