سرعت فضایی Scala و Play Framework و Mongo

so_happy_small

از شعف در پوست خود نمی‌گنجم!

برای پروژه اخیر اسکالا یک سرور مجازی بر روی یک سرور مجازی دیگر راه انداختم. چون سرور اصلی مجازی بود VMWare جواب نداد و از VirtualBox و مد Binary Translation که کندترین حالت مجازی سازی است استفاده کردم. ۱ گیگابایت رم و ۴۰ گیگابایت هارد به آن اختصاص دادم. یک سرور ۳۲ بیتی اوبتو ۱۲.۰۴ روی آن نصب کردم. بعد جاوا، MongoDB، Play Framework و بقیه. و خلاصه پروژه را رویش بالا آوردم.

یک سرور Git هم برای خودکار سازی انتشار برنامه بر روی سرور نصب کردم و با یک اسکریپت ساده برنامه را بر روی سرور Publish می‌کنم.

سرعت اجرا و پاسخگویی برنامه واقعاً عجیب است! یک لحظه شک کردم که شاید دارم با نسخه روی سیستم خودم کار می‌کنم. به یکی از بچه‌ها هم زنگ زدم و خواستم سایت را چک کند. او هم از سرعت بالای سایت تعجب کرد. همه چیز عالی و با سرعت و دقت کار می‌کند در حالی که فقط حدود ۱۰۰ مگابایت از رم سرور مصرف شده بود با فقط یک CPU  تک هسته‌ای ۳۲ بیتی که دو مرتبه مجازی سازی شده! 

رکوردهای یکی از جداول را زیادتر کردم تا به تعداد بیشتر از ۲۶۰،۰۰۰ رکورد رسید و کلی اطلاعات دیگر به سیستم اضافه شد. بعد از چند ساعت کار کردن با سرور، رم مصرفی کل سیستم (به جز cache) به ۴۴۰ مگابایت رسید ولی باز هم باورد کردنی نیست. یعنی خود لینوکس، جاوا، برنامه‌ها، بانک اطلاعات و خلاصه همه چیز، فقط ۴۰۰ مگابایت!!!

Screenshot from 2014-03-06 00:42:36

البته قبلاً با ۱ میلیون رکورد روی سیستم خودم (که آن هم لینوکس است) تست کرده بودم و باز هم سرعت باور نکردنی بود! ولی فکر نمی‌کردم با چنین سرور ضعیفی چنین پاسخی بگیرم.

همین تعداد رکورد را در SQL Server دارم. در حالتی که سر سرور خلوت است فقط ۸۰۰ مگابایت توسط SQL Server به تنهایی مصرف می‌شود! همیشه مجبور بودم یک سرور ویندوزی با حداقل ۴ گیگابایت رم تهیه کنم و برای SQL Server حتما از نسخه Standard یا Enterprise (نسخه‌های دزدی) استفاده کنم تا بتواند بیشتر از ۱ گیگابایت رم را استفاده کند و سرعت خوبی داشته باشد. خود ویندوز و دات نت و بقیه برنامه‌ها هم که بقیه رم را مصرف می‌کردند و تقریبا چیزی باقی نمی‌ماند.

Screenshot from 2014-03-06 00:50:07

متاسفانه بخاطر مسائل امنیتی تا کامل شدن کار فعلاً نمی‌توانم لینک وب سایت را منتشر کنم ولی به زودی این کار را خواهم کرد.

پیشنهاد می‌کنم اگر تجربه‌ی کار با لینوکس را ندارید حتماً در اولین فرصت شروع کنید.

7 دیدگاه برای «سرعت فضایی Scala و Play Framework و Mongo»

    1. چرا MongoDB قطعاً رایگانه. AGPL به طور خلاصه یعنی اگر تغییری روی سورس دادی حتماً باید سورسش هم به صورت رایگان مثل خود mongo ارائه بدی و نمی‌تونی واسه خودت توی پروژه خودت استفاده کنی و مثلاً یک اسم دیگه روش بذاری و به مشتری (بدون ارائه سورس) بفروشی! به همین خاطر معمولا نمی‌تونی mongo (یا هر چیزی که GPL/AGPL هست) رو Embed کنی توی برنامه تجاری خودت چون اونوقت مجبور می‌شی برنامه خودت رو هم متن باز کنی. اما Mongodb اصلا قابل Embed شدن نیست و به صورت یه برنامه مستقل اجرا می‌شه و هیچ مشکلی در این زمینه وجود نداره.
      http://programmers.stackexchange.com/questions/139130/how-does-the-mongodb-licence-define-commercial-and-non-commercial-use

      اگر پایین‌تر همون صفحه که لینک دادی (لایسنس mongo) رو نگاه کنی می‌بیینی که حتی درایور‌های mongo با لایسنس Apache منتشر شدن. به این خاطر که درایورها داخل برنامه شما قرار میگیرن و اوضاع متفاوت می‌شه حالا اینجا لایسنس Apache هست که دیگه لازم نباشه بخاطر استفاده از درایورهای mongo کل سورس برنامه رو در اختیار همه قرار بدی.

      در کل AGPL مثل GPL هست فقط برای برنامه‌های سرویس دهنده بهتر شده و به هیچ عنوان از استفاده تجاری از برنامه جلوگیری نمی‌کنه فقط مطمئن می‌شه که همیشه سورس برنامه در دسترس هست و کسی که از برنامه استفاده کنه و تغییری روش بده باید اجازه بده بقیه از اون تغییر بهره ببرن.

      قبل از اینکه بیام روی mongo مدت زیادی توی این لایسنس‌ها می‌چرخیدم تا یه چیز Free درست پیدا کنم. مثلاً RaveanDB این حالتی که شما می‌گی داره و هیچ رقمه نمی‌شه Free ازش استفاده کرد.

  1. سرعت بالای برنامه‌ها واقعاً برای هر کسی وسوسه کننده است. ما که توفیق استفاده از لینوکس و جاوا و این فناوری‌های جدید که اسم بردی را هیچ وقت نداشتیم اما تجربه جالبی از جیرا دارم. جیرا یک application نسبتاً بزرگ جاوایی است که با tom cat و این طور چیزها اجرا می‌شود. من جیرا را روی یک سرور ویندوزی نصب دارم و همیشه سرعت قابل قبولی دارد. در حالی که روی همان سرور برنامه‌های ساده ویندوزی هم گهگاه با مشکلات عدیده سرعتی روبرو هستند.

    1. من قبلاً فکر می‌کردم کلا جاوا باید خیلی سنگین باشه ولی کاملاً با تصوری که داشتم متفاوته. یه موضوع مهمتر اینه که Tomcat و اینطور Containerها باز هم سرباره دارن. چارچوب Play روی این تاکید داره که بدون هیچ Containerی برنامه‌ت رو اجرا کنی و این توی سبکی خیلی تاثیر داره.

  2. درباره mongodb همان طور که امیر کریمی گفت رایگانه مگر این که بخواهید تغییری در سورس آن بدهید که برای این کار هم دلیل دارند چون ممکن است شرکتی تغییرات خوبی در موتور پایگاه داده انجام دهد ولی آن را برای عموم منتشر نکند که با این لایسنس باعث رشد این پایگاه داده می شوند .

  3. اینایی که گفتی واقعا تکنولوژی های به روزیه.من خودم خیلی علاقه دارم یاد بگیرم ولی با امکاناتی که هست همین راه اندازی دو تا vps احتمالن یاد گرفتنش یه دو سه روزی طول بکشه.شما می تونی همین تجربتو به صورت یه فایل آموزشی ضبط کنی چون واقعن عالی میشه.

    1. آره حتما تو برنامه‌م هست که یه سری آموزشی مبتدی برای scala و mongo درست کنم. از اونجایی که تنها شغل ما توسعه نرم‌افزاره همین مهاجرت به اسکالا و متن باز باعث شد خیلی کارام فشرده و سخت بشه ایشالا یه کم اوضاع آروم بشه شروع می‌کنم. البته بهترین کار مطالعه منابع اصلی هست و فقط برای شروع خوبه که از فیلم و اینجور چیزا استفاده کرد.

پاسخ دهید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *