GitHub, 17 Ağustos'ta milyonlarca geliştiriciyi etkileyen ve yaklaşık sekiz saat süren büyük kesintinin nedenini açıkladı. Şirketin yayımladığı teknik incelemeye göre sorun tek bir arızadan kaynaklanmadı. Yoğun trafikle başlayan problem, yük dengeleme ve otomatik ölçeklendirme sistemlerindeki aksaklıklarla büyüdü. Tekrar deneme mekanizmaları da sunucular üzerindeki yükü artırdı.
Kesintinin en yoğun döneminde GitHub'ın web sitesi ve API hizmetlerinde hata oranı yüzde 20 seviyesine çıktı. Arşiv ve ham dosya indirmelerinde ise bu oran yaklaşık yüzde 50'yi gördü.
GitHub hizmetlerinin büyük bölümü yaklaşık üç saat içinde normale döndü. Ancak GitHub Actions ve Copilot Token Service tarafındaki sorunlar daha uzun sürdü. Toplamda yaklaşık sekiz saat boyunca GitHub.com, Issues, Pull Requests, API'ler, Actions, Copilot ve bazı kimlik doğrulama hizmetleri kesintiden etkilendi.
Sorun yoğun trafikle başladı
GitHub'ın açıklamasına göre olay, şirketin ABD'nin merkez bölgesindeki veri merkezinde başladı. Trafiğin yeni bir zirveye ulaşmasıyla yük dengeleyiciler kapasite sınırına yaklaştı.
Sistemde kullanılan bir Istio bileşeni eş zamanlı bağlantı sınırına ulaştı. Ancak otomatik ölçeklendirme sistemi bu duruma gerektiği gibi tepki vermedi. Bunun nedeni, ölçeklendirme politikasının ana hizmeti takip etmesi ancak Istio bileşeninin kendi kapasite sınırını hesaba katmamasıydı.
Bu sorun kısa sürede başka sistemlere yayıldı. Dört HAProxy sunucusu bağlantı kapasitesini doldurdu. Bu sunucular GitHub'ın kimlik doğrulama sürecinde görev aldığı için kullanıcıların giriş ve doğrulama istekleri yavaşlamaya veya tamamen başarısız olmaya başladı.
Tekrar denemeler sunucuların yükünü daha da artırdı
GitHub'ın başarısız istekleri yeniden gönderen sistemi, sorunu çözmek yerine büyüttü. Başarısız bağlantılar tekrar denendikçe zaten yoğun çalışan yük dengeleyicilere daha fazla istek gitmeye başladı.
GitHub bunun üzerine trafiğin bir bölümünü Kuzey Virginia bölgesine yönlendirdi. Ancak burada başka bir sorun ortaya çıktı.
Bir şirket içi hizmetten gelen gecikmeli yanıtlar, VS Code'da daha önce fark edilmeyen bir tekrar deneme hatasını tetikledi. Bunun sonucunda Copilot için gönderilen kimlik doğrulama isteklerinin sayısı kısa sürede katlandı.
Copilot trafiği saniyede 100 bin isteğe çıktı
Copilot Token Service normal şartlarda saniyede yaklaşık 7 bin ila 9 bin istek işliyor. Kesinti sırasında bu sayı saniyede 70 bin ila 100 bin seviyesine çıktı.
Bazı başarısız istekler tekrar gönderildi ve kimi durumlarda sistem sürekli tekrar deneyen döngülere girdi. Böylece ilk arızanın oluşturduğu yük çok daha büyük bir trafik sorununa dönüştü.
GitHub, sistemi normale döndürmek için ağ geçidindeki tekrar denemeleri azalttı. Şirket ayrıca bazı token isteklerini geçici olarak HTTP 403 yanıtıyla engelledi ve ardından trafiği kontrollü şekilde yeniden açtı.
GitHub altyapısında değişiklik yapacak
GitHub, benzer bir olayın tekrar yaşanmaması için bir dizi değişiklik planlıyor. Şirket otomatik ölçeklendirme politikalarını düzeltecek ve Istio bileşenlerinin kapasite sınırlarını yeniden inceleyecek. Ayrıca başarısız bağlantılarda kullanılan tekrar deneme yöntemlerini gözden geçirecek.
Ekip, VS Code'da Copilot isteklerinin kontrolden çıkmasına yol açan hatayı da düzeltecek. Yük dengeleyicilerin takibi ve veri merkezleri arasındaki trafik aktarımı için kullanılan güvenlik önlemleri de yeniden ele alınacak.
GitHub son aylarda farklı erişim ve performans sorunlarıyla gündeme gelmişti. Şirket daha önce yapay zekâ destekli kodlama araçlarının hızla yaygınlaşmasının altyapı üzerindeki yükü artırdığını açıklamıştı. GitHub bu nedenle yeni özelliklerden önce sistem kapasitesi ve hizmet sürekliliğine ağırlık vereceğini belirtmişti.
GitHub’da iç repo krizi: Binlerce kod deposu sızmış olabilirGüncel