Başlık biraz garip gelmiş olabilir, ama müşterilerimizin hepsini neredeyse devre dışı bırakan gerçek bir üretim hatasından bahsetmek istiyorum.
Kanvas Ecosystem isimli bir arka uç sistemi sürdürmekteyiz. Bu sistem, çeşitli ön uç uygulamalara güç veriyor. Temel bileşenlerimizden biri dosya sistemi yöneticimiz: kullanıcılar dosyalar (görüntüler, sesler, videolar, GIF’ler vb.) yükler ve daha sonra bunları sistemde farklı varlıklara eklerler.
Her şey yolundaydı… ta ki bir gün olmaktan çıkana dek.
Yaklaşık 3 veya 4 ay önce, birisi projemize yeni bir önbellek ile ilgili kütüphane yükledi.
İşte o zaman, problemler sessizce başlamaya başladı.
İlk kural (zor yoldan öğrenildi)
İlk kural (zor yoldan öğrenildi)
Yeni bir kütüphane yüklemeden önce ekibinizle konuşun ve tüm senaryoları test edin.
Kaos başlıyor
Kaos başlıyor
Geçen hafta yeni bir özellik geliştirdim: bir görüntü tarayıcı.
Kullanıcılar bir kelime yazıyor, biz görselleri tarayıp indiriyoruz ve bunları dosya sistemi yöneticimizle saklıyoruz.
Birdenbire, üretim devre dışı kaldı.
Tüm müşteriler. Tüm uygulamalar.
Patronum endişeyle beni aradı ve sorunu bulmak için bir toplantıya girdik.
Saatler geçti.
Kodumuz mükemmel görünüyordu.
Geliştirme ortamında çalışıyordu.
Testler geçiyordu.
Bu yüzden bunun bir CPU sorunu olabileceğini düşündük.
Daha fazla çekirdek ekledik ve tarayıcıyı optimize ettik.
Yine de sorun devam etti.
İlk gerçek ipucu
İlk gerçek ipucu
Yeni bir sunucu oluşturduk ve AWS görüntüsü kullandık.
Aynı sorun.
Bu mantıklı gelmedi.
Daha sonra diğer servisleri kontrol ettiğimizde Redis’in devre dışı olduğunu keşfettik.
Redis kapasitesini artırdık ve geliştirme ortamında tekrar test ettik.
Bir basit görüntü yükledim.
Bu işlem 47 saniye sürdü.
O noktada sadece düşündüm: neden?
Yaklaşımı değiştirmek
Yaklaşımı değiştirmek
Sadece tarayıcıyı değil, dosya sistemi yöneticisi ile ilgili her şeyi test etmeye başladım.
Aynı sorun her yerde belirdi.
Tüm müşteriler etkilendi.
Adım adım hata ayıkladım.
Kodum temiz görünüyordu.
Şüpheli bir şey yoktu.
Ta ki bir şeyi fark edene kadar.
Gerçek sorun
Gerçek sorun
Bir sınıfın en üst kısmında garip bir satır vardı.
O önbellek kütüphanesinden bir import.
Denemek için, hiç bir umudum olmadan, onu kaldırdım.
Yükleme süresi 100ms‘ye düştü.
Ekrana birkaç saniye dalıp kaldım.
O kütüphane ne yapıyordu
O kütüphane ne yapıyordu
Kütüphane şunları yapıyordu:
- Redis’i tamamen temizliyordu
- Önbelleği yeniden oluşturuyordu
- Bunu veritabanındaki tüm satırlar için yapıyordu
Her bir dosya yüklemesi sırasında.
Evet.
Her seferinde.
Zafer
Zafer
Patronumu aradım ve dedim ki:
“Sorunu çözdüm. Bir şeker ya da en azından bir çikolata hak ettim.”
Hiçbir zaman piyango kazanmadım ya da bir gacha oyununda şanslı olmadım ama bu hatayı bulmanın hissi, bunun en yakın deneyimi oldu.
Son düşünceler
Son düşünceler
Bunun beceriden mi yoksa saf şanstan mı olduğu hakkında bir fikrim yok, muhtemelen her ikisi de.
Ama bir şey kesin:
- README’yi okuyun
- Hataları okuyun
- Bir kütüphanenin ne yaptığını anlayın
- Üretime benzer ortamlarda test edin
Okuduğunuz için teşekkürler.
Benim için bunu paylaşmak bir onurdur.
Ve unutmayın: düşündüğünüzden çok daha fazlasını yapabilirsiniz.
Kaynak: Orijinal Makale


