Selamlar,
Tam olarak yapmak istediğiniz bu mu emin olamadım ama;
Load balancer kullanarak, milyonlarca connection'i arka taraftaki sunucu veya sunuculara dağıtırken one pipe ve benzeri future'lar ile (bunlar LB'nin future'i'dir) daha az connectionlara düşürebilirsiniz.
Örn; 200.000 connection, LB'nin arka tarafındaki bir sql, web, vb.. sunucu veya sunuculara, bir pipe içerisinden 1000 connection'muş gibi gönderebilirsiniz.
Bu tür senaryolarda ve connection sayısı falzla olduğu durumlarda tek sunucu hiçbir zaman performans sağlamaz, LB'nin arkasına en az 2 veya daha fazla sunucu konumlandırmak daha performanslı olacaktır.
En ince ayrıntısına kadar yazarak anlatmak malesef mümkün değil çünkü çok dağınık yazmışsınız ve sorular tam belli bile değil. Anladığım kadarıyla anlatayım araştırmanız gerekenleri.
Dağıtık yapıda çalışacak bir oyun istiyorsunuz ve C# ile yazmışsınız buraya kadar güzel ancak eğer siz oyunu o dağıtık yapıda çalışacak şekilde yazmadıysanız binlerce sunucu da olsa tek sunucu da olsa bir şey fark etmeyecek. Öncelikle araştırmanız gereken konu "parallel programming for cluster systems". Oyundaki session nasıl sunucular arasında dağıtılır, veritabanını ve datayı nasıl tekilleştirebilirim gibi konular da ikinci aşama.
Bir diğer yol ise hiç bir şeyi tekilleştirmeden ayrı ayrı sunucularda yolunuza devam etmek. 10 tane sunucunuz olur oyunu oynamak isteyen her kişi o an müsait olan sunucuya yönlendirilir. Counter-strike oynarken sunucu seçebilmeniz gibi bir mantık yani. Bunun için yapılması gereken de bu online yönlendirmeyi yapacak ayrı bir yazılım yapmanız. Ancak dediğim gibi farklı sunucular olur ve session sadece o sunucudaki oyuncular arasında paylaşılır.
Yani kısaca tekrar toplamak gerekirse o yazdığınız oyun ben bunları sunucuya atayım da 20 30 sunucu birbiri ile çalışsın gibi bir mantık yok bu dağıtımı sizin yazılımınız yapmak zorunda. Altyapı araştırmasından önce bunu çözmeniz gerekir.
Tekrardan Merhabalar,
Öncelikle gameserver yazılımı tek pc üzerinden çalışacak şekilde tasarlandı. Amacım master server - child server mantığı ile dağıtım yapmak. Şöyle söyleyeyim, 1 ader mssql sunucusu 100 adet de gameserver yazılımı olsun. Her sunucu 15k kişi kaldırsın. Ben 100 sunucunun hepsine tek tek gameserver kurup, ve eğer suunucu dolu ise başka sunucuya göndermek için diğer 99 adet sunucunun ip adresini girmem gerekir. Ve bunu hepsine tek tek yaptığımızı varsayarsak, ve server side güncelleme yaparsam hepsine bağlanıp tek tek .exe değiştirmem gerekecek. Bu da hiç akıl kârı değil.
Dediğiniz gibi yönlendirici bir server yazılım bütün makinelerin ip adresini yazarım, boş olana yönlendirir ama bunu yapmak için üstteki gibi her sunucuda .exe çalışması gerekli. Ayrıca master-server ddos yerse diğer sunucularda yalan olur.
m.agar.io/fullInfo
Mesela agar.io da tek master-server kullanılmış ve loadbalancing yapılmış. Adam reddit'de yazmıştı. Yani tek .exe ile 1 milyon user alabiliyor. DDOS yese bile etkilenmez. Ama anlamadığım master-server ddos yerse veya ip adresi bulunursa gene yalan olacak.
Dağılım yapmak vs. sorun olmaz yapabilirim de benim isteğim tek .exe ile milyon kişi kaldırabilmesi. Hepsine gameserver kurarak yaparsam zaten sıkıntı yok o kolay iş fakat çok uzun ve hammallık yolu.
Konu hakkında çok bilgim olmadığı için dağınık gibi durmuş olabilir kusura bakmayın, eminim siz anlıyorsunuzdur ne istediğimi.
Tekrardan teşekkür ediyorum...