GitHub, son hizmet kesintilerinin birincil veritabanı kümelerindeki kaynak çekişme sorunlarından kaynaklandığını söylüyor.
Geçen haftadan bu yana GitHub, 16 Mart, 17 Mart, 22 Mart ve 23 Mart’ta bu sorunlardan kaynaklanan dört hizmet kesintisi olduğunu söylüyor.
Bugün GitHub, bu kesintilerin, ‘MySQL1’ adlı birincil MySQL kümeleriyle ilgili “kaynak çekişmesi” sorunlarından kaynaklandığını açıkladı.
“Son birkaç haftadaki sorunlarımızın altında yatan tema, çalışma alanımızdaki kaynak çekişmesinden kaynaklanıyordu. mysql1
Yoğun yük dönemlerinde çok sayıda hizmetimizin ve özelliğimizin performansını etkileyen küme”, kesintilerle ilgili bir GitHub gönderisini açıklıyor.
Kaynak çekişmesi, bellek, CPU veya disk kullanımı veya hatta bir veritabanı tablosuna erişim olsun, aynı kaynaklar için birden çok işlemin/isteğin rekabet etmesidir.
Yeterli kaynak olmadığında, bir veritabanı sorguları o kadar hızlı bitiremez, bu da tabloların kilitlenmesine ve sorguların tamamlanmasını beklerken veritabanı bağlantılarının hızla birikmesine neden olur.
İstek yığıldığında, sunucu sonunda işlemek üzere yapılandırıldığı maksimum bağlantı sayısına ulaşır ve daha fazlası için yer kalana kadar tüm diğer istekleri reddeder.
Bu, veritabanına erişim gerektiren tüm hizmetlerin başarısız olmasına neden olur.
16 Mart’tan bu yana dört servis kesintisi
GitHub, 16 Mart, 17 Mart, 22 Mart ve 23 Mart tarihlerinde olmak üzere bu sorunlardan kaynaklanan dört hizmet kesintisi olduğunu söylüyor.
16 Mart’ta GitHub, yoğun saatlerde artan yük ve maksimum bağlantıların dolmasına ve veritabanına tüm yazma işlemlerinin başarısız olmasına neden olan kötü yazılmış sorgular gördü.
GitHub, “Git işlemleri, web kancaları, çekme istekleri, API istekleri, sorunlar, GitHub Paketleri, GitHub Kod Alanları, GitHub Eylemleri ve GitHub Sayfaları hizmetleri dahil olmak üzere tüm yazma işlemleri bu kesinti sırasında çalışamadı” diye açıklıyor GitHub Blog yazısı.
Bir sonraki kesinti, zayıf sorgu performansını çözemeden önce benzer sorunları gördükleri 17 Mart’tı. Diğer sunuculara yük devrettikten sonra, bir kez daha maksimum bağlantılarına hızla ulaştılar.
22 Mart’ta GitHub, sorgu performansı için hafifletici önlemler uyguladıklarını, ancak bunları analiz etmeye devam ettiklerini ve veritabanı proxy’lerinde bellek profili oluşturmayı etkinleştirdiklerini söylüyor. Bu bir kez daha maksimum bağlantılara ulaşılmasına neden oldu.
Son olarak, 23 Mart’ta bir kez daha artan yükün istemci bağlantılarının başarısız olmasına neden olduğunu gördüler. Bu sorunları çözmek için GitHub, sunucularındaki yükü azaltmak için web kancası trafiğini kısmaya karar verdi.
Gelecekte bu tür kesintileri önlemek için GitHub, sistemlerini yoğun saatlerde denetlediklerini ve sonuçlara göre performans düzeltmeleri oluşturacaklarını belirtiyor.
Ayrıca yükü azaltmak için trafiği diğer veritabanlarına yeniden yönlendiriyorlar ve performansı artırmak için altyapıyı ve parçalamayı artırıyorlar.
Veritabanı parçalama, büyük veritabanı tablolarının daha sonra birden çok sunucuda depolanabilecek birden çok tabloya bölünmesidir. Çok kullanılan ve büyük bir veritabanını farklı sunuculardaki birden çok daha küçük veritabanına bölerek performansı artırabilir ve yoğun sorguların tabloyu kilitlemesini önleyebilir.
GitHub, bundan sonra daha detaylı bilgileri paylaşacaklarını belirtiyor. Kullanılabilirlik Raporu gelecekte bu tür kesintileri önlemek için ne yaptıkları hakkında.