Phát hành rqlite 6.0, một DBMS phân tán, có khả năng chịu lỗi dựa trên SQLite

Bản phát hành DBMS rqlite 6.0 phân tán đã được giới thiệu, sử dụng SQLite làm công cụ lưu trữ và cho phép bạn tổ chức công việc của một cụm từ các kho lưu trữ được đồng bộ hóa với nhau. Một trong những tính năng của rqlite là dễ dàng cài đặt, triển khai và bảo trì bộ lưu trữ có khả năng chịu lỗi phân tán, hơi giống với etcd và Consul, nhưng sử dụng mô hình dữ liệu quan hệ thay vì định dạng khóa/giá trị. Mã dự án được viết bằng Go và được phân phối theo giấy phép MIT.

Để giữ tất cả các nút ở trạng thái đồng bộ, thuật toán đồng thuận Raft được sử dụng. Rqlite sử dụng thư viện SQLite gốc và trình điều khiển go-sqlite3 tiêu chuẩn, trên đó một lớp được khởi chạy để xử lý các yêu cầu của khách hàng, thực hiện sao chép sang các nút khác và giám sát việc đạt được sự đồng thuận về việc lựa chọn nút hàng đầu.

Các thay đổi đối với cơ sở dữ liệu chỉ có thể được thực hiện bởi nút được chọn làm nút dẫn đầu, nhưng các kết nối với thao tác ghi cũng có thể được gửi đến các nút khác trong cụm, nút này sẽ trả về địa chỉ của nút dẫn đầu để lặp lại yêu cầu (trong phiên bản tiếp theo chúng sẽ hứa thêm tính năng tự động chuyển tiếp yêu cầu tới lãnh đạo). Điểm nhấn chính là khả năng chịu lỗi, do đó DBMS chỉ mở rộng quy mô với các thao tác đọc và các thao tác ghi là nút thắt cổ chai. Có thể chạy cụm rqlite từ một nút duy nhất và giải pháp này có thể được sử dụng để cung cấp quyền truy cập vào SQLite qua HTTP mà không cung cấp khả năng chịu lỗi.

Dữ liệu SQLite trên mỗi nút không được lưu trữ trong một tệp mà trong bộ nhớ. Ở cấp độ lớp với việc triển khai giao thức Raft, nhật ký của tất cả các lệnh SQLite dẫn đến những thay đổi trong cơ sở dữ liệu sẽ được lưu giữ. Nhật ký này được sử dụng trong quá trình sao chép (sao chép ở cấp độ sao chép yêu cầu trên các nút khác), bắt đầu một nút mới hoặc khôi phục sau khi mất kết nối. Để giảm kích thước của nhật ký, việc đóng gói tự động được sử dụng, quá trình này bắt đầu sau một số thay đổi được chỉ định và dẫn đến một ảnh chụp nhanh được cố định trên đĩa, liên quan đến việc một nhật ký mới bắt đầu được lưu giữ (trạng thái của cơ sở dữ liệu trong bộ nhớ). giống hệt với ảnh chụp nhanh + nhật ký thay đổi tích lũy).

Các tính năng của rqlite:

  • Dễ dàng triển khai một cụm mà không cần cài đặt SQLite riêng.
  • Khả năng nhanh chóng có được bộ lưu trữ SQL được sao chép.
  • Sẵn sàng để sử dụng trong các dự án đang hoạt động (Cấp sản xuất).
  • Sự hiện diện của API HTTP(S) cho phép bạn cập nhật dữ liệu ở chế độ hàng loạt và xác định nút hàng đầu của cụm. Nó cũng cung cấp giao diện dòng lệnh và khả năng sử dụng các thư viện máy khách khác nhau được xây dựng cho SQLite.
  • Có sẵn dịch vụ xác định các nút khác, cho phép bạn tạo các cụm một cách linh hoạt.
  • Hỗ trợ mã hóa trao đổi dữ liệu giữa các nút.
  • Khả năng cấu hình mức độ kiểm tra mức độ liên quan và tính nhất quán của dữ liệu khi đọc.
  • Khả năng tùy chọn để kết nối các nút ở chế độ chỉ đọc, không tham gia vào việc xác định sự đồng thuận và được sử dụng để tăng khả năng mở rộng của cụm cho các hoạt động đọc.
  • Hỗ trợ hình thức giao dịch của riêng bạn dựa trên việc kết hợp các lệnh trong một yêu cầu (các giao dịch dựa trên BEGIN, COMMIT, ROLLBACK, SAVEPOINT và RELEASE không được hỗ trợ).
  • Hỗ trợ tạo bản sao lưu nóng.

Bản phát hành mới giới thiệu những thay đổi kiến ​​trúc quan trọng nhằm tăng độ tin cậy của cụm bằng cách cải thiện quy trình định tuyến các yêu cầu đọc và ghi tới các nút cụm chính xác. Các nút rqlite giờ đây có thể ghép nhiều kết nối logic với nhau bằng cách sử dụng các kết nối TCP được thiết lập giữa các nút bằng giao thức Raft. Nếu một yêu cầu yêu cầu quyền của người lãnh đạo nhưng được gửi đến nút phụ, nút phụ có thể xác định địa chỉ của người lãnh đạo và chuyển nó đến máy khách mà không cần thực hiện tính toán đồng thuận Raft.

Thay đổi này cũng loại bỏ nhu cầu về thành phần đồng bộ hóa siêu dữ liệu riêng biệt và loại bỏ việc xử lý riêng biệt trạng thái Raft và siêu dữ liệu. Các nút phụ hiện chỉ gửi yêu cầu đến nút lãnh đạo khi cần thiết, khi chúng cần tìm ra địa chỉ của nút lãnh đạo. API cung cấp khả năng lấy thông tin về trạng thái của các nút khác trong cụm. Lệnh ".sysdump" đã được thêm vào giao diện dòng lệnh.

Nguồn: opennet.ru

Thêm một lời nhận xét