2017-11-03 3 views
2

가변적 인 컨텍스트를 다른 상태로 전달하는 많은 Stateless 마이크로 서비스가있는 응용 프로그램이 있습니다. 나는 같은 맥락의 서비스 체인을 병렬로 시작하지 않고 끝내기를 기다리고있는 경우가있다. 각 서비스는 변수 컨텍스트를 수정할 수 있지만 체인이 모두 끝나면 변수 컨텍스트를 병합하고 충돌이 없는지 확인해야합니다.변수가 한쪽에서만 수정되었는지 확인하는 방법

이 아래 실시 예에 예시 된 것 : incorrect example correct example

그것은 변수 변경의 전체 히스토리를 저장함으로써이 문제를 해결하는 것이 가능하지만 I 회피하려는 거대한 데이터 오버 헤드이다.

또 다른 해결책은 기존 해시 및 새 데이터로 수정 내역의 해시를 계산할 수있는 해싱 기능을 찾는 것입니다. 또한 한 히스토리 데이터가 다른 히스토리 데이터의 접두사인지 확인하여 해시 만. 그러나 나는 그러한 기능을 찾을 수 없다.

가능한 모든 데이터 오버 헤드가 적은 적용 가능한 알고리즘을 찾고 있습니다.

답변

1

필요한 것은 병렬 데이터 수정 사항을 병합하고 충돌을 감지하는 데 사용할 수있는 오래된 아이디어 인 Version clocks입니다.

가변 수정의 전체 내역을 저장하여이 문제를 해결할 수는 있지만 피해야하는 데이터 오버 헤드가 큽니다.

벡터 시계를 사용하면 전체 기록을 보존하지 않지만, 각 variable와 노드의 카운터 (각각의 variable는 카운터의 벡터를 가지고).

+0

정확히 내가 필요한 것입니다. 감사합니다! –

0

변수 수정의 전체 내역을 저장하는 것은 실제로 너무 끔찍하지 않습니다. 예를 들어 수정 정보를 대기열에 넣은 다음 한 번에 한 요소 씩 대기열을 처리하고 그 결과를 단일 장소에 넣을 수있는 서비스를 가질 수 있습니다.

이것은 일반적인 접근 방식입니다. 예를 들어 거대한 병렬 작업 부하가 있고 잠금 기능이있는 한 곳에서만 액세스를 동기화 할 수없는 경우입니다.

나중에 큐를 처리하는 작업자를 수평 확장 할 수도 있습니다.

관련 문제