C #의 분산 시스템에 대한 사용자 지정 재귀 적 객체 잠금 메커니즘 \ 패턴을 만들어야합니다. 본질적으로 다중 노드 시스템이 있습니다. 각 노드에는 n 개의 상태 조각에 대해 독점적 인 쓰기 권한이 있습니다. 하나 이상의 다른 노드 에서 동일한 상태를 읽기 전용 형식으로 사용할 수도 있습니다 . 일부 쓰기 / 업데이트는 모든 노드에서 원자 적이어야하지만 다른 업데이트는 백그라운드 복제 프로세스, 큐 등을 통해 일관되게 유지됩니다.
원자 업데이트의 경우 객체를 쓰기에 대해 잠긴 것으로 효율적으로 표시하여 배포, 커밋, 롤백 등을 할 수 있는 패턴 또는 샘플을 찾고 있습니다. 시스템에 높은 수준의 동시성이 있으므로, 잠금이 해제되면 시간 초과되거나 풀릴 수있는 잠금을 쌓을 수 있어야한다고 가정합니다.
트랜잭션 또는 메시징 부분은이 질문의 초점이 아니지만 추가 컨텍스트를 제공했습니다. 그 말로, 원하는 경우 어떤 메시지가 필요하다고 생각하는지 자유롭게 표현하십시오.
완전히 새로운 제품을 구현하는 것 외에도 새로운 아이디어에 개방적이지만 내가 구상했던 것에 대한 모호한 샘플은 다음과 같습니다.
thing.AquireLock(LockLevel.Write);
//Do work
thing.ReleaseLock();
확장 방법을 사용하려고 생각했는데 다음과 같이 보일 수 있습니다.
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;
}
몇 가지 세부 사항을 명확히하려면 ...
- 모든 통신은 이진 요청 / 응답 프로토콜을 사용하는 TCP / IP입니다.
- 대기열 또는 데이터베이스와 같은 중개 기술이 없습니다
- 중앙 마스터 노드가 없습니다. 이 경우 잠금 배열은 잠금의 시작 자와 해당 동작을 제어하기위한 시간 종료 형식으로 요청을 처리 할 파트너에 의해 정의됩니다.
누구든지 제안이 있습니까?