در صورتی که تعداد کاربران و حجم محتوای شبکه طراحی شده با استفاده از موتوشاب زیاد باشد، نیاز به تنظیمات پیشرفته بر روی کارگزار ضروری میگردد. به طور کلی اقدامات لازم جهت تنظیم و بهبود کارایی موتوشاب را میتوان به دو دسته تقسیم کرد که عبارتاند از:
در ادامه به شرح هر کدام از این موارد پرداخته شده است.
اگرچه انتخابهای گوناگونی برای کارگزار وجود دارد، اما کارگزار پیشفرض پشتیبانی شده در موتور شبکه اجتماعی موتوشاب Apache است. البته امکان استفاده از کارگزارهای دیگری مانند nginx نیز وجود دارد که بر حسب نیاز و بر اساس توان فنی تیم استفاده کننده از موتور، میتوانند جایگزین Apache شوند. در ابتدا میبایست تصریح شود که اکیدا توصیه میشود کارگزار وب Apache بر روی سیستمعامل ویندوز راهاندازی نشود. چرا که تنها ماژول چندپردازهای 1 آپاچی در سیستمعامل ویندوز winnt است. این ماژول ضعفهای مختلفی دارد که هنگام درخواستهای بسیار زیاد ممکن است دچار اختلال شود. در شکل 1 تصویری از توقف عملکرد Apache هنگام پردازش تعداد زیادی درخواست قابل مشاهده است.
شکل 1: تصویری از توقف عملکرد Apache هنگام پردازش درخواستهای زیاد
در لینوکس بر خلاف ویندوز به صورت پیشفرض از فناوری prefork به عنوان ماژول چند پردازهای برای کارگزار وب Apache استفاده شده است که موجب تسریع اجرای کدهای PHP میشود. همچنین توصیه میشود که همواره از جدیدترین نسخه Apache استفاده شود.
به جهت تنظیم کارگزار وب میبایست تنظیمات زیر بر روی کارگزار صورت پذیرد:
تنظیم موارد فوق در فایل زیر صورت میپذیرد.
/etc/apache2/mods-available/mpm_prefork.conf
به عنوان مثال تنظیمات زیر در فایل mpm_prefork.conf برای یک سختافزار با حافظه اصلی 3 با حجم 16G و پردازنده با چهار هسته که حجم کاربران آن بین 100 الی 10000 نفر باشد و همچنین بر روی آن کارگزار پایگاهداده نیز نصب باشد، در محیط آزمایشی سنجیده شده و نتایج مناسبی از لحاظ کارایی ارائه داده است.
<IfModule mpm_prefork_module> StartServers 20 MinSpareServers 10 MaxSpareServers 40 MaxRequestWorkers 512 ServerLimit 512 MaxConnectionsPerChild 0 </IfModule>
در تنظیمات فوق در حالت عادی 20 کارگر آماده پاسخگویی به درخواستها هستند. همچنین سامانه قادر به ایجاد حداکثر 512 کارگر برای پاسخگویی خواهد بود. مازاد این مقدار به صف پردازش منتقل خواهد شد.
نکته: مقادیر فوق صرفا جهت ارائه یک حدود از تنظیمات مناسب بوده و تعیین مقادیر مناسب برای هر وبگاه مستلزم تحلیل، بررسی و آزمایش کارگزار است. چرا که عوامل بسیاری در تعیین این تنظیمات دخیل هستند از جمله:
* تعداد کاربران سامانه
* میانگین تعداد کاربران برخط در ساعات شلوغ
* سناریوهای پرتکرار در استفاده از سامانه. به عنوان مثال مشاهده صفحه «داشبورد» یکی از سناریوهای پرتکرار است. اگرچه وابسته به کاربران سامانه ممکن است سناریوهای پرکاربرد متفاوت باشد.
در نتیجه موارد فوق، ارائه یک نسخه برای پیکربندی امری غیرممکن بوده و میبایست شرایط را به دقت سنجید. پیشنهاد میشود که در ابتدا تغییری در تنظیمات Apache ایجاد نشود. در واقع میبایست پس از اجرای برخی آزمونها و نظارت بر کارگزار تغییر را آغاز کرده و تغییرات را قدمبهقدم اعمال کرد.
موتوشاب از پایگاهداده MySQL استفاده میکند. اگرچه استفاده از دیگر توزیعهای این پایگاهداده مانند MariaDB نیز مجاز است، در این بخش به شرح تنظیمات لازم برای افزایش کارایی MySQL پرداخته شده است.
پیش از هر چیز اکیدا توصیه میشود که از آخرین نسخه MySQL استفاده شود. MySQL در هر نسخه بهبودهای چشمگیری ارائه میکند و علاوه بر آن، تنظیمات پیشفرض نامناسب در نسخههای پیشین را نیز مرتفع میکند.
موتور InnoDB در پایگاهداده MySQL از نسخه 5.5 به بعد این پایگاهداده، بهبودهای چشمگیری یافته است. به گونهای که از دیدگاه متخصصین پایگاههای داده MySQL از جهت کارایی4 و قابلیت اتکا 5 از مهمترین رقیب خود یعنی، MyISAM به طور قابل ملاحظهای پیشی گرفته است. به علاوه در نسخههای 5.6 و سپس 5.7 نیز این برتری بیشازپیش نمایان شده تا آنجا که از نسخه 5.6 به بعد موتور پیشفرض در MySQL به InnoDB تغییر کرده است؛ اما موتور استفادهشده در موتوشاب MyISAM است. در نتیجه، ابتدا با استفاده از تعداد پرسمان میبایست موتور تمامی جداول را به InnoDB تبدیل کرد. بدین مقصود میبایست یک فایل PHP ایجاد کرده و کد زیر را داخل آن قرار داد:
<?php $link=mysql_connect('db_server_url','db_user','db_pass'); $db = 'db_name'; $sql = "SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = '".$db."' AND ENGINE = 'MyISAM';"; $rs = mysql_query($sql,$link); while($row = mysql_fetch_array($rs)) { $tbl = $row[0]; $sql = "ALTER TABLE `$db`.`$tbl` ENGINE=INNODB;"; mysql_query($sql); } ?>
در کد فوق میبایست به جای عبارات «db_server_url»، «db_user»، «db_pass» و «db_name» مقادیر مناسب قرار گرفته و سپس کد مذکور اجرا شود.
اکنون نوبت به اعمال تنظیمات MySQL میرسد. در این مرحله میبایست فایل /etc/mysql/my.cnf را باز و سپس تنظیمات را داخل این فایل وارد کرد. در این راستا تنظیمات زیر میبایست در بخش [mysqld] با مقادیر مناسب وارد شود.
دقیقترین مقدار برای این خصیصه را میتوان با اندازهگیری حجم فایل تاریخچه طی 1-2 ساعت در شلوغترین زمانهای سامانه سنجید:
mysql> pager grep seq mysql> show engine innodb status\G select sleep(60); show engine innodb status\G Log sequence number 1777308180429 ... Log sequence number 1777354541591 mysql> nopager mysql> select (1777354541591-1777308180429)*60/1024/1024; +--------------------------------------------+ | (1777354541591-1777308180429)*60/1024/1024 | +--------------------------------------------+ | 2652.80696869 | +--------------------------------------------+ 1 row in set (0.00 sec)
در آزمایش فوق تغییر حجم فایل تاریخچه طی یک ساعت به میزان 2.6 گیگابایت بوده است. در نتیجه با تنظیم مقدار خصیصه innodb_log_file_size به میزان 2.6G میتوان نتیجه مناسبی را بدست آورد. اما در صورتی که فرصت کافی برای این اندازهگیری وجود ندارد با تنظیم آن بر روی مقدار 1G الی 2G برای یک سامانه پرمخاطب، در شرایط سخت نیز این سامانه به خوبی عمل خواهد کرد.
در صورت انتخاب موارد 0 یا 2، اگر در فاصله زمانی یک ثانیه که هنوز عمل sync اتفاق نیفتاده مشکلی برای پایگاهداده ایجاد شود اطلاعات تراکنش از بین خواهد رفت.
شایان ذکر است که عمل flush سبک و کمهزینه است. در مقابل عمل sync هزینهبر خواهد بود. در نتیجه کاهش تعداد رخداد sync منجر به افزایش کارایی و در مقابل کاهش تضمین تراکنش موفق پس از وقوع مشکل در اجرای MySQL خواهد شد. بنابر نظر کارشناسان مطرح این حوزه، انتخاب موارد 0 یا 2 امنیت اطلاعات را آنقدر کاهش نمیدهد که استفاده از این موارد را غیر منطقی جلوه دهد. در نتیجه در اکثر سیستمها (غیر از سامانههای بانکی یا مشابه آنها که تراکنش در آنها بسیار مهم است) مشکل خاصی ایجاد نمیشود. بنابراین در موتوشاب توصیه میشود اگر عملیات نوشتن بر روی پایگاهداده بر روی کارگزار فشار ایجاد میکند، از مقدار 0 استفاده شود.
پس از اعمال تنظیمات فوق، میبایست MySQL راهاندازی مجدد شود.
همانطور که پیشتر ذکر شد، قبل و پس از تنظیم کارگزار و پایگاهداده میبایست توسط ابزارهای نظارتی 11 کارایی سامانه را دقیق مورد بررسی قرار داد. تنظیم کردن کارگزار بدون اجرای آزمون و نظارت بر نتایج آن منجر به عملکرد بسیار ضعیف و غیرقابل پیشبینی خواهد شد. در این بخش تعدادی از ابزارهای آزمون و نظارتی به عنوان مثال ذکر شده است. تصریح میشود که ابزارهای معرفیشده تنها ابزارهای موجود نبوده و ممکن است ابزارهای پیشرفتهتر و بهتر از موارد مذکور نیز وجود داشته باشد.
به جهت طراحی، پیادهسازی و گزارشگیری از آزمون کارایی میتوان از ابزار Apache Jmeter 12 استفاده کرد. این ابزار به طور کامل توسط زبان Java و با هدف آزمون عملکرد و همچنین کارایی نرمافزارهای تحت وب توسعه یافته است؛ اگرچه نسخههای اخیر آن قابلیت آزمون نرمافزارهایی که تحت وب نیستند را نیز دارد. توسط این ابزار میتوان محیطی با حجم بسیار بالا از درخواستهای موازی را برای سامانه تحت آزمون شبیهسازی کرده و عملکرد سامانه در این محیط را اندازهگیری کرد.
Jmeter نمودارهای گوناگونی نیز از عملکرد سامانه ارائه میکند. به طور دقیقتر توسط این ابزار میتوان پروتکلهای گوناگونی را مورد آزمون قرار داد، مانند:
نکته بسیار مهم اینکه Jmeter یک مرورگر نبوده و حتی مشابه ابزار Selenium از یک مرورگر استفاده نمیکند. بلکه رفتار یک مرورگر را به صورت ساده شبیهسازی میکند. به عنوان مثال Jmeter قابلیتهایی چون نگهداری و ارسال کوکی 13 ، تولید درخواست به کارگزار مشابه مرورگرها و برخی از ویژگیهای یک مرورگر را پشتیبانی میکند؛ اما قدرت تفسیر جاوااسکریپتهای صفحه و همچنین CSSها را ندارد. در عوض به علت سبک بودن پردازش صفحات، قادر است تا بر روی یک رایانه شخصی تا چندهزار کاربر موازی را شبیهسازی کند. در شکل 2 نمایی از این نرمافزار قابل مشاهده است.
به طور کلی نظارت بر عملکرد کارگزار وب را میتوان به دو جنبه تقسیم کرد:
در ادامه به شرح ابزارهای ذکرشده و همچنین نحوه استفاده از آنها پرداخته شده است.
NetData
NetData ابزاری توسعهیافته توسط زبان Nodejs بوده که بر خلاف اغلب ابزارهای موجود، به طور لحظهای گزارشات متعددی را از وضعیت منابع سیستمعامل ارائه میکند، از جمله:
نمایی از NetData در شکل 3 قابل مشاهده است. در صفحه اصلی این ابزار داشبوردی حاوی اطلاعات لحظهای مصرف پردازنده، حافظه اصلی، خواندن/نوشتن بر روی حافظه و پهنای باند مصرفی قابل مشاهده است. همچنین در شکل 4 نمایی از نمودارهای وضعیت پردازنده در طول زمان قابل مشاهده است. هر کدام از نمودارها وضعیت یک هسته پردازنده را مشخص میکند. از این شکل پیداست که یک بازه زمانی کوتاه بار پردازشی زیادی به پردازنده وارد شده و در مابقی زمانها، پردازنده مشغول پردازش خاصی نبوده است. همچنین در NetData این اطلاعات را میتوان به تفکیک کاربران سیستمعامل مشاهده کرد. به عنوان مثال با مشاهده اطلاعات مربوط به کاربر www-data که مربوط به Apache است، میتوان منابعی که فقط کارگزار وب مصرف میکند را مشاهده کرد.
شکل 3: بخشی از قابلیتهای netdata
شکل 4: نمایی از نمودار مصرف CPU در طی زمان. هر کدام از نمودارها وضعیت یک هسته CPU را مشخص میکند.
htop
htop یک برنامه داخل خط فرمان لینوکس است که پردازههای فعلی سامانه را لحظهبهلحظه نمایش میدهد. همچنین وضعیت هستههای پردازنده و حافظه اصلی توسط آن به صورت گرافیکی و البته ساده قابل مشاهده است. توسط این برنامه میتوان پردازهها را بر اساس کاربر، میزان مصرف حافظه اصلی، میزان مصرف پردازنده و غیره مرتب کرد. مزیت این ابزار نسبت به NetData در سادگی استفاده و راهاندازی، نمایش پردازههای سیستمعامل به صورت دقیقتر و کاملتر و همراه با بار پردازشی کمتر برای سیستمعامل است. در شکل 5 نمایی از این نرمافزار قابل مشاهده است. همانطور که از شکل پیداست، وضعیت هشت عدد هسته پردازنده در بالای تصویر قابل مشاهده است و فهرست پردازههای فعلی سیستمعامل در یک جدول قابل مشاهده است.
ماژول Apache Status
اگرچه ابزار netdata گزارشات دقیقی از وضعیت پردازهها، کاربران و گروههای سیستمعامل ارائه میکند، اما برای ارزیابی کارایی، شناسایی چالشها و رفع ایرادات اطلاعات دقیقتری از تمامی کارگزارهای Apache مورد نیاز است. به عنوان مثال اینکه در هر لحظه چند کارگر کارگزار در حال اجرا هستند، چه مقدار از این موارد مشغول پردازش بوده، چه مقدار بیکار هستند و غیره. به علاوه ماژول Apache Status به سادگی بر روی کارگزار قابل نصب بوده و بار پردازشی کمی بر روی کارگزار اعمال میکند. در شکل 6 نمایی از گزارش ارائهشده توسط Apache Status قابل مشاهده است. در قسمت فوقانی تصویر اطلاعاتی در خصوص کارگزار، میزان مصرف پردازنده، وضعیت ترافیک، نرخ درخواستها و از همه مهمتر تعداد درخواستهایی که اکنون سامانه در حال پردازش آنها است قابل مشاهده است. نقاط موجود در میانه تصویر هر کدام یک کارگر کارگزار وب را نشان میدهد که در صورت لزوم به یک پردازه تبدیل شده و درخواست را پردازش خواهند کرد. در صورتی که نقطه به «_» تبدیل شود بدان معناست که Apache برای آن کارگر یک پردازه ایجاد کرده است که منتظر درخواست برای پردازش است. در صورتی که حالت به «W» تبدیل شود، بدان معناست که پردازه در حال پردازش و ارسال پاسخ است. سایر حالات پردازهها با مراجعه به مستندات Apache Status قابل مشاهده است.
شکل 6: نمایی از گزارش Apache Status در خصوص وضعیت کارگزار وب
به طور کلی عملکرد پایگاهداده به طور مشابه با کارگزار وب از دو وجه میبایست بررسی شود:
طریقه بهرهگیری از ابزارهای netdata و htop پیشتر شرح داده شد. در ادامه به شرح ابزارهای مورد استفاده به جهت نظارت بر عملکرد پایگاهداده پرداخته شده است.
امکانات نظارتی ارائهشده توسط MySQL
قابلیتهای نظارتی ارائهشده توسط MySQL که در ارزیابی عملکرد و کارایی پایگاهداده میتوان از آنها استفاده کرد به شرح زیر است:
شکل 7: آمارهای ارائهشده توسط دستور SHOW GLOBAL STATUS
ابزار عیبیابی موتوشاب
با فعالسازی PROFILER_ENABLE در فایل config.php موتوشاب، در هر درخواست، تمامی پرسمانهای پایگاهداده به همراه زمان اجرای هر کدام قابل مشاهده است. به علاوه زمان اجرای توابع PHP نیز در این گزارش قابل مشاهده است.
شکل 8: تصویری از ابزار نمایش پرسمانهای پایگاهداده توسط موتوشاب
percona-toolkit 16
این بسته نرمافزاری حاوی تعداد زیادی ابزار برای نظارت بر عملکرد و کارایی MySQL است. ابزارهای ارائهشده در خطفرمان سیستمعامل قابل دسترس بوده و عملا واسط کاربری گرافیکی ندارند. شایان ذکر است که ابزارهای ارائهشده توسط شرکت Oracle برای نظارت بر کارایی MySQL به مراتب پیشرفتهتر هستند اما اغلب این موارد رایگان نیستند.
به عنوان مثالی از ابزارهای percona-toolkit میتوان به pt-query-digest اشاره کرد. ورودی این ابزار تاریخچه پرسمانهای اجراشده توسط MySQL است که توسط فعالسازی تنظیم slow_query_log ایجاد خواهد شد. خروجی این ابزار گزارش دقیق از پرسمانهای سنگین سامانه و آمار و ارقام مرتبط با آنها است؛ بنابراین کافی است پرسمانهای کند اجراشده طی مدت مشخصی را توسط MySQL ثبت کرده و به ابزار pt-query-digest داد تا این ابزار گزارش دقیقی از پرسمانهای کند مرتبشده بر اساس میانگین زمان اجرا ارائه کند. شایان ذکر است که percona-toolkit علاوه بر pt-query-digest شامل 31 ابزار دیگر نیز بوده که از بین آنها میتوان به موارد زیر اشاره کرد:
به عنوان مثالی از ابزارهای percona-toolkit میتوان به pt-query-digest اشاره کرد. ورودی این ابزار تاریخچه پرسمانهای اجراشده توسط MySQL است که توسط فعالسازی تنظیم slow_query_log ایجاد خواهد شد. خروجی این ابزار گزارش دقیق از پرسمانهای سنگین سامانه و آمار و ارقام مرتبط با آنها است؛ بنابراین کافی است پرسمانهای کند اجراشده طی مدت مشخصی را توسط MySQL ثبت کرده و به ابزار pt-query-digest داد تا این ابزار گزارش دقیقی از پرسمانهای کند مرتبشده بر اساس میانگین زمان اجرا ارائه کند. شایان ذکر است که percona-toolkit علاوه بر pt-query-digest شامل 31 ابزار دیگر نیز بوده که از بین آنها میتوان به موارد زیر اشاره کرد:
تاکنون صرفا پیکربندی کارگزار وب و همچنین کارگزار پایگاهداده با هدف بهبود کارایی موتوشاب شرح داده شد. اما رویکردهای دیگری نیز به جهت افزایش کارایی موتوشاب وجود دارد که در این بخش به صورت مختصر به آنها اشاره شده است.
یکی از اقدامات اولیه برای افزایش کارایی موتوشاب اجرای کارگزار پایگاهداده بر روی یک ماشین مجزا است. در نتیجه مصرف منابع از طرف کارگزار وب و پایگاهداده تاثیری بر روی عملکرد یکدیگر نخواهد داشت. باید توجه داشت که بر اساس آزمونهای صورت گرفته در شرایط آزمایشگاهی، چالش اصلی در افزایش کارایی موتوشاب پایگاهداده است. در نتیجه با ایزوله کردن پایگاهداده میتوان تنظیمات این کارگزار را بدون دغدغه از اثرات جانبی به بیشینه مقدار ممکن تعیین نمود و همچنین در حین اجرا بر آن نظارت کرد.
تعداد زیادی از درخواستهای ارسالشده به کارگزار وب معمولا درخواستهای مربوط به دریافت فایلهای CSS، جاوااسکریپت و تصاویر است. در نتیجه یکی از راههای موثر در کاهش قابل توجه تعداد درخواستهای ارسالشده به کارگزار وب استفاده از شبکههای توزیع محتوا است.
بر اساس ارزیابیهای صورت گرفته و گزارشات ارائه شده در سطح اینترنت، کارگزار وب Nginx کارایی بیشتر و مصرف منابع کمتری نسبت به Apache دارد. در نتیجه یکی از اقدامات موثر در راستای افزایش کارایی موتوشاب تغییر کارگزار وب از Apache به Nginx است.
ازآنجاکه در موتوشاب لایه داده به خوبی از لایه برنامه 17 جدا شده است، میتوان لایه برنامه را بر روی چند کارگزار وب چنان اجرا کرد که همگی از یک پایگاهداده استفاده کنند؛ بنابراین مسئله قابلیت اجرای موازی بر روی چند کارگزار وب با توجه به معماری موتوشاب قابلحل خواهد بود.
بحث مهمی که در ادامه مبحث توزیع در نرمافزار مطرح میشود توازن بار کاری18 است. کاربران سامانه نباید از بیرون متوجه توزیعشدگی سامانه شوند. درنتیجه یک کارگزار نقش دریافتکننده درخواست و ارسال آن به کارگزار(های) برنامه مناسب را دارد. این کارگزار باید درخواستها را به نحو متوازن بین سایر کارگزاران پخش کند. چالشی که در چنین شرایطی مطرح میشود نحوه نگهداری نشست19 کاربران بوده که با استفاده از فناوری memcached مرتفع میگردد.
با نگاهی دقیق به معماری لایهداده در موتوشاب پیشفرض پایگاه داده رابطهای20 در آن موج میزند. درنتیجه امکان استفاده از پایگاه دادههای NoSQL که به صورت پیشفرض قابلیت توزیعشوندگی را دارا هستند، در موتوشاب تغییر اساسی معماری را میطلبد که ریسک بسیار بالایی را در پروژه به همراه دارد و قابلیت بهروزرسانی نرمافزار را با توجه به حجم بالای تغییر با خطر جدی مواجه خواهد کرد.
اغلب شبکههای اجتماعی بزرگ مانند Facebook و Pinterest در ابتدا با پایگاهداده رابطهای کار خود را آغاز کردند. کاربران و محتوای این شبکهها پس از مدتی افزایش چشمگیر یافت و سازندگان این خدمات عمومی راهحلهایی برای فراهمسازی مقیاسپذیری در لایه داده مبتنی بر پایگاه داده رابطهای ابداع کردند. یکی از این راهحلها استفاده از معماری ارباب/ برده 21 در سطح پایگاه داده بوده که ویژگیهای آن به شرح زیر است:
* این معماری مبتنی بر این باور است که در خدمات عمومی حجم بازیابی اطلاعات از ثبت و بهروزرسانی آن به مراتب بالاتر است. از آنجا که این عقیده در شبکههای اجتماعی کاملاً صدق میکند، درنتیجه در این معماری کارگشا خواهد بود.
شکل 9: معماری عمومی پایگاه داده ارباب/ برده
با توجه به جداسازی لایه داده در موتوشاب میتوان عملیات بازیابی اطلاعات را به بردهها ارسال کرده و نوشتن و بهروزرسانی را به ارباب ارسال کرد. درواقع کنترل اتصال به پایگاه داده و ارسال پرسمانها به صورت مرکزی صورت میپذیرد. درنتیجه تغییر چنین رفتاری کار چندان دشواری به نظر نمیرسد. در انتها دوباره تاکید میشود که بهروزرسانی پایگاههای داده برده از روی ارباب در لایه پایگاهداده و از طریق عملیات همانندسازی صورت میپذیرد و ارتباطی با موتوشاب ندارد.
به طور کلی کارگزار نام، وظیفه دریافت دامنه یک کارگزار و در عوض تعیین آیپی آن را دارد. با استفاده از ساز و کار توازن بار کاری22 از طریق یک کارگزار نام میتوان درخواستهای ارسالشده به سامانه را بین کارگزاران مختلف پخش کرده و بدین ترتیب یک توازن در تعداد درخواستهای ارسالشده به هر کارگزار برقرار کرد. از طریق این سازوکار میتوان به مراتب مؤثرتر نیز عمل کرد؛ بدینصورت که کارگزار نام، کارگزاری را به عنوان صاحب نام به کاربر معرفی میکند که از جهت جغرافیایی به آن نزدیکتر باشد. به عنوان مثال کاربری که از ایران قصد اتصال به شبکه اجتماعی را دارد به کارگزاری در داخل ایران متصل شده و کاربری که از یک کشور خارجی قصد اتصال به شبکه اجتماعی را دارد به کارگزار نزدیکتر از جهت جغرافیایی متصل شود. حالآنکه هر دو کاربر دامنه وبگاه را یکسان میپندارند؛ بنابراین این وظیفه کارگزار نام است که آیپی مناسب را به هر کاربر معرفی کند.
باید توجه کرد که این قابلیت مستقل از برنامه کاربردی بوده و میتوان آن را برای هر سامانهای که قابلیت نصب و راهاندازی در چند کارگزار را دارا است راهاندازی کرد؛ بنابراین در صورت توزیع موتوشاب میتوان از این سازوکار نیز بهره برد.
اگرچه به نظر میرسد با توزیع لایه برنامهکاربردی و همچنین لایه پایگاهداده مسئله مقیاسپذیری حل میشود، اما سناریوهایی وجود دارند که بار پردازشی بسیاری را بر روی کارگزاران پایگاهداده تحمیل میکنند. به عنوان مثال در تمامی صفحات یک شبکه اجتماعی همواره تعداد پیغامهای خواندهنشده توسط کاربر را به او نمایش داده؛ بنابراین بازدید هر کاربر از هرکدام از صفحات سامانه منجر به ارسال یک پرسمان به جدولِ سنگین و حجیم پیغامهای پایگاهداده خواهد شد. در چنین شرایطی استفاده از کارگزاران حافظهنهان بسیار مفید خواهد بود. این کارگزاران درواقع پایگاهدادههایی هستند که اطلاعات را در حافظه موقت نگهداری میکنند. درنتیجه ذخیره و بازیابی اطلاعات در آنها بسیار سریع خواهد بود. برخی از آنها اطلاعات را در حافظه دائم نیز ذخیره میکنند (مانند Redis23 ) و برخی دیگر چنین اقدامی نمیکنند (مانند memcached 24 ).
متأسفانه برای استفاده از این فناوریها در یک سامانه نرمافزاری اغلب تغییرات اساسی در معماری موردنیاز است. موتوشاب به صورت پیشفرض از فناوریهای حافظهنهان پشتیبانی نمیکند؛ اما آنچه در معماری موتوشاب امیدوارکننده است زیرساخت رویداد در این موتور شبکه اجتماعی است. با استفاده از رویداد میتوان از اتفاقات و تراکنشهای هسته مطلع شد و اقدام مناسب را صورت داد. بدین ترتیب یک سازوکار منتشرکننده-مشترک 25 در سرتاسر موتوشاب فراهم شده است. درنتیجه امکان افزودن رفتار (در اینجا ذخیره و بازیابی اطلاعات از کارگزاران حافظهنهان) به موتوشاب بدون تغییر هسته آن وجود دارد. به عنوان مثال با توجه به معماری Oxwall میتوان مشترک رویداد «ایجاد یک پیغام در سامانه» شده و پس از رخداد آن یک نسخه از پیغام را نیز در کارگزار حافظهنهان ذخیره کرد؛ بنابراین اطلاعات مربوط به پیغامها از حافظهنهان نیز قابلدسترسی خواهد بود.
در بخشهای گذشته چگونگی پیکربندی کارگزار وب و پایگاهداده به جهت افزایش کارایی سامانه موتوشاب شرح داده شد. در این بخش یک نمونه پیکربندی که در محیط آزمایشگاهی ایجاد و مورد ارزیابی قرار گرفته، ارائه شده است.
در این نمونه آزمایشگاهی از رویکرد «اجرای کارگزار وب و کارگزار پایگاهداده بر روی ماشینهای مجزا» استفاده شده است. در نتیجه بر روی ماشینی که کارگزار وب بر روی آن نصب بوده و همچنین ماشینی که کارگزار پایگاهداده بر روی آن نصب است هیچ خدمت دیگری ارائه نمیشود. دو ماشین مذکور با پیکربندی زیر مورد استفاده قرار گرفته است:
در ادامه پیکربندی هر کدام از کارگزارها ارائه شده است.
نسخه کارگزار وب Apache مورد استفاده برابر با 2.4.7 بوده و پیکربندی آن به شرح زیر است:
<IfModule mpm_prefork_module> StartServers 100 MinSpareServers 80 MaxSpareServers 500 MaxRequestWorkers 2048 ServerLimit 2048 MaxConnectionsPerChild 0 </IfModule>
نسخه MySQL مورد استفاده Ver 14.14 Distrib 5.7.13 بوده و پیکربندی کارگزار پایگاهداده به شرح زیر است:
innodb_buffer_pool_size = 11G long_query_time = 0.1 slow_query_log = ON #tx_isolation = READ-COMMITTED log_error = /var/log/mysql/error.log slow_query_log_file = /var/log/mysql/mysql-slow.log innodb_log_file_size = 1G innodb_log_buffer_size = 16M innodb_thread_concurrency = 8 innodb_flush_log_at_trx_commit = 0 sync_binlog = 0 innodb_flush_method = O_DIRECT skip_name_resolve = ON innodb_buffer_pool_load_at_startup = ON innodb_buffer_pool_dump_at_shutdown = ON innodb_buffer_pool_dump_pct = 75 max_connections = 1000 innodb_page_cleaners = 8 query_cache_type = ON query_cache_size = 256M
پیکربندی که در این بخش ارائه شده است قادر به پردازش مناسب درخواستهای کاربران توسط یک سامانه موتوشاب با ویژگیهای زیر است: