বিতরণ করা সি ++ গেম সার্ভার যা ডেটাবেস ব্যবহার করে


11

আমার সি ++ টার্ন-বেসড গেম সার্ভার (যা ডাটাবেস ব্যবহার করে) বর্তমান গড় ক্লায়েন্ট (প্লেয়ার) এর বিপরীতে দাঁড়ায় না, তাই আমি এটিকে একাধিক (আরও একটিতে) পরিমাণ কম্পিউটার এবং ডাটাবেসে বিস্তৃত করতে চাই যেখানে সমস্ত ক্লায়েন্ট এখনও অবধি থাকবে একক গেম ওয়ার্ল্ড (সার্ভারগুলি অবশ্যই একে অপরের সাথে যোগাযোগ করবে এবং একাধিক ডাটাবেস ব্যবহার করবে)।

কিছু টিউটোরিয়াল / বই / সাধারণ মান আছে যা ব্যাখ্যা করে যে এটি কীভাবে সেরা উপায়ে করা যায়?

উত্তর:


8

"একক গেমের জগতের মধ্যেই থাকুন" এর এমএমও পরিভাষাটি একক শারডইভটি অনলাইন হ'ল একমাত্র প্রধান এমএমও যা প্রতিটি খেলোয়াড়কে একক শর্টে স্টাফ করার চেষ্টা করে।

আপনার জন্য ভাগ্যবান তারা কীভাবে এটি করেন সে সম্পর্কে একটি খুব তথ্যমূলক নিবন্ধ প্রকাশ করেছিলেন।


(উত্স: gamsutra.com )

খারাপ খবর। আপনি সাধারণত অনলাইন প্রযুক্তি কৌশল প্রয়োগ করতে পারবেন না। তাদের সমাধানগুলি তাদের নির্দিষ্ট ঘরানা এবং বাস্তবায়নের জন্য একেবারে উপযোগী।
দ্রষ্টব্য : EVE অনলাইন এর সমস্ত সুপার অভিনব একক শার্ট নেটওয়ার্কের জন্য তারা একটি ডাটাবেস ব্যবহার করে। তারা বিতরণকৃত ডাটাবেসের জন্য একটি স্কেলযোগ্য, ধারাবাহিক, মাঝারিভাবে রিয়েল-টাইম সমাধান ডিজাইন করতে অক্ষম ছিল।

যেভাবেই তারা কীভাবে তা পড়ে তা আপনাকে নিজের মালিকের সমাধানটি ডিজাইন করতে সহায়তা করা উচিত। তবে সাবধান, আপনি একটি খুব কঠিন সমস্যা সমাধানের চেষ্টা করছেন ।

আপনার গেম সার্ভার বিতরণের পরিবর্তে আমি প্রথমে আপনার অন্যান্য সুযোগগুলি অন্বেষণ করার পরামর্শ দেব।

  • আপনার গেম সার্ভারের প্রোফাইল দিন।
    • যদি কোনও সমস্যা হয় তবে সিপিইউ বোঝাটি কম রাখতে আপনার সার্ভার কোডটি অনুকূলিত করুন।
    • নেটওয়ার্ক বকবক বন্ধ করতে ক্লায়েন্ট এবং সার্ভারের মধ্যে যোগাযোগ প্রোটোকল অনুকূলিত করুন।
  • গেমার সার্ভারকে ডাটাবেস যোগাযোগের জন্য অনুকূলিত করুন।
    • একটি ক্যোয়ারী অপ্টিমাইজার চালান তারপরে যথাযথ পরিবর্তন করুন।
    • একটি সর্বনিম্ন ডিবি ইন্টারঅ্যাকশন কেটে দিন
  • ডিবি একটি পৃথক মেশিনে সরান।
    এটি প্রায়শই একটি টনে সহায়তা করে। সম্ভব হলে ডিবিটিকে একই লোকাল নেটওয়ার্কে রাখুন তবে সার্ভারের হার্ডওয়ারে কেবল যখন এটিই চলমান তখন আপনার গেম সার্ভারটিকে অনেক বেশি মুরগি হতে সাহায্য করা উচিত।

আপনি কীভাবে "মেজর" সংজ্ঞায়িত করছেন? কিংডম অফ লোথিংয়ে একটি একক শারড ব্যবহার করা হয়। প্রত্যেকে একই ফার্মভিল শারদ ভাগ করে নিয়েছে। স্টার ট্রেক অনলাইন এবং চ্যাম্পিয়ন্স অনলাইন উভয়ই একটি একক-শারদ মডেল ব্যবহার করে তবে উদাহরণস্বরূপ অঞ্চলগুলি।

কোনও এসকিউএল ডাটাবেস ব্যবহার করার পরিবর্তে, আপনি একটি নোএসকিউএল সমাধানও ব্যবহার করতে পারেন যা মংগোডিবি'র মতো ক্লাস্টারিং এবং শারডিংয়ের জন্য ডিজাইন করা হয়েছিল।
ফিলিপ

1
@ জোওয়াচেঞ্চনিগ ওয়েবগেমগুলি রিয়েল টাইম গেমস নয়, অনেক সহজ ... স্টার ট্রেক অনলাইন এবং চ্যাম্পিয়ন্স অনলাইনে কতজন খেলোয়াড় আছে তা আমি নিশ্চিত নই ...
o0 '।

4

আপনার প্রথম পদক্ষেপটি গেম সার্ভার থেকে সরাসরি ডাটাবেস অ্যাক্সেসকে ডুপ্লুপ করা উচিত এবং আপনার সার্ভারের ডেটা প্রস্তুত করার জন্য একটি নির্দিষ্ট নির্দিষ্ট মিডলওয়্যার ব্যবহার করা উচিত (যেমন। এক্সএমএল, জেএসওএন) ON এগুলি যে কোনও সংখ্যক ডাটাবেস পরিচালনা করতে সক্ষম হবে এবং আরও গুরুত্বপূর্ণভাবে আপনাকে অ্যাপ্লিকেশন নির্দিষ্ট ক্যাশে করার বিকল্প সরবরাহ করতে সক্ষম হবে। আপনি যা যা করতে পারেন ক্যাশে এবং ডিবিটি কেবল তখনই লাগান যখন আপনার প্রয়োজন must আপনার দৃশ্যে সেরা সম্ভাব্য পারফরম্যান্স অর্জনের জন্য অনেকগুলি ছোট প্রশ্নের পরিবর্তে খুব সহজেই বড় ফ্যাচ তৈরি করুন।

আপনার পছন্দের ডেটাবেস আপনাকে ক্লাস্টারগুলি পরিচালনা করার অনুমতি দেয় যা উপলভ্য ডাটাবেস সংস্থানগুলিতে আরও প্রসারিত করতে এবং আপনার ফলাফলগুলি দ্রুত সরবরাহ করতে সক্ষম করে, তবে এটি এমন একটি বিষয় যা সেটআপ এবং রক্ষণাবেক্ষণের জন্য অনেক অভিজ্ঞ এবং একটি ডেডিকেটেড ডেটাবেস প্রশাসকের প্রয়োজন - এবং ইন্ডি বাজেটের জন্যও বেশ নয়।


1
যতক্ষণ না আপনি বিবেচনা করেন যে তিনি একাধিক সার্ভারে একটি ডেটা সেট অ্যাক্সেস করার আশা করছেন - এটি সমস্তই দুর্দান্ত বলে মনে হচ্ছে - এর অর্থ হ'ল আরও সমন্বয় ছাড়াই অ্যাপ্লিকেশন-সাইড ক্যাশেগুলি সিঙ্কের বাইরে চলে যাবে এবং সর্বোপরি ডেটা ক্ষতি হ'ল। আপনি যা বলেছেন তার সাথে আমি দ্বিমত পোষণ করছি না তবে আসল পোস্টারটি ক্রস-সার্ভারের ধারাবাহিকতার বিষয়টিও বিবেচনা করা দরকার।
কাইলোটন

মিডলওয়্যার হ'ল ডেটা টানেল যা একদিকে ডেটা ক্যাশে করার জন্য এবং ডেটা সরবরাহের জন্য দায়ী। তবে এটি কেবল সার্ভারের কাছে ডেটা সরবরাহ করে (ক্লায়েন্টের কাছে কখনই নয়) এবং সার্ভারটি শুরুতে সমস্ত গেম সম্পর্কিত মাস্টার ডেটা ক্যাশে করে। সুতরাং যে কোনও সময়ে সংযুক্ত থাকা অনেকগুলি ডেটা উত্স এবং অনেক ডেটা রিকোয়েস্টর থাকতে পারে। আমি যে এমএমও নিয়ে কাজ করি তারা এই স্কিমটি বরং দক্ষতার সাথে ব্যবহার করে।
কনরাড কে।

এটি কীভাবে আপনি ক্রস-সার্ভারের ধারাবাহিকতার সমস্যাগুলি সমাধান করেছেন তা ব্যাখ্যা করে না। এক পর্যায়ে সার্ভারগুলিকে একে অপরের মধ্যে ডেটা সিঙ্ক্রোনাইজ করা দরকার, অথবা আপনার কাছে রেসের শর্ত রয়েছে যা এলোমেলো সংযোগ বিচ্ছিন্ন, নকল খেলোয়াড়,

ডেটা কখনই নকল হয় না - সর্বদা কেবলমাত্র একটি নির্দিষ্ট সার্ভারের একটি নির্দিষ্ট অবজেক্টের দায়িত্বে থাকে এবং যখন প্রয়োজন হয়, তখন সেই বস্তুটি অন্য সার্ভারের উপর দিয়ে যায়। অবজেক্টগুলি ক্লায়েন্ট সংযোগ যা প্লেয়ার নিয়ন্ত্রণ আইটেমকে অন্তর্ভুক্ত করে। যাইহোক, এটি একটি মাস্টার সার্ভারের মাধ্যমে করা হয় এবং সার্ভারগুলির মধ্যে বিতর্কিত হয়। সুতরাং আমরা দুই ধরণের ডেটা - ডাটাবেস ইনফোরেশন (যার সাথে আমার মূল পোস্টটি সম্পর্কিত) এবং গেম অবজেক্টগুলি যা রানটাইম সময়ে তৈরি হয়েছিল এবং মাল্টি-সার্ভার এমমোতে পাস করে চলেছি। এগুলির কোনওটিই কখনই রেসের শর্তে পড়তে বা আবেদন স্তরে নকল করা উচিত নয়।
কনরাড কে।

3

গেম সার্ভার সম্পর্কিত: একটি সাধারণ কৌশল হ'ল একাধিক সার্ভার ব্যবহার করা যেখানে প্রতিটি সার্ভার গেম বিশ্বের একটি অংশ পরিচালনা করে। প্রতিটি ব্যবহারকারীর সাধারণত তার চারপাশে কী ঘটছে তা কেবল জানতে হবে, তাই বিশ্বকে স্থানীয়ভাবে ভাগ করে নেওয়া বোধগম্য। এটি দুর্ভাগ্যক্রমে আরও জটিল হয়ে ওঠে যখন আপনার কাছে বন্ধ জোন এবং খেলোয়াড়দের টেলিপোর্ট সমেত একটি বিশ্বের পরিবর্তে কোনও সীমানা ছাড়াই একটি উন্মুক্ত বিশ্ব থাকে। যখন আপনার একটি উন্মুক্ত জগৎ রয়েছে, আপনার জোনগুলির মধ্যে নির্বিঘ্নে প্লেয়ারগুলি স্থানান্তর করার একটি উপায় এবং সার্ভারের মধ্যে সীমানার কাছাকাছি অঞ্চলগুলিকে সিঙ্ক্রোনাইজ করার একটি উপায় প্রয়োজন। এটি একটি জটিল সমস্যা।

ডাটাবেস সম্পর্কিত: এসকিউএল ডাটাবেসগুলি সাধারণত খারাপভাবে স্কেল করে। এগুলি বিতরণের জন্য নকশাকৃত নয়। তবে বর্তমানে মঙ্গোডিবি বা ক্যাসান্দ্রার মতো নোএসকিউএল ডেটাবেসগুলির পরিবর্তে একটি নতুন ট্রেন্ড রয়েছে যা একাধিক সার্ভারের মাধ্যমে বিতরণ করার জন্য ডিজাইন করা হয়েছিল। তারা আরও বেশি সার্ভার যুক্ত করে ক্ষমতা যুক্ত করা আরও সহজ করে তোলে। তাহলে কেন সমস্ত বড় গেমগুলি তাদের কাছে স্যুইচ করে না? কারণ:

  1. এসকিউএল ডাটাবেসগুলি 40 বছরেরও বেশি সময় ধরে বিদ্যমান, কেবলমাত্র কয়েক বছরের জন্য এই নোএসকিউএল ডাটাবেসগুলি। এগুলি কীভাবে সবচেয়ে দক্ষতার সাথে ব্যবহার করা যায় এবং তাদের বিকাশ দ্রুত এগিয়ে চলেছে তা এখনও তেমন কিছু জানেন না। বাজারে প্রচুর প্রতিযোগিতামূলক এবং সম্পূর্ণ বেমানান পণ্য রয়েছে এবং তাদের মধ্যে কোনটি বেঁচে থাকবে এবং কোনটি কয়েক বছরের মধ্যে অপ্রচলিত এবং বন্ধ হয়ে যাবে তার কোনও চিহ্ন নেই। নোএসকিউএল ডাটাবেসের অজানা ঝুঁকি নিয়ে বেশিরভাগ বড় খেলোয়াড় এসকিউএল এর জানা ত্রুটিগুলি পছন্দ করেন।
  2. তারা এসকিউএল ডাটাবেসগুলি থেকে খুব আলাদাভাবে কাজ করে এবং আপনার সম্পূর্ণ দৃ pers়তা কৌশলটি পুনর্বিবেচনা করা প্রয়োজন। এটির ফলে আপনার পুরো সফ্টওয়্যার আর্কিটেকচার জুড়ে মারাত্মক পরিবর্তন হতে পারে।

সুতরাং যখন আপনার প্রকল্পটি ইতিমধ্যে খুব অগ্রগতি হয়, অন্য ডাটাবেস সমাধানে স্যুইচ করা বড় ঝুঁকি এবং সময় এবং শক্তির খুব বড় বিনিয়োগ হতে পারে।


0

না এটি একটি অবিশ্বাস্যরকম জায়গা যা এখনও সমাধান হয়নি।


এর কোনও "টেম্পলেট" ("সি ++ ডিজাইনের ধরণ হিসাবে নয়) এর সমাধান হতে পারে? প্রচুর এমএমওআরপিজি রয়েছে
স্লাভ

2
বেশিরভাগ এমএমওগুলি ডাটাবেসের জন্য নিখুঁত বিপর্যয়ের দ্বারা সমর্থিত।

বিশেষত, এমএমওগুলির প্রায়শই তাদের ডেটা অধ্যবসায়ের পক্ষে খুব আলাদা পন্থা থাকে যা প্রায়শই তাদের নিজস্ব গেম ডিজাইনের জন্য গ্রহণযোগ্যভাবে কাজ করে তবে অন্যান্য গেম ডিজাইনের জন্য নয়। যেহেতু গেম ডিজাইনটি সর্বাধিক গুরুত্বপূর্ণ অঙ্গ, আপনি যথাযথভাবে ডেটা অধ্যবসায় এবং বিতরণ কৌশল নির্দিষ্ট করতে পারবেন না। (
যারূপে অনুমান

0

আমি জানি এটি পুরানো তবে ....

এটিতে মনোনিবেশ করার জন্য দুটি ক্ষেত্র রয়েছে।

আপনাকে বেশ কয়েকটি সার্ভার জুড়ে আপনার অ্যাপ্লিকেশন বিতরণ করতে হবে। আপনাকে বেশ কয়েকটি সার্ভারে আপনার ডাটাবেস বিতরণ করতে হবে।

এবং আপনার উভয়ের জন্য অতিরিক্ত কাজ করা দরকার।

এর জন্য কয়েকটি মুক্ত উত্স সমাধান রয়েছে। মেমএসকিউএল / কাউচবেস ব্যবহার করে ফার্মভিল একটি ভাল উদাহরণ।


1
একাধিক সার্ভারে ডাটাবেস বিতরণ করা অবশ্যই একটি সমাধান সমস্যা। দুর্ভাগ্যক্রমে এটি অনলাইন গেমগুলির জন্য সাধারণত একটি গুরুত্বপূর্ণ প্রয়োজন নয় যা তাদের ডিবি অ্যাক্সেসকে সর্বনিম্ন রাখে। বিপরীতে, একাধিক সার্ভারে প্রকৃত গেমপ্লে বিতরণ করা এখনও কোনও সমস্যার সমাধান নয়।
কাইলোটন
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.