« Tüm yayınlar

Cloud Run'da CPU Kısıtlaması: Donan Arka Plan Görevleri Gizemi

Cloud Run'ın istek bazlı CPU modeli, yanıt sonrası FastAPI BackgroundTasks ile çalıştırılan işleri donduruyor. Nedeni, teşhisi ve kalıcı çözümü.

Cloud Run üzerinde çalışan bir webhook alıcısı, FastAPI'nin BackgroundTasks özelliğiyle yanıtı hemen döndürüp asıl işi arka planda başlatıyordu. Ancak iş bazen üç dakika sonra, bazen hiç tamamlanmıyor; ilgisiz bir istek geldiğinde ise sıkışan iş aniden bitiveriyordu. Bu davranış klasik bir yavaşlık değil, dondurulmuş bir sürecin işaretiydi.

Kök neden, Cloud Run'ın varsayılan istek bazlı CPU tahsis modeliydi: yanıt gönderilir gönderilmez CPU neredeyse sıfıra çekiliyor ve bir sonraki istek gelene kadar arka plan görevi askıda kalıyordu. Event loop çökmüyor, sadece zamanlanmıyordu; hiçbir istisna fırlatılmadığı için hata loglarda hiç görünmüyor, bu da sorunu özellikle sinsi hale getiriyordu. Sorun yoğun günlerde gizlenip sakin günlerde ortaya çıktığı için de klasik aşırı yük teşhisiyle karıştırılabiliyordu.

Çözüm, gecikmeye duyarlı adımı arka plana atmak yerine yanıttan önce await etmekti; hata durumunda dedup işaretinin geri alınması ve gerçek bir 5xx döndürülmesi, gönderenin yeniden denemesini garanti ediyordu. İş doğası gereği yanıt süresine sığmıyorsa kalıcı çözüm, servisi instance bazlı CPU faturalamasına geçirip bu ayarı altyapı kodunda kalıcı hale getirmekti.

Bu vaka, serverless ortamlarda 'yanıttan sonra çalıştır' varsayımının CPU garantisi olmadan tehlikeli olabileceğini gösteriyor. Mühendisler için pratik ders, arka plan görevlerini test ederken mutlu yol yerine hata yolunu (5xx dönüşü ve dedup temizliği) doğrulamanın, senkron ile arka plan yürütmeyi ayırt eden tek gerçek test olduğu.