본문 바로가기
lecture.js/programmer.js

MSA

by malda 2019. 2. 22.

MSA: Micro Service Architecture

- 단일 작업 단위에 모든 서비스가 있는 모놀리식 아키텍처를 단일 책임을 가지는 적절한 단위의 서비스로 분리한다.

- 분리된 서비스는 UI, 비즈니스 로직, 데이터베이스, 심지어 배포까지 독립적인 구조를 가질 수 있다.



모놀리식 서비스가 왜 문제가 되는가?

- 초기 서비스를 구현할 때에는 빠른 개발 필요성으로 한 서비스에 다수의 비즈니스 모델이 들어간 구조로 개발하기 쉽다.

- 하지만 서비스가 점점 커져가면서 비대해지는 소스코드와 늘어나는 배포 시간이 이슈가 된다.

- 뿐만 아니라 특정 서비스의 성능 이슈가 발생하더라도 전체 서비스의  Scale을 늘려야하는 확장성 이슈가 발생한다.



MS: Micro Service를 구현하기 위해 고려해야할 패턴

1) 핵심 개발 패턴

1-1) 서비스 세분성

- 적정한 크기, 책임을 어느정도로 분리할 것인가?


1-2) 통신프로토콜

- 서버/클라이언트 간의 데이터 교환 방법은 무엇으로 할 것인가?

- 이는 거의 답이 정해진 것이나 다름 없는 JSON을 사용한다.


1-3) 인터페이스 설계

- URL 패턴, 구조는 어떻게 가져갈 것인가?

- 서비스의 인식성을 높이기 위해 URL 네이밍 전략을 어떻게 가져갈 것인가?


1-4) 구성관리

- MS서비스 분리로 인해 분산된 서버환경에서 구성파일을 어떻게 처리할 것인가?

- 보통 외부 Config 서버를 별도로 사용한다.


사용되는 기술: Spring Boot, Spring Cloud Config, Spring Cloud Stream: 비동기 메시징



2) 라우팅 패턴

2-1) 서비스 디스커버리

- 다수의 서버가 구성될 것인데 이를 호출하는 물리적인 IP주소를 추상화한다.

- 다수의 서버가 존재하는 분산환경에서 서비스의 위치를 자동으로 검색할 수 있는가?

- 다수의 서버 중 장애가 발생하는 경우, 가용성 체크는 어떻게 할 것인가?


2-2) 서비스 라우팅

- 단일 진입점을 만들어 표준 서비스 정책(ex 보안, 인가, 인증, 콘텐츠 필터링)을 적용할 수 있다.

- GW역할을 하는 서버를 통해 Load Balancing이 가능해진다.



사용되는 기술: Spring Cloud, Netflix Eureka, Netflix Zuul



3) 회복성 패턴

3-1) 클라이언트측 Load Balancing(부하 분산)

- 별도의 LB 서버가 없어도 클라이언트 측에서 부하 분산을 할 수 있다.


3-2) 회로 차단기 패턴

- 서비스에 장애가 발생시 이후에 들어오는 접근 지연으로 인해 서버 리소스를 모두 사용 되는 현상을 방지한다.

- 따라서, 장애 있는 서비스에 접근을 차단시켜 해당 서버의 리소스를 보호한다.


3-3) 폴백 패턴

- 장애 발생시 대응을 미리 만들어 장애가 발생한 서비스의 접근도 막고, 고객에게 인지할 수 있는 대응도 처리.


3-4) 벌크헤드 패턴


사용되는 기술: Netflix Ribbon, Hystrix



4) 보안 패턴

5) 로깅 및 추적패턴

- 분산된 환경으로 인해 로깅, 서비스 모니터링이 더욱 중요해짐.


6) 빌드&배포 패턴


'lecture.js > programmer.js' 카테고리의 다른 글

#002 function  (0) 2017.08.16
#001 개발환경 설정  (0) 2017.08.09