관리 메뉴

피터의 개발이야기

[MSA] 마이크로서비스란? 본문

Kubernetes/기초공부

[MSA] 마이크로서비스란?

기록하는 백앤드개발자 2024. 2. 29. 11:59
반응형

ㅁ 들어가며

 지난 글, [MSA] 마이크로서비스란? - 배민 마이크로서비스 여행기를 보고...을 정리하였는데, MSA란 무엇인지 핵심적 내용을 정리해 보왔다.

 

ㅁ 마이크로서비스란?

 MSA(Microservices Architecture)는 작은 기능 단위로 독립적인 서비스를 모듈로 구성하는 소프트웨어 아키텍처이다. 분리된 서비스는 독립적인 프로세스로 구성되며, 서로 다른 서비스끼리 여러 패턴을 이용하여 통신과 데이터 동기화를 한다.

 

ㅁ 장점

ㅇ 서비스 간의 독립성, 오케스트레이션

 각 서비스는 모듈화되어 개발, 배포가 분리된다. 이를 통해 확장이 가능하므로 클라우드 환경과 더불어 전체 시스템의 유연성과 다양성을 높일 수 있다.

 

ㅇ 빠른 시장 출시

  분리된 서비스를 개별적으로 배포하면, 전체 서비스에 대한 종속성이 낮아져 빠른 개발과 배포가 가능하다. 시장의 기대에 맞추어 빠르게 서비스를 출시할 수 있다.

 

ㅇ 높은 확장성

 각 서비스를 개별적으로 확장할 수 있어 성능적 이슈에 대응이 빠르며, 서비스 별 리소스를 효율적으로 관리할 수 있다. 

 

ㅇ 유지보수의 투명성

 마이크로 서비스로 이루어져 있어, 어느 하나의 개발 언어에 종속되지 않고 서비스 최적화를 위한 기술스택 변경이 빠르다. 전체 시스템의 Outer architecture는 통일하데, Innert architecture는 투명성이 확보되고, 그만큼 변경이 자유롭다.

 

 

ㅁ 단점

ㅇ 분해된 서비스들의 통신 복장성

 서비스 규모가 작아질수록 서비스간의 통신의 증가는 불가피하다. 이로 인해 복잡성이 증가한다.

   해결 방법: Message Broker 사용, Sync(http, gRPC), Async(redis, rabbitmq, kafka)

 

ㅇ 분산 트랜잭션과 분산 저장된 데이터는 어떻게 쿼리할까?

 서비스간 분산되어 데이터의 일관성을 위해서 분산 트랜잭션이 어렵다. 서비스 포퍼먼스를 위해 일부 데이터는 비정규화를 거쳐 중복성이 커지고, 직접 연관된 데이터의 트렌젝션을 처리하면서 복잡성이 높아진다. MSA와 데이터 일관성의 딜레마에서 결단은 최종적 일관성(Eventually Consistency)을 목표로 한다. 

 

ㄴ 분산 트랜잭션 해결방법:

    - 2PC, 보상트랜잭션

    - SAGA패턴: 코레오그래피, 오케스트레이션

 

ㄴ 서비스별 쿼리 방법:

   - CQRS 패턴:

       - 복잡한 Command와 View를 위한 Query의 분리

       - 데이터 비정규화를 통한 장애 분리 및 포퍼먼스 향상

 

ㅇ  관리 부담성

 문제는 데이터의 일관성이다. MSA 패턴들은 비동기 방식으로 포퍼먼스를 우선 시 한다. 분산된 데이터의 트랜젝션과 동기화는 최종적 일관성이지, 완벽한 일관성을 이룰 수는 없다. SLA을 설정하여 서비스간에 책임성이 요구된다.

 비동기 처리 시  0.1ms 차이도 프로세스의 경합이 이루어질 경우 상반된 2가지 결과가 도출되기도 한다. timeout expire 처리하는 모듈과 result consumer가 동시에 이루어진다면, 결국 동기화로 처리해야하는데... 그러면 포퍼먼스가 덜어진다.

 

 

ㅁ 내가 경험한 마이크로 서비스란?

 

마이크로서비스는 정말 어쩔 수 없어서 쓰는 것이지, 편안해서 쓰는게 절대 아니다.
고객에겐 우리의 장애를 알리지 말라!!

 

 마이크로서비스 결과적으로 안정된 서비스를 위해 더 많은 고군분투가 필요하다.

 

ㅁ 함께 보면 좋은 사이트

ㅇ [MSA] 12가지 마이크로서비스 패턴

[MSA] 마이크로서비스 - 분산 트랜잭션 처리를 위한 Saga 패턴

[MSA] 마이크로서비스란? - 배민 마이크로서비스 여행기를 보고...

 

반응형
Comments