Tôi cần đưa ra một cơ chế khóa đối tượng đệ quy tùy chỉnh \ mẫu cho một hệ thống phân tán trong C #. Về cơ bản, tôi có một hệ thống nhiều nút. Mỗi nút có quyền ghi độc quyền đối với các phần trạng thái n- số. Trạng thái tương tự cũng có sẵn ở dạng chỉ đọc trên ít nhất một nút khác. Một số ghi / cập nhật phải là nguyên tử trên tất cả các nút, trong khi các cập nhật khác cuối cùng sẽ trở thành các quy trình sao chép nền, hàng đợi, v.v ... nhất quán
Đối với các bản cập nhật nguyên tử, tôi đang tìm kiếm một mẫu hoặc mẫu cho phép tôi đánh dấu một đối tượng là bị khóa để ghi mà sau đó tôi có thể phân phối, cam kết, khôi phục, v.v ... Vì hệ thống có mức độ đồng thời cao, tôi Tôi cho rằng tôi sẽ cần có khả năng xếp chồng các khóa sẽ hết thời gian chờ hoặc không được kiểm soát sau khi khóa được giải phóng.
Các phần giao dịch hoặc nhắn tin không phải là trọng tâm của câu hỏi này, nhưng tôi đã cung cấp chúng cho một số bối cảnh bổ sung. Như đã nói, hãy thoải mái nói rõ những thông điệp bạn nghĩ sẽ cần nếu bạn muốn.
Đây là một mẫu mơ hồ về những gì tôi đã hình dung mặc dù tôi cởi mở với bất kỳ ý tưởng mới nào ngoài việc thực hiện toàn bộ sản phẩm mới
thing.AquireLock(LockLevel.Write);
//Do work
thing.ReleaseLock();
Tôi đã nghĩ đến việc sử dụng các phương thức mở rộng, có thể trông giống như thế này
public static void AquireLock(this IThing instance, TupleLockLevel lockLevel)
{
//TODO: Add aquisition wait, retry, recursion count, timeout support, etc...
//TODO: Disallow read lock requests if the 'thing' is already write locked
//TODO: Throw exception when aquisition fails
instance.Lock = lockLevel;
}
public static void ReleaseLock(this IThing instance)
{
instance.Lock = TupleLockLevel.None;
}
Để làm rõ một vài chi tiết ...
- Tất cả các thông tin liên lạc là TCP / IP sử dụng giao thức yêu cầu / phản hồi nhị phân
- Không có công nghệ trung gian như hàng đợi hoặc cơ sở dữ liệu
- Không có nút chủ trung tâm. Trong trường hợp này, sự sắp xếp khóa được xác định bởi người khởi tạo khóa và đối tác sẽ tôn trọng yêu cầu với một số hình thức hết thời gian để điều chỉnh hành vi của nó
Bất cứ ai có bất kỳ đề nghị?