Hệ thống phân tán

Sửa một ngày tệ của Solid Queue trên SQL phân tán.

Bối cảnh

Một đội ngũ chạy Rails trên YugabyteDB vướng vào tường. Các job Solid Queue bắt đầu xung đột serialize, thử lại, rồi lại xung đột, cho đến khi hàng đợi sụp đổ vì chính mức độ đồng thời của nó. Ứng dụng vẫn chạy. Hệ thống tác vụ nền thì không. Đổi thư viện hàng đợi hay đổi cơ sở dữ liệu đều không nằm trên bàn.

Chúng tôi đã làm gì

Chúng tôi truy ngược lỗi đến mức cô lập giao dịch. Solid Queue giả định ngữ nghĩa khóa của Postgres đơn node; YugabyteDB mặc định áp dụng snapshot isolation, và hai giả định đó không khớp dưới tải. Bản vá kết hợp tinh chỉnh cờ TServer ở phía cơ sở dữ liệu với một tập nhỏ thay đổi cấu hình Rails - đủ để đồng bộ kỳ vọng, không đủ để fork bất kỳ dự án nào.

Điều gì đã thay đổi

Hàng đợi đứng vững. Hệ thống job mở rộng theo chiều ngang và phân tán địa lý theo mặc định vì cơ sở dữ liệu bên dưới đã như vậy. Tầng ứng dụng không thay đổi.