ابزار و کتابخانه ها

لزوم استفاده از صف های توزیع شده در برنامه های مقیاس پذیر

۰

میانگین امتیاز

به این متن امتیاز بدهید!

امتیاز کاربران: ۲٫۴ ( ۱ رای)
از سال گذشته که درگیر یک پروژه بین المللی در زمینه خواندن اخبار و بررسی محبوبیت هر خبر در شبکه های اجتماعی هستم تا امروز که چند روزی بیشتر به راه افتادن نسخه اول این سایت نمانده است، برای بخش پشت صحنه (Backend) که پیوسته باید سایت های خبری تمام خبرگزاریهای مطرح دنیا در تمام کشورها را چک کند (در حال حاضر ۵۴ کشور) و در کمتر از چند دقیقه اخبار جدید منتشر شده را به بانکهای  اطلاعاتی ما منتقل کند، سه پیاده سازی مختلف داشته ایم . تعداد بالای خبرگزاری ها و خواندن لحظه ای تمام اخبار به زبانهای مختلف، چالش بزرگ ما در این یکسال بوده است که چگونه با منابع محدود بتوانیم این کار را انجام دهیم .
در روش اول از دیتابیس ردیس به عنوان صف مشترک بین سرورهای مختلف  استفاده کردیم و هر برنامه خبرخوان از سر صف چندین خبرگزاری را انتخاب می کرد و شروع به بررسی اخبار و پیدا کردن اخبار جدید و ارسال آنها به صفهای آمارگیری شبکه های اجتماعی می کرد .
در این روش،‌الگوریتم ما قابلیت توزیع در شبکه را به راحتی داشت فقط کافی بود دیتابیس ردیس را در یک سرور جدید به اشتراک می گذاشتیم و خبرخوان ها به تعداد لازم کارشان را انجام میدادند .مشکلی که در این روش داشتیم ، نحوه مدیریت دسترسی همزمان برنامه ها به صف و توزیع عادلانه خبرگزاری ها بین آنها بود که با دانش اولیه اندک ما راه حل مناسبی برای آن پیدا نکردیم .
در رهیافت بعدی ، مدیریت خبرخوان ها را خودمان بر عهده گرفتیم و توزیع خبرگزاری ها را بین این خبرخوان ها با کمک دیتابیس مانگو به گونه ای انجام دادیم که هر خبرخوان تعداد مشخصی خبرگزاری را بر عهده بگیرد به طوری که حداکثر تا سه دقیقه تمام خبرگزاری ها بررسی شوند و اگر یک خبرخوان کند عمل می کرد، تعدادی از خبرگزاریهای آنرا جدا کرده به یک خبرخوان جدید می دادیم.
برای طراحی یک الگوریتم که بتواند مقیاس پذیر باشد و در یک شبکه بزرگ هم به خوبی عمل کند ،‌نیاز به ابزارهای توزیع خودکار در شبکه داریم که صفهای توزیع شده امروزه این بستر را برای ما فراهم کرده اند
این الگوریتم در محیط تست و با تعداد کم خبرگزاریها،‌بسیار خوب عمل کرد که این امر باعث شد حواسمون به مقیاس پذیری الگوریتم نباشد اینکه بتوانیم به راحتی تعداد خبرگزاری ها یا تعداد سرورها را افزایش دهیم یا زمان مورد نظر برای سرعت خواندن اخبار جدید را  جابجا کنیم . مثلا یکی از مشکلاتی که گریبانگیر ما شد این بود که تعداد خبرگزاری ها که زیاد شد ، الگوریتم ما تعداد زیادی پروسس در لینوکس به عنوان خبر خوان ایجاد می کرد که این تعداد زیاد باعث افزایش زمان انتظار هر برنامه میشد که خود برنامه مدیریت توزیع‌ را مجبور می کرد برای دفعه بعد تعداد خبرخوان ها را بیشتر و تعداد خبرگزاری های هر یک را کم کند که این امر باز اوضاع را بدتر می کرد. نهایتا به جای سه دقیقه به بیست دقیقه در خواندن اخبار جدید بسنده کردیم .
این بود که در سومین تلاش با ایده گرفتن از روش اول ، به دنبال  یک صف توزیع شده بودیم که به راحتی بین تعداد زیادی سیستم توزیع شود و مدیریت توزیع خبرگزاریها بین خبرخوان ها در شبکه را خودش برعهده بگیرد و اگر پیامی (یا یک خبرگزاری) پردازش نشد، به طور خودکار به خبرخوان دیگری ارسال شود و کارهایی ازاین قبیل که در تلاش دوم خودمان انجام داده بودیم و اکنون دنبال یک راه حل آماده و آزمایش شده بودیم .
قبلا کافکا را به عنوان یک صف توزیع شده استفاده کرده بودیم که ما را اذیت کرده بود(البته شاید مشکل اصلی از سطح دانش ما بوده است)، این سری با خواندن تجربیات سایت Indix که کاری مشابه ما را انجام میداد، به سراغ صف توزیع شده RabbitMQ رفتم که بسیار خوب عمل کرد و کد نویسی ساده ای داشت در عین اینکه کل مدیریت عادلانه وحرفه ای توزیع پیام های صف (صف ما در اینجا لیست خبرگزاریهای آماده پردازش بود) را بین شبکه بر عهده گرفت و تنها وظیفه ما پرکردن این صف در بازه های زمانی معین و خواندن یک پیام از صف و پردازش آن با تعداد ثابتی خبرخوان در هر سرور بود که تا امروز بدون مشکل و مطابق با نیازهای ما عمل کرده است .
خلاصه کلام اینکه برای طراحی یک الگوریتم که بتواند مقیاس پذیر باشد و در یک شبکه بزرگ هم به خوبی عمل کند ،‌نیاز به ابزارهای توزیع خودکار در شبکه داریم که صفهای توزیع شده امروزه این بستر را برای ما فراهم کرده اند که به جای تمرکز روی مباحث شبکه  و ارسال و توزیع پیام ، تنها پردازش پیام ها فکر کنیم و نگران مسایل دیگر نباشیم .
البته سیستم های مدیریت فایل توزیع شده مانند HDFS‌ که ذخیره فایلها را هم به صورت خودکار و بدون دخالت ما در کل شبکه توزیع می کند ، هم می تواند در بعضی کاربردها مفید واقع شو د.

مجتبی بنائی

دانشجوی دکترای نرم‌افزار دانشگاه تهران (yun.ir/smbanaie)، مدرس دانشگاه و فعال در حوزه توسعه نرم‌افزار و مهندسی داده که تمرکز کاری خود را در چند سال اخیر بر روی مطالعه و تحقیق در حوزه کلان‌داده و زیرساخت‌های پردازش داده و تولید محتوای تخصصی و کاربردی به زبان فارسی و انتشار آنها در سایت مهندسی داده گذاشته است. مدیریت پروژه‌های نرم‌افزاری و طراحی سامانه‌های مقیاس‌پذیر اطلاعاتی از دیگر فعالیتهای صورت گرفته ایشان در چند سال گذشته است.
0 0 رای ها
Article Rating
اشتراک در
اطلاع از
guest

این سایت از اکیسمت برای کاهش هرزنامه استفاده می کند. بیاموزید که چگونه اطلاعات دیدگاه های شما پردازش می‌شوند.

5 Comments
قدیمی ترین
تازه‌ترین بیشترین واکنش نشان داده شده(آرا)
بازخورد (Feedback) های اینلاین
View all comments
دکمه بازگشت به بالا
5
0
افکار شما را دوست دارم، لطفا نظر دهیدx
()
x