کاساندرا و راه سازگار کردن داده‌هایی که گرفتار ناسازگاری اند

به طور کلی تو سیستم‌هایی که داده‌ها را به صورت توزیع شده و با نگهداری چندین کپی(replica) از داده‌ها ذخیره و بازیابی می‌کنن یکی از چالش های اساسی احتمال ناسازگار شدن داده در کپی های مختلف از داده هاست.
آپاچی کاساندرا هم به عنوان یک پایگاه داده ی توزیع شده‌ در کنار تمام مزایایی که داره(که انشالله در آینده ی نزدیک یه پست براش منتشر میکنیم) با این چالش روبرو هست.
برای حل این چالش کاساندرا از راه‌کاری تحت عنوان Node repair استفاده میکنه که فرآیندیِ که ناسازگاری بین کپی های مختلف داده‌ها رو اصلاح میکنه تا همه ی نودها در نهایت داده ی یکسانی داشته باشن.(eventually consistency)

دلیل اهمیت و نیاز به Repair:

۱- بی نظمی (Entropy) اجتناب ناپذیر است (آنتروپی -در تئوری اطلاعات و انتقال اطلاعات- معیار از دست رفتن داده ها در پیام های انتقال داده شده است)
۲- ناسازگاری داده ها ممکن است business ما را تحت تاثیر قرار دهد.
۳- بازسازی داده ها
۴- بازگردانی بدلیل Downtime یا failure نودها
۵- حذف داده ها به صورت ایمن و مطمئن (tombstoneها نیاز به repair دارند چون گم شدن آنها میتواند سبب ایجاد zombie شود).

انواع Repair:

کاساندرا سه نوع repair رو ارائه میکنه:

• Anti-entropy repair

• Hinted handoff

• Read repair

نوع اول با مداخله ی دستی(manual intervention) باید اجرا بشه اما دو نوع بعدی جزء فرآیندهاییِ که توسط خود کاساندرا و بر طبق تنظیمات و شرایط خاصی انجام می شن.

مواردی که باید repair انجام بشه:

۱- در کلاسترهای Multi-Region (چندین datacenter تو کلاستر وجود داشته باشه چون احتمال ناسازگازبودن دیتا در datacenterها در کلاستر بالاست و نیاز به repair درش زیاد میشه)
۲- در read و writeها با consistency level پایین
۳- قطع نودها به صورت مکرر
۴- در جداول با مقدار read-repair-chance پایین
۵- در Flaky networks

مواردی که نیاز به repair نیست:

۱- در TTLهای با مدت زمان کوتاه (short TTLs)
۲- در read و writeهای با consistency level خیلی بالا
۳- در جداول با مقدار تنظیمات read-repair-chance بالا


از بین ۳ نوع repair که در بالا گفتیم، در ادامه نحوه ی انجام Anti-entropy repair که یک نوع عملیات نگهداری (maintenance operation) در کاساندراست و جزء وظایف نگهداری (regular maintenance task) مربوط به cassandra administrator میشه را شرح می دیم.

انجام Anti-entropy repair:

بعد از اینکه فرآیند Anti-entropy repair در نودی که قصد repair تمام یا بخشی از داده‌هاش رو داریم اجرا میشه(با اجرای دستور nodetool repair)، ابتدا درخواست ساخت merkle tree به تمام نودهایی ارسال می‌شه که شامل کپی داده‌های نود در حال repair هست. (در کاساندرا anti-entropy repair از یک merkle tree با عمق ۱۵ (2^15 = 32K leaf nodes) شامل ۳۲هزار گره برگ، استفاده می کنه).

سپس merkle tree تو تمام نودهایی که درخواست ایجاد درخت برای اونا ارسال شده ساخته می‌شه

در مرحله ی بعد درخت های merkle tree ایجاد شده تو سایر نودها به نودی که Anti-entropy repair درش اجرا شده ارسال می‌شن.(گره های merkle tree در‌واقع شامل hashهای محاسبه شده از پارتیشن هاییِ که در هر گره از درخت قرار میگیرن).

در نهایت بعد از مقایسه ی merkle treeها و در صورت وجود عدم سازگاری در اونا، انتقال پارتیش های دارای عدم مطابقت بین replicaها (Streams mismatching partitions) انجام میشه.

انشالله در پست های بعدی به تفصیل به بررسی مشکلات فرآیند Anti-entropy repair و همچنین نحوه ی اجراش در یک نود کاساندرا و ابزارهای مربوط به repair خواهیم پرداخت.


امیدوارم این مطلب براتون مفید باشه :)