Excalibur Clan’ın en önemli özelliklerinden biri, okuyucularına, basit bir Google araması ile bulabileceğinden çok daha fazlasını vermeye çalışmak… Bu nedenle, oyunlara sadece “tüketici” olarak değil, geleceğin “potansiyel üreticileri” perspektifinden de bakmaya çalışarak, değer taşıyan içerikler üretmek ve paylaşmak istiyoruz. Bu bakış açısıyla, rekabetçi oyunlarda altyapı konusuna daha yakından bakıyoruz. Bir stüdyonun üretim standartlarında, rekabetçi bir oyun için en önemli ve zorlu görevlerden biri olan “Ölçeklenebilirlik (Scalability)” meselesini gündeme getirmek istedik. Gelin, soru cevap formatında, merak ettiklerinizi bir bir yanıtlayalım.

Ölçeklenebilirlik (Scalability) Nedir?

Bir oyunun aktif oyuncu sayısı veya “oyuncu veri tabanı” büyüdükçe, oyunun doğru çalışmaya devam etmesidir. Yani hem oyuncu hem de geliştirici perspektifinden, oyunun beklendiği biçimde ve kararlı şekilde davranmasına “ölçeklenebilirlik” denir. Büyük stüdyoların geliştirdiği rekabetçi oyunların ekiplerinde, “ölçeklenebilirlik” ve “test yükü” başlıklarından sorumlu gruplar vardır; bunlar oyunun ölçeklenebilirliğini temin etmekle görevlidir. Ayrıca sorunları hızlı şekilde tespit etmek ve düzeltmek için gereken süre boyunca “takip”ten de sorumludur.

Dev bir oyuncu veri tabanına ulaşması beklenen rekabetçi oyunlar geliştirilirken, ilk günden itibaren bu beklentiye göre planlama yapılır. Geliştirmenin her aşamasında “yük testi” adı verilen, simülasyon ve senaryolar gerçekleştirilir. Örneğin, daha beta aşamasına bile çıkmamış bir oyun için, aynı anda 2 milyon oyuncunun dünyanın farklı bölgelerinden bir servera bağlandığı test senaryoları vardır. Oyunun, istemcinin ve serverın bu senaryoya nasıl tepki verdiği ölçülür; aynı zamanda sonuçlara göre gerekli iyileştirmeler yapılır.

Rekabetçi Oyunlarda Nasıl Bir Altyapı Var?

Her oyunun farklı bir altyapısı vardır. Fakat modern prensiplerde, milyonlarca oyuncunun benzer şartlarda rekabet edebilmesi için, rekabetçi oyunlarda altyapı iki ayaktadır:

A) İşletilebilir Oyun Sunucusu
B) Platform

Oyun sunucusunun temel fonksiyonu, oyunun tüm fizik kuralları, envanteri ve malzemeleri ile çalıştırılması ve gerçekleşen karşılaşmaların her bir karede doğru ve kararlı şekilde işlemesini sağlamaktır. Pek çok modern oyun, oynanan her maçı, ayrı bir “sunucu” mantığıyla işleterek, milyonlarca tekil sunucunun aynı anda ve doğru şekilde çalıştırılabilmesi prensibini temel alır. Bu dev operasyonun, yüksek hesaplama gereksinimlerinin optimize edilebilmesi için, elbette birçok farklı unsur devreye girer; fakat temel olarak, bir CPU çekirdeği başına en fazla maçı “işletebilen” oyun optimizasyonunu sağlamak amaçlanmaktadır.

Platformlar ise, oyunların farklı “hizmetlerini”, mikro yapılar halinde ele alan ve düzenleyen ana unsurdur. Örneğin;

Seviyeye göre oyuncu eşleştirme,
Ekipman ve özellik seçimleri,
Karakter seçimi,
Ping’e dayalı olarak veri merkezleriyle eşleşmeleri sağlama,
Oyun bittiğinde, oyun sonuçlarının işlenmesi ve saklanması,
Oyun sonucunda elde edilen kazanımların hesaplanması ve profile işlenmesi,
Mağaza satın alımları gibi…

Bu platform hizmetleri, oyun serverları üzerinde bir araya gelerek bütünleşik yapıyı, kısaca “oyunun kendisini” oluşturur.

Platformlar Nasıl Çalışır?

Her biri kendi işlevsel görevlerini üstlenen bu “mikro platformlar”ı, yalnızca kendi özellikleri üzerine çalışan “kapsül programlar” olarak düşünebiliriz. Örneğin “kişiselleştirme” platformu, sadece oyuncuların hâlihazırda sahip olduğu silah görünümlerini, spreyleri ve konfigürasyonlarını kaydeder ve yönetir.

Bazı özelliklerin, birbirleriyle iletişim kurması için birkaç mikro hizmetin daha çalışması gerekir.

Örnek:

SEVİYE DERECELENDİRME PLATFORMU VE EŞLEŞTİRME PLATFORMU BİRBİRİNDEN BİLGİ İSTİYOR:

Bir grup oyucu, genellikle “ranked” olarak bildiğimiz, dereceli oyun oynamak istediğinde, “eşleştirme platformu devreye girer”. Ve önce “seviye derecelendirme platformundan” bu partideki oyuncular hakkında bilgi ister:

“Bu partideki oyuncular, rekabetçi bir maç oynamak için izin verilen sıra dağılımı içinde mi?”

Eğer öyleyse, eşleştirme platformuna veri aktararak, bu partiyi rekabet kuyruğuna eklemesini isteyecektir.

Eskiden, yani MOBA olarak bildiğimiz rekabetçi oyunların ilk dönemlerinde, “oyun”; her şeyi tek yerde ve aynı anda yapmaya çalışan dev ve yekpare bir sistemdi. Pek çok geliştirici, MOBA klonlarını tasarlarken bu mantığı kullanıyordu. Bu nedenle, pek çok oyunda bir servis çöktüğü zaman, oyunun neredeyse tamamını etkiler. Ve milyonlarca oyuncu, kendileri/bölgeleri ile hiç ilgisi olmayan bir hatadan ötürü oyunu oynamaktan mahrum kalıyordu. “Monolitik mimari” denen bu yöntem, geliştirme açısından çok daha hızlı ve basit bir yöntemdi; ama oyun büyüdükçe, katlanılması ve yönetilmesi imkânsız bir bedelle birlikte geliyordu.

Monolitik mimarilerde alt sistemleri bağımsız platformlar olarak ölçeklendirmek için yeterli esneklik yoktur. Alt sistemler, ana yapıdan bağımsız platformlar olarak oluşturulamaz, test edilemez ve dağıtılamaz. O dönemde Riot Games gibi dev oyun şirketlerinin, League of Legends’ın ilk dönemlerinde edindiği benzersiz tecrübeler, “bağımsız platform” yapısının gerekliliğini ortaya koyarak, oyun geliştiricilerin “mikro platformlar” modelini benimsemesini sağladı. Bugün monolitik bir mimariyi tercih eden bazı Battle Royale oyunlarla, VALORANT gibi esnek ve parçalı bir mimariye sahip oyunlar arasındaki teknik farkı, oyuncu olarak dahi çok açık şekilde görebiliyoruz.

Oyunların Doğru Çalışıp Çalışmadığı Nasıl Test Edilir?

Oyuncuların ve oyunun doğal gereksinimleri gereği, bazı mikro hizmetler daha çok çalıştırılırır. Ek olarak yükü dağıtmak için diğerlerinden daha fazla sayıda istek gerektirir. Örneğin, oyuncuların birlikte oynamasını sağlayan “parti oluşturma” hizmeti; çok sayıda farklı senaryo için, pek çok durumda mağaza, ilgili hizmetten daha fazla kullanılır.

Bu hizmetlerin doğru şekilde çalıştığının test edilebilmesi için, karmaşık senaryolar oluşturulur. “Test yükü” denen veri akışlarıyla, kapsamlı testler yürütülür. Oyuncuların eylemleri, hizmetler arasında karmaşık çağrı zincirleri gerektirebileceğinden, her bir hizmeti, tek başına test etmek, platformun bir bütün olarak çeşitli oyuncu isteklerinin oluşturduğu yükün üstesinden gelebileceğini kanıtlamak için yeterli değildir. Platformun gerçek oyuncuların yükünü kaldırabileceğinden emin olmanın tek yolu, onu gerçek oyuncu istekleriyle bütünsel olarak test etmektir.

Milyonlarca oyuncunun katıldığı beta testleri, geliştiriciler için biraz maliyetlidir. Bunun için günümüzde bu süreçler yoğun olarak “test simülasyonları” aracılığıyla yürür; yani gerçek oyuncuların davranışlarını taklit eden sanal oyuncuların eylem ve verileriyle.

Bu konuya ilgi duyan okuyucularımız için, bir sonraki yazımızda şu soruları yanıtlayacağız:

  • Yük Testleri Nasıl Yapılır?
  • Testlerden Elde Edilen Sonuçlarla Geliştirme Nasıl Sürdürülür?
  • Sanal Oyuncuların Davranışları, Sanal Server’lar Üzerinde Nasıl Test Edilir?
  • Oyunların Doğru Çalıştığından ve Doğru Ölçeklendirme Yapıldığından Nasıl Emin Olunur?
  • Rekabetçi Oyunlarında Veri Tabanı Nasıl Ölçeklendirilir?

Rekabetçi oyunlarda altyapı yazımızı okudunuz. Daha fazla bilgilendirici içerik için Clan’ı takip etmeyi unutmayın.