최종 일관성에 대해 이해 한 내용을 바탕으로 이러한 모든 서비스 (소비자)는 동시에 이벤트를 수신하고 개별적으로 처리 하여 좋은 시나리오에서는 데이터 일관성을 유지합니다.
반드시 그런 것은 아닙니다. 내가 언급했듯이, 우리는 전송 된 이메일을 취소 할 수 없으므로 여전히 일종의 "시퀀스"가 필요합니다. 이벤트 중심 데이터 관리를 통한 IPC 는 오케스트레이션 1을 면제하지 않습니다 .
예를 들어, 이전 거래가 성공적으로 완료되고 이메일 서비스가이를 증명하지 않으면 이메일을 보내면 안됩니다. 삼
그러나 서비스가 이벤트를 처리하지 못하면 어떻게됩니까? 예를 들어 갑작스런 연결 끊기, 데이터베이스 오류 등 ... 이러한 트랜잭션 실패를 처리하기위한 좋은 패턴 / 실습은 무엇입니까?
분산 컴퓨팅 의 오류에 대해 인사 . 그것들은 일을 복잡하게 만드는 것이며, 평소와 같이 그것들을 다루는 은색 불릿은 없습니다.
잃어버린 방주를 찾아 여행을 시작하기 전에 먼저 조직에 문의하는 것을 고려해야합니다. 종종 해결책은 조직이 현실에서 이러한 문제에 어떻게 직면하는지에 있습니다. .
특정 데이터가 없거나 불완전 할 때 모든 사람 (부서)은 무엇을합니까?
우리는 부서마다 다른 솔루션을 가지고 있으며 구현할 솔루션을 구성하는 솔루션이 서로 다르다는 것을 알게 될 것입니다.
어쨌든, 여기에 따라야 할 전략에 도움이 될 수있는 몇 가지 관행이 있습니다.
시스템이 항상 일관된 상태를 유지하는 대신 시스템이 미래에 어느 시점에서 시스템을 사용할 수 있다는 사실을 받아 들일 수 있습니다. 이 접근 방식은 오래 지속되는 비즈니스 운영에 특히 유용합니다.
시스템이 일관성에 도달하는 방법은 시스템마다 다릅니다. 자동화 된 프로세스부터 일종의 인간 개입이 포함될 수 있습니다. 예를 들어, 나중에 다시 시도 하거나 고객 서비스 센터에 문의하십시오. .
모든 작업 중단
보상 거래 를 통해 시스템을 일관된 상태로 되돌립니다. . 그러나 이러한 트랜잭션도 실패 할 수 있으므로 불일치를 해결하기가 더 어려워 질 수 있다는 점을 고려해야합니다. 그리고 다시, 우리는 보낸 이메일을 취소 할 수 없습니다.
적은 수의 트랜잭션의 경우 보상 트랜잭션 수가 너무 적기 때문에이 방법이 가능 합니다. IPC에 여러 비즈니스 트랜잭션이 포함 된 경우 각 트랜잭션 마다 하나의 보상 트랜잭션 을 처리 하는 것이 어려울 수 있습니다.
우리가 가면 거래를 보상 , 우리는 찾을 회로 차단기 디자인 패턴을 매우 유용하게 - 의무적 내가 말을 감히 -
분산 트랜잭션
아이디어는 Transaction Manager 라고하는 전반적인 관리 프로세스를 통해 단일 트랜잭션 내에서 여러 트랜잭션을 확장하는 것입니다 . 분산 트랜잭션을 처리하기위한 일반적인 알고리즘은 2 단계 커밋 입니다.
분산 트랜잭션의 주요 관심사는 수명 기간 동안 리소스를 잠그는 것에 의존한다는 것입니다. 아시다시피 트랜잭션 관리자 에도 문제가 발생할 수 있습니다.
경우 트랜잭션 관리자가 손상됩니다, 우리는 인해 메시지의 대기열에 포함에 예기치 않은 동작의 결과로, 모든 differents의 경계 상황에서 여러 가지 잠금으로 끝낼 수 있습니다.2
분해 작업. 왜?
기존 시스템을 분해하고 실제로 단일 트랜잭션 경계 내에 포함하려는 개념 모음을 찾으면 마지막까지 남겨 두십시오.
샘 뉴먼
위의 주장과 관련하여 Sam은 자신의 저서 Building Microservices 에서 실제로 최종적으로 일관성을 유지할 수 없다면 지금 작업을 분리하지 말아야한다고 말합니다.
특정 작업을 둘 이상의 트랜잭션으로 분할 할 여유가없는 경우 이러한 트랜잭션은 동일한 경계 컨텍스트에 속하거나 모델링해야하는 교차 절단 컨텍스트에 속한다고 할 수 있습니다.
예를 들어, 우리의 경우 트랜잭션 # 1과 # 2는 서로 밀접하게 관련되어 있으며 아마도 둘 다 동일한 경계 컨텍스트 Accounts , Users , Register에 속할 수 있습니다 .
동일한 트랜잭션의 경계 내에 두 작업을 모두 배치하십시오. 전체 작업을보다 쉽게 처리 할 수 있습니다. 또한 각 거래의 중요도 수준을 파악하십시오. 트랜잭션 # 2가 실패하더라도 전체 작업이 손상되지 않아야합니다. 의심스러운 경우 조직에 문의하십시오 .
1 : 당신이 생각하는 오케스트레이션이 아닙니다. ESB의 오케스트레이션에 대해서는 이야기하지 않습니다. 서비스가 적절한 이벤트에 반응하게 만드는 것에 대해 이야기하고 있습니다.
2 : 분산 트랜잭션에 대한 흥미로운 Sam Newman의 의견을 찾을 수 있습니다 .
3 :이 주제에 관한 David Parker의 답변을 확인하십시오.