MSA란?
마이크로(작은) 서비스들 + 아키텍쳐(건축물 등의 구조) = 작은 서비스들로 이루어진 소프트웨어 구조를 만드는 방식
이와 반대되는 느낌의 아키텍쳐 구조로는 전통적인 방식인 모노리틱 어플리케이션(Monolithic Application)은 모든 기능이 하나의 단일 소프트웨어 내에서 구현된다.
그럼이런 모노리틱 어플리케이션과 대비되는 MSA의 특징을 살펴보자.
1.모듈성(Modularity)
각 서비스는 특정 기능들을 담당하기 때문에 독립적으로 개발, 배포 및 확장 할 수 있다. 유지보수성 향상.
2.확장성(Scalability)
독립적이기에 시스템의 특정 부분에 대해 부하가 증가할 때, 해당 서비스만 확장하여 전체 시스템의 성능을 유지할 수 있게 해준다.
3.유연성(Flexibility)
다양한 프로그래밍 언어, 데이터베이스 및 기술스택을 사용하여 개발 할 수 있다. 최신기술을 도입하기 쉽다.
>서로 다른언어의 모듈간의 통합은 RESTful API, 메시지브로커, 이벤트기반 아키텍쳐, gRPC 등을 사용하여 가능하다.
4.독립적 배포(Independent Deployment)
각 서비스는 독립적으로 배포되므로 하나의 서비스의 변경이 다른 서비스에 영향을 주지 않는다.
이는 소프트웨어의 새로운 버전을 개발하고 배포하는 주기(Release cycle)를 빠르게 한다.
MSA방식에는 다음과 같은 점을 고려해야한다.
1.분산 시스템 관리(Distributed System Management)
각 서비스들의 분산시스템관리가 중요하다. 모니터링, 로깅 및 장애처리와 같은 측면에서 복잡성이 증가한다.
2.서비스 간 통신(Inter-Service Communication)
서비스간의 효율적인 통신이 중요해진다.(위에서 말한 RESTful API, 메시지브로커, 이벤트기반 아키텍쳐, gRPC 등등)
3.트랜잭션 관리(Transaction Management)
여러 서비스간의 트랜잭션을 관리해야 해서 이 역시 복잡도를 증가시킨다.
여기서 데이터관리와 일관성을 유지하는데 두 가지 패턴을 사용한다.
-이벤트 소싱(Event Sourcing)
시스템의 상태를 변경하는 각각의 작업을 이벤트로 기록하는 패턴(변경 이력이 남아있는 히스토리 같은 느낌).
이벤트는 시스템의 상태를 변경하는 원본소스로 작용.
이벤트는 불변하며 순서대로 기록.
시스템의 현재 상태는 모든 이벤트를 적용하여 재생성된다.
-분산 트랜잭션(Distributed Transactions)
여러 서비스나 시스템 간에 걸쳐 있는 연산이 하나의 트랜잭션으로 처리되는 것이다. 모든 연산이 모두 원자적으로 실행되기 때문에 일관된 상태를 보장한다.
'개발공부' 카테고리의 다른 글
SaaS (Software as a Service) ? (3) | 2024.11.28 |
---|---|
대칭키 비대칭키 (암복호화 방식) (0) | 2024.06.17 |
깃허브 fetch vs pull (0) | 2024.03.25 |
깃 (Git) (0) | 2024.03.23 |
Client, Browser, Server, HTTP (0) | 2023.08.28 |