주문하는 방식에서 튜터님께서 설명해주시다가 2 Phase Commit 에 대해 말씀하셨는데, 개념이 너무 명확하지 않아서 정리하는겸 작성한다.
2PC는 말 그대로 두 단계로 이루어진 커밋을 의미한다.
위에 적었듯이 분산 시스템에서 여러 개의 노드가 함께 수행해야 하는 트랜잭션의 안정성을 보장하기 위한 방식이며,
무엇보다 가장 많이 사용되는 방식이다.
구체적으로 아래의 두 단계를 거쳐 커밋이 수행된다.
요청을 보내는 주체(코디네이터 노드라고 부른다)가 대상 노드에게 준비 여부를 물어본다.
개별 노드는 이에 대한 대답으로 Yes 혹은 No를 리턴하며,
모든 노드가 준비가 된 상태라면 커밋 요청을, 그렇지 않다면 롤백 요청을 보낸다.
전송된 커밋 또는 롤백을 노드에서 처리 후 응답을 전송한다.
이처럼 모든 노드가 동일한 트랜잭션을 사용하는 경우 2PC는 유용하다.
이 방식은 위에서 본 것처럼 모든 노드에서 트랜잭션의 일관성을 보장한다는 장점이 있다.
하지만 하나의 노드라도 실패하면 전체 노드가 롤백되기 때문에 성능이 낮고
하나의 노드라도 통신 장애가 발생하면 해당 트랜잭션을 Block 한 채 다른 트랜잭션의 처리도 지연시켜 가용성이 낮은 편인데,
이를 가리켜 Single Point of Failure(SPOF)라고 부른다.
https://gnidinger.tistory.com/entry/MSA분산-트랜잭션Distributed-Transaction-튜토리얼