마이크로서비스 두번째 제출과제

[C813] 마이크로서비스를 구성할 때, 데이터베이스를 꼭 분리해야 하나요? 데이터가 한 곳에 모여있지 않고 중복되어도 괜찮은가요? 모범 사례를 알아보고, 이유를 함께 적어주세요. 

Eventual consistency(결과적 일관성, 최종 일관성)

분산환경에서 트랜잭션을 일관되게 유지하는 방법은 구현이 어렵습니다. 그 예로 2PC(two-phase commit)  TCC(Try-Confirm/Cancel) 방법은 구현이 어렵고, 성공사례도 많지 않습니다. 그 결과로 일관성을 약간 포기하고, 결국에는 모든 트랜잭션이 일치하는 최종 일관성 방법이 가장 효율적입니다.

최종일관성이란?

마이크로 서비스는 분산환경에서 각 서비스가 분리 되어있습니다. 이런 상황에서 트랜잭션과 일관성을 유지하기 위하여 동기식 통신 방법으로 2PC, TCC 등이 있습니다. 비동기식 통신 방법으로 트랜잭션을 일치 시키는 방법은 최종 일관성 (Eventual Consistency) 방법을 사용합니다.

최종 일관성은 사용자가 보기에 잠깐은 불일치 하는 데이터가 있을수 있지만, 결국에는 모든 데이터가 일치하는 방법입니다.

 

CAP 이론

CAP 이론은 분산 시스템에서는 데이터 일관성(data consistency), 시스템 가용성(system availability), 네트워크 분할 허용성(network to partition-tolerance) 간의 고유한 균형이 존재하는데, 이들 세 특성 가운데 두 가지를 제공할 수 있지만, 세 가지 모두는 제공하지 않는다는 정리입니다. 그중 앞글자만 따서 CAP 라고 호칭합니다.

일관성(Consistency) :

모든 노드가 같은 시간에 같은 데이터를 볼수 있는것을 의미합니다.

만약 최신 데이터가 아니라면 에러를 돌려줘야 합니다.

분산환경에서 가장 구현이 어려운 개념입니다.

가용성(Availability) :

모든 클라이언트가 읽고 쓸수 있어야 합니다. 즉 몇개의 노드가 죽어도 항상 시스템이 응답 가능한 상태를 뜻합니다.

가용성을 보장한다는 말은 이전 데이터를 볼수도 있다는 말입니다.

분단 내성(Partition tolerance) :

데이터가 분산 환경에 나누어져 있는 환경에서도 잘 동작하는 것을 의미합니다.

마이크로 서비스는 분산 환경에서 작동하기 때문에 항상 P 를 만족해야 합니다. 이러한 상황에서 일관성(Consistency) 을 선택 할 것이냐, 가용성(Availability) 을 선택

 

AP 시스템 : 항상 응답하는 시스템을 만들기 위해서, (심지어 네트워크가 끊어져도) 기본값을 설정해주면 됩니다. 예를들어 주문을 하려고 할때 상품 시스템이 죽어있어도, 이전에 조회 해 놓았던 데이터를 보여주면 가용성은 만족됩니다. 이는 성능은 높아지지만 이전데이터를 볼수도 있고, 심지어 문제가 발생한지도 모를 수 있습니다.

이러한 상황에서 최종 일관성 (Eventual Consistency)  A + P 를 만족하는 상황에서 결론적으로 C 를 만족하는 방법입니다.

이것은 순간적으로 과거의 상황을 볼 수 있지만, 결국은 일관성이 맞추어 집니다.

서비스에서 이벤트를 조금 늦게 받을수는 있어도, 결국에는 모든 이벤트를 수신하여 처리를 하는 방식이기에 최종 일관성을 유지시켜서 시스템을 구현 할 수 있는 방법

 

모범사례 : 이벤트 드리븐 시스템에서 트랜잭션을 유지하는 방법

쇼핑몰에서 주문 서비스에서 주문을 처리하고, 상품 서비스에서 재고량 관리를 할때, 사용자가 주문을 하였을때 재고량이 변경되어야 합니다.

클라이언트에서 주문 시스템에 주문 요청을 하였을때, 주문 서비스에서 주문 처리 후 OrderPlaced 이벤트를 발행 합니다. 상품 서비스에서는 OrderPlaced 이벤트를 수신하여 재고량을 수정합니다.
내부 서비스를 이벤트를 호출하기 때문에 비동기 이벤트 메세지 통신이지만, 사용자가 느끼기에는 거의 차이가 없이 재고량이 수정 될 것입니다. 그러나, 상품 서비스에 장애가 있을때 잠깐 불일치 하는 상황이 있을 수 있습니다.

그러나 상품 서비스에 장애가 풀렸을때 결국 이벤트를 수신하여, 재고를 수정하는 처리를 할 것입니다. 최종적으로 트랜잭션은 유지가 되는것이다.

 

https://www.msaschool.io/operation/integration/integration-four/

 

msaschool - msaschool

ProductOutOfStock 이벤트를 주문서비스에서 받아야 하니, 상품서비스의 ProductOutOfStock.java 파일을 복사하여 주문서비스에 붙여넣기 합니다.

www.msaschool.io

https://cloud.google.com/datastore/docs/articles/balancing-strong-and-eventual-consistency-with-google-cloud-datastore?hl=ko 

 

Datastore로 strong consistency와 eventual consistency 간에 균형 유지  |  Cloud Datastore 문서  |  Google Cloud

Google Cloud Platform을 사용하면 Google의 확장 가능한 인프라에서 애플리케이션과 웹사이트를 빌드 및 호스팅할 수 있으며, 데이터를 저장 및 분석할 수 있습니다.

cloud.google.com

 

[C814] 여러 도메인을 가지고 있는 서비스에서, 하나의 서비스에서는 성공했지만 연관된 다른 서비스에서 실패하는 “부분 실패”의 경우 어떻게 처리해야 하나요? 음식 주문에서 결제에는 성공했지만, 주문에는 실패하는 경우를 예를 들어 설명하세요.

-> MSA 회로 차단기(circuit breaker) 라는 키워드로 구글링 해보세요

JUNE .

20'S LIFE IN SYDNEY and BUSAN

    이미지 맵

    DevOps Bootcamp/Assignments 다른 글

    이전 글

    다음 글