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

Việc phát hành DBMS rqlite 7.0 phân tán đã diễn ra, 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, 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 thay đổi 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), khi khởi động 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 việc cố định ảnh chụp nhanh, theo đó nhật ký mới bắt đầu được duy trì (trạng thái của cơ sở dữ liệu trong bộ nhớ là 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 sản xuất (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. Giao diện dòng lệnh và thư viện máy khách cho nhiều ngôn ngữ lập trình khác nhau cũng được cung cấp.
  • 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.

Trong bản phát hành mới:

  • Đã thêm hỗ trợ cho việc phân cụm rqlite tự động bằng cách sử dụng dịch vụ phát hiện nút mới có thể hoạt động trên cơ sở lưu trữ phân tán của Consul và etcd. Dịch vụ này cho phép các nút rqlite tự động tìm thấy nhau - quản trị viên chỉ cần khởi chạy một số nút trên các máy chủ khác nhau, chỉ định địa chỉ cụm Consul hoặc etcd chung (ví dụ: “example.com:8500”) và các nút sẽ tự động được kết hợp thành một cụm. Nút hàng đầu cập nhật định kỳ thông tin về địa chỉ của nó trong bộ lưu trữ Consul hoặc etcd, cho phép bạn thay đổi người lãnh đạo sau đó mà không cần phải cấu hình lại các nút khác, cũng như thêm các nút mới ngay cả sau khi thay đổi người lãnh đạo. Dịch vụ chế độ Discovery cũ chạy trên AWS Lambda đã ngừng hoạt động.
  • Giao diện CLI cho phép chỉ định một số máy chủ cùng một lúc - nếu nút đầu tiên không khả dụng, các máy chủ tiếp theo sẽ được liên hệ.
  • Mã để phân tích các đối số dòng lệnh rqlited đã được làm lại.
  • Gói protobuf không được dùng nữa đã bị ngừng sử dụng.
  • Bộ lưu trữ BoltDB được sử dụng để triển khai giao thức Raft đã được thay thế bằng bbolt, một nhánh từ dự án etcd.

Nguồn: opennet.ru

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