반응형
마이크로 서비스 아키텍처
- 큰 문제를 상대적으로 작게 분해해 해결
- 이렇게 작게 나눈 각 서비스가 독립적으로 역할을 수행
- 한가지만, 아주 잘 처리하자. 라는 것이 마이크로 서비스 아키텍처의 기본 철학이다.
- 단일 책임 원칙(SRP)를 중시(Single Responsibility Principle)
- 비즈니스 태스크를 작은 태스크로 나누며, 각 태스크마다 마이크로 서비스를 정의 한다.
- 비즈니스 요구사항과 태스크를 얼마나 잘 나눴는지에 따라 시스템에 두개 혹은 100개의 마이크로 서비스가 존재
마이크로 서비스 아키텍처 특징
시스템을 둘 이상의 실행 단위 또는 컴포넌트로 구성한다.
- 각 컴포넌트는 기능을 서비스 형태로 표출, 결합도가 낮으며 비즈니스 목적에 맞게 동작한다.
- 각 컴포넌트는 메시징 큐, HTTP 요청/응답 모델 등 미리 정의된 프로토콜 기반으로 서로 통신한다.
시스템은 특정 언어에 구애 받지 않는다.
시스템에는 분산된 데이터베이스가 있어야 한다.
- 자신하고만 상호작용하는 자체 데이터베이스가 있고 다른 컴포넌트나 서비스에서 해당 데이터베이스를 읽거나 수정 할 수 없다.
시스템 내 각 컴포넌트는 응집력 있고 독립적이며 자체 배포가 가능해야 한다.
자동화된 테스트가 필요하다.
- 속도는 마이크로서비스 아키텍처에서 가장 중요한 특징이다.
- 빌드, 테스트, 출시라는 주기에서 자동화된 테스트가 없다면 원하는 목표를 달성할 수 없다.
모든 컴포넌트나 서비스의 장애는 격리돼야 하며, 특정 서비스가 장애가 나도 전체 애플리케이션이 중단되는 일은 없어야 한다.
- 서비스 장애가 다른 컴포넌트나 서비스에 영향을 미치지 않아야 하며, 장애에 대한 롤백 매커니즘이 있어야 한다.
마이크로서비스 아키텍처의 성공은 얼마나 효율적으로 애플리케이션을 더 작은 컴포넌트로 나누는가에 달렸다.
- 문제영역을 잘 분류할 수 있다면 아키텍처를 더욱 개선시킬 수 있다.
마이크로서비스 아키텍처의 단점
- 디버깅이 어렵다. 마이크로서비스가 많다..
- 마이크로서비스 모니터링
- 여러개의 서비스에 대해서 모니터링 해야한다.
- 공통 라이브러리
- 마이크로서비스 A에서 사용자 객체 JSON을 생성, 다른 마이크로서비스 B에서 사용자 객체 JSON을 사용한다고 가정하자. 하나의 JAR에 사용자 클래스를 정의하고 이 JAR를 두 마이크로서비스에 추가한다.
- 공통라이브러리를 공유하면 마이크로서비스가 동일한 언어 사용에 고착될 수밖에 없다.
- 서비스 가의 결합을 증가 시킨다.
- 해결책으로 사용자 클래스를 두 마이크로 서비스로 각각 작성하는 것이다.(DRY에 위배 될수 있다.)
- 마이크로서비스 A에서 사용자 객체 JSON을 생성, 다른 마이크로서비스 B에서 사용자 객체 JSON을 사용한다고 가정하자. 하나의 JAR에 사용자 클래스를 정의하고 이 JAR를 두 마이크로서비스에 추가한다.
- 조직 내 마이크로서비스의 수를 늘리면 데브옵스 작업이 늘어난다.
그래서 서버리스 아키텍처와 PasS 마이크로서비스의 방향으로 가고 있는 추세이다.
마이크로서비스가 Platform as a Service로 제공된다.
- 도커(docker) 컨테이너를 사용.
비즈니스 중심으로 마이크로서비스 컴포넌트 구성
- 비즈니스 기능 : 특정 비즈니스 목적에 맞게 독립적으로 운영할 수 있는 서비스.
- 비즈니스 기능과 마이크로서비스는 의미가 동일한 것처럼 보이지만 그렇지는 않다.
- 올바른 비즈니스 기능 식별
- 기능에 마이크로서비스 컴포넌트 정의
- 비즈니스 기능 : 특정 비즈니스 목적에 맞게 독립적으로 운영할 수 있는 서비스.
마이크로서비스의 정의
- 소프트웨어애플리케이션으로 봤을 때 독립적인 배포가 가능한 작은 서비스로 비즈니스 목표를 달성하기 위해
잘 정의되고 가벼운 메커니즘을 통해 통신한다.(단일책임, 느슨한 결합, 비즈니스 목적 제공, 경량 통신, 적은 LOC(line of code) 등)
마이크로서비스 구현을 위한 기능
- 서비스 디스커버리
- 마이크로서비스는 서로 통신해야 하며, 이를 위해 각 서비스는 서로의 위치를 알 수 있어야 한다.
- 아파치 주키퍼, 에어비앤비의 스마트 스택, 넷플릭스의 유레카 등등
- k8s에서 인그레스 + 서비스 역할?
- 요청한 서비스에 대해 적절한 인스턴스를 찾는 책임
- 스프링부트 - 유레카(넷플릭스 유레카)
- spring-cloud-starter-eureka 스타터 추가
- 마이크로서비스는 서로 통신해야 하며, 이를 위해 각 서비스는 서로의 위치를 알 수 있어야 한다.
- 서비스 디스커버리 Server
반응형
'역량 UP! > Architecture' 카테고리의 다른 글
메시지큐에 대해 알아보자. (0) | 2017.06.27 |
---|---|
SOLID (object-oriented design) (0) | 2014.02.26 |
[소프트웨어 아키텍처 이론과 실체] 아키텍트로 가기 위한 필독서!! (0) | 2013.11.24 |
DTP(Distribution Transaction Processing) 관련 자료 (0) | 2013.06.08 |
ACE-T의 아키텍트 이야기 (0) | 2013.01.28 |