سرفصل که کیفیت محتوا رو کاملا روشن نمیکنه.
نظرات دیگران هم معیار معتبری نیست. البته تا اینکه دیگران کی باشن!
دلیلی نداره این همه آدم برای خوش آمد گویی پست گذاشته باشن. شما هم بد نیست یکم عینک بدبینیتون رو بردارین تا ببینین توی ایران هم هستند کسانی که از کمک به بقیه لذت میبرن. ضمناً تعریفها شاید ازنظر شما ساختگی باشه یا هر چیز دیگه ولی قطعاً پیش خریدها پکیج PHP پیشرفته (که هنوز تولیدش کامل نشده) (لینک) یه چیزهایی رو ثابت میکنه.
آخرین ویرایش به وسیله MMSHFE : چهارشنبه 04 تیر 1393 در 12:59 عصر دلیل: تکمیل توضیحات
من از نظر منطقیش گفتم مهندس.
شما تاحالا این همه باهاتون بحث کردم ظاهرا هنوز متوجه نشدید که من همیشه سعی میکنم بر اساس منطق محض حرف بزنم، فکر و قضاوت کنم. وگرنه بله در اینکه آموزشهای شما به احتمال زیاد خیلی هم خوبه شکی نیست. فقط گفتم اون دلایل چندان محکم نیستن از نظر منطقی و اثبات قطعی نمیکنن.
ضمنا اصولا در این موضوع ارتباط چندانی به بحثهایی که داشتیم ندیدم!
آموزشهای شما فرض کن عالی، فرض کن ملت رو پیشرفت میده، هرچقدر زیاد، ولی بازم معجزه که نمیکنه! جای اون چیزهایی رو که گفتم نمیگیره که. میگیره؟ جای زبان و منابع گسترده انگلیسی رو میگیره؟ عمرا! جای زحمت و تلاش و جدیت و یادگیری اصولی شخصی رو میگیره؟ شما که نمیتونی تمام موضوعات و جزییات برنامه نویسی رو اینطوری به شکل آموزش دربیاری و به زور ملت رو وادار کنی همه رو کامل و دقیق بخونن و یاد بگیرن. بهرحال نهایت افراد باید یاد بگیرن که اصولی کار کنن و درس و مشق و تکالیف خودشون رو خودشون انجام بدن.
بله حرف شما درسته و باید روی زبان انگلیسی بعنوان پیشنیاز برای رشد در رشته کامپیوتر کار بشه ولی بهرصورت این ذهنیت که منبع فارسی خوب و بدرد بخور نداریم یا اگه کسی بلد باشه، فایده نداره که مجموعه آموزشی فارسی بسازه هم ذهنیت اشتباهیه.
فقط پیرو چندتا از گفته ها تون خواستم چندتا جواب بهتون بدم
اولا گفتین تولید این محتواهای آموزشی به این ترتیب اونهارو تنبل میکنه
باید بگم تنبل نمیکنه بلکه در حد راه اندازی یک وب سایت ساده یک شخص رو توانا میکنه که این به نظرم مفید هست چون خیلی از اشخاص و شرکتها هستن که نمیخوان هزینه های هنگفت برای یک طراحی ناچیز هزینه کنن و یا حتی ندارن که اینکارو بکنن پس رو به برنامه نویس های مبتدی میارن که مبالغ کمتری رو دریافت کنن و این یک امر منطقی هست چون قطعا شخص حرفه ای مثل شما حاضر نیست برای دستمزدهای اندک دست به طراحی سایت بزنه در نتیجه این اشخاص هستن که پاسخگوی این بخش از جامعه باشن و قطعا جای کسی رو هم تنگ نکردن
اما در مورد اینکه گفتین من فقط منطقی حرف میزنم
به نظرم منطقی تر از کامپیوتر تا حالا خلق نشده باشه
اما یادم نمیاد که یک کامپیوتر برای پاسخگویی به سوال کنندش و یا یوزرش پرخاشگر بشه, هدف گرفتن دیگران و تحقیر افراد کار صحیحی نیست و جایی در منطق هم نداره
در مورد سطح توانایی افراد در ایران هم بگم که اشخاص بسیار حرفه ای که در ایران در سطح بسیار بالایی مشغول فعالیت هستن برای خیلی ها ناشناختن چون در خیلی از زمینه ها فعالیت ندارن
بنده با خیلی هاشون آشنایی دارم و سطح علمیشون رو هم مقالاتی که چاپ کردن و محصولاتی که تولید کردن اثبات میکنه
برای تلاش دیگران احترام قائل بشید
قصد تملق ندارم چون نیازی به این کار هم ندارم
اما به شخصه با اینکه بسیاری از عقاید آقای شهرکی در تضاد با باورها و افکار و عقاید من هست اما احترام بسیار بسیار زیادی برای ایشون هم از لحاظ حرفه ای و هم از لحاظ اخلاقی قائل هستم و ایشون رو به عنوان اشخاص بسیار حرفه ای در زمینه php ایران میدونم.
سلام
بحث ها بسیار طولانی و فنی بودن با توجه به وقتی که داشتم شاید 4 5 پست اول را خواندم و از بقیه پوزش می طلبمم ممکن است مطالبمم توسط دوستان گفته شده باشد.اما باتوجه به اینکه من پیش زمینه ای در بازی های اجتماعی آنلاین تحت وب دارم مایل دونستم که با شما به این مطلب را به اشتراک بذارم. این گونه بازی ها به دو عنوان خوانده می شوند (MMO) یا (Social Games). این دو عنوان تفاوت آنچنانی ندارند فقط Social Games ها در پلتفرمهایی مانند فیس بوک، تویتر و .. اجرا می شود. بازی های MMO مانند تراوین و جنگ خان ها و Social Games ها مانند Zynga Poker بازی هایی در سایت های اجتماعی. هر دوی این بازی ها دارای کاربران زیادی هستند که همزمان با هم آنلاین هستند و بصورت RealTime در حال کار هستند. در اینگونه بازی ها تحلیلگران و برنامه نویسان سعی می کنند بهینه ترین روش های برنامه نویسی، کوئری ها و ساختار دیتابیس را در نظر بگیرند.
اما مسئله مهم این است آیا با روش های بهینه می شود با یک سرور معمولی بازی راه اندازی کرد؟
با توجه به نظر کارشناسان متخصص و تجربه شخصی بنده خیر. چون هر چقدر هم سیستم بهینه و قوی باشد فشار روی سرورها نبایستی از حدی بیشتر شود. و بازی های امروزی پارامترهای بسیاری را سنجش و پردازش می کنند که همه آن وابسته به دیتابیس هستند بنابراین فشار روی دیتابیس سرور زیاد هستند. بنده با تجربه ای که داشتم متوجه شدم نبایستی سرورها بیش از 60% منابع آن پر شود چون باعث افزایش زمان پردازش می شود.
مثلاً ما در بازی که تست کردیم با 150 کاربر آنلاین سروری با مشخصات قوی ذیل:
CPU: Dual E5-2680v2
RAM: 64GB DDR3
HDD: 120 SSD
سرعت پردازش کلی یک فرآیند بازی از 0.01 ثانیه برای یک بازیکن به 1.9 ثانیه افزایش یافت. این یعنی اینکه کاربری که مثلاً می خواست عملیاتی در بازی انجام دهد بایستی 1.9 ثانیه صبر می کرد این یعنی اگر شما سایت خبری دارید و هر صفحه زیر یک ثانیه بازمی شد حالا بالای 2 یا 3 ثانیه طول می کشد تا باز شود. این یعنی اینکه بازی شما بسیار کند و خسته کننده برای بازیکن ها می شود و مرگ زود رسی برای بازی خود بایستی در نظر بگیرید.
حال دیدم یکی از دوستان گفتند سرورهای 10 12 میلیونی را با سرورها و دیتاسنتر فیس بوک مقایسه می کنید؟ این سوال و مقایسه درست نیست چون در نظر بگیرید اگر بازی های آنلاین به اندازه فیسبوک آنلاین کاربر آنلاین داشته باشند شاید دیتاسنتری چند برابر قوی تر از دیتاسنتر موجود فیس بوک نیازمند بود. چه بسا سیستمی که من در بالا ذکر کردم قیمتی معادل 40 میلیون تومان در ایران دارد و جزء قویترین سیستم های موجود در بازار است.
بگذارید قبل از اینکه به بحث بازی برگردم توضیحاتی در مورد اقدامات فیس بوک در زمینه دیتابیس و وب سرور بپردازیم تا پیش زمینه ای مناسب داشته باشیم. ترجیح می دهم در زمینه فیسبوک با سند بجای حدس و گمان صحبت کنم طبق گفته سخنگوی فیسبوک که در کنفرانسی که چند وقت پیش داشت اعدادی فاش کرد که جای بسی تامل است:
- فیسبوک 800 میلیون یوزر دارد که 500 میلیون آن روزانه فیسبوک خود را چک می کنند.
- 300 میلیون کاربر موبایلی دارند که دائماً در حال دریافت و ارسال اطلاعات است.
- 7 میلیون اپلیکیشن دارد
فیس بوک در هر ثانیه 60 میلیون کوئری را انجام می دهد، 4 میلیون row در هر ثانیه تغییر می کند. اما فیسبوک چگونه این کار را انجام می دهد!!!
دیتابیس فیسبوک چیزی نیست جزء همین MySQL که ما استفاده می کنیم. اما Scale Up شده. Scaling در واژه یعنی بزرگ کردن مقیاس. با دیتابیس بر روی کامپیوتر های مختلف تقسیم شده است.
دیتابیس فیسبوک از 3 لایه: کش ، مدیران دیتابیس ، ذخیره سازها تشکیل شده است. طبق گفته فیسبوک بیش از 90% کوئری ها در لایه کش انجام می شود یعنی اینکه این کوئری ها به لایه استفاده از ذخیره سازها نمی رسند.
فیسبوک از پلاگین نام آشنا Memcache استفاده می کند که سیستم متن-باز برای کش کردن در MySQL استفاده می شود و در کنار آن از ماژول خود ساخته ای با نام FlashCache استفاده می کند تا روی هاردهای SSD کش شوند. که این پلاگین هم فیسبوک بصورت رایگان در github منتشر کرده است.
ادامه دارد....
آخرین ویرایش به وسیله pejman_view : چهارشنبه 04 تیر 1393 در 15:54 عصر
ادامه:
در مورد لایه های ذخیره ساز هم اگر بخوام توضیح بدهم لایه های ذخیره ساز به دو صورت عمودی و افقی هستند. لایه های عمودی شامل کامپیوترهایی هستند که اطلاعات مشابه به هم در آن ذخیره می شود تا با نابودی هر لایه عمودی ، لایه عمودی دیگر کمک رسانی کند و از دست رفتن اطلاعات جلوگیری شود. چون دیتابیس فیس بوک اینقدر بزرگ است که یک کامپیوتر بعنوان Data Node در زیر مجموعه لایه عمودی توانایی ذخیره این حجم اطلاعات را نداشته باشد. آن ها را با تکنیک Sharding تقسیم می کنند (البته این تکنیک در خود MySQL موجود است فقط بایستی از آن بهره جست). و در هر کامپیوتر مقداری از دیتابیس ذخیره می شود که این روش Horizontal Scaling یا بزرگ کردن افقی دیتابیس گفته می شود.
در کل چند کپی از دیتابیس ذخیره شده و هر کپی هم بخاطر بزرگی آن روی چندین کامپیوتر دیگر ذخیره می شود. با این سبک می توان مطمئن بود که اگر شما کامپیوتری را از مدار خارج کردید سایت شما بدون هیچ مشکل به کار خود ادامه می دهد.
و لایه مدیران هم که توضیح دادم کار آن رسیدگی و پردازش Data Node هاست.
وب سرور فیسبوک هم Tornado نام دارد که در کنار nginx نصب می شود. که توانایی nginx را تا چند برابر افزایش می دهد. ساز و کار وب سرور nginx هم مانند دیتابیس است و قابلیت scaling دارد بگونه ای که 10 ها کامپیوتر بعنوان webserver به کاربران پاسخ می دهند و فشار آن ها را روی هم تقسیم می کنند.
خوب حالا رسیدیم به بحث شیرین بازی. من خودم تا اینجا ذهنم خسته شده اما می خواستم توی یک پست جمعش کنم.
برای یک بازی تحت وب - به وب سرور نیاز دارید و بایستی بدانید یک وب سرور برای فرضاً 3000 بازیکن پاسخگو نخواهد بود.
برای یک بازی تحت وب - به دیتابیس نیاز دارید که شما برای دیتابیس توجه داشته باشید لاگ ها ، جداول و ... همه در آن ذخیره می شوند. و با هر بار لود صفحه چند صد کوئری به سمت دیتابیس سرازیر می شود که اگر می خواهید سرعت پردازش شما که در اول به آن اشاره کردم بالا نرود نیاز به لایه های کش ، مدیریت و ذخیره ساز دارید. البته این لایه ها همگی می توانند روی یک کامپیوتر باشند اما تجربه ما ثابت کرده یک کامپیوتر نمی تواند همه این ها را ساپورت کند. بعد جالبی قضیه این است که دیگر تراوین لازم ندارد برای سرورهای خود سرورهای جداگانه راه اندازی کند فقط کافی است تمامی دنیاهای خود را روی یک دیتابیس با این آرشیتکت نگه دارد. هم تا حتی 40% سیستم کمتر نیاز دارد یعنی فرضاً اگر برای هر دنیا نیاز به 5 تا سرور داشته باشد. حال اگر 3 دنیا را در کنار هم روی یک دیتابیس نصب کند ممکن است بجای 15 سرور بتواند از 12 سرور استفاده کند.
بالتبع برنامه نویسی و تحلیل های خودتان هم برای ساخت شروع بازی باید روی این آرشیتکت های دیتابیس متوجه شده باشد تا بعد از راه اندازی به این تکاپو نیفتید که کد خود را تغییر دهید چون آن موقع برای تجارت شما خیلی دیر است.
ببخشید سرتان را درد آوردم مطلب خیلی گسترده بود سعی کردم خلاصه اش کنم.
با آرزوی موفقیت
قاسمی
در پی اچ پی براحتی میتوانید از MEMCACHED استفاده کنید.دیتابیس فیسبوک چیزی نیست جزء همین MySQL که ما استفاده می کنیم. اما Scale Up شده. Scaling در واژه یعنی بزرگ کردن مقیاس. با دیتابیس بر روی کامپیوتر های مختلف تقسیم شده است.
دیتابیس فیسبوک از 3 لایه: کش ، مدیران دیتابیس ، ذخیره سازها تشکیل شده است. طبق گفته فیسبوک بیش از 90% کوئری ها در لایه کش انجام می شود یعنی اینکه این کوئری ها به لایه استفاده از ذخیره سازها نمی رسند.
فیسبوک از پلاگین نام آشنا Memcache استفاده می کند که سیستم متن-باز برای کش کردن در MySQL استفاده می شود و در کنار آن از ماژول خود ساخته ای با نام FlashCache استفاده می کند تا روی هاردهای SSD کش شوند. که این پلاگین هم فیسبوک بصورت رایگان در github منتشر کرده است.
http://www.php.net/manual/en/book.mysqlnd-memcache.php
اما باید رم بالایی داشته باشیم.
شاید چون حجم مساوی از رم نسبت به انواع دیگر حافظه خیلی گرونتره و محدودیت های فنی هم ممکنه داشته باشه (ساپورت CPU و مادربورد و این حرفا کلا)، اومدن و یجورایی درایوهای حجیم SSD رو بجای حجم زیادی از رم استفاده کردن.
طبیعتا استفاده از هاردهای معمولی این خاصیت رو نداره چون سرعتش پایینه. اما سرعت SSD از هارد مغناطیسی بیشتره (نمیدونم تا چه حد به RAM نزدیکه).
هارد ssd خیلی توی سرعت خوندن و درج اطلاعات تغییر ایجاد میکنه من یادم میاد با هارد قبلی سیستم می خواستم برای تست 5 میلیون رکورد رو با while اضافه کنم فکر کنم 10 دقیقه طول کشید ولی وقتی هارد ssd گذاشتم روی سیستم چند هفته پیش تست کردم کمتر از 1 دقیقه این اطلاعات رو ذخیره کرد الانم که اکثر دیتاسنتر ها سرویس های ssd رو میدن حتی ایرانی ها
بله هارد های ssd حدودا سرعتش همین مقدار هست بستگی به مارک داره اینی که من استفاده می کنم 550 mb هست ولی انتقال از خود هارد به خود هارد 3gb در ثانیه هست که اون خوب استفاده نمیشه ولی قیمت از رم خیلی کمتر هست مثلا 120gb حدودو 300 تومان هست رم 4 گیگ حدودا 120 تومان هست
به نظر من ترکیب باشید باشه من بعضی از قسمت ها که کم تغییر می کنه توسط کاربر رو از طریق فایل کش می کنم اینجوری دیتابیس کمتر درگیر میشه سرعت هم بیشتر میشه ولی پیشنهاد من اینه سیستم رو راه اندازی کنید سیستم اجرا کنید مثلا اگه سیستم 100 قسمت داره هر روز یک قسمت رو روی کش کار کنید اینجوری مشکلی هم اگه به وجود بیاد سریع معلوم میشه و حل میشه
خوب اگر ما از memchached استفاده کنیم و هم بیاییم خودمان کش کنیم یعنی داریم از منابع سیستم بیشتر استفاده میکنیم.
memchaed تا جایی که می دونم توی رم ذخیره میشه البته زیاد کار باهاش نکردم سرعت رو زیاد می کنه ولی هزینه زیادی رو داره روی سرور پروژه ای که الان داره تست میشه وقتی اون روش فایل رو روی صفحه که حدودا 10 کوئری توی صفحه داشت 3 تاش رو بردم روی فایل سرعت لود مقداری کم شد من توی کش تجربه خیلی زیادی ندارم ولی این کار جواب گو هست برای کار ما فعلا البته کسی که سرور رو کانفیگ می کرد پیشنهاد کرد اطلاعات اگر زیاد شد سرور دیتابیس رو جدا کنیم و بریم روی mongodb که فعلا ما مشکلی نداریم و کاملا از نظر سرعت سیستم خوب کار می کنه
راستی بین memcached و memcache کلی تفاوت هست و دو مبحث جداگانه هستند ! خیلی جالب هست
http://stackoverflow.com/questions/1...d-of-memcached
به نظر من از Redis استفاده کنید بهتره. صرفا تنها یک سیستم کش Key Value نیست و از Data Type های بیشتری به صورت Native پشتیبانی میککنه. جستجو توی لیست هاش. بررسی تکراری بودن مقادیر. مرتب سازی و خیلی کارای دیگه به صورت Native درون خودش میتونه صورت بگیره ک به زبان C++ نوشته شده و سرعتش در انجام کارای بالا از php خیلی بیشتره.
در Redis بر خلاف memcache شما اطلاعاتتون رو هنگام ریستارت سرور یا اتفاقات دیگه از دست نمیدید. Redis با استفاده از روشهایی ک ارایه میده این اجازه رو بهتون میده تا اطلاعاتتون رو روی دیسک ذخیره داشته باشید.
Redis برای ذخیره سازی روی رم از الگوریتم های خاصی استفاده میکنه ک فضای هدررفت رو به حداقل میرسونه.
مثلا اعداد صحیح کوچیک رو به صورت 16 یا 32 بیتی ذخیره میکنه و وقتی اعداد بزرگ شن نوع ذخیره سازیش عوض میشه و 64 میشه ک فضاش بیشتر میشه.
یک قابلیت دیگش ذخیره سازی در سطح بیت روی رمه. مثلا طبق چیزی ک خودش توی سایتش نوشته و منم تست کردم. شما میتونید مقادیری ک دو حالتی هستن رو به صورت بیت ذخیره کنید. برای ذخیره سازی جنسیت, مقدار یک یعنی مرد و مقدار خالی یعنی زن. با این نوع ذخیره سازی, میشه اطلاعات مربوط ب 100 میلیون کاربر رو تنها توی 12 مگ رم ذخیره کرد!!
Redis
آخرین ویرایش به وسیله metal gear solid 4 : جمعه 06 تیر 1393 در 09:49 صبح
منو باش که فکر میکردم با 10-15 تومن میشه یه بازی آنلاین راه انداخت :|
با سلام
راجع به سوال اولت، این بازیا روی سرور اختصاصی اجرا میشن در نتیجه یه برنامه اپلیکشنم معمولا دارن که رویه کارایه بانک و سایر فعالیت های خودکار مدیریت داره که اکثرا مربوط به دیتا بیس میشه، این برنامه همیشه روی سرور در حال اجراست و اون کارایی که شما مدنظرتون بود رو تو زمان مشخص شده، انجام میدن البته با کرون جابم میشه ولی برنامه اختصاصی بهتره.
جوابا زیاد بود نخوندمشون، نمیدونم تو نستی جوابتو بگیری یا نه، من فرضو بر این گرفتم که جوابتو نگرفتی ()!
آخرین ویرایش به وسیله amg_123 : یک شنبه 21 تیر 1394 در 19:46 عصر