Đi đến nội dung chính
VI
Trang chủ / 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

Tóm tắt: 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ữ chính: 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

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ũ.

Vì sao cách làm đơn giản chưa đủ

Mutual exclusion trong một process khá rõ. Giữa nhiều máy, network delay khiến client không thể chắc mình còn giữ khóa.

Nhiều trường hợp không cần đúng một scheduler. At-least-once scheduling cùng job idempotent có thể đơn giản và an toàn hơn leader election.

Luồng xử lý

Contender
yêu cầu lease
Coordinator
cấp fencing token
tiến trình xử lý
xử lý hữu hạn
Resource
từ chối token cũ
Chính resource, không phải tiến trình xử lý, enforcement chỉ quyền sở hữu token mới nhất được phép thay đổi trạng thái.

Quyết định kiến trúc

Ưu tiên partition quyền sở hữu

Gán aggregate hoặc shard cho một tiến trình xử lý và rebalance rõ ràng để giảm số khóa.

Dùng monotonic fencing

Mỗi lần lấy lease nhận token lớn hơn. Kho lưu trữ so sánh atomically với token cuối.

Giới hạn critical section

Đặt deadline nhỏ hơn lease duration và ngừng nhận sub-work mới khi renewal không chắc chắn.

Phân tích chuyên sâu

Thời gian không phải quyền sở hữu

TTL giới hạn thời gian người khác chờ. Tuy nhiên, clock không thể thu hồi code đang chạy. Kho lưu trữ-side token bịt khoảng trống đó.

khóa không nên che product conflict

Hai người sửa cùng document có thể cần optimistic phiên bản và conflict UX, không phải infrastructure khóa.

Các bước triển khai

  1. Loại shared quyền sở hữu không cần thiết bằng partitioning hoặc idempotency trước.
  2. Dùng lease hữu hạn kèm fencing token tăng dần.
  3. Để protected resource từ chối token nhỏ hơn giá trị cuối đã nhận.

Ví dụ kỹ thuật: Fenced update

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

khóa coordinator thành công nhưng ghi không có fencing vẫn chưa đủ. Lý do là người phụ trách cũ bị pause có thể chạy lại.

Các tình huống lỗi cần tính trước

  • Stop-the-world pause dài hơn lease.
  • Coordinator quorum lỗi và client bất đồng về quyền sở hữu.
  • External call dài hoàn tất sau khi lease đã chuyển.

Tín hiệu cần giám sát

Tín hiệuÝ nghĩa
Lỗi acquire và renew leaseCho biết contention và sức khỏe coordinator.
Số fencing token cũ bị từ chốiChứng minh stale người phụ trách có xảy ra và được chặn.
Thời lượng critical sectionPhát hiện khối lượng công việc không còn phù hợp giả định lease.

Cách kiểm chứng thiết kế

  • Pause khóa holder quá TTL rồi cho chạy tiếp.
  • Partition holder khỏi coordinator nhưng vẫn nối được kho lưu trữ.
  • Chạy nhiều contender và chứng minh chỉ token tăng dần commit.

Kế hoạch triển khai an toàn

Đo critical section hiện tại, thêm idempotency và optimistic phiên bản trước. Sau đó, chỉ dùng fencing cho operation thật sự cần exclusive quyền sở hữu. Giữ công tắc dừng khẩn cấp về safe serial processing.

Checklist trước khi đưa vào vận hành

  • Giả định về clock được ghi rõ và giảm tối đa.
  • Renewal lỗi phải dừng nhận việc mới trước khi lease hết hạn.
  • Operation dài có mốc lưu an toàn thay vì một critical section quá lớn.

Kết luận

khóa điều phối các lần thử. Fencing tại resource mới bảo vệ tính đúng đắn.

Đối tác công nghệ chiến lược

Biến bài toán kinh doanh thành một lộ trình rõ ràng.

Trao đổi trực tiếp với đội ngũ Z-SOFT về mục tiêu, hiện trạng và bước đi phù hợp tiếp theo.

Đặt lịch tư vấn