রিয়েল-টাইম গেমগুলির জন্য সেরা সার্ভার আর্কিটেকচারটি কী?


10

আমি একটি রিয়েল-টাইম গেমটি বিকাশ করছি যা কয়েক হাজার খেলোয়াড়কে রিয়েল-টাইমে রাখা উচিত (এফপিএসের মতো। সর্বাধিক 1s লেগ)। এর জন্য সর্বোত্তম অবকাঠামো কী হবে?

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

ডাটাবেস ক্লাস্টার ডাটাবেসগুলির মধ্যে ধারাবাহিকতার জন্য ডাটাবেস প্রতিলিপি ব্যবহার করবে।

একটি ভৌগলিক লোড ব্যালান্সারও থাকতে হবে - সুতরাং এটি প্রতিটি ব্যবহারকারীর জন্য সর্বোত্তম প্রতিক্রিয়ার জন্য আঞ্চলিক লোড ব্যালেন্সারকে নিয়োগ করবে।

আমি গেমটির জন্য। নেট + এমএসএসকিউএল ব্যবহার করছি।

ধন্যবাদ!


2
আপনি যখন "অবকাঠামো" বলছেন তখন আপনি কি সফ্টওয়্যার, হার্ডওয়্যার, পরিষেবাগুলি বোঝাতে চাইছেন বা আপনি কি চান যে আমরা আপনার বিদ্যমান পরিকল্পনার সমালোচনা করি?
তেত্রাদ

1
@ নেটে - আমরা মাপদণ্ডের পরিকল্পনা করছি, সদৃশ নয় - তাই এটি পুরোপুরি স্কেলযোগ্য হওয়া উচিত।
রোমান

2
-1 কারণ teddziuba.com/2008/04/im-oming-to-scale-my-foot-up-y.html - আপনি কোনও ক্ষমতার প্রয়োজনীয়তা আবরণ করেন না, আপনি বলছেন খেলাটি তীক্ষ্ণ নয় তবে এটি জোনেড , ইত্যাদি। কর্মক্ষমতা অপ্টিমাইজেশনের প্রকৃতি - স্কেলাবিলিটি সহ - নির্দিষ্ট তথ্যের প্রয়োজন হয়, এবং কোনও নিখুঁত সেরা আর্কিটেকচার নেই।

1
আমি আপনার প্রশ্নটি আরও দৃ concrete়তার সাথে পুনরায় উত্তর দেব। 'বেস্ট' আসলে, বাস্তব-অ-বিষয়গতভাবে কী? আপনার অর্থ কী স্কেল করা সবচেয়ে সহজ, পরিচালনা করা সবচেয়ে সহজ, সহজতর হওয়া, দ্রুততম, বা কী?
কম্যুনিস্ট হাঁস

1
"ইজিস্টেস্ট" এছাড়াও বিষয়গত। কার জন্য সবচেয়ে সহজ, কোন সময়সীমার উপর, কোন সংস্থান দেওয়া হয়েছে? স্ট্যাক এক্সচেঞ্জগুলি সুনির্দিষ্ট প্রশ্নগুলির সাথে সবচেয়ে ভাল কাজ করে - "আমি লিনকিউ এবং এমএসএসকিউএল ব্যবহার করে এই সার্ভারটি তৈরি করেছি, তবে এটি 70 টি লেনদেন / সেকেন্ডের পরে এসে গেছে, আমার রানটাইমের for৩% হিসাবে আমার শীর্ষ দুটি লেনদেন এখানে রয়েছে, কীভাবে আমার থ্রুপুট বাড়ানো উচিত? "

উত্তর:


6

আপনার প্রয়োজনীয়তা সম্পর্কে আরও অনেক কিছু না জেনে কোনও সেরা আর্কিটেকচার নেই eg অক্ষরগুলির মধ্যে ক্রিয়া সম্পর্কিত ক্রিয়াকলাপ, কতটা ডেটা অবিরাম হতে চলেছে ইত্যাদি।

যদি আপনি 1 সেকেন্ডের বিলম্বকে মোকাবেলা করতে পারেন তবে আপনি সম্ভবত একক সার্ভারে 1000 জন খেলোয়াড়কে সমস্যা ছাড়াই হোস্ট করতে পারেন - তবে এটি সাধারণত একটি এফপিএসের ধারণার সাথে সাংঘর্ষিক কারণ তাদের সাধারণত অনেক কম বিলম্বিত প্রয়োজন, যেমন। কম 100ms। তবে একটি সিস্টেম যা উচ্চ বিলম্বের সাথে মোকাবেলা করতে পারে মেসেজ পাসিংয়ের মাধ্যমে সবকিছু করতে পারে যা ধারাবাহিকতাটিকে বেশ তুচ্ছ করে তোলে। আপনার যুক্তি সরবরাহ করা বেশ সহজ, এটি হ'ল - আপনি যখন লক-অবজেক্ট সিস্টেমের পরিবর্তে বার্তা-ভিত্তিক সিস্টেমে পরিণত করেন তখন জটিল যুক্তি আরও খারাপ হয়ে যায় - তবে এটি আপনার অ্যাপ্লিকেশনটির প্রয়োজনীয়তার উপর নির্ভর করে।

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

আসলে, আরডিবিএমএস গ্রহণের বিষয়ে সাবধান থাকুন কারণ এটি বৃহত সিস্টেমে সম্পন্ন কাজ। যদিও আমি ব্যক্তিগতভাবে এগুলিকে অনলাইন গেমগুলিতে ব্যবহার করার অনুমোদন দিই তবে আপনার পছন্দসই ডেটাবেস গ্রহণের পরিবর্তে আপনার প্রয়োজনীয়তাগুলি লক্ষ্য করা এবং সে থেকে আপনার অধ্যবসায়ের কৌশলটি সন্ধান করা ভাল এবং তারপরে এটি আপনার ফিট করার জন্য ক্যাশে এবং প্রতিরূপে এটি টুইট করার চেষ্টা করা ভাল it's অ্যাপ্লিকেশান। আপনি দেখতে পাচ্ছেন যে আপনার যা যা প্রয়োজন তা হ'ল অফলাইনে রিপোর্টিংয়ের সক্ষমতা, এক্ষেত্রে আপনার গেমের দৃ mechanism়তা প্রক্রিয়া থেকে কোনও অন্য কোনও দূরবর্তী আরডিবিএমএসে পটভূমি প্রক্রিয়া লগইন করা ভাল probably


4

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

আমি একটি দুই (সার্ভার) স্তরের পদ্ধতির পরামর্শ দেব। একটি ডাটাবেস স্তর এবং একটি "অ্যাপ্লিকেশন" স্তর; তৃতীয় (উপস্থাপনা) স্তরটি আপনার গেমের ক্লায়েন্ট হওয়ার সাথে।

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

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

আপনি অ্যাপ্লিকেশন স্তর -> ডাটাবেস স্তর থেকে ডেটা প্রেরণের জন্য একটি সিরিয়ালাইজেশন প্রক্রিয়া তৈরি করতে চাইবেন। কীটি সিরিয়ালাইজেশনের একাধিক স্তরের চলছে। এরকম কিছু :

  • স্তর 1: প্রতি এক্স সেকেন্ডে ডিবিতে সংরক্ষণ করুন, সমালোচনামূলক ডেটা অন্তর্ভুক্ত করে:
    • প্লেয়ার স্বাস্থ্য
    • প্লেয়ার আইটেম / পিকআপস
  • স্তর 2: প্রতি 2 এক্স সেকেন্ডে ডিবিতে সংরক্ষণ করুন, মাঝারি ডেটা অন্তর্ভুক্ত:
    • প্লেয়ারের অবস্থানগুলি
    • এনপিসির অবস্থানগুলি
  • স্তর 3: যত শীঘ্র সম্ভব সম্ভব সমস্ত কিছু

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

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


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

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

সমস্যাটি হ'ল আপনি মেমোরিতে যা রয়েছে তা পুরোপুরি পর্যবেক্ষণ করেছেন, যা সম্পূর্ণ অন্যান্য ডাটাবেস, এবং কীভাবে এটি বাস্তবায়ন করা যায় সে সম্পর্কে আপনি কোনও নির্দেশনা দেননি, এটিই আসল কৌতুকপূর্ণ বিট।

সত্য, যদিও প্রশ্নটি বড় চিত্র আর্কিটেকচার সম্পর্কে ছিল, বাস্তবায়নের বিশদ নয়।
Nate

সত্য, তবে আপনি পুরো মাঝারি স্তরটি ছেড়ে গেছেন। এটি কি স্বল্প-বিলম্বিত আরডিবি? একটি ওডিবি? কী / মানের দোকান? ডিবি নেই এবং এসিডি ছেড়ে দেবে? এসটিএম নাকি লকিং? সত্যি বলতে কি, এর উত্তর দেওয়া খুব কঠিন কারণ প্রশ্নটিতে খুব বেশি তথ্য নেই, তবে এই সমস্ত উত্তরটি কি আর্কিটেকচার ডায়াগ্রামের সাথে "একটি" দিয়ে মাঝখানে বড় বুদবুদ গ্রহণ করবে? " এটিতে এবং এর সাথে আরও দুটি পরিষেবা সংযুক্ত করুন, আসলে কি পূরণ করবেন না "?" হয়।
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.