← Radar

Konu: Altyapı2 dk okuma

GitHub neden 8 saat çöktü? Tekrar deneme fırtınası

Bu neden önemli?

Sen de bir sunucuya istek atan kod yazıyorsan, hata olunca ne yaptığın önemli. Yanlış kurulmuş bir 'tekrar dene' mantığı, küçük bir sorunu dev bir kesintiye çevirebilir.

Syntax’ın bu haftalık haber bölümünde konuşulan konulardan biri, GitHub’ın büyük kesintisi ve ardından yayımladığı rapordu. Milyonlarca yazılımcının kodu GitHub’da duruyor. O yüzden GitHub durunca dünyanın yarısı da duruyor.

Ne oldu?

GitHub’ın teknoloji direktörü Vlad Fedorov’un 20 Ağustos’ta yayımladığı rapora göre:

  • Kesinti 17 Ağustos’ta 7 saat 47 dakika sürdü.
  • Web sitesi, giriş yapma (kimlik doğrulama), GitHub Actions, API’ler, pull request’ler, issue’lar ve Copilot etkilendi.
  • Sorun, ABD’deki bir veri merkezinde kritik bir altyapı parçasının yoğun trafikte yeterince büyüyememesiyle başladı. Bir kod hatası değil, bir kapasite sorunuydu.
  • Bu baskı diğer sistemlere yayıldı ve giriş işlemleri hata vermeye başladı. Buna zincirleme arıza (cascading failure) deniyor: Bir parça düşünce ona bağlı olanlar da düşüyor.

Kurtarmayı zorlaştıran şey: tekrar deneme fırtınası

Raporun en öğretici kısmı burası. Servisler hata verince, istemci tarafındaki kodlar isteklerini otomatik olarak tekrar denedi. Bu da sistem toparlanmaya çalışırken trafiği daha da artırdı.

Bunu şöyle düşün: Bir dükkânın kapısı sıkıştı. İçeri giremeyen yüz kişi her saniye kapıyı yeniden itiyor. Kapıyı tamir etmeye çalışan görevli, bu kalabalık yüzünden kapıya yaklaşamıyor bile. Buna tekrar deneme fırtınası (retry storm) deniyor.

GitHub ne yapacağını söylüyor?

  • Servisler arasında tutarlı tekrar deneme sınırları ve tekrar deneme bütçesi (retry budget) kullanmak. Yani belli bir süre içinde en fazla ne kadar tekrar denenebileceğine üst sınır koymak.
  • Zaman aşımı sürelerini değişken yapmak, böylece herkesin aynı anda yeniden denemesini önlemek.
  • Kritik sistemleri birbirinden ayırmak ve ortak bağımlılıkları azaltmak. Böylece bir parça düşünce her şey düşmüyor.
  • Kapasiteyi artırmak: Şirkete göre platform yükünün %58’i artık Microsoft’un Azure bulutunda çalışıyor.

Sonrasını, yani GitHub’ın Git altyapısını ajan trafiğine göre nasıl değiştirdiğini GitHub Universe 2026 yazısında anlattık.

Kendi kodunda ne öğrenebilirsin?

Bir API’ye istek atıp hata aldığında hemen, sonsuza kadar tekrar deneme. Yaygın iyi uygulamalar:

  • Üstel bekleme (exponential backoff): Her denemede bekleme süresini artır. 1 saniye, 2 saniye, 4 saniye…
  • Rastgelelik ekle (jitter): Bekleme süresine biraz rastgelelik kat. Böylece binlerce istemci aynı anda geri dönmez.
  • Bir sınır koy: Birkaç denemeden sonra vazgeç ve kullanıcıya düzgün bir hata göster.

Kesintilerden sonra kendi Git sunucusunu kurmayı düşünenlerin bilmesi gerekenleri GitLab ve Gitea yazısında anlattık.

Düşün

  • Yazdığın bir uygulamada internet bağlantısı kesilince ne oluyor? Uygulaman sunucuyu “boğuyor” mu?
  • Tek bir şirkete (GitHub gibi) bu kadar bağlı olmak bir risk mi? Kodun başka bir yerde de yedeği olmalı mı?

Videoyu izle

Tıklayınca video YouTube'dan yüklenir; o ana kadar bu sayfa YouTube'a hiçbir istek göndermez.
Kaynaklar (2, İngilizce)

Kendi cümlelerimizle yazılmış bir özettir, çeviri değildir. Tüm kaynaklar yukarıda.

Konu: Altyapı3 dkVideo: Computerphile

Bilgisayar saati nereden bilir? Duvar saati, monoton saat ve CPU zamanı

Bilgisayarın 'saat kaç?' sorusunu cevaplaması sanıldığı kadar basit değil. Computerphile'da Matt Godbolt, işlemcinin içindeki sayacın nasıl saate çevrildiğini, Linux'un bunu sistem çağrısı yapmadan nasıl okuttuğunu ve nanosaniye ölçerken işlemcinin seni nasıl yanıltabileceğini anlatıyor.