میرکت؛ سرویس اجماع جهانی جدید Cloudflare
خلاصهٔ کاملتر
تیم تحقیقاتی کلاودفلر از یه سرویس اجماع (consensus) آزمایشی جدید به اسم Meerkat رونمایی کرد. به گفتهی نویسندهها، خیلی از سرویسهای داخلی کلاودفلر باید همون دادهی کنترلپلین رو از بین بیش از ۳۳۰ دیتاسنتر سراسر دنیا بخونن و تغییر بدن، و لازمه که هیچوقت دوتا خواننده حالت ناسازگار نبینن و سیستم حتی موقع خرابی بعضی دیتاسنترها یا لینکها، برای نوشتن در دسترس بمونه.
منظور از دادهی کنترلپلین چیزهاییه مثل اینکه یه منبع (مثلاً یه نمونه مدل هوش مصنوعی) کجا ذخیره شده، یا اینکه الان کدوم ماشین اجازه داره رو یه دیتابیس بنویسه. کلاودفلر میخواد این دادهها خطیپذیر (linearizable) باشن؛ یعنی برنامهنویس بتونه مثل حافظهی یه ماشین تکهستهای بهش فکر کنه و مطمئن باشه هر خوندنی بعد از یه نوشتن، همون مقدار جدید رو میبینه.
زیر پوسته، Meerkat یه سرویسه که میشه روش اپلیکیشنهایی مثل key-value store ساخت. توسعهدهنده یه کلاستر از رپلیکاها میگیره که هرکدوم به همهی بقیه وصلن و هرکدوم میتونن هم get و هم put بگیرن. هر درخواست به یه رویداد لاگ تبدیل میشه و با الگوریتم اجماع بین همهی رپلیکاها پخش میشه، جوری که همه لاگ کاملاً یکسانی داشته باشن و با اجرای ترتیبی همون رویدادها، به همون حالت برسن.
به گفتهی نویسندهها، مشکل الگوریتمهای رایج مثل Raft اینه که به یه رهبر و تایماوت وابستهن. تو Raft فقط رهبر اجازهی نوشتن داره، پس اگه رهبر بیفته یا کند بشه، سیستم تا انتخاب رهبر جدید نمیتونه بنویسه. تنظیم این تایماوتها هم تو شبکههای گستردهای مثل کلاودفلر که تأخیرشون خیلی نوسان داره سخته، و خودشون چند بار بهخاطر همین از دست رفتن رهبر، حادثه (incident) داشتن.
برای همین Meerkat بهجای Raft از الگوریتمی به اسم QuePaxa استفاده میکنه که سال ۲۰۲۳ محققهای EPFL منتشرش کردن. تو QuePaxa رهبر وجود داره ولی اجباری نیست؛ کلاینت میتونه به هر رپلیکایی وصل بشه و همون رپلیکا اجماع رو پیش ببره. جالبتر اینکه پیشنهادهای همزمان چند رپلیکا بهجای اینکه مثل انتخابات رهبری Raft با هم تداخل مخرب داشته باشن، سازنده با هم کار میکنن. به ادعای مقاله، این الگوریتم تو شرایط بد شبکه تا حدود ۱۰ برابر توان عملیاتی بیشتری از Raft نگه میداره.
البته نویسندهها صادقانه میگن Meerkat محدودیت داره و برای ساخت دیتابیسهای همهمنظوره طراحی نشده. هر الگوریتم اجماع هزینهی رفتوبرگشتهای زیاد رو داره و تأخیر تصمیمگیری به فاصلهی بین رپلیکاها بستگی داره. برای بهتر شدن میشه رپلیکاها رو به هم نزدیکتر کرد، نوشتنها رو دستهای فرستاد، یا دادهی کمی قدیمی (ولی هیچوقت ناسازگار) رو از رپلیکای محلی خوند. برای همین فعلاً برای دادهی کنترلپلینی که کم نوشته میشه ولی باید سازگار بمونه عالیه.
به گفتهی تیم، Meerkat هنوز به پروداکشن نرسیده، ولی چندتا نمونهی اولیه با تا ۵۰ رپلیکا دور دنیا اجرا کردن و رهبرها مدام تو این کلاسترها میافتن، بدون اینکه نرخ خطا بالا بره. قراره تا جایی که میدونن این اولین استقرار صنعتی QuePaxa تو مقیاس جهانی باشه و طی سال آینده پستهای بیشتری دربارهی جزئیاتش، از جمله وریفای رسمی پیادهسازی Rustشون، منتشر کنن.
نکات کلیدی:
- Meerkat سرویس اجماع آزمایشی کلاودفلره برای نگهداری سازگار دادهی کنترلپلین بین ۳۳۰+ دیتاسنتر
- برخلاف Raft، از الگوریتم QuePaxa استفاده میکنه که رهبر اجباری و تایماوت نداره
- همهی رپلیکاها میتونن همزمان بنویسن و خرابی یه ماشین سیستم رو از دسترس خارج نمیکنه
- هدفش خطیپذیری (linearizability) و تحمل خطاست، نه ساخت دیتابیس همهمنظوره
- هنوز آزمایشی و داخلیه؛ پیادهسازیش با Rust نوشته شده




