MSA (micro service architechure)
서비스의 내부 기능을 작은단위로 나눠서 구현하는 방법입니다.
MSA 에는 여러가지 패턴이 있고 각각의 장단점이 있기 때문에 상황에 따라 다른 패턴을 사용할 수 있습니다.
예전 서비스는 큰 덩어리 내부에 기능을 같이 넣어 서로를 호출하며 트레픽이나 오류가 연쇄적으로 이어집니다.
하나의 기능에서 에러가 발생하면 같이 묶여있는 나머지 기능, 전체 시스템이 전부 영향을 받습니다.
MSA는 일정 단위로 나누어 연결시켰기 때문에 하나의 기능이 고장나도 전체시스템이 다운되지 않습니다.
MSA는 여러패턴으로 구현할 수 있는데 CQRS 패턴을 예시로 보면 쿼리와 명령을 나누어 관리하는 형식입니다.
유저 사용량의 90%를 차지하는 조회기능을 개선하려면?
모놀리식이라면 하나의 큰 덩어리이므로 서비스의 전체적 업그레이드가 필요하지만
msa라면 조회기능만 따로 업그레이드 가능합니다.
조회 내부에서도 각각의 이벤트(업무)를 AWS의 SQS(비동기작업 큐) + SNS(작업관리)를 이용해 관리하여 한 작업이 다른 작업의 속도나 트레픽에 영향을 주지 않도록 설계합니다.
MSA 장점
- 단일 모듈의 장애에 대해 전체 어플리케이션은 크게 영향을 받지 않습니다.
- 의존 관계가 기존 Monolithic 아키텍처보다 적고 유연합니다.
- 개발자가 기능을 더 쉽게 이해 할 수 있습니다.
MSA 약점
- 분산 시스템 개발은 일반 개발보다 복잡합니다. 모든 것이 독립적인 서비스이기 때문에 각 모듈간의 인터페이스를 신중하게 처리 해야 합니다. 서비스중 하나가 응답하지 않게 될 경우에 대한 방어코드도 작성해야 합니다. 호출 대기 시간이 발생하게 되면 복잡한 상황이 발생할 수 있습니다.
- Multiple Databases 및 트랜젝션 관리가 어려울 수 있습니다.
- 마이크로 서비스 기반의 어플리케이션을 테스트하는 것은 번거로울 수 있습니다. 테스트를 시작하기 전에 의존성이 있는 서비스를 미리 확인해야 합니다.
- 마이크로 서비스의 배포는 복잡 할 수 있습니다. 각 서비스 간의 조정이 필요 할 수 있습니다.
마이크로 서비스의 배포 및 가상화
마이크로 서비스기반의 어플리케이션을 배포하는 가장 좋은 방법은 컨테이너 가상화를 이용하는 것입니다. (Docker)
AWS와 같은 IaaS업체의 VM을 이용하여 마이크로 서비스를 배포할 수 있지만 작은 단위의 마이크로 서비스는 VM의 리소스를 전부 활용 하지 못해 비용 효율성을 저하 시킬 수 있습니다. 따라서 컨테이너 기반으로 배포를 하는 것이 유리합니다.
참고자료
'TopicClipping' 카테고리의 다른 글
UML 이란? (0) | 2022.10.13 |
---|---|
동기와 비동기 (0) | 2022.09.29 |
파이썬의 TDD 훑어보기 (0) | 2022.09.22 |
트랜잭션 겉핥기 (0) | 2022.09.22 |
AWS & 클라우드 컴퓨팅 유형 (0) | 2022.09.22 |