Microservices Architecture 를 번역한 내용입니다.
1. 왜 MSA 는 필요한 것일까?
- 빠르고 가용성이 높은 애플리케이션을 만들고 부하를 견딜 수 있는 환경을 만들기 위해 MSA가 필요했다.
- 사용자는 24시간, 7일 동안 빠른 응답을 기대하기 때문이다.
- 이러한 니즈에서 나온 것이 MSA 였고, 다른 아키텍처의 패턴과 비교하여 어떤 이점이 있는지에 관해 차근차근 알아보고자 한다.
2. MSA를 시작하면서...
- Microservices Architecture라는 이름에서도 알 수 있다시피, service라고 불리는 개별적인 애플리케이션에 의해 한 애플리케이션의 기능이 수행되는 것을 의미한다.
- 각 service마다 독립적 database를 가질 수 있고, events, messages, REST API를 통해서 통신할 수 있다.
- Scale 측면에서 소프트웨어를 구성하는 것을 용이하게 해준다.
- 새로운 기능을 제공하고 싶다면, 전체 애플리케이션에 영향을 주지 않고 새로운 기능을 만들어 추가할 수 있다.
3. Microservices라는건 뭘까?
- 독립적이고 제한된 목적으로 개발되었으며 다른 큰 애플리케이션과 연동될 수 있는 서비스이다.
- 각각의 기능을 독립적으로 수행한다는 것은, 각각의 기능을 모듈화 시켜 레고처럼 만든다는 것이다.
4. 왜 Microservices의 장점
1) 장점
- 언어에 구애받지 않고 개발을 진행할 수 있다.
- image processing을 위해서 Rust를 사용할 수도 있고 Node.js를 통해 실시간 채팅 애플리케이션을 만들 수도 있다.
- 팀에서 독립적으로 서비스를 만들 수 있고 운영하고 합칠 수도 있다. (agile 철학)
- 기능을 재사용하거나 결합하여 사용할 때 유용하다.
- monolithic architecture가 수직적으로 스케일 업한다면, microservice는 수평적으로 스케일을 증가시킬 수 있는 것이다.
- 큰 서버를 리빌딩하는 것은 오래걸리지만(build-time bottleneck) 작은 기능을 리빌드 하는 것은 빌드타임 병목현상을 줄여준다.
- Versioning을 간편하게 해주어, 새로운 Version을 빌드할 때, 이전 Version을 계속 실행되게 해주어 무중단 서버를 구현할 수 있다.
- 자원 공유 측면에서 이득이 있다. 각 service는 자신에게 해당하는 database만 관리하면되기 때문이다.
2) 단점 (한계)
5. 다른 접근법과 MSA의 비교
1) Monolithic Architecture
- 모든 기능을 하나의 기기 안에서 운영하는 아키텍처
- Monolithic은 수직으로 스케일 업(scaled vertically)된다. (=RAM과 CPU의 사용량을 증가시킨다.)
- 하나의 기기가 모든 기능을 담당하면 부하(latency)가 증가하고, 하나의 데이터베이스로 관리하기 어려워질 수 있다.
- 이를 해결하기 위해 데이터베이스를 복제한다면, 데이터베이스의 sink(동기화)가 잘 이루어지는지 확인해야하는 등의 단점이 생긴다.
2) Service-Oriented Architecture (SOA)
- Monolithic Architecture에 대한 대안으로 제시
- 서비스 인터페이스를 통해서 소프트웨어의 재사용을 가능하게 한다.
이어지는 Microservices Architecture (MSA) - 2 에서는 Microservice architecture에서 자주 채택하는 디자인 패턴과 MSA를 구현하는데 사용되는 Tool에 대해 설명합니다.