여러 서비스에 걸쳐 데이터 일관성 유지
여러 서비스에 걸쳐 데이터 일관성을 유지하는 일도 난제입니다. 여러 서비스에 있는 데이터를 업데이트하는 시스템 작업이 있겠죠. 가령 음식점이 주문을 접수하면 주방 서비스는 티켓 상태를 변경하고 배달 서비스는 배달 스케줄을 잡아야 하므로 두 서비스 모두 업데이트가 발생합니다. 이 때 두 업데이트는 원자적으로(atomically) 일어나야 합니다.
과거에는 커밋 방식의 2단계(2PC) 분산 트랜잭션을 많이 썼지만, 요즘 애플리케이션에는 잘 안 맞기 때문에 사가(saga)라는 전혀 다른 방식으로 트랜잭션을 관리해야 합니다(4장). 사가는 메시징을 이용한 일련의 로컬 트랜잭션입니다. 기존 ACID 트랜잭션보다는 복잡하지만 다양한 상황에서도 잘 동작합니다. 한 가지 단점은 최종 일관성(eventual consistency)16을 보장한다는 것입니다. 어떤 데이터를 원자적으로 업데이트해야 한다면 그 데이터를 하나의 서비스 내부에 두어야 하는데, 이는 결국 분해의 걸림돌이 됩니다.
16 당장은 맞지 않지만(실시간 동기화는 불가하지만), 결국 언젠가는(eventually) 데이터가 동기화되어 일관성이 맞추어지는 것을 말합니다.