2 puan yazan GN⁺ 2025-05-01 | 1 yorum | WhatsApp'ta paylaş
  • macOS için ekran kayıt uygulaması Screen Studio'nun otomatik güncelleme hatası, 250 MB'lık dosyanın her 5 dakikada bir tekrar tekrar indirilmesine yol açtı
  • Sonuç olarak Google Cloud üzerinde bir ay boyunca 2 PB (2.000.000 GB) trafik oluştu ve bu da yaklaşık 8.000 dolarlık dev bir faturaya dönüştü
  • Sebep basit bir kod eksikliğiydi: güncelleme indirildikten sonra tekrar eden istekleri durduran mantık atlanmıştı
  • Bazı kullanıcılar için internet hizmetinin iptali gibi gerçek zararlar bile ortaya çıktı ve geliştirme ekibi sorumluluğu derinden hissetti
  • Bulut maliyet uyarıları ayarlama, maliyet doğurabilecek kodları gözden geçirme, güncelleme sunucusu için kontrol mekanizmaları hazırlama gibi derslerin altı çizildi

Olayın özeti

  • Screen Studio, macOS için masaüstü ekran kayıt uygulaması ve otomatik güncelleme özelliğine sahip
  • Güncelleme dosyasının boyutu yaklaşık 250 MB ve uygulama her 5 dakikada bir sunucuyu kontrol ediyor
  • Hata nedeniyle güncelleme algılandıktan sonra bile 5 dakikalık aralıklarla yapılan istekler durmadı ve indirme sürmeye devam etti

Trajik refactor'un başlangıcı

  • Daha önce güncelleme açılır penceresi kayıt sırasında rahatsızlık veriyor ve UX sorunu yaratıyordu
  • Bunu iyileştirmeye yönelik bir refactor sırasında, güncellemeden sonra zamanlayıcıyı durduran mantık kaldırıldı
  • Sonuç olarak güncelleme dosyasını tekrar tekrar indiren mantık uygulamanın içine gömülü halde kaldı

Korkutucu bağlam: arka planda çalışır durumda

  • Kullanıcıların önemli bir bölümü uygulamayı haftalar boyunca arka planda açık şekilde kullanıyordu
  • Bu durumda binlerce örnek, her 5 dakikada bir 250 MB'ı otomatik olarak indiriyordu

Rakamlarla felaket

  • Her 5 dakikada bir indirme = günde 288 kez
  • Kullanıcı başına günlük indirme trafiği = 72 GB
  • Yaklaşık 30 gün boyunca sürdüğü ve 1.000 kullanıcı olduğu varsayılırsa:
    • 250 MB × 288 × 30 × 1.000 = yaklaşık 2 PB trafik
  • Google Cloud üzerinde oluşan tahmini ücret: yaklaşık 8.000 dolar

Zincirleme hatalar

  • Google Cloud maliyet uyarıları ayarlanmamıştı
  • Mevcut aylık ücretin 300 dolar civarında olması nedeniyle rehavete kapılındı
  • Sonunda kredi kartı limiti aşılıp işlem reddedilince sorun fark edildi

Kullanıcı zararı

  • Bir kullanıcı, bu trafik yüzünden ISP'sinden (internet servis sağlayıcısı) hizmet sözleşmesinin feshedileceğine dair bildirim aldı
  • Bölgede alternatif sağlayıcı da yoktu → bu da ciddi yaşam zorluklarına yol açtı
  • Ekip sorumluluğu kabul etti ve masrafları karşılama teklifinde bulundu; neyse ki durum dostane şekilde çözüldü
  • Ancak kullanıcıya zarar vermiş olma deneyimi, geliştiriciler üzerinde derin bir özeleştiri bıraktı

Çıkarılan derslerin özeti

  • Bulut maliyet uyarıları zorunlu
  • Otomatik güncelleme mantığı çok dikkatli yazılmalı
  • Maliyet doğurma ihtimali olan tüm kodlar özellikle gözden geçirilmeli
  • Sunucu kontrol sinyalleri (ör. zorunlu güncelleme bayrağı) tasarıma dahil edilmeli
  • Bulut kullanım durumu düzenli olarak kontrol edilmeli

1 yorum

 
GN⁺ 2025-05-01
Hacker News görüşleri
  • Gelecekte web aramasıyla bu başlığı bulacak kişiler için: screen.studio, macOS için bir ekran kaydı yazılımı ve her 5 dakikada bir güncellemeleri kontrol ediyor. Ancak bu gönderide anlatılan hata, her 5 dakikada bir 250MB'lık güncelleme dosyasını indirmesi

    • Geliştiriciler bunu tamamen normal kabul etmiş, ancak gerçek indirmeler nedeniyle 8000 dolarlık bant genişliği ücreti oluşmuş
    • Özet: Ekran kaydı yazılımı her 5 dakikada bir güncellemeleri kontrol ediyor. Bu da saatte 12 kez demek
    • Yazılımı, geliştiricinin muhakemesine ne kadar güvendiğime göre seçiyorum. Bunun makul bir karar olup olmadığını düşünün
  • Screen Studio, macOS için bir ekran kaydedici. Bir masaüstü uygulaması. En son sürümün kolayca kurulabilmesi için otomatik güncellemenin gerekli olduğunu savunuyor

    • Ancak otomatik güncelleme birçok olumsuz sonuca yol açıyor
    • Kullanıcının onayı olmadan güncellemeleri indirerek istemci tarafında trafik yaratıyor
    • İndirme her 5 dakikada bir tekrar tekrar sürüyor. Kullanıcının tarifeli bir bağlantıda olup olmadığını algılayıp algılamadığını merak ediyorum
    • Güncelleme açılır penceresinin akışı bozduğu bir hata var
    • Açılır pencerenin kendisi kullanıcı için kötü bir deneyim. Uygulama kapanırken izin istemek ve geri kalanını arka planda halletmek daha iyi olurdu
    • Bazı kullanıcılar uygulamanın giden bağlantılarını dikkatle izler ve her 5 dakikada bir güncelleme kontrolü aşırıya kaçıyor. Bunun uygulama çalışırken yapılmasına gerek yok. Açılışta kontrol edip kapanışta sormak daha iyi
    • Yukarıdaki tüm sorunlara yol açan, uygulamaya eklenen fazladan karmaşıklık. Bu da geliştiriciye maliyet çıkarıyor
    • Bu durumda App Store güncellemeleri yönetmek için mükemmel bir yöntem olabilirdi
  • Ekran kaydedici gibi kritik olmayan bir uygulamanın geliştiricisinin her 5 dakikada bir güncelleme kontrolü gerektiğini düşünmesi saçma

    • Günde bir kez fazlasıyla yeterli olurdu
  • Gerçekten her 5 dakikada bir güncelleme kontrolü gerekip gerekmediğini sorguluyorum. Açılışta bir kez yeterli olurdu ve kullanıcı uygulamayı günlerce açık bıraksa bile günde bir kez ya da daha seyrek kontrol edilebilir

  • Kod incelemeleri konusunda her zaman katıyımdır. Bir keresinde yöneticim QA'ya daha fazla bırakmamı söylediğinde, "Hepimiz işimizi kaybedebiliriz. Kötü bir satır kod yüzünden her zaman işimizi kaybedebiliriz" diye cevap vermiştim

    • Junior ya da deneyimli geliştiriciler sık sık potansiyel PII sızıntılarına yol açabilecek şeyler yazıyor. Çoğu sistemde bunun hukuki sorun çıkarma ihtimali çok yüksek
  • Binlerce kullanıcının veri tarifesinde gereksiz yere tüketilen bant genişliği meselesi

    • Bu tür dikkatsiz hatalar tüm internet kullanıcıları için tıkanıklık yaratabilir
    • Eğer bu hata 8000 dolarlık bir maliyet yerine Google Cloud'un ücretsiz katmanı ya da başka bir planla karşılanmış olsaydı, yine de bunu ciddi bir bug sayıp hızla düzeltirler miydi diye merak ediyorum
    • Ne kadar çok hatalı tasarım trafik üretip ortak kaynakları tüketiyor acaba
  • Ben Mac masaüstü uygulamaları dağıtırken:

    • Güncellemeleri yönetmek için Sparkle kullanıyorduk. Kendi güncelleyicilerini seçmeleri kötü bir tercihti
    • Uygulamamız çok karmaşıktı ve Mono ile birlikte dağıtılıyordu. Yine de yaklaşık 10MB boyutundaydı. Windows sürümü 2MB idi ve 32 bit ile 64 bit ikilileri içeriyordu. Neden 250MB'lık bir ekran kaydedici dağıttıklarını merak ediyorum
    • Görünüşe göre ders almamışlar. Tüm makale onları aptal gibi gösteriyor
  • Özette "daha iyi test"ten bahsedilmemesine şaşırdım

    • "Kodu dikkatli yazın" önerisi çok temel bir hata gibi görünüyor
    • Geliştiricilerin kullanıcı cihazlarını bir test ortamı olarak kullanması çok sinir bozucu
  • Üçüncü taraf kütüphaneleri benimseme konusunda tutucuyum (çünkü her kütüphane uzun vadede sorun çıkarma potansiyeline sahip), ama uygulama güncellemeleri buna değer

    • Bu aslında tek bir büyük edge case ve uygulamada ciddi bir hata olduğunda kurtarma planının önemli bir parçası
    • Bu hata, kendi güncelleyicilerindeki tek sorun değil. Her 5 dakikada bir kontrol etmek delilik. Bu konuyu derinlemesine düşünmediklerini gösteriyor
  • Proxy Auto-Configuration (PAC) dosyaları kullanan sansür aşma amaçlı bir proxy hizmeti işletiyorum

    • Dosyada hatalı JS varsa ya da dosya boyutu 1MB'ı aşarsa, sistem genelinde yapılandırıldığında tüm uygulamaların sunucuya durmadan istek göndermesine yol açan bir sorun ortaya çıkıyor
    • Bu da sunucuma DDoS saldırısı yapılmasına ve IP'nin BGP seviyesinde engellenmesine neden oldu
    • Bunu her gün 500.000'den fazla kullanıcı kullanıyor. Web sunucum, aylık 20 dolarlık ve sınırsız trafik sunan bir VPS üzerinde çalışıyor. Bu sayede OP ile aynı duruma düşmedim