Fortnite

Oyun Alanı SSM’de Ne Oldu

18.07.2018
Yazar: Fortnite Ekibi
Selam dostlar,

Oyun Alanı SSM’yi 27 Haziran sabahı saat 11 gibi sizlere sunduk. Hemen ardından da hem Oyun Alanı’nda hem de varsayılan modlardaki Eşleştirme Sistemi’ne aşırı yüklenildi.  Servisi arzuladığımız noktaya getirerek sorunu çözmemizin ardından 3 Temmuz sabahı modu tekrar sunabildik.

Neler oldu?
Karşılaşmalar, Eşleştirme Servisi adı verilen bir hizmet üzerine kurulu. Bu servis sayesinde oyun arayanlar birbirleriyle eşleştiriliyor ve uygun bir sunucuya yerleştiriliyor.  Eşleştirme öbeğindeki her düğümde açık ve uygun sunuculardan oluşan büyük bir liste bulunuyor. Farklı bölgelerdeki uygun sunucu sayısının orantılı olması için bu sunucular bölgeye bağlı olarak düğümlere rastgele dağıtılıyor.  Eşleştirme Servisi’ne bağlanan oyuncular kendi bölgeleri için sunucu isteğinde bulunuyor ve Eşleştirme Servisi oyuncuyu bir düğüme atıyor. Bu düğüm de kendi listesinden bölgeye uygun sunucu seçiyor.

Oyun Alanı modu, 100 oyuncu yerine 1 ila 4 oyuncuyla da oynanabildiğinden ekip büyüklüğü düşünüldüğünde, normal oyun modlarından 25-100 kat daha fazla maç başlatıyor.  Oyun Alanı modunda sanal sunucuları her fiziksel CPU için daha sıkı gruplasak da her halükarda diğer oyun modlarına kıyasla 15 kat daha fazla sunucuya ihtiyacımız olacaktı.  Toplam sunucu kapasitesini sağlamayı başardık fakat bu durumda her düğüme düşen sunucu sayısı da 15 kat artıyordu.

Eşleştirme Servisi düğümü, istenilen bölgede kendi listesinden bir sunucu bulamadığında diğer tüm düğümlerle iletişime geçerek onların yerel listesinden boş bir sunucu bulmak zorundaydı.  Düğümlerin listesi aniden 15 kat uzayınca haliyle çalışmaları da yavaşlıyor.  Diğer düğüm listelerinin de 15 kat daha uzun olduğunu hesaba katarsak her düğüm kontrolünde 15 kat yavaşlama oluyor. Böylece işlem büyüklüğü artıyor ve süreç uzadıkça uzuyor.  Oyun Alanı çıktığında, Eşleştirme Servisi düğümleri gösterilen ilgiye dayanamadı ve yenilenme hızını aşan hızda oyun arama istekleri aldı.  Her düğüm, komşu düğümlere fazladan uygun sunucuları var mı diye sormaya başladı fakat yerel listelerden bunları bulmak çok uzun sürüyordu. Hatta bazen boş sunucu olmadığı bile oluyordu.  Uzun süreli işlemler, CPU’yu yorarak arka planda pek çok işlem biriktirdi ve durumu bitmek bilmez bir döngüye sokarak nihayetinde sistemi durmaya zorladı.

Çözmek için neler yaptık?
Modu durdurduktan hemen sonra, Oyun Alanı SSM’yi diğerlerinden ayırarak kendi özel servis öbeğinde çalıştırdık.  Bu yaklaşım hem temel oyun modlarını sıkıştıran trafiği açmak için hem de Oyun Alanı’nı tekrar sunduğumuzda yapmak istediğimiz ufak tefek değişikliklere yer açmak adına hayatiydi. Modu tekrar sunmadan önce, yeniden inşa seviyesini yükselterek her bölümde belli kabul seviyesine ulaşana dek denemeler yaptık.

Sorunun yerel listelerin boğulmasından kaynaklandığını belirlediğimizde, çözümün öbeğe denge getirerek diğer düğümlerdeki kontrollerini tekrar etmemesini sağlamakta yattığını fark ettik.  Bir düğümün kendi listesinden sunucu bulamayıp diğerlerine yönelmesi, sistemin düğümlerdeki bölge kapasitesini sürekli değiştirmesiyle büyük ölçüde düşürüldü.  Henüz temel Fortnite Battle Royale modlarında böyle bir sorun olmasa da durumu garantiye almak adına ana Eşleştirme Servisi öbeğine de bu değişikliği getireceğiz.

Eşleştirme Servisi düzenlemesinde test sürecini sınırlarına kadar zorladık; çünkü denemeye çalıştığımız durum normal kullanımın çok daha üstünde bir yoğunluğa denk geliyordu.  Yeni dengeyi test etmek için milyonlarca kullanıcı Oyun Alanı Eşleştirme Servisi’ne girip sistemi çökmeye zorlamış gibi davranmamız gerekiyordu.  Her döngü için birkaç saat süren ayarlamalarımızın trafiğe karşı durabilmesini sağlamalıydık. Ayrıca Oyun Alanı’nı tekrar sunmamızın önünde duran inanılmaz yoğunluktaki çökmeleri de tanımlamamız gerekti.

Neler öğrendik?
Kısacası kendi eşleştirme sistemimizin başarısız noktalarıyla ilgili yeni şeyler keşfettik.  Oyuncu kitlemizi hesaba katarak azami eşleştirme sistemi ve kapasitesini planlayıp hazırladık. Fakat oyuncuların yoğun ilgisinin yerel listeleri bu kadar boğacağını düşünmemiştik.

Modu tekrar sunduğumuzda ek bilgiler elde ettik.  Oyun Alanı’nı küçük adımlarla, önce belli bölge ve platformlara getirerek sistemdeki yükü azaltmak ve yoğunluğu zamanla çözmek asıl amacımızdı.  Biz kapasite sorunlarıyla uğraşırken modun yeniden sunulduğu bölgelere geçiş yapan oyunculardan aslında bunu yapmamalarını rica etmiştik.  Olayın iyi yanı ise, Asya’daki bulut kaynaklarımıza dair sağlam gözlemler yapabildik. Hızlıca adapte olabilmemizi sağlayan bulut çalışanlarımıza da teşekkür etmeyi ihmal etmiyoruz!

Oyun Alanı’nı istikrarlı bir hale getirmek düşündüğümüzden daha zor oldu ancak karmaşık dağıtım sistemlerinin beklenmedik çökmelerine dair gözümüzü açtı.  Eşleştirme Servisi’ne önemli ve acil güncellemeler getirmek zorunda kaldık. Ama bu güncellemeler gelecekte oyuncu sayımız arttıkça bizlere çok büyük fayda sağlayacak.