PDA

View Full Version : سؤال: بهترین گزینه برای مدیریت تعداد زیادی Job ؟



DelphiProgrammer
شنبه 07 بهمن 1391, 22:42 عصر
سلام خدمت دوستان عزیز.
چون این سوال من خیلی ربطی به هیچ زبان برنامه نویسی خاصی نداره و عمومی هست جایی رو بهتر از اینجا پیدا نکردم برای پرسیدنش.
هدف بنده از پرسیدن این سؤال [بهترین گزینه برای مدیریت تعداد زیادی Job؟] این هست که بتونم یک تصمیم صحیح برای انتخاب تکنولوژی و همچنین طراحی داشته باشم.
بنده اصولا یک برنامه نویس دلفی هستم ولی خوب با بقیه زبون ها هم آشنایی نسبی دارم.
قصد این هست که یک بازی آنلاین نوشته بشه. یک مدت زیادی هست که روی یک داستان با یک سری ویژگیهای جدید کار کردم و قصدم این بوده که یک بازی با توان رقابت با تراوین ایجاد کنم. البته قصدم این نیست که حتما بازی تحت بروزر اجرا بشه. میتونه یک کلاینت داشته باشه و یک سرور و البته میتونه تحت بروزر هم باشه. البته از نظر ارتباط بازیکن با بازی میتونه دقیقا مثل تراوین طراحی بشه. یعنی یک صفحه خیلی ساده که یک کاری رو تقاضا میکنه و کار میره داخل یک صف زماندار و معلوم میکنه که در چه زمانی این کار به پایان میرسه. حالا این کار میتونه یک حمله به یک بازیکن دیگه باشه یا ارتقاء یک ساختمون باشه. یقینا بازی باید از بعد از اینکه یک کار تکمیل شد با یک شرایط جدیدی که اون کار ایجاد کرده به ادامه خودش بپردازه. مثلا وقتی یک منبع یک سطح ارتقا پیدا میکنه تولیدش افزایش داده میشه و اون میزانی که داره تولید میشه هر لحظه باید میزان ذخیره شده از اون منبع رو در انبار افزایش بده. هر بازیکن هم یک اکانت مجزا داره که شامل چندین دهکده هست که توی هر کدوم یک سری کار داره اتفاق میفته و مجموعا وضعیت اکانت و وضعیت کل بازی از این اکانتها سرچشمه میگیره.

حالا فرض کنید که مثلا ما 10000 بازیکن فعال داریم و دست کم در هر اکانت 25تا job تعریف شده و در حال اجرا هست (گرچه ممکن هست یک بازیکن تعداد زیادی هم حمله داشته باشه به نقاط مختلف و کارهای یک بازیکن حتی به تعداد مثلا 20000تا هم برسه.ولی یقینا بازیکن با این ویژگی بسیار نادر هست.) یعنی میشه 250000 job برای کل سرور. البته زمان شروع و پایان همه این کارها با هم نیست. ولی بعید هم نیست مثلا 10000تا کار با هم مثلا خاتمه پیدا کنن(گرچه این یک مورد نسبتا غیر عادی میتونه باشه. ولی خوب بعید هم نیست.). یک سری از Jobها هم قابل پیش بینی هست نتیجه شون. ولی بعضی هم غیرقابل پیش بینی هست. مثلا نتیجه یک حمله معلوم نیست چی از آب در بیاد و باید در همون لحظه محاسبه بشه. ولی مثلا ارتقا یک منبع میتونه از قبل هم محاسبه بشه و قابل پیش بینی هست.
به نظر شما برای مدیریت این همه Job در سطح سرور چه کار کنیم؟
1- زبان برنامه نویسی که برای نوشتن سرور انتخاب میکنیم چی باشه؟
دلیلی نداره که حتی اگر بازی تحت بروزر باشه هسته بازی مثلا با یک زبونی که برای صفحات وب هست نوشته بشه. مثلا میتونه دلفی هم باشه. چون اون صفحه وب نهایت یک اینترفیس بیشتر نیست و کلا کلاینت رو خیلی باهاش الان کاری نداریم که چطوری باشه. چه زبانی انتخاب کنیم که سرعت اجرای اون به ماکزیمم ممکن برسه؟ مثلا من شنیدم جاوا قابلیت های خوبی برای نوشتن برنامه های سرور داره. حالا نمیدونم آیا واقعا برتری داره نسبت به بقیه زبان ها یا خیر.
2- آیا برای هر اکانت یک Thread تعریف کنیم؟
اصلا سیستم Thread میتونه مناسب باشه؟ مثلا هر اکانت خودش یک Thread باشه و هر Job ای که تعریف میشه بهش یک Thread وابسته به اون اکانت باشه. با این ویژگی ما باید برای هر اکانت حداقل یک Thread داشته باشیم.
3- آیا صرفا از دیتا بیس برای مدیریت استفاده کنیم؟
بیایم یک جدول کار تعریف کنیم و کارها به صورت رکورد وارد یک جدول بشن و یک قطعه برنامه در هر لحظه کلیه کارهایی که در یک واحد زمانی مشخص به پایان میرسه رو مدیریت کنه. (یعنی نتیجه هر Job در زمان پایانش اعمال بشه و دیگه برای هر اکانت یک Thread مجزا نداشته باشیم) یک مساله ای هم نقل منابع تولیدی از هر اکانت هست. این مقدارش رو چطوری محاسبه کنیم و برای اکانت در نظر بگیریم؟ چون مثلا فرض کنید از یک نوع منبع خاص در یک دهکده ساعتی 1000واحد تولید میشه. الان این مقدار رو وقتی که بازیکن وارد دهکده اش میشه چطوری براش نمایش بدیم؟ ممکن به خاطر حمله از سوی یک متجاوز حتی یک مقدار منبع رو از دست داده باشه. اما به هر حال یک میزانی در حال تولید داشته. این میزان رو در هر لحظه از کجا محاسبه کنیم؟ یک فرآیند باشه که در هر لحظه مقدار منبع رو محاسبه کنه؟ یا بیایم هر وقت در موردش سوال شد بشینیم مقدارش رو محاسبه کنیم؟
4- راهکار دیگه ای هم برای مدیریت همچین وضعیتی هست یا نه؟
البته بنده یک مقداری در مورد این موارد فکر کردم. ولی دلم میخواد بدونم بقیه چه نظری در این مورد دارند.
خوب برای بنده میشه گفت یک همچین چیزی اصلا سابقه نداشته نوشتنش. و فقط برنامه های دیتابیسی بیشتر کار کردم مثل حسابداری و سیستم های اتوماسیون و یا مثلا سیستم آزمون گیری تحت شبکه. ولی با این حجم داده هیچ پروژه ای انجام ندادم.
5- برای ذخیره داده های این پروژه از چه دیتابیسی استفاده کنیم بهتر هست؟
با توجه به اینکه این برنامه خیلی داده تولید میکنه و خیلی با جداولش کار میشه و مدام در حال تغییر هستند جداول و میشه گفت تک تک رکوردهای دائمی در حال به روز شدن هستند و یک تعداد زیادی رکورد مدام در حال اضافه شدن و حذف شدن هستند چه دیتابیسی میتونه مناسب باشه؟

از عزیزانی که با حوصله این سوالات بنده رو خوندن بی نهایت سپاسگذارم.