diff --git a/_posts/2023-12-29-GoingToFlexibleArchitecture.md b/_posts/2023-12-29-GoingToFlexibleArchitecture.md index 0ef94db..dcd4cec 100644 --- a/_posts/2023-12-29-GoingToFlexibleArchitecture.md +++ b/_posts/2023-12-29-GoingToFlexibleArchitecture.md @@ -273,13 +273,15 @@ class UserOrderRetrieveModel( ![](https://engineering-skcc.github.io/assets/images/msa/MSA3.15.png) -명령 측면 마이크로서비스는 입력,수정,삭제(Create, Update, Delete) 처리를 수행하고 저장소로는 쓰기에 최적화된 관계형 데이터베이스를 사용한다. 그리고 프로그램언어도 업무 규칙을 표현하기 좋은 Java 언어를 사용한다. +명령 측면 마이크로서비스는 입력, 수정, 삭제(Create, Update, Delete) 처리를 수행하고 저장소로는 쓰기에 최적화된 관계형 데이터베이스를 사용한다. -쿼리 측면의 마이크로서비스는 조회 성능이 높은 몽고디비(Mongo DB)나 일레스틱서치(Elasticsearch)와 같은 NO-SQl DB를 사용한다. 그리고 프로그램언어도 조회를 간단하게 구현할 수 있는 스크립트(Script) 기반의 노드제이에스(Node.js) 을 사용한다. 그리고 조회서비스는 사용량이 많기 때문에 스케일 아웃하여 인스턴스를 증가시켜 놓을 수 있다. +쿼리 측면의 마이크로서비스는 조회 성능이 높은 몽고디비(Mongo DB)나 엘라스틱서치(ElasticSearch)와 같은 NO-SQl DB를 사용한다. 그리고 조회서비스는 사용량이 많기 때문에 스케일 아웃하여 인스턴스를 증가시켜 놓을 수 있다. -그런데 이런 구조에서는 명령 측면 서비스가 사용됨에 따라 조회 측면 서비스와의 데이터 일관성이 깨지게 된다. 따라서 이때 데이터 일관성 유지를 위한 이벤트 메시지 주도 아키텍처가 등장한다. 쓰기 서비스는 저장소에 데이터를 쓰면서 저장한 내역이 담긴 이벤트를 발생시켜서 메시지브로커에 전달한다. 조회 서비스는 이러한 메시지 브로커의 이벤트를 구독하고 있다가 이벤트 데이터를 가져와 자신의 데이터를 최신 상태로 동기화 시켜준다. +그런데 이런 구조에서는 명령 측면 서비스가 사용됨에 따라 조회 측면 서비스와의 데이터 일관성이 깨지게 된다. -물론 명령 측면 서비스에 데이터가 들어간 즉시 조회 측면 서비스의 데이터가 일치할 수 없고 시간적 간격이 있을 수 있지만 어느 시점이 되면 결과적으로 일치하게 된다. 앞서 말 한 결과적 일관성(Eventual Consistency)추구하는 것이다. +따라서 이때 데이터 일관성 유지를 위한 이벤트 메시지 주도 아키텍처가 등장한다. 쓰기 서비스는 저장소에 데이터를 쓰면서 저장한 내역이 담긴 이벤트를 발생시켜서 메시지브로커에 전달한다. 조회 서비스는 이러한 메시지 브로커의 이벤트를 구독하고 있다가 이벤트 데이터를 가져와 자신의 데이터를 최신 상태로 동기화 시켜준다. + +물론 명령 측면 서비스에 데이터가 들어간 즉시 조회 측면 서비스의 데이터가 일치할 수 없고 시간적 간격이 있을 수 있지만 어느 시점이 되면 결과적으로 일치하게 된다. 앞서 말 한 결과적 일관성을(Eventual Consistency)추구하는 것이다. ---