Dağıtım anında yükselen API gecikmesini çözmek - Django + Gunicorn vakası
- Backend sistemi Django + Gunicorn ile yapılandırılmıştı
- Her dağıtım yapıldığında API gecikmesinin hızla arttığı bir sorun fark edildi
- Gunicorn’un çalışma prensibi incelendiğinde Cold Start yaşanan bölümler olduğu görüldü
- Django’nun iç kodu analiz edildiğinde, master worker process’te
fork yapılırken preload seçeneği verilmiş olmasına rağmen bazı ön yükleme öğelerinin yüklenmediği keşfedildi ve sorun çözüldü
Öğrenilenler
- Django gibi çok sayıda kullanıcının tercih ettiği web framework’lerinde çoğu davranış yüksek güvenilirliğe sahiptir; bu yüzden bunları fiilen kullananların da doğal olarak böyle varsayma eğilimi vardır
- Ancak gerçek kod incelendiğinde soruna neden olan bir kod bulundu ve kullanılan framework’e körü körüne güvenilmemesi gerektiği öğrenildi
- API gecikmesi sorununu çözme süreci; yeterli dokümantasyonun olmaması + iç yapı ve çalışma biçimi hakkında derinlemesine anlayış eksikliği + açık kaynak projenin codebase’ini derinlemesine incelemekten kaçınma gibi nedenlerle kolayca kavranabilecek bir süreç değildi
- Bu süreçte birden fazla karmaşık sorunun iç içe geçmiş olması da işi zorlaştırdı
- Sonunda Django’nun iç koduna bakarak çözüm bulunabildi
- Bu süreçte, kullanılan Django araçlarına dair anlayışı artırmanın yanı sıra iç kodu incelemenin bazı zor problemlerin çözümünü bulmada yardımcı olabileceği de öğrenildi
- Sorunun kök nedenini tespit etmek önemlidir
- Health Check’in başarı koşullarını daha fazla tekrar ya da daha uzun süreye ayarlayarak API gecikmesinin görülme sıklığı azaltılabilirdi, ancak bu kökten bir çözüm olmayacaktı
- Kolektif zekâ kullanıldığında, daha hızlı biçimde odaklanılması gereken noktalar ve çeşitli bilgiler edinilebilir
- API gecikmesiyle ilgili sorun hızla organizasyonla paylaşıldı ve farklı mühendisler sorunun kaynağı olabileceğini düşündükleri görüşler sundu
- Bu görüşler hızlıca derlenerek nerelere odaklanmanın iyi olacağına dair bilgi hızla edinilebildi
- Sorunu çözmek için semptomları yeniden üretebilen bir ortam kurmak önemlidir
- Aynı sorun lokal ortamda da başarıyla yeniden üretildi ve bunun sayesinde sorunun gerçekten çözülüp çözülmediği doğrulanabildi
- Sorun çözümünde yeniden üretilebilirliğin önemi fark edildi
1 yorum
Bağlantıdan girip baktım; gönderinin içeriği gerçekten çok iyiymiş.