Postmortem: Cloudflare Sıkıştırma Kuralıyla API'yi Nasıl Çökerttim?

2025-08-15 4 dk

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

  1. SSE Bilgisi Eksikliği: Sıkıştırmanın streaming'i nasıl etkilediğini anlamadık
  2. Eksik Doğrulama: Kural değişikliklerinden sonra gerçek zamanlı özellikler test edilmedi
  3. 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

  1. Önce araştır - Sıkıştırmanın streaming protokollerini nasıl etkilediğini anla
  2. Streaming'i test et - Değişikliklerden sonra her zaman gerçek zamanlı özellikleri doğrula
  3. SSE sağlığını izle - Uygun streaming izleme uygula
  4. Protokolleri belgele - Protokol özel değişiklik kılavuzları oluştur