Postmortem: Cloudflare Sıkıştırma Kuralıyla API'yi Nasıl Çökerttim?
Bazen en değerli dersler en büyük hatalarımızdan gelir. Bu, tek bir yanlış yapılandırılmış Cloudflare sıkıştırma kuralının SSE streaming'imizi nasıl bozduğu ve tüm bir API'yi birkaç saat boyunca çökerttiği hikayesi.
Olay
Tarih: 15 Ağustos 2025
Süre: 4 saat 23 dakika
Etki: %~20 API kesintisi, 15,000+ etkilenen kullanıcı
Ana Neden: Cloudflare Sıkıştırma Kuralının SSE Streaming'i Bozması
Ne Oldu
1. Kurulum
API endpoint'lerimiz için performans optimizasyonu üzerinde çalışıyordum. Amaç, Cloudflare'in sıkıştırma özelliklerini etkinleştirerek bant genişliği kullanımını azaltmak ve yanıt sürelerini iyileştirmekti.
2. Yapılandırma
Cloudflare sıkıştırma kuralını etkinleştirdim:
Enable Brotli and Gzip Compression
Enables Cloudflare's default compression setting. Brotli is the preferred compression algorithm.
3. Hata
Sorun hemen belli değildi. Sıkıştırma kuralı güvenli görünüyordu, ama kritik bir detayı unutmuştum: API'miz gerçek zamanlı streaming için Server-Sent Events (SSE) kullanıyordu ve Cloudflare'in sıkıştırması SSE'yi bozuyordu.
Teknik Problem
SSE Nasıl Çalışır
- SSE tek bir uzun süreli HTTP yanıtını açık tutar
- Sunucu
\n\n
ile ayrılmış veri parçalarını iter - İstemci bu parçaları geldikçe artımlı olarak işler
Cloudflare'in Sıkıştırması Ne Yapar
- Brotli ve Gzip her ikisi de sıkıştırmadan önce veriyi tamponlar
- Her küçük SSE olayını hemen geçirmek yerine, Cloudflare verimli sıkıştırma için yeterli veri birikene kadar bekler
- Bu tamponlama SSE'nin "streaming" doğasını bozar
SSE Neden Çalışmayı Durdurur
- Bağlantı açık görünebilir, ama istemci hiçbir zaman gerçek zamanlı olayları almaz
- Cloudflare sıkıştırma tamponu eksik olduğunu düşünürse akışı erken sonlandırır
- Tüm gerçek zamanlı işlevsellik tamamen bozulur
Zincirleme Başarısızlık
Dakika 0-5: Kural Aktivasyonu
- Cloudflare sıkıştırma kuralını aktifleştirdi
- Tüm SSE bağlantıları streaming yerine tamponlamaya başladı
- Gerçek zamanlı güncellemeler çalışmayı durdurdu
Dakika 5-15: Servis Bozulması
- Kullanıcılar 400 Bad Request hataları yaşamaya başladı
- Gerçek zamanlı özellikler tamamen bozuldu
- Hata oranları %100'e çıktı
Saat 1-2: Soruşturma
- Olay müdahalesi için ekip toplandı
- İlk soruşturma arka uç servislerine odaklandı
- SSE sıkıştırma sorunu gözden kaçırıldı
Saat 2-3: Keşif
- Sonunda Cloudflare panosu kontrol edildi
- Sıkıştırma kuralının etkin olduğu keşfedildi
- Kural hemen devre dışı bırakıldı
Saat 3-4: Kurtarma
- SSE streaming geri yüklendi
- Servis kademeli olarak kurtarıldı
- Gerçek zamanlı işlevsellik tekrar çalışıyor
Kök Neden Analizi
Birincil Neden
Cloudflare Sıkıştırmasının SSE'yi Bozması: Sıkıştırma kuralı, veriyi tamponladığını ve gerçek zamanlı streaming'i bozduğunu anlamadan etkinleştirildi.
Katkıda Bulunan Faktörler
- SSE Bilgisi Eksikliği: Sıkıştırmanın streaming'i nasıl etkilediğini anlamadık
- Eksik Doğrulama: Kural değişikliklerinden sonra gerçek zamanlı özellikler test edilmedi
- Zayıf İzleme: SSE sağlığı izlenmedi
Etki Değerlendirmesi
- 15,000+ kullanıcı pik saatlerde etkilendi
- 4+ saat tam servis kullanılamazlığı
- Gerçek zamanlı özellikler tamamen bozuldu
Öğrenilen Dersler
1. Protokollerinizi Anlayın
- Streaming protokollerini nasıl etkilediğini anlamadan asla sıkıştırmayı etkinleştirmeyin
- Altyapı değişikliklerinden sonra gerçek zamanlı özellikleri test edin
- SSE ve WebSocket bağlantıları özel dikkat gerektirir
2. Gerçek Zamanlı Özellikleri Test Edin
- Sıkıştırma değişikliklerinden sonra her zaman streaming işlevselliğini test edin
- SSE bağlantı sağlığını ve olay teslimini izleyin
- Altyapı değişiklikleri için staging ortamları kullanın
3. Streaming Sağlığını İzleyin
- SSE sağlık kontrolleri uygulayın
- Gerçek zamanlı olay teslimini izleyin
- Streaming başarısızlıkları için uyarılar kurun
Önleme Önlemleri
1. Otomatik Test
- Herhangi bir Cloudflare kural değişikliğinden sonra SSE işlevselliğini test edin
- Otomatik streaming sağlık kontrolleri uygulayın
- Staging'de gerçek zamanlı özellikleri doğrulayın
2. Dokümantasyon
- Protokol özel gereksinimleri belgeleyin
- Değişiklik etki kontrol listeleri oluşturun
- Geri alma prosedürlerini koruyun
3. Değişiklik Onayı
- Sıkıştırma değişiklikleri için peer review gerektirin
- Production'dan önce streaming protokollerini test edin
- Değişiklikleri düşük trafik dönemlerinde planlayın
Sonuç
Bu olay bize sıkıştırmanın her zaman faydalı olmadığını öğretti — gerçek zamanlı protokoller gibi SSE'yi bozabilir. Ana ders, altyapı değişikliklerinin özellikle streaming protokolleri olmak üzere belirli kullanım durumlarınızı nasıl etkilediğini anlamaktır.
Farklı Yapacağım Şeyler
- Önce araştır - Sıkıştırmanın streaming protokollerini nasıl etkilediğini anla
- Streaming'i test et - Değişikliklerden sonra her zaman gerçek zamanlı özellikleri doğrula
- SSE sağlığını izle - Uygun streaming izleme uygula
- Protokolleri belgele - Protokol özel değişiklik kılavuzları oluştur