قصه سوسک، تابآوری و Cockroachdb
اولین بار که در خبرنامههای حوزه دیتابیس، به نام Cockroacdb برخوردم، اسم این دیتابیس توجهم را جلب کرد: اینکه چرا نام سوسک را روی یک دیتابیس گذاشتهاند!. بعد از اینکه حضور این نام در خبرنامههای این حوزه پررنگتر شد و بخصوص با انتقال بخشی از زیرساخت مدیریت کلاسترهای Baidu به CockroachDB ، تصمیم گرفتم نگاهی به این دیتابیس نوظهور بیندازم و علت رشد محبوبیت آنرا در سیستمهای اطلاعاتی مقیاسپذیر مبتنی بر SQL بفهمم.
با اندکی بررسی و البته با تشکر فراوان از این ارائه کامل و خوب سایت Infoq در خصوص CockroachDB متوجه شدم که این دیتابیس یک بانک اطلاعاتی رابطهای مبتنی بر SQL اما با معماری کلید-مقدار است (در ادامه توضیح داده خواهد شد) که با الهام از دیتابیس توزیع شده اسپنر گوگل ایجاد شده و قابلیتهای زیر را به رایگان در اختیار ما میگذارد :
- توزیع شدگی افقی با مقیاس جهانی و به صورت خودکار
- مبتنی بر SQL
- پشتیبانی از تراکنشها و تضمین ACID
- ریکاوری آسان و بدون نیاز به دخالت انسانی
- سادگی نصب و پیکربندی
- متنباز بودن و جامعه توسعه دهندگان فعال
که اگر در یک جمله بخواهیم آنرا تعریف کنیم میتوانیم بگوییم : دیتابیسی که (مانند سوسک)، همیشه زنده میماند .
What is CockroachDB
CockroachDB is a distributed SQL database built on a transactional and strongly-consistent key-value store. It scales horizontally; survives disk, machine, rack, and even datacenter failures with minimal latency disruption and no manual intervention; supports strongly-consistent ACID transactions; and provides a familiar SQL API for structuring, manipulating, and querying data.
یکی از امکاناتی که در این دیتابیس بخصوص در نسخه جدید آن (نسخه ۲۰٫۱) گنجانده شده است، پشتیبانی از استاندارد SQL به کار رفته در پستگرس است با این ایده که بدون تغییر در کدهای یک برنامه مبتنی بر پستگرس، دیتابیس خود را به CockroachDB ارتقاء دهید. این ایده بسیار هوشمندانه است چون با این رهیافت، میتوان از تمام ابزارهای اتصال و کار با پستگرس و کتابخانههای نوشته شده در زبانهای مختلف برنامهنویسی، برای CockroachDB هم بهره برد. امکانی که سرعت رشد و محبوبیت آنرا بالا خواهد برد.
موارد استفاده و کاربرد
مهمترین مورد کاربری CockroachDB زمانی است که بخواهیم یک سیستم اطلاعاتی جامع داشته باشیم که هم دیتابیسهای محلی را در هر منطقه داشته باشد (با سرعت خواندن و نوشتن بالا) و هم دادهها در کل سیستم توزیع شده باشند .
به عنوان مثال فرض کنید که یک شرکت باربری در سراسر کشور دارید که ارتباط اینترنتی بین سرور یا سیستم محلی با سرور اصلی ممکن است گاه و بیگاه قطع شود اما بارنامهها همیشه باید صادر شوند حتی در صورت قطعی اینترنت. در این حالت میتوانید روی هر سیستم ، دو نسخه از CockroachDB
داشته باشید که هر کدام با استفاده از فناوریهایی مانند داکر، دیسک مخصوص به خود را داشته باشد(برای اطمینان از اینکه خرابی هر دیسک باعث از بین رفتن کل دادهها نمی شود) و نسخه سوم ، روی آدرس سرور مرکزی شما تنظیم شده باشد که در صورت تعیین ضریب تکرار سه برای دیتابیسها (Replication Factor=3
)، هم الگوریتمهای توزیع شده خواندن و نوشتن با این دو دیتابیس محلی به خوبی کار کنند و هم در صورت قطع شدن اتصال با سرور مرکزی، سیستمهای محلی به کار خود ادامه داده و با برقراری اینترنت، به صورت خودکار، دادهها با دیتابیس مرکزی همگام (سینک) شوند.
نکته جالب در این مثال این است که اگر سیستم مرکزی ارتباطش با این نود قطع شود، بسته به اینکه تصمیم بگیرد که این قطع اتصال موقت است یا دائم (قابل تنظیم است)، یا به تکثیر دادهها در شبکه اقدام می کند یا به طور موقت اگر درخواست درج یا خواندن داده از آن نود در شبکه ارسال شده بود با دادههای تنها نود باقیمانده، جواب ارسال می شود .
برای آشنایی با معماری این دیتابیس توزیع شده نوظهور، بهتر است نگاهی اسلایدهای InfoQ که به سادگی و با کمک تصاویر، به بیان تکتک اجزاء آن پرداخته است بیندازید و سپس به مستندات خود CockroachDB
مراجعه کنید.
یک دیتابیس کلید-مقدار رابطهای
همانطور که در ابتدای این نوشتار هم اشاره شد، ساختار پشت صحنه ذخیره دادهها در CockroachDB
که به آن، امکان مقیاسپذیری بسیار بالایی را داده است، ساختار کلید-مقدار است. این ساختار اجازه میدهد بسته به مقدار کلید، بتواند دادهها را در مناطق جغرافیایی کاملا مستقل از هم ذخیره کرد و کوئریهای محلی را با سرعت بالا پاسخ داد. در مثال باربری، کافی است کلیدهای در نظر گرفته شده برای هر رکورد، ترکیب کد باربری و شناسه باشد و منطقهبندی دادهها هم براساس مقدار کلید (بخش کد باربری) صورت گیرد.
اجرای SQL
هم کاملا توزیع شده و بر اساس تقسیم بندی کلیدهاست :
نحوه توزیع کلیدها : استفاده از مفهوم Ranges
توزیع کلیدها در شبکه بر اساس مفهوم بازه صورت میگیرد که در دیتابیسهای معروفی مانند گوگل بیگتیبل، HBase
و گوگل اسپنر هم به کار رفته است و باعث می شود ضمن رعایت ترتیب مکانی کلیدها، آنها را در شبکه توزیع کرد. یعنی کلیدهایی که باید پشت سر هم باشند در یک نود از شبکه قرار خواهند گرفت.
نگاهی به داشبورد مدیریتی CockroachDB
وجود یک پنل مدیریتی قدرتمند، از دیگر محاسن CockroachDB
است :
سخن آخر
انتخاب درست معماری بانک اطلاعاتی در سیستمهای نوین روز به روز پیچیدهتر و تخصصیتر می شود. امیدوارم این مقاله کوتاه در این راستا، دیدی مناسب از یک دیتابیس مبتنی بر SQL ، توزیع شده و با تابآوری بالا به شما داده باشد.
بسیار مطلب مفیدی بود، سپاس از شما