Bunu olabildiğince basit tutmaya çalışın ve arayüzler iyi tanımlanmış ve belgelenmiştir. Üretimdeki karmaşık bir sistemi korumak ve hata ayıklamak kolayca cehenneme dönüşür. Eğer basit ve karmaşık bir yaklaşım varsa, karmaşık olana gitmeden önce iki kez düşünün.
Hizmetleri Tanımlama
İlk adımın hizmetleri ve bağımlılıklarını belirlemek olduğunu düşünüyorum : Statik İçerik, Kimlik Doğrulama, Yerel Sohbet, Küresel Sohbet Kanalları, Bölgesel Sohbet Kanalları, Arkadaş Listesi, Guilds, Çanta / Envanter, Müzayede Evi, Küresel Harita, Dünya, ...
Sonra bu hizmetlerin her biri için müşterinin doğrudan onlarla konuşup konuşmayacağına karar verdi . Örneğin, müşterinin Global Sohbet Kanallarından sorumlu sunucularla doğrudan konuşmasına izin vermek oldukça kolaydır. Dünya sunucularının sohbet mesajlarına karışması gerekmez. Bölgesel Sohbet aynı şekilde uygulanabilir, ancak oyuncular bölgeleri değiştirdiğinde dünya sunucularının sohbet sunucularına anlatması gerekir. Yine, mesajları umursamayacaklar.
Üçüncü adım, bir hizmet içindeki yük dengelemeyi düşünmektir . Örneğin, küresel ve bölgesel sohbet kanalları, adlarına göre birden fazla sunucuya bölünebilir. Muhtemelen bu bölünmeyi müşteriye zorlamak değil, bir arama hizmeti sunmak iyi bir fikirdir.
Dünya Sunucuları
En zor kısım genellikle dünya sunucuları , bu yüzden basit bir yaklaşımla başlıyorum. Muhtemelen müşterinin içinde bulunduğu bölgeden sorumlu sunucu ile doğrudan konuşmasına izin vermek iyi bir fikirdir. Bu yüzden giriş yaparken veya müşteriyi geçerken müşteriye hangi sunucuya bağlanacağı söylenmelidir.
Basit yaklaşım dünyayı bağımsız bölgelere bölmektir . Bağımsız bölgelerle, bir oyuncunun bir kısımdan diğerine bakamayacağı ve canavarların parçaları geçemediği anlamına gelir. Bu bölgeler dış dünyadaki manzaraya ve öyküye dayanarak gördükleri bölgeden farklıdır. Genellikle canavarların çoğu zindandadır ve oyuncular bir zindana girmek için bir kapıdan geçmeleri gerektiğini kabul etme eğilimindedirler. Özellikle, bu zindanlar oyuncu başına grup bazında örneklendiyse. Dış dünyadaki diğer örnekler, yüksek dağlarla çevrili farklı kıtalar ve vadilerdir.
Bir sürekli dünyanın o iyi planlamamız mantıklı yaklaşım, gerçekten hızlı karmaşık alır: Bilgi istemci ihtiyacını ne yapar? Sunucular hangi bilgileri paylaşmalıdır? Oyuncu çoğunlukla aynı bölgedeki nesnelerle (canavarlar ve NPC'ler dahil) etkileşime girecektir. Bölge sınırındaki nesneleri tıklama aralığının dışına yerleştirerek hile yapabilirsiniz. Bu, müşterinin çoğunlukla komşu bölgeler için salt okunur bilgiyle ilgilendiği anlamına gelir. Bu gibi durumlarda, bölge sunucuları, oynatıcının komşu bir bölgeye bağlanmak için yeterince yakın olup olmadığına dair izin kontrolü dışında hiçbir şeyi koordine etmek zorunda değildir.
Bu, yalnızca nesnelerin veya eylemlerin bir sunucu sınırını geçmesi gereken çok az sayıda zor durum bırakır . Bu iyi bir şey çünkü oklar ve büyü gibi durumlar performans açısından kritik öneme sahip. Mücadeleyi saldırıya ve savunmaya bölmek iyi bir fikir olabilir. Böylece bir büyü tekeri sunucusu, tekerin konumu da dahil olmak üzere saldırı parametrelerini tanımlayacaktır. Savunucunun sunucusu, saldırı hakkında mesaj alacak ve etkiyi hesaplayacaktır. Saldırganın sunucusunun etkiyi bilmesi gerekmez; müşteri salt okunur bağlantısını kullanarak bunu öğrenecektir.
Oynatıcı modelinizin ne kadar karmaşık olduğuna bağlı olarak, başka bir sunucuya aktarılması birkaç saniye sürebilir (Second Life'ın bununla ilgili büyük bir sorunu var). Oyuncu sanal bir sınıra yaklaştığında , transfer önceden hazırlanarak sorun çözülebilir . Böylece, gerçek aktarma gerçekleştiğinde, oynatıcı verilerinin çoğu hedef sunucuda zaten önbelleğe alınır.
özet
Küçük bağımlılıklara sahip sunucular arasında bölünebilecek farklı hizmetler tanımlayarak sorunu bölün. Bir sonraki adımda, kritik hizmetler içinde yük dengesinin nasıl yapıldığına bakın. Temsilci dengeleme, doğrudan ilgili sunuculara bağlanmasını söyleyerek istemciye çalışır (açıkçası sunucular izinleri kontrol etmek zorundadır). Mümkün olduğunca basit tutun, çeşitli hizmetlerin ve sunucuların sorumluluklarını iyi belgeleyin, hata ayıklama çıktısını etkinleştirme seçeneğini belirtin.
Not: Bu tekniklerden bazıları güvenilirliği artırmak için kullanılabilir. Ve bunu aklınızda tutmalısınız, çünkü birçok sunucuyu kullanmak, kırılma riski çok daha yüksek anlamına gelir; Sadece yazılımda değil, donanım seviyesinde de.