सहज ज्ञान युक्त MMO सर्वर वास्तुकला पर जानकारी


9

मैं किसी भी सामग्री के लिए देख रहा हूँ सहज ज्ञान युक्त MMO सर्वर! मेरे पास "बड़े पैमाने पर मल्टीप्लेयर गेम डेवलपमेंट" किताबें और "गेम प्रोग्रामिंग रत्न 5" में कुछ लेख हैं। क्या उस विषय पर किसी का अनुभव है या उसके बारे में लेख जानता है?

मुझे "उच्च-स्तरीय विचारों" के साथ-साथ कार्यान्वयन में भी दिलचस्पी है। यह मेरे मास्टर थीसिस का विषय बन सकता है और मैं यह पता लगाना चाहूंगा कि इस तरह की प्रणाली को लिखना कितना कठिन है, इससे पहले कि मैं वास्तव में थीसिस शुरू करूं। अभी मैंने यह तय नहीं किया है कि किस भाषा का उपयोग करना है, मैं जावा या स्काला के बारे में सोच रहा हूं। एर्लैंग एक विकल्प हो सकता है, लेकिन मैंने कभी इसके साथ काम नहीं किया है।

नोट: बुनियादी आवश्यकता आंदोलन होगी। कोई भी अन्य गेम सिस्टम वैकल्पिक हैं और "बोनस क्रेडिट" देते हैं।

अब मुझे "सहज सर्वर" से क्या मतलब है: मैं चाहता हूं कि एक सर्वर क्लस्टर स्थापित किया जाए जहां प्रत्येक नोड खेल की दुनिया के कुछ हिस्से को स्थिर सीमाओं के साथ नियंत्रित करता है। खिलाड़ी अब एक इंस्टेंस को स्विच किए बिना या कुछ "टेलीकॉलर" को हिट किए बिना दुनिया के एक छोर से दूसरे छोर तक जा सकते हैं। मुझे लगता है कि वाह क्या करता है। मेरे बैक-एंड में हालांकि खिलाड़ी एक सर्वर से दूसरे में संक्रमण करता है।


कुछ समय पहले मैंने पढ़ा कि प्रत्येक वाह सर्वर में प्रत्येक महाद्वीप और डेटाबेस के लिए 5 + ब्लेड होते हैं। डनगेन और बैटलग्राउंड भी हुआ करते थे, हालांकि मैं यह मान रहा हूं कि अब वे क्रॉस-दायरे कनेक्शन की अनुमति देने के लिए अपने स्वयं के समूहों पर रहते हैं। हालांकि, महाद्वीपों को एक सर्वर पर रखा जाता है - ऐसा कोई बिंदु नहीं है जहां आप दूसरे सर्वर से तब तक संक्रमित हो जाते हैं जब तक कि आप महाद्वीप नहीं बदलते।
१०:३० बजे

दिलचस्प है, क्या आपको याद है कि आपने कहां पढ़ा है? जैसा कि मैंने कहा, मैं कभी खिलाड़ी वाह नहीं करता और यह नहीं जानता कि महाद्वीप कितने बड़े हैं, लेकिन मैं कल्पना नहीं कर सकता कि प्रत्येक महाद्वीप को अलग सर्वर पर होस्ट किया गया है।
लुरका

3
वाह सर्वर आँकड़े: 13,250 कुल सर्वर ब्लेड, 75,000 कुल सीपीयू कोर, 112.5 टेराबाइट रैम (जीडीसी ऑस्टिन 09 के रूप में)। यहाँ देखें ; जरूरी नहीं कि सभी वाह में समर्पित हों, लेकिन यथोचित रूप से काफी करीब हैं।

@ जोश पेट्री: धन्यवाद, यह लेख इस दिन की शुरुआत में मिला। लेकिन मैं अभी भी सहज या निरंतर सर्वर आर्किटेक्चर के बारे में सामान ढूंढ रहा हूं।
लुरका

जवाबों:


5

इस तरह की प्रणाली के प्रबंधन में मुख्य जटिलता सिर्फ इस बात से आती है कि आपको इसमें कितना सहज होना चाहिए। जैसा कि जोश ने कहा है, एक इकाई को एक सर्वर से दूसरे में सौंपने की समस्या को हल करना पैकेज का एक महत्वपूर्ण हिस्सा है।

हालांकि यह एकमात्र समस्या नहीं है - अगर कई सर्वरों पर संस्थाओं को एक ऑपरेशन के हिस्से के रूप में बातचीत करने की आवश्यकता होती है, तो आपके पास अब एक सिंक्रनाइज़ेशन समस्या है जहां प्रत्येक सिस्टम को आगे बढ़ने के लिए दूसरी तरफ से डेटा की आवश्यकता होती है, लेकिन उस समय तक डेटा आ सकता है पहले से ही अमान्य है। आप आपरेशन करता है, तो एक तरफ पीठ रोलबैक की क्षमता के साथ एक से अधिक संदेशों में टूट द्वारा इस हल करने के लिए प्रयास कर सकते हैं, लेकिन जैसा कि आप "व्यापक मल्टीप्लेयर गेम विकास" में अध्याय 3.1 से देखा है, यह काफी किसी भी खेल तर्क यह है कि आप के लिए है पेचीदा इसके साथ करो। स्काला और एर्लैंग आपको मैसेजिंग सिस्टम को ठीक करने में मदद करते हैं - वे आपको उस अपघटन के साथ मदद नहीं करते हैं जो कई अलग-अलग संदेशों में 10 लाइन फ़ंक्शन का उपयोग करता था और बताता है कि अब आपको ट्रैक करने की आवश्यकता है।

जाहिर है, यह समस्या पूरी तरह से नई नहीं है, और संबंधपरक डेटाबेस इस तरह की समस्या का समर्थन करते हुए सभी डेटा को केंद्रीय रूप से संग्रहीत करते हैं और कई ग्राहकों को क्वेरी देते हैं और इसे आवश्यकतानुसार बदल देते हैं, जहां आवश्यक हो। यह आपको अपनी अधिकांश शुद्धता की आवश्यकताएं देता है लेकिन दुर्भाग्य से अव्यवहारिक प्रदर्शन समस्याओं के साथ-साथ गेम लॉजिक कार्यान्वयन को अजीब बनाता है (क्योंकि आपके लॉजिक का अधिकांश हिस्सा अब डेटाबेस संग्रहित प्रक्रियाओं में लिखा गया है)। एक अलग तरह का डेटाबेस यहां एक अच्छा समाधान प्रदान कर सकता है, खासकर यदि आप विश्वसनीयता आवश्यकताओं को दूर करने के लिए तैयार हैं जो अधिकांश आरडीबीएमएस प्रदान करते हैं।

अधिकांश पेशेवर खेल इस समस्या के आसपास भी प्रयास करते हैं कि शार्प साइज़ को छोटा करके सभी खिलाड़ियों को एक सर्वर पर रखा जा सके, दुनिया को कुछ हिस्सों में विभाजित करके, जो वास्तव में बातचीत नहीं करते हैं (ऊपर टिप्पणियों में वाह उदाहरण देखें) , या भूगोल के बजाय फ़ंक्शन के आधार पर सर्वर पर खेल को वितरित करके (जैसे। सभी का मुकाबला एक सर्वर पर होता है, सभी दूसरे पर चैट करते हैं) ताकि साथ संघर्ष करने के लिए कोई 'सीम' न हो।


3

मुझे "उच्च-स्तरीय विचारों" के साथ-साथ कार्यान्वयन में भी दिलचस्पी है।

कार्यान्वयन आमतौर पर काफी गहराई से शामिल होते हैं और आप शायद उनके बारे में यहां ज्यादा बात नहीं करेंगे। StackExchange सॉफ़्टवेयर उस तरह की शामिल चर्चा के लिए अच्छी तरह से अनुकूल नहीं है, यह उल्लेख करने के लिए कि यह किसी के समय का एक महत्वपूर्ण निवेश शामिल नहीं होगा।

मैं यह पता लगाना चाहूंगा कि ऐसी प्रणाली को लिखना कितना कठिन है

किसी भी अन्य प्रणाली की तुलना में अधिक या कम कठोर नहीं: यह आपकी आवश्यकताओं और उन सुविधाओं पर निर्भर करेगा जो आप ड्राइव करने का इरादा रखते हैं। आप तुच्छ कार्यान्वयन को तुच्छ रूप से लिख सकते हैं, लेकिन गैर-तुच्छ सामान निश्चित रूप से बहुत कठिन होगा। बड़ी समस्याओं में से एक यह है कि आपके पास वास्तव में यह बताने के लिए पर्याप्त वास्तविक ग्राहक नहीं होंगे कि क्या आपका सिस्टम वास्तव में "बड़े पैमाने पर" स्तर पर है कि वाह और अन्य गेम संचालित होते हैं।

MMOs जादुई नहीं हैं। अलगाव में लिए जाने पर उनकी अधिकांश तकनीक कुछ खास नहीं है, बस इतना है कि प्रौद्योगिकी के छोटे, सरल बिट्स को बड़े पैमाने पर अनुमति देने के लिए बहुत समझदारी से संयोजित किया जाता है, कुछ साझा विश्व राज्य के समानांतर सिमुलेशन।

मैं एक सर्वर क्लस्टर स्थापित करना चाहता हूं, जहां हर नोड स्थिर सीमाओं के साथ खेल की दुनिया के कुछ हिस्से को नियंत्रित करता है। खिलाड़ी अब एक इंस्टेंस को स्विच किए बिना या कुछ "टेलीकॉलर" को हिट किए बिना दुनिया के एक छोर से दूसरे छोर तक जा सकते हैं।

अनिवार्य रूप से आप जिस बारे में बात कर रहे हैं वह सिमुलेशन हैंड-ऑफ है। यह काफी सरल रूप से किया जा सकता है और जरूरी नहीं कि एक विशिष्ट-विशिष्ट तकनीक (पीयर-टू-पीयर गेम मेजबान प्रवास को लागू करने के लिए सभी समान अंतर्निहित तंत्रों का समर्थन करते हैं)। मूल आधार यह है कि प्रत्येक सर्वर को सर्वर के टोपोलॉजी को "आस-पास" समझ लेना चाहिए (विशेष रूप से, दुनिया नोड के लिए एक सर्वर सिमुलेशन-आसन्न दुनिया नोड्स के लिए सर्वर के बारे में पता होना चाहिए) और साथ ही एक बफर को परिभाषित करने के लिए जिसके बारे में आप विचार करते हैं। आसन्न सर्वर के लिए एक विशेष नकली इकाई "बंद"।

जब एक इकाई "क्लोज" बफर में प्रवेश करती है, तो आप इसे आसन्न सर्वर को भी रिपोर्ट करना शुरू करते हैं। एक बार इकाई वास्तविक सीमा पार करने के बाद, आप आसन्न सर्वर को इकाई की पूर्ण स्थिति के साथ एक संदेश भेजते हैं और एक संदेश इंगित करता है कि आसन्न सर्वर को इकाई पर ले जाना चाहिए। जाहिर है आप चाहते हैं कि यह यथासंभव विश्वसनीय हो।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.