최근 들어 MSA(Micro Service Architecture)에 대한 관심이 높아지고 Amazon과 넷플릭스, 11번가 등에서 MSA를 이용하여 성과를 보이자 많은 곳에서 MSA를 이용한 프로젝트가 많아 지고 있습니다.
MSA에 대한 내용은 방대하지만, 간단한 개요만 이라도 정리하여 올립니다.
3
Micro Service
2. MicroService
What is Micro Service?
The term "Microservice Architecture" has sprung up over
the last few years to describe a particular way of designing
software applications as suites of independently deployable
services …… the microservice architectural style is an
approach to developing a single application as a suite of
small services, each running in its own process and
communicating with lightweight mechanisms, often an
HTTP resource API. These services are built around business
capabilities and independently deployable by fully
automated deployment machinery. There is a bare
minimum of centralized management of these services,
which may be written in different programming languages
and use different data storage technologies.
- Martin Fowler
소프트웨어 응용 프로그램을 독립적으로 배치 가능한 서비스
조합(suite)으로 설계하는 방식으로서 ‥‥‥(중략)‥‥‥ 단일 응용
프로그램을 나누어 작은 서비스의 조합으로 구축하는
방법이며, 각 개별 서비스는 자신의 프로세스에서 실행하는
HTTP 기반 API 등으로 가벼운 연결 방식을 사용합니다. 각
서비스는 비지니스 로직의 수행 기능에 맞게 구축 된 완전히
자동화 된 머신에 의한 배포를 통해 이루어 집니다. 각
서비스의 최소한의 중앙 관리 기능은 있지만, 서로 다른
프로그래밍 언어에 의해 개발되고, 다른 데이터 저장 기술이
이용할 수 있습니다.
- 마틴 파울러(Martin Fowler)
5.
4
Micro Service
2. MicroService
1. Separation of concerns (위험 분산)
– 서비스 모듈화
– 서비스에 필요한 데이터 캡슐화
2. Scalability (확장성)
– 수평적 확장
– 워크로드 분할
3. Virtualization & elasticity (탄력성과 가상화)
– 자동화
– 리소스 추가/제거
마이크로 서비스는 이전에 사용했던 모놀리틱의 문제 해결방법
6.
5
Micro Service
2. MicroService
견적관리 보증보험관리 계약관리
정산관리 인력관리 프로젝트관리
거래처관리 단가관리
정산DB
계약DB견적DB
인력DB 프로젝트DB
거래처DB 단가DB
보증보험DB
사용자관리
부서관리
공통코드관리
게시판
공지사항 관리
DB
API
GateWay
API
Clients
REST API
7.
6
Micro Service
2. MicroService
Micro Service의 특징
마이크로 서비스 특징 첫 번째는 구성 요소를 독립적인 단위로 정의한다는 것
1. 서비스를 통한 컴포넌트화
• 컴포넌트를 독립적으로 대체하거나 업그레이드가 가능한 소프트웨어 단위로 정의
• 라이브러리를 프로그램에 링크시켜 컴포넌트로 정의 (라이브러리를 독립적으로 배치가 가능하도록 만듦)
• 각 서비스는 명시적인 원격 호출 매커니즘을 이용하기 때문에 종속과 결합을 방지할 수 있다.
8.
7
Micro Service
2. MicroService
각 팀은 사용자, DBA, 개발자, 관리자 등을 모두 포함
2. 비즈니스 역량 기반의 팀
• 기술적 계층으로 팀을 나누는 것이 아니라 서비스 단위로 팀을 구성하는 것
• 비즈니스 수행 능력에 따라 정리된 서비스를 나눔
• 각 팀은 상호 기능적이며, 개발에 필요한 모든 범위의 기술을 갖게 됨 (사용자, DBA, 개발자, 관리자 등)
9.
8
Micro Service
2. MicroService
각 팀은 자신들이 구축한 서비스에 대해 책임을 맡는다.
3. 분산화 거버넌스
• 시스템을 분할하기 때문에 각 서비스(팀)별로 기술 플랫폼을 선택이 가능
• 개발 언어, 개발 도구, 프레임워크, 개발 방법론 등 문제와 해결 도구를 팀이 찾아서 활용 및 공유
• 기본 기술에 대해서만 표준을 따를 뿐, Micro Serivce 내부 기술과 구조는 팀이 결정
• 각 팀이 구축한 소프트웨어의 모든 측면을 책임 지는 것 (Amazon 정신)
10.
9
Micro Service
2. MicroService
서비스 별 데이터 베이스를 소유하여 관리
4. 분산화된 데이터 관리
• Micro Service는 각 서비스가 각각 소유하는 데이터베이스를 각자 관리하도록 함 (Polyglot Persistence)
• 데이터 일관성을 유지하기 위해 트랜잭션을 사용하는 것이 아니라 협업(협조)를 중요시 함
• 비일관성이 개발자에게는 생소하지만, 비즈니스 현장에서는 더 잘 맞습니다.
11.
10
Micro Service
2. MicroService
이와 같은 특징이 없다면 마이크로 서비스를 만들기 쉽지 않다
5. 인프라 자동화
• 자동화된 테스트와 배포의 자동화
6. 장애 방지 설계
• 서비스가 실패하더라도 자연스럽게 대응할 수 있도록 설계
7. 진화하는 설계
• 구성요소를 분할하는 것의 원칙은 독립적인 교환 및 업그레이드 가능성
8. 프로젝트가 아니라 제품
• 팀은 상품에 대한 책임을 지고, 요구사항 정의 발굴에서 부터 개발 그리고 운영까지 책임을 지며, 계속해서
상품을 개선해 나가는 활동을 지속 (you build, you run it)
12.
11
Micro Service
3. MSA장점과 단점
MSA 장점
서비스에 대한 확장성에 좋고, 개발 및 배포 사이클 관리 용이
• 서비스에 대한 확장성에 좋고, 개발 및 배포 사이클 관리 용이
• 각 서비스 파트에서 제공하는 서비스에 최적 하는 방법/언어 사용 가능
• 작은 서비스가 구성되기 때문에 서비스에 대한 민첩성 확보
• 타 컴포넌트와의 종속성이 배제되어 서비스 변경이 쉬움
13.
12
Micro Service
3. MSA장점과 단점
분산환경에서 트랜잭션 관리가 용이하지 않기 때문에 데이터 정합성의 문제가 발생
• 서비스간의 연계성 및 서로 다른 다양한 기술을 사용함으로 테스트의 어려움
• 서비스간의 외부 호출로 인한 메모리 등의 성능 비용 증가 (응답속도 증가)
• 분산환경에서 트랜잭션 관리가 용이하지 않기 때문에 데이터 정합성의 문제가 발생
MSA 단점
14.
13
Micro Service
4. MicroService 성공 사례
성공 사례
Amazon Netflix
• 우아한 형제들 (배달의 민족) Spring Cloud zuul 적용
• 11번가 Spring Cloud 적용
• SK C&C C-NAPS 방법론 개발