Đi đến nội dung chính
VI
Trang chủ / Bài viết / Khóa phân tán và Lease: ngăn nhiều tiến trình ghi đè lẫn nhau
23 thg 4, 2026 · Z-SOFT Admin · 10 phút đọc

Khóa phân tán và Lease: ngăn nhiều tiến trình ghi đè lẫn nhau

Dùng quyền sở hữu có thời hạn và Fencing Token để ngăn tiến trình cũ tiếp tục ghi sau khi mất quyền.

Xem tất cả bài viết

Ý chính: Khóa phân tán không thể tự chứng minh một tiến trình vẫn còn quyền sở hữu sau khi bị dừng hoặc mất kết nối.

Thuật ngữ trong bài: Lease: quyền sở hữu có thời hạn; fencing token: số tăng dần để chặn chủ sở hữu cũ; critical section: đoạn xử lý chỉ cho phép một tiến trình thay đổi.

Bài toán thực tế

Một tiến trình có thể bị tạm dừng lâu đến mức Lease hết hạn. Tiến trình khác nhận quyền xử lý, nhưng tiến trình cũ sau đó vẫn chạy tiếp. Tài nguyên đích phải tự từ chối những lần ghi mang quyền sở hữu đã cũ.

Lease có thể hết hạn trong lúc tiến trình bị dừng bởi GC, mất mạng hoặc tạm treo. Khi tiến trình chạy lại, nó không biết một chủ sở hữu mới đã tiếp quản và vẫn có thể ghi dữ liệu cũ.

Fencing Token giải quyết phần còn thiếu: tài nguyên đích chỉ chấp nhận số thứ tự quyền sở hữu mới hơn, nên tiến trình cũ không thể ghi dù vẫn tiếp tục chạy.

Thiết kế và triển khai

  1. Loại bỏ nhu cầu sở hữu chung bằng partition hoặc idempotency trước khi thêm khóa.
  2. Dùng lease có thời hạn kèm Fencing Token tăng dần cho mỗi lần cấp quyền.
  3. Buộc tài nguyên được bảo vệ từ chối mọi lần ghi có Fencing Token nhỏ hơn giá trị cuối đã nhận.

Mã minh họa: Cập nhật được bảo vệ bằng Fencing Token

lease = coordinator.acquire(resourceId, ttl = 10s)
result = compute(deadline = lease.expiresAt - 2s)
UPDATE resource
SET value = :result, fence = :token
WHERE id = :id AND fence < :token

Nhận khóa thành công nhưng ghi không kèm Fencing Token vẫn chưa an toàn, vì tiến trình mất quyền có thể tỉnh lại và tiếp tục chạy.

Rủi ro cần tính trước

  • Một lần dừng toàn bộ tiến trình kéo dài hơn thời hạn lease.
  • Các node điều phối mất quorum và ứng dụng khách không thống nhất ai đang sở hữu quyền.
  • Lời gọi dịch vụ bên ngoài hoàn tất sau khi lease đã được chuyển cho tiến trình khác.

Nên theo dõi gì?

Tín hiệuĐiều tín hiệu cho biết
Lỗi nhận và gia hạn leaseCho biết mức tranh chấp cùng sức khỏe của hệ thống điều phối.
Số Fencing Token cũ bị từ chốiChứng minh tiến trình mất quyền vẫn tiếp tục chạy nhưng đã bị chặn đúng cách.
Thời lượng đoạn xử lý độc quyềnPhát hiện công việc đã dài hơn giả định an toàn của lease.

Đưa vào production từng bước

Đo đoạn xử lý cần độc quyền và thử idempotency hoặc khóa lạc quan trước. Chỉ thêm Fencing Token cho thao tác thật sự cần một chủ sở hữu, đồng thời giữ đường xử lý tuần tự an toàn để dùng khi có sự cố.

Điều cần nhớ

Khóa phân tán chỉ điều phối các tiến trình; Fencing Token tại tài nguyên đích mới bảo vệ tính đúng đắn khi quyền sở hữu đã đổi.

HỢP TÁC CÙNG Z-SOFT

Mỗi quyết định công nghệ hôm nay đều ảnh hưởng đến nhiều năm sau.

Trao đổi với đội ngũ Z-SOFT để đánh giá hiện trạng, xác định mục tiêu và lựa chọn kiến trúc phù hợp với định hướng phát triển của doanh nghiệp.

Đặt lịch tư vấn