انتشار rqlite 6.0، یک DBMS قابل تحمل خطا توزیع شده بر اساس SQLite

انتشار DBMS توزیع شده rqlite 6.0 ارائه شده است که از SQLite به عنوان یک موتور ذخیره سازی استفاده می کند و به شما امکان می دهد تا کار مجموعه ای از ذخیره سازی های همگام را سازماندهی کنید. یکی از ویژگی‌های rqlite سهولت نصب، استقرار و نگهداری یک ذخیره‌سازی با تحمل خطا توزیع‌شده است که تا حدودی شبیه به etcd و Consul است، اما از مدل داده‌های رابطه‌ای به جای قالب کلید/مقدار استفاده می‌کند. کد پروژه در Go نوشته شده و تحت مجوز MIT توزیع می شود.

برای حفظ تمام گره ها در یک حالت هماهنگ، از الگوریتم اجماع Raft استفاده می شود. Rqlite از کتابخانه اصلی SQLite و درایور استاندارد go-sqlite3 استفاده می‌کند، که در بالای آن لایه‌ای راه‌اندازی می‌شود که درخواست‌های مشتری را پردازش می‌کند، همانندسازی را به گره‌های دیگر انجام می‌دهد و بر دستیابی به اجماع در انتخاب یک گره پیشرو نظارت می‌کند.

تغییرات در پایگاه داده فقط توسط گره ای که به عنوان رهبر انتخاب شده است انجام می شود، اما اتصالات با عملیات نوشتن می تواند به گره های دیگر در خوشه نیز ارسال شود، که آدرس رهبر را برای تکرار درخواست باز می گرداند (در نسخه بعدی آنها قول اضافه کردن ارسال خودکار درخواست ها به رهبر). تاکید اصلی بر روی تحمل خطا است، بنابراین DBMS تنها با عملیات خواندن مقیاس می شود و عملیات نوشتن گلوگاه است. امکان اجرای یک کلاستر rqlite از یک گره وجود دارد و از این راه حل می توان برای دسترسی به SQLite از طریق HTTP بدون ارائه تحمل خطا استفاده کرد.

داده های SQLite در هر گره در یک فایل ذخیره نمی شود، بلکه در حافظه ذخیره می شود. در سطح لایه با اجرای پروتکل Raft، یک گزارش از تمام دستورات SQLite که منجر به تغییرات در پایگاه داده می شود، نگهداری می شود. این گزارش در حین تکرار (تکثیر در سطح بازتولید درخواست‌ها در سایر گره‌ها)، شروع یک گره جدید یا بازیابی از قطع اتصال استفاده می‌شود. برای کاهش اندازه گزارش، از بسته بندی خودکار استفاده می شود که پس از تعداد مشخصی از تغییرات شروع می شود و منجر به ثابت شدن یک عکس فوری روی دیسک می شود که در رابطه با آن یک گزارش جدید شروع به نگهداری می کند (وضعیت پایگاه داده در حافظه با عکس فوری + گزارش تغییرات انباشته شده یکسان است).

ویژگی های rqlite:

  • استقرار یک خوشه آسان، بدون نیاز به نصب جداگانه SQLite.
  • امکان به دست آوردن سریع ذخیره سازی SQL تکراری.
  • آماده برای استفاده در پروژه های کاری (Production-grade).
  • وجود یک API HTTP(S) که به شما امکان می دهد داده ها را در حالت دسته ای به روز کنید و گره اصلی خوشه را تعیین کنید. همچنین یک رابط خط فرمان و توانایی استفاده از کتابخانه های مختلف کلاینت ساخته شده برای SQLite را فراهم می کند.
  • در دسترس بودن سرویسی برای شناسایی گره های دیگر که به شما امکان می دهد خوشه ها را به صورت پویا ایجاد کنید.
  • پشتیبانی از رمزگذاری تبادل داده بین گره ها.
  • امکان پیکربندی سطح بررسی ارتباط و سازگاری داده ها هنگام خواندن.
  • توانایی اختیاری برای اتصال گره ها در حالت فقط خواندنی، که در تعیین اجماع شرکت نمی کنند و برای افزایش مقیاس پذیری خوشه برای عملیات خواندن استفاده می شوند.
  • پشتیبانی از شکل تراکنش های خود بر اساس ترکیب دستورات در یک درخواست (معاملات مبتنی بر BEGIN، COMMIT، ROLLBACK، SAVEPOINT و RELEASE پشتیبانی نمی شوند).
  • پشتیبانی از ایجاد نسخه پشتیبان داغ

نسخه جدید تغییرات معماری قابل توجهی را با هدف افزایش قابلیت اطمینان خوشه با بهبود فرآیند مسیریابی درخواست‌های خواندن و نوشتن به گره‌های خوشه درست معرفی می‌کند. گره‌های rqlite اکنون می‌توانند چندین اتصال منطقی را با استفاده از اتصالات TCP ایجاد شده بین گره‌ها توسط پروتکل Raft چندگانه کنند. اگر درخواستی به اختیار رهبر نیاز داشته باشد اما به یک گره ثانویه ارسال شود، گره ثانویه می تواند آدرس رهبر را تعیین کرده و بدون انجام محاسبات توافقی Raft به مشتری ارسال کند.

این تغییر همچنین نیاز به یک جزء همگام سازی فراداده جداگانه را از بین برد و مدیریت جداگانه وضعیت Raft و ابرداده را حذف کرد. گره های ثانویه اکنون درخواست ها را فقط در مواقع ضروری به گره رهبر ارسال می کنند، زمانی که نیاز به یافتن آدرس گره رهبر دارند. API توانایی به دست آوردن اطلاعات در مورد وضعیت سایر گره ها در خوشه را فراهم می کند. دستور ".sysdump" به رابط خط فرمان اضافه شده است.

منبع: opennet.ru

اضافه کردن نظر