Sorry, no posts matched your criteria.

این سایت در ستاد ساماندهی ثبت شده و تابع قوانین جمهوری اسلامی میباشد

آپاچی پولسار چیست و چرا رقیب جدی سامانه‎های توزیع پیام گسترش‎پذیر است؟

۷ اردیبهشت ۱۳۹۷
بدون نظر


مفاهیم و اصطلاحات پولسار

اپلیکیشنی که داده را به پولسار تزریق می‎کند، تأمین‌کننده و اپلیکیشنی که داده را از پولسار دریافت و مصرف می‎کند مصرف‌کننده نام دارد. کاربردهای مصرف‌کننده بعضی اوقات تحت عنوان مشترکین نیز شناخته می‎شوند. در الگوی انتشار و اشتراک اصطلاح تاپیک منبع اصلی در پولسار محسوب می‎شود. شاید بتوان گفت تاپیک بیان‌کننده کانالی است که تأمین‌کننده‎های داده را به آن وارد و مصرف‌کننده‎های داده را از آن استخراج می‎کنند. در تصویر صفحه بعد این ساختار به نمایش گذاشته شده است. (شکل ۱)


شکل ۱

پولسار از ابتدا با این هدف ساخته شد که بتواند از موارد کاربردی چندمستأجری پشتیبانی کند. پولسار از دو منبع چندمستأجری خاص تحت عنوان خصوصیت و فضای نام برای فعال کردن این شیوه از طراحی نرم‌افزاری پشتیبانی می‎کند. یک خصوصیت نشان‌دهنده مستأجر در سیستم است. برای مثال، فرض کنید یک کلاستر پولسار به‌گونه‎ای مستقر شده است تا از طیف گسترده‎ای از کاربردها (مثل مواردی که در یاهو به کار گرفته شده بود) پشتیبانی کند. درون یک کلاستر پولسار هر خصوصیت می‎تواند نشان‌دهنده یک گروه سازمانی، یک ویژگی اصلی یا محصول باشد. از طرفی هر خصوصیت می‎تواند شامل چندین فضای نام باشد. برای مثال، یک فضای نام برای هر کاربرد یا مورد استفاده در نظر گرفته می‎شود. سپس یک فضای نام می‎تواند شامل هر تعداد تاپیک باشد. این سلسله مراتب در شکل ۲ نشان داده شده است. 


شکل ۲

فضای نام واحد مدیریت پایه در پولسار است. در سطح فضای نام شما می‎توانید مجوزها، تنظیمات مربوط به پاسخ‌گویی، کلاسترهای داده پیام، کنترل انقضای پیام و عملیات‎ ضروری را مدیریت کنید. تمام عناوین موجود در یک فضای نام از تنظیمات یکسانی تبعیت خواهند کرد که یک سطح مدیریتی قدرتمند برای پیکربندی خیلی از عناوین را به‌صورت یکجا فراهم می‎کند. دو نوع مختلف از فضای نام بر اساس سطح فضای نامی‎ قابل مشاهده وجود دارد:
Local- یک فضای نام محلی تنها توسط کلاستری که آن را تعریف کرده است قابل مشاهده است.
Global- در این مورد، فضای نام در بین چندین کلاستر قابل مشاهده خواهد بود و تفاوتی نمی‎کند آن‌ها درون یک مرکز داده باشند یا از لحاظ جغرافيایی از هم جدا باشند. این بستگی به آن دارد که Replication در تنظیمات فضای نام در بین کلاسترها فعال شده باشد.
هرچند فضای نام محلی و سراسری از لحاظ محدوده متفاوت هستند، اما می‎توان با تنظیمات مناسب هر دو را بین گروه‎های متفاوت یا سازمان‎های مختلف به اشتراک گذاشت. به‌محض اينكه مجوز نوشتن روی یک فضای نام صادر می‎شود یک اپلیکیشن می‎تواند روی هرکدام از تاپیک‎های درون فضای نام عمل نوشتن را انجام دهد. اگر یک تاپیک موجود نباشد، در حین انجام کار ساخته می‎شود.
همان گونه که قبلاً اشاره شد، هر فضای نام می‎تواند یک یا چند تاپیک داشته باشد. هر تاپیک هم می‎تواند چندین اشتراک داشته باشد و هر اشتراک به‌گونه‎ای تنظیم شده تا تمام پیام‎های منتشر شده در تاپیک را دریافت و نگهداری کند. برای فراهم کردن انعطاف‌پذیری بیشتر پولسار سه نوع اشتراک متفاوت را فراهم می‎کند که می‎توانند هم‌زمان در یک تاپیک به کار گرفته شوند:
Exclusive subscription- برای این نوع اشتراک ویژه هربار تنها می‎توان برای یک مصرف‌کننده از آن استفاده کرد.
Shared subscription- در این مورد، چند مصرف‌کننده را می‎توان به یک اشتراک ضمیمه و هر مصرف‌کننده قسمتی از پیام را دریافت خواهد کرد.
Failover subscription- در این نوع از اشتراک چند مصرف‌کننده اجازه دارد تا به یک تاپیک متصل شود، اما هربار تنها یک مصرف‌کننده پیام‎ها را دریافت خواهد کرد. باقی مصرف‌کنندگان تنها زمانی که دریافت‌کننده فعلی با خطا مواجه شود، شروع به دریافت پیام می‎کنند.
این سه نوع اشتراک متفاوت در شکل ۳ به نمایش گذاشته شده است. این اشتراک‎ها این امکان را فراهم می‎کنند تا روش تولید و مصرف پیام‎ها را از هم تفکیک کرد. با پشتیبانی از چند نوع اشتراک، پولسار بدون افزایش پیچیدگی در توسعه انعطاف‌پذیری در کاربردهای مختلف را فراهم می‎کند. (شکل ۳)


شکل ۳

پارتيشن‌بندی داده 

داده‎های وارد شده به یک تاپیک می‎تواند در محدوده بین چند مگابایت (Small Data) تا چند ترابایت (Big Data) باشد. این به‌معنای آن است که تاپیک‎ها باید قادر باشند با توجه به تعداد مصرف‌کنندگان در برخی شرایط با توان عملیات پایین و در برخی شرایط دیگر با توان عملیات خیلی بالا پایدار باقی بمانند. بنابراین چه اتفاقی خواهد افتاد وقتی روی یک تاپیک به توان عملیاتی بالا و روی دیگری به توان عملیاتی پایین نیاز باشد؟ برای مدیریت این مسئله پولسار این امکان را در اختیار شما قرار می‎دهد تا داده موجود در یک تاپیک را به چند قسمت تقسیم و آن را روی چند ماشین ذخیره كنيد. این داده‎های تقسیم شده با نام پارتيشن شناخته می‎شوند. استفاده از پارتيشن‎ها در بین مجموعه‎ای از ماشین‎ها یک رویکرد رایج جهت پردازش حجم زیادی از داده در بین چندین نود مختلف برای دستیابی به توان عملیاتی بالا است. به‌ طور پیش‌فرض تاپیک‎های پولسار به شکل تاپیک‎های غیرپارتيشن ساخته می‎شوند، اما می‎توانید به‌صورت بسیار ساده با استفاده از یک فرمان CLI یا فراخوانی API تاپیک‎های پارتیشن شده ایجاد کنید و به هرکدام یک نام اختصاص دهید. وقتی یک پارتيشن ایجاد می‎کنید، پولسار به‌طور خودکار داده را تقسیم‌بندی و اطمینان حاصل می‎کند که مصرف‌کنندگان و تولیدکنندگان بتوانند از این تقسیم‌بندی استفاده کنند. با این روش اپلیکیشنی که در یک تاپیک واحد نوشته شده است نیز همچنان بعد از پارتيشن شدن تاپیک کار خواهد کرد و نیازی به تغییر کدنویسی ندارد.
در پولسار پارتيشن‌بندی تاپیک‎ها توسط یک فرآیند به‌نام broker اداره می‎شود و هر نود در یک کلاستر پولسار روی broker مخصوص به خود اجرا می‎شود. شکل ۴ نشان می‎دهد پارتيشن‎ها چگونه توسط نودهای broker اداره می‎شوند.
با وجود اینکه اپلیکیشن‎ها می‎توانند بدون نیاز به تغییر کد از مزایای پارتيشن‌بندی استفاده کنند، اما چند راهکار دیگر نیز وجود دارد که می‎تواند به توزیع بهتر داده در بین پارتیشن‎ها و در میان مصرف‌کنندگان موجود کمک کند. پولسار این امکان را در اختیار شما قرار می‎دهد تا با انتخاب یک سیاست‌گذاری مسیریابی امکان کنترل تعیین مسیر پیام‎ها به یک پارتيشن خاص را فراهم کنید. چهار سیاست‌گذاری مسیریابی اصلی وجود دارد:
Single partitioning- تولیدکننده یک پارتيشن را به‌صورت تصادفی انتخاب و داده را تنها به این پارتيشن هدایت می‎کند. این مدل همان تضمين‎های ارائه شده توسط تاپیک‎های بدون پارتيشن را حفظ می‎کند، اما می‎تواند برای مواقعی که چند تولیدکننده از یک تاپیک استفاده می‎کنند مفید باشد.
Round robin partitioning- با انتخاب این گزینه تولیدکننده داده‎ها را به‌طور یکنواخت در تمام پارتيشن‎ها به‌شیوه گردش نوبتی توزیع می‎کند. اولین پیام به اولین پارتيشن منتقل می‎شود، دومین پیام به پارتيشن دوم و همین طور تا انتها ادامه پیدا می‎کند.
Hash partitioning- در این مورد، هر پیام یک کلیدواژه را با خود حمل می‎کند. انتخاب پارتيشن بر اساس مقدار تعیین شده توسط تابع Hash موجود در کلیدواژه پیام انجام می‎شود. در این گزینه ترتیب ارسال و دریافت بر اساس این کلیدواژه ضمانت می‎شود.
Custom partitioning- در اینجا تولیدکننده از یک تابع سفارشی استفاده می‎کند که پیام را دریافت و یک شماره پارتيشن تولید می‎کند. سپس این پیام به آن پارتيشن ارسال می‎شود. این گزینه این امکان را در اختیار اپلیکیشن قرار می‎دهد تا کنترل کامل روی پارتيشن‌بندی داشته باشد.

دوام و پایداری 

بعد از اینکه Pulsar broker داده‎های دریافت شده توسط تولیدکننده را تأیید کرد، باید اطمینان حاصل کند این داده‎ها هرگز تحت هیچ شرایطی از دست نخواهد رفت. برعکس خیلی دیگر از سیستم‎های پیام‌رسان، پولسار با استفاده از Apache BookKeeper که امکان ذخیره‌سازی پایدار با تأخیر کم را میسر می‎سازد، به دوام و پایداری مورد نظر دست پيدا می‎کند. وقتی یک Pulsar broker پیام‎ها را دریافت می‎کند، داده‎های این پیام را به چند نود BookKeeper (بر اساس عامل تکرار) ارسال می‎کند. این نودها داده را درون یک فایل لاگ می‎نویسند و یک نسخه از آن را روی حافظه کپی می‎کنند. قبل از اینکه یک نود ارسال را تصدیق کند، این فایل لاگ نوشته می‎شود تا ذخیره‌سازی پایدار انجام شود. با قابلیت اجبار ساخت فایل لاگ حتی در زمان قطع برق نیز داده‎ها حفظ می‎شوند. از آنجا که Pulsar broker روی چند نود BookKeeper نوشته می‎شود، تنها زمانی تأییدیه را به تولیدکننده ارسال می‎کند که داده با موفقیت ذخیره شده باشد. پولسار این اطمینان را فراهم می‎کند که حتی در زمان خراب شدن سخت‌افزار، قطع ارتباط با شبکه و سایر شرایط بروز نقص داده‎ها سالم باقی بمانند. 

اثبات کارایی در عمل 

در حال حاضر، پولسار توان مورد نیاز برای اپلیکیشن‎های بزرگ یاهو مثل Mail, Finance, Sports, Gemini Ads و Sherpa را فراهم می‎کند. در خیلی از موارد استفاده، تضمين کامل دوام و پایداری (برای مثال به صفر رسیدن داده‎های از دست رفته) ضروری است و ملزومات اجرا باید کامل رعایت شود. راه‌اندازی پولسار از سال ۲۰۱۵ آغاز شد و اکنون در مقیاس وسیع توسط یاهو استفاده می‎شود. پولسار در سطح جهانی در بیش از ۱۰ مرکز داده با قابلیت تکرار زنجيره‎ای مستقر شده است. روزانه بیشتر از ۱۰۰ میلیارد پیام منتشر شده را اداره می‎کند. بیشتر از ۱٫۴ میلیون تاپیک را ارائه می‎کند. میانگین زمان تأخیر انتشار توسط پولسار کمتر از ۵ میلی‌ثانیه است.


منبع : شبکه



مهراب