Gizli Aşağı Akış Tehlikesi
B2B SaaS platformu kurarken, uygulamanız dış API’lara büyük ölçüde bağlıdır. CRM senkronizasyonu, vergi doğrulama veya zenginleştirme verisi için üçüncü taraf platformlarıyla sorgular yaparsınız. Mimarideki tehlike, bu dış hizmetlerden biri arızalandığında veya ciddi ağ gecikmesi yaşandığında ortaya çıkar.
Bir API uç noktası normalde 100 ms’de yanıt veriyorsa ve aniden 10 saniyeye çıkıyorsa, gelen kullanıcı talepleriniz birikir. Laravel HTTP iş parçacıkları açık kalır, zaman aşımını bekler. Dakikalar içinde sunucunuzun bağlantı havuzu tamamen tükenmiş olur. Kritik olmayan bir üçüncü taraf hizmetindeki bir hata yukarı doğru yayılır, altyapınızı boğar ve tüm SaaS platformunuzu devre dışı bırakır. Dayanıklı bir mimari oluşturmak için bir Circuit Breaker uygulamanız gerekir.
Circuit Breaker Nedir?
Elektrik mühendisliğinden ilham alan yazılım Circuit Breaker, dış API çağrılarını üç durumda çalışan bir izleme durum makinesine sarar:
- Kapalı: Her şey sağlıklı. Talepler normal bir şekilde dış API’ya akar.
- Açık: Dış API birden fazla kez başarısız oldu. Devre kesici devreye girer ve tüm sonraki talepler *anında* yerel olarak hata verir, ağ kaynaklarını boşa harcamaz veya iş parçacıklarını engellemez.
- Yarı Açık: Bir soğuma döneminden sonra, devre kesici birkaç deneme talebine onay verir, böylece hizmetin toparlandığını kontrol eder.
Laravel ile Redis Kullanarak Circuit Breaker Uygulamak
Açık kaynak kütüphanelerinden brentosmith/circuit-breaker-laravel kullanabilir veya Redis kilitlerini doğrudan kullanarak belirgin bir entegrasyon koruma katmanı oluşturabilirsiniz.
namespace App\Services;use Illuminate\Support\Facades\Http; use Illuminate\Support\Facades\Cache; use Exception;
class ExternalCrmService { protected string $breakerKey = 'circuit_breaker:crm_api';
public function syncCustomerData(array $payload) { // 1. Devre kesicinin şu anda AÇIK olup olmadığını kontrol et if (Cache::has("{$this->breakerKey}:open")) { // Devre bozulmuş. Hızla bir geri dönüş veya önbelleğe alınmış veriyi döndür return ['status' => 'fallback', 'message' => 'Hizmet geçici olarak kötüleşti.']; } try { // 2. Ağ isteğini katı bir zaman aşımı ile gerçekleştir $response = Http::timeout(3)->post('https://api.externalcrm.com/v1/sync', $payload); if ($response->failed()) { throw new Exception("API Hatası"); } // Başarı: Herhangi bir ardışık hata takibini temizle Cache::forget("{$this->breakerKey}:failures"); return $response->json(); } catch (Exception $e) { // 3. Hata Durumunu Yönet: Ardışık hata sayacını artır $failures = Cache::increment("{$this->breakerKey}:failures"); // Eğer dış hizmet 5 kez üst üste başarısız olursa, DEVREYİ KAPAT if ($failures >= 5) { // Devre kesiciyi 60 saniye boyunca açık tut Cache::put("{$this->breakerKey}:open", true, now()->addSeconds(60)); \Log::warning("Dış CRM API'si için devre kesici devreye girdi. 60s boyunca izole edildi."); } return ['status' => 'fallback', 'message' => 'Hizmet kullanılamıyor. Yerel geri dönüş aktif.']; } }}
Mühendislik ROI’si
Redis destekli bir Circuit Breaker desenini uygulayarak, SaaS’ınız hata izolasyonu kazanır. Eğer bir satıcı 02:00’de devre dışı kalırsa, uygulamanız yavaşlamaz veya çökmez; derhal satıcıyı es geçerek kullanıcılara alternatif bir deneyim sunar. Bu, bellek tüketiminin zincirleme bir şekilde artmasını önler, sunucu iş parçacıklarını korur ve ana sisteminizi maksimum çalışma süresi için güvence altına alır.
Kaynak: Orijinal Makale


