इसे यथासंभव सरल रखने की कोशिश करें और अच्छी तरह से परिभाषित और प्रलेखित इंटरफेस। उत्पादन में एक जटिल प्रणाली को बनाए रखना और डिबग करना आसानी से नरक में बदल जाता है। इसलिए यदि एक सरल और एक जटिल दृष्टिकोण है, तो जटिल एक के साथ जाने से पहले दो बार सोचें।
सेवाओं को परिभाषित करना
मुझे लगता है कि सेवाओं और उनके आश्रितों की पहचान करने के लिए पहला कदम है : स्टेटिक कंटेंट, ऑथेंटिकेशन, लोकल चैट, ग्लोबल चैट चैनल्स, रीजनल चैट चैनल्स, फ्रेंड्स लिस्ट, गिल्ड्स, बैग / इन्वेंटरी, ऑक्शन हाउस, ग्लोबल मैप, वर्ल्ड, ...
फिर इन सेवाओं में से प्रत्येक के लिए अगर ग्राहक उनसे सीधे बात कर सकते हैं। उदाहरण के लिए क्लाइंट को ग्लोबल चैट चैनल के लिए जिम्मेदार सर्वर से सीधे बात करने देना बहुत आसान है। विश्व सर्वरों को चैट संदेशों में शामिल नहीं होना है। रीजनल चैट को उसी तरह से लागू किया जा सकता है, लेकिन खिलाड़ियों के रीजन बदलने पर दुनिया के सर्वर को चैट सर्वर को बताना होगा। फिर, उन्हें संदेशों की परवाह नहीं है।
तीसरा कदम एक सेवा के भीतर लोड संतुलन के बारे में सोचना है । उदाहरण के लिए वैश्विक और क्षेत्रीय चैट चैनलों को उनके नाम के आधार पर कई सर्वरों में विभाजित किया जा सकता है। यह शायद एक अच्छा विचार है कि इस कोड को क्लाइंट में विभाजित न करें, लेकिन एक लुकअप सेवा प्रदान करें।
विश्व सेवक
सबसे कठिन हिस्सा आमतौर पर दुनिया के सर्वर हैं , इसलिए मैं एक सरल दृष्टिकोण के साथ शुरुआत कर रहा हूं। संभवतः यह एक अच्छा विचार है कि ग्राहक जिस क्षेत्र में है उसके लिए जिम्मेदार सर्वर से सीधे बात करें। इसलिए लॉगिन या रीजन पार करने पर क्लाइंट को यह बताना होगा कि किस सर्वर से कनेक्ट होना है।
सरल दृष्टिकोण दुनिया को स्वतंत्र क्षेत्रों में विभाजित करना है । स्वतंत्र क्षेत्रों के साथ मेरा मतलब है कि एक खिलाड़ी एक भाग से दूसरे भाग में नहीं देख सकता है और राक्षस भागों को पार नहीं कर सकते हैं। वे क्षेत्र उस क्षेत्र के खिलाड़ी से भिन्न होते हैं जो बाहरी दुनिया के परिदृश्य और कहानी के आधार पर देखते हैं। आमतौर पर अधिकांश राक्षस काल कोठरी में होते हैं और खिलाड़ी स्वीकार करते हैं कि उन्हें एक तहखाने में प्रवेश करने के लिए प्रवेश द्वार से गुजरना पड़ता है। खासतौर पर अगर उन डंगऑन का प्रति खिलाड़ी समूह के आधार पर त्वरित किया जाए। बाहर की दुनिया के अन्य उदाहरण विभिन्न महाद्वीप और घाटियाँ हैं जो ऊंचे पहाड़ों से घिरे हैं।
एक निरंतर विश्व दृष्टिकोण वास्तव में जल्दी से जटिल हो जाता है, इसलिए इसे अच्छी तरह से योजना बनाने के लिए समझ में आता है: ग्राहक को क्या जानकारी चाहिए? सर्वर को कौन सी जानकारी साझा करनी है? खिलाड़ी ज्यादातर वस्तुओं (राक्षसों और एनपीसी सहित) के साथ एक ही क्षेत्र में बातचीत करेगा। आप ज़ोन सीमा से ऑब्जेक्ट्स को क्लिक सीमा से बाहर रखकर धोखा दे सकते हैं। इसका मतलब यह है कि ग्राहक ज्यादातर पड़ोसी क्षेत्रों के लिए केवल जानकारी को पढ़ने में रुचि रखते हैं। इन मामलों के लिए ज़ोन सर्वर को अनुमति जाँच के अलावा कुछ भी समन्वय नहीं करना पड़ता है कि खिलाड़ी पड़ोसी क्षेत्र से जुड़ने के लिए पर्याप्त है।
यह केवल बहुत कम संख्या में कठिन मामले छोड़ता है जिसमें वस्तुओं या कार्यों को एक सर्वर सीमा को पार करना पड़ता है। जो एक अच्छी बात है क्योंकि उन मामलों जैसे कि तीर और मंत्र प्रदर्शन महत्वपूर्ण हैं। आक्रमण और बचाव में लड़ाई को विभाजित करने के लिए यह एक अच्छा विचार हो सकता है। तो एक स्पेल-कॉस्टर का सर्वर, कॉस्टर की स्थिति सहित हमले के मापदंडों को परिभाषित करेगा। डिफेंडर का सर्वर हमले के बारे में संदेश प्राप्त करेगा और प्रभाव की गणना करेगा। हमलावर के सर्वर को प्रभाव के बारे में जानने की आवश्यकता नहीं है; ग्राहक अपने रीड ओनली कनेक्शन का उपयोग करके इसके बारे में जानेंगे।
आपका खिलाड़ी मॉडल कितना जटिल है, इसके आधार पर इसे दूसरे सर्वर पर स्थानांतरित करने में कुछ सेकंड लग सकते हैं (सेकंड लाइफ में इसके साथ बहुत बड़ी समस्या है)। जब खिलाड़ी एक आभासी सीमा के करीब हो जाता है, तो स्थानांतरण को अग्रिम रूप से तैयार करके समस्या को कम किया जा सकता है । ताकि वास्तविक हैंडओवर होने पर अधिकांश खिलाड़ी डेटा गंतव्य सर्वर पर पहले से ही कैश हो जाए।
सारांश
अलग-अलग सेवाओं को परिभाषित करके समस्या को विभाजित करें जो कि थोड़ा निर्भरता वाले सर्वरों में विभाजित हो सकते हैं। अगले चरण में देखें कि महत्वपूर्ण सेवाओं के भीतर भार संतुलन कैसे किया जाए। प्रतिनिधि को संबंधित सर्वर से सीधे कनेक्ट करने का निर्देश देकर काम को संतुलित करने का काम करें (जाहिर है कि सर्वर को अनुमतियों की जांच करनी होगी)। इसे यथासंभव सरल रखें, विभिन्न सेवाओं और सर्वरों की जिम्मेदारियों को अच्छी तरह से दस्तावेज करें, डिबग आउटपुट को सक्षम करने का विकल्प प्रदान करें।
पुनश्च: विश्वसनीयता को बेहतर बनाने के लिए इनमें से कुछ तकनीकों का उपयोग किया जा सकता है। और आपको इसे ध्यान में रखना चाहिए क्योंकि कई सर्वरों का उपयोग करने से चीजों के टूटने का बहुत अधिक खतरा होता है; न केवल सॉफ्टवेयर में, बल्कि हार्डवेयर स्तर पर भी।