마이크로 서비스란
기존의 하나의 서비스를 작은 서비스 단위로 나누어, 각 서비스가 독립적이지만 긴밀하게 연결되어 있는 상태를 유지할 수 있도록 구성한다. 그래서 수평 확장이 용이하게 되고, 서비스별 독립성이 보장되어 고가용성을 달성할 수 있다.
독립성을 보장하기 위해서는 각 서비스별 배포, 운영이 가능해야한다. 그래서 각 서비스별 NoSQL 데이터베이스를 사용하여 분산서비스를 구성하는 경우가 많다. 아래와 같은 그림처럼 각 서비스별 데이터베이스를 가지고 있어 독립적인 서비스로 사용할 수 있다.
그러나 결국 MSA는 하나의 서비스를 가르키는 말인데, 데이터 베이스가 이렇게 많아도 될까?라는 의문이 든다.
MSA를 위해 DB를 꼭 분리해야할까?
꼭 그렇진 않다. 항상 어떠한 행동을 할 때 따를 수 있는 비용을 생각해보아야 한다. 장기적으로 서비스를 본다면 분리하는 것이 바람직하지만, 서비스 초기부터 데이터베이스를 분리하는 것은 위험도가 굉장히 높아 질뿐 아니라, 프로젝트 실패 시 부담해야 할 리스크 역시 커질 수 있다. 왜냐하면 데이터베이스를 분리하는 것은 단순히 물리적 공간을 나눈다는 것이 아니라, 데이터의 경합성과 연속성을 보장할 수 있어야 하기 때문이다.
만약 분리된 DB가 중복된 데이터를 담아도 괜찮을까?
데이터베이스를 판단하기 위해 두 가지 기준이 사용된다. 바로 일관성(Consistency)과 가용성(Availability)이다. 일관성은 서버 간 각 데이터베이스가 일관된 데이터를 유지하는지 여부이고, 가용성은 데이터베이스가 얼마나 정상적으로 동작할 수 있는지 여부이다. 일반적으로 일관성과 가용성은 동시에 달성되기 쉽지 않다. 높은 일관성(Strong Consistency)을 유지하기 위해서는 각 서버의 데이터베이스가 동기화를 위해 사용자의 접근을 차단하는 시간이 발생한다. 즉, 가용성이 떨어질 수밖에 없다.
높은 일관성을 보장하는 데이터베이스는 관계형 데이터베이스(SQL DB)가 있다. 이를 이용하기 위해서는 확장성과 성능을 어느 정도 포기해야 한다.
이에 반해 결과적 일관성(Eventual Consistency)이라는 개념이 있다. 이는 각 데이터베이스의 항목이 항상 새롭게 업데이트되지 않을 수도 있다는 전제하에, 최소한 모든 읽기 작업이 마지막으로 업데이트된 값을 반환해준다는 것을 이론적으로 보장하는 것이다. 말은 어렵지만 일관성을 어느 정도 포기하고 가용성을 높인 방법이다. 아래의 그림을 보면 더욱 이해가 쉽다
이는 보통 비관계형 데이터베이스(NoSQL DB)에 많이 사용되는데, 비관계형 데이터베이스는 확장이 쉽다는 장점 덕에 MSA와 같은 분산 시스템에 많이 사용된다.
사례를 생각해보자
당연히 데이터의 일관성이 유지되는 건 좋은 일이다. 대한민국의 질병관리 시스템을 예시로 들어 어떤 부분을 동기적으로, 또는 비동기적으로 처리해도 될지 이해해보자. 동기적으로 처리한다는 것은 항상 높은 일관성을 유지한다는 것이고, 비동기적으로 처리한다는 것은 일관성보다는 가용성을 우선시한다는 것이다.
- 질병관리청에서 확진자 정보를 조회하고자 한다면, 동기적으로 처리되어야 한다.
- 왜냐하면, 즉시 조회가 가능해야 하기 때문이다.
- 질병관리청에서 확진자 정보를 문자전송 시스템에 전달한다면, 비동기적으로 처리되어도 된다.
- 왜냐하면, 우선 요청을 보내 놓고, 나중에 일괄적으로 문자를 전송할 수 있기 때문이다.
출처
마이크로 서비스 아키텍처에서 단일 데이터베이스를 분리해야 하는 이유
기존 Monolithic 서비스를 분해하여 Micro Service 아키텍처를 사용할 경우 데이터베이스에 중점을 두는 것이 중요합니다. 어플리케이션과 연계된 데이터베이스를 여러개의 작은 데이터베이스로 분할
giljae.medium.com
https://waspro.tistory.com/718
마이크로서비스 아키텍처의 기준과 DB 분리
개요 최근 3년 사이 마이크로서비스 아키텍처의 급격한 유행에 따라 많은 프로젝트에서 MSA로의 전환을 시도하고 있으며, 성공적으로 전환한 케이스가 있는 반면, 실패한 경우도 종종 발생하고
waspro.tistory.com
Datastore로 strong consistency와 eventual consistency 간에 균형 유지 | Cloud Datastore 문서 | Google Cloud
Google Cloud Platform을 사용하면 Google의 확장 가능한 인프라에서 애플리케이션과 웹사이트를 빌드 및 호스팅할 수 있으며, 데이터를 저장 및 분석할 수 있습니다.
cloud.google.com
'MSA' 카테고리의 다른 글
서버리스 사진첩 만들기 (0) | 2022.04.15 |
---|---|
[lambda]서버리스 애플리케이션 성능 최적화 (0) | 2022.04.13 |
[MSA]API Gateway를 사용하여 간단한 서비리스 애플리케이션을 만들어보자 (0) | 2022.04.13 |
[MSA]Circuit Breaker를 활용하여 부분 실패를 막자 (0) | 2022.04.08 |
마이크로 서비스와 서버리스 (0) | 2022.04.06 |