잘못 알고있던 내용 :
1. 모놀로리식도 확장이 쉽다. 부하분산기 뒤에 애플리케이션 인스턴스를 여러 개 실행하면 되는 것.
2. 서비스마다 자체 DB를 둔다는 것이 자체 DB를 설치해야 한다는 의미가 아니다.
3. 서비스마다 자체 소스코드 저장소가 있고, 서비스마다 자체 자동화 개발 파이프라인(젠킨스 CI)이있다.
마이크로 서비스 아키텍쳐
근본 :
- 3계층 아키텍쳐
- 웹 애플리케이션 설계
- 객체 지향 설계를 응용한 비즈니스 로직 개발
- RDBMS 사용법 : SQL 과 ACID 트랜잭션
- 메시지브로커와 REST API를 활용한 IPC
- 인증/인가의 보안 개념
특징 :
1. Y축 확장 : 기능에 따라 애플리케이션을 서비스로 분해
2. Y축을 기준으로 X축확장(복제) 또는 Z축 확장(파티셔닝).
X축 확장 : 일반적인 부하분산으로, 로드밸런서 뒤에 동일한 애플리케이션 인스턴스를 N개 띄워 놓고 요청 분배하는 것.
Z축 확장 : 요청 속성별로 라우팅 하여 동일한 N개의 애플리케이션 인스턴스에 부하를 분산하는 것.(ex 사용자 id 기준으로 부하 분산)
3. 리소스 요건이 전혀다른 (ex) cpu 집약적 vs 메모리 집약적) 컴포넌트를 무조건 하나의 서버에 배포할 수 밖에 없었던 모놀리식 아키텍쳐와 다르게,
데이터 용량이 큰 데이터를 처리하기 위해 인메모리 DB를 사용할 때는 메모리 칩이 많이 장착된 서버에 배포를 하고,
이미지 처리 모듈 등 CPU를 많이 사용하는 경우는 CPU 코어 수가 많은 서버에 배포하여 리소스 요건에 맞게 소스코드 배포 가능하다.
마이크로서비스 아키텍쳐의 단점
1. 잘못 설계할 경우 분산 모놀리스를 구축해 반드시 함께 배포해야하는 결합도가 높은 서비스들로 이루어진 시스템이 탄생할 수 있다.
2. 서비스 간 통신에 필수적인 IPC역시 단순 메서드 호출보다 복잡하며, 사용불능 또는 지연시간이 긴 원격 서비스, 부분 실패한 서비스를 처리할 수 있게 설계해야 한다. 서비스마다 DB가 따로 있기 때문에 다중 DB에 접속하여 조회하고 트랜잭션을 구현하는 일이 어렵다. 따라서마이크로서비스 아키텍쳐는 사가라는 기술로 서비스간 데이터 일관성을 유지한다. 또한, 단순 쿼리로 여러 서비스에 있는 데이터를 조회할 수 없으므로 API를 조합하거나 CQRS 뷰로 쿼리한다.
*IPC란 ?
IPC는 Inter-Process Communication 의 줄임말로 프로세스간의 통신을 위한 메커니즘을 의미한다. 즉 IPC는 프로세스간의 통신을 돕는다.
- Shared Memory :
Shared Memory 방식은 말 그대로 프로세스들이 공유하는 메모리를 이용해 통신하는 것이다. 이때 공유할 item을 생성하는 생산자(producer) 프로세스와 생성한 item을 소비하는 소비자(consumer) 프로세스가 나뉘게 된다. 즉, 생산자가 공유 메모리(buffer)에 item을 생산하고 저장하면, 소비자가 이를 읽고 소비하게 된다.
- Message Passing :
Message Passing 방식은 공유되는 주소 공간 없이 프로세스간 통신할 수 있다. 이 때 message passing 방식은 send(전송), receive(수신) 연산을 통해 통신하게 된다. 만약 프로세스 P와 Q가 통신하고 싶다면, 둘은 communication link를 둘 사이에 만들어야 한다. message passing system을 설계할 때 고려해야 할 3가지에 대해 알아보자.