Laravel Horizon, üretim aşamasında oldukça basit görünebilir, ancak LLM çıkarım işi zaman aşımına uğradığında ve kullanıcılarınız boş yanıtlar almaya başladığında işler karmaşıklaşır. Standart kuyruk işleri (e-posta gönderimi, resim işleme, kayıt senkronizasyonu) milisaniyeler içinde tamamlanır. Ancak AI çıkarım işleri bu kadar hızlı değildir. Soğuk bir claude-sonnet-4-6 çağrısı, yoğun bir sistem istemiyle 45 saniye sürebilir. Bir gemini-2.5-pro toplu özetleme işi ise yük altında 2 dakikayı aşabilir. Horizon’un varsayılanları bu tür işler için tasarlanmamıştır ve hata modları oldukça zorlayıcıdır: failed_jobs alanına düşmeden kaybolan işler, 30 saniyenin altında tükenen tries bütçesini tüketen tekrarlar ve tamamlanmanın ortasında terk edilen pahalı çıkarım işleri.
<p>Bu kılavuz, üretimde Laravel AI uygulamalarını çalıştırmanın tüm alanını kapsayan <a href="https://origin-main.com/ai-deployment-production-operations/" target="_blank" rel="noopener noreferrer">AI Deployment & Production Operations modülü</a>'nın bir parçasıdır. Eğer hala çevresel dağıtım altyapınızı hazırlıyorsanız, <a href="https://origin-main.com/guides/deploy-laravel-to-production/" target="_blank" rel="noopener noreferrer">tam üretim dağıtım kılavuzu</a> en doğru başlangıç noktasıdır.</p>
<p>Aşağıdaki bilgiler, AI kuyruk iş yüklerinin dikkatli bir şekilde yapılandırılması gereken üç katmanı kapsar: supervisor ayarı, iş sınıfı tasarımı ve operasyonel izleme.</p>
<h2>
<a name="why-ai-jobs-break-standard-horizon-assumptions" href="#why-ai-jobs-break-standard-horizon-assumptions"></a>
AI İşlerinin Standart Horizon Varsayımlarını Neden Kırdığı
</h2>
<p>Standart Horizon yapılandırması, işlerin saniyeler içinde döngüye gireceğini varsayar. Varsayılanlar bu durumu yansıtır: 60 saniyelik zaman aşımı, gerileme ayarı olmadan üç tekrar ve verimlilik için ayar yapılmış supervisor ayarları. Bu varsayımlar, LLM çıkarım kuyruklamaya başladığınız anda çökme yaşar.</p>
<p>Üç ana hata durumu tekrar eden sorunlardır:</p>
<p><strong>Sessiz zaman aşımı.</strong> Horizon'un varsayılan <code>timeout</code> değeri olan 60 saniye, AI çıkarımı için agresiftir. Büyük bir bağlam penceresiyle yapılacak bir <code>gpt-4o</code> çağrısı, ilk token'ını döndürmeden 50 saniye bekleyebilir. Ağı bant varyansı ekleyin ve çalışan işlem bir <code>SIGKILL</code> alır. Herhangi bir istisna kaydedilmez. İş <code>failed_jobs</code> kaydına düşmez. Sadece kaybolur. Bu, AI için Horizon'u ayarlamamış ekiplerden gördüğümüz en yaygın destek bileti desenidir: "işler kayboluyor."</p>
<p><strong>Oran sınırlama yanlış yönetimi.</strong> OpenAI, Anthropic ve Google'dan alınan 429 yanıtları, geleneksel anlamda hatalar değildir. Beklenen, geçici ve telafi edilebilirler. Hemen tekrar denemek, <code>tries</code> bütçesini saniyeler içinde tüketir. İşin üzerinde bir <code>backoff</code> dizisi tanımlanmadığında, Laravel varsayılan olarak tekrar denemeler arasında sıfır gecikme kullanır. 15 saniye içinde bir oran sınırına beş kez çarpan bir iş, gerçekten bir hata almış olan bir iş kadar kalıcı olarak başarısız olmuştur.</p>
<p><strong>Kısmi çıktı kaybı.</strong> AI işleri, başarısız olmadan önce yararlı işler görür. Bir belge özetleme işi, bağlam sınırına geldiğinde girişinin %80'ini işleyebilir. Standart iş hata yönetimi, bu durumu tamamen vazgeçer. Uzun belgelerde pahalı çıkarım iş yükleri için, bu ölçülebilir bir maliyettir.</p>
<p>Düzeltme, üç alanda değişiklik gerektirir: supervisor yapılandırması, iş sınıfı tasarımı ve izleme.</p>
<h2>
<a name="configuring-laravel-horizon-in-production-for-ai-workloads" href="#configuring-laravel-horizon-in-production-for-ai-workloads"></a>
AI İş Yükleri İçin Üretimde Laravel Horizon'u Yapılandırma
</h2>
<p>Eğer daha önce yapmadıysanız Horizon'u kurun:<br/></p>
<div class="highlight js-code-highlight">
<pre class="highlight shell"><code>composer require laravel/horizonphp artisan horizon:install
<p>Kritik yapılandırma <code>config/horizon.php</code> dosyasında bulunur. Varsayılan supervisor yapılandırması kasıtlı olarak jeneriktir. AI iş yükleri için, farklı ayarlarla özelleştirilmiş bir supervisor havuzuna ihtiyacınız var.<br/></p>
<div class="highlight js-code-highlight">
<pre class="highlight php"><code><span class="c1">// config/horizon.php</span>‘environments’ => [
‘production’ => [
<span class="s1">'supervisor-ai-inference'</span> <span class="o">=></span> <span class="p">[</span>
<span class="s1">'connection'</span> <span class="o">=></span> <span class="s1">'redis'</span><span class="p">,</span>
<span class="s1">'queue'</span> <span class="o">=></span> <span class="p">[</span><span class="s1">'ai-high'</span><span class="p">,</span> <span class="s1">'ai-default'</span><span class="p">,</span> <span class="s1">'ai-low'</span><span class="p">],</span>
<span class="s1">'balance'</span> <span class="o">=></span> <span class="s1">'auto'</span><span class="p">,</span>
<span class="s1">'autoScalingStrategy'</span> <span class="o">=></span> <span class="s1">'time'</span><span class="p">,</span>
<span class="s1">'minProcesses'</span> <span class="o">=></span> <span class="mi">2</span><span class="p">,</span>
<span class="s1">'maxProcesses'</span> <span class="o">=></span> <span class="mi">12</span><span class="p">,</span>
<span class="s1">'balanceMaxShift'</span> <span class="o">=></span> <span class="mi">2</span><span class="p">,</span>
<span class="s1">'balanceCooldown'</span> <span class="o">=></span> <span class="mi">5</span><span class="p">,</span>
<span class="s1">'timeout'</span> <span class="o">=></span> <span class="mi">300</span><span class="p">,</span> <span class="c1">// 5 dakika — akış tamamlamalarını kapsar</span>
<span class="s1">'sleep'</span> <span class="o">=></span> <span class="mi">3</span><span class="p">,</span>
<span class="s1">'tries'</span> <span class="o">=></span> <span class="mi">5</span><span class="p">,</span>
<span class="s1">'nice'</span> <span class="o">=></span> <span class="mi">0</span><span class="p">,</span>
<span class="p">],</span>
<span class="s1">'supervisor-default'</span> <span class="o">=></span> <span class="p">[</span>
<span class="s1">'connection'</span> <span class="o">=></span> <span class="s1">'redis'</span><span class="p">,</span>
<span class="s1">'queue'</span> <span class="o">=></span> <span class="p">[</span><span class="s1">'default'</span><span class="p">,</span> <span class="s1">'notifications'</span><span class="p">,</span> <span class="s1">'mail'</span><span class="p">],</span>
<span class="s1">'balance'</span> <span class="o">=></span> <span class="s1">'simple'</span><span class="p">,</span>
<span class="s1>'minProcesses'</span><span class="o">=></span><span class="mi">1</span><span class="p">,</span>
<span class="s1>'maxProcesses'</span><span class="o">=></span><span class="mi">8</span><span class="p">,</span>
<span class="s1>'timeout'</span><span class="o">=></span><span class="mi">60</span><span class="p">,</span>
<span class="s1>'sleep'</span><span class="o">=></span><span class="mi">3</span><span class="p">,</span>
<span class="s1>'tries'</span><span class="o">=></span><span class="mi">3</span><span class="p">,</span>
<span class="p">],</span>
<span class="p">],</span>
<span class="p">],</span>

