개발/[MSA] 마스터링 스프링 클라우드-내용 정리
제1장 마이크로서비스 소개
sheriff
2019. 1. 23. 17:37
마이크로서비스 소개
마이크로서비스 장점
- 확장성, 유연성, 독립적 배포
- 상대적으로 작은 프로젝트의 규모
- 새로운 개발자가 이해하기 쉽다.
- 하나의 비즈니스 영역만 구현하기 때문에 코드 변경 시 영향도가 적다.
- 코드의 품질을 유지하기 쉽다.
스프링 프레임워크로 마이크로서비스 만들기
스프링 프레임워크를 사용하는 이유
- Service Registry, Configuration Server, Circuit Breaker, Cloud Bus, Oauth2 패턴, API 게이트웨이 같은 검증된 패턴을 구현한다.
- 강력한 커뮤니티를 기반으로 유지가 잘 되고 있다.
- 많이 사용되고 있는 프레임워크다.
- 문서화가 잘 되어 있고 많은 예제들을 쉽게 찾을 수 있다.
클라우드 개발의 장점
- 확장성과 신뢰성, 낮은 유지보수 비용
- 유연한 확장, 변하지 않는 배포, 폐기 가능한 인스턴스
- 즉 시간과 비용 절감
모놀리식(전통적) 개발 방식의 단점
- 코드 베이스 증가
- 수정과 유지보수 복잡
- 새로운 기능, 프레임워크, 기술 적용의 어려움
- 새로운 아이디어를 적용하고 혁신하는데 부정적인 영향을 미침
"네이티브 클라우드 애플리케이션이란 단순히 클라우드로 이전한 프로그램이 아니라 클라우드 환경을 위해 잘 설계된 프로그램이다."
마이크로서비스 아키텍처 배우기
API 게이트웨이
- 특정 서비스 호출 숨김(복잡도 숨김)
- 동적 라우팅
- 시스템으로의 진입점으로 다음과 같은 일을 한다.
- 중요한 데이터 추적
- 요청 메트릭 수집
- 통계
- 어플리케이션에서 사용될 부가 정보 삽입을 위한 요청 및 응답 헤더 조작
서비스 디스커버리의 필요성 이해하기
서비스 디스커버리
- 필수 메커니즘
- 컴퓨터 네트워크상의 디바이스가 제공하는 디바이스와 서비스를 자동으로 감지하는 서비스
- 모든 서비스는 시작 후 다른 중앙 장소에 자신을 등록
- 등록 키는 전체 시스템에서 유일한 서비스이거나 유일한 식별자여야 한다.
- 이름을 통해 서비스를 찾고 호출하기 위함
- 모든 개별 키에는 할당된 값이 있다.(서비스의 네트워크 위치를 나타냄)
- 하나의 키에 같은 서비스의 여러 인스턴스가 등록될 수 있다.
- 서비스는 특정 디스커버리 서버에 등록된 다른 서비스의 전체 목록을 얻는다.
- 등록 목록의 변경 사항을 알기 위해 마이크로서비스가 원격 디스커버리 서버에 의해 이전에 수집된 컨피규레이션을 주기적으로 갱신한다.
서비스 디스커버리를 서버 컨피규레이션 기능과 함께 사용 가능
서비스 간 통신
시스템의 신뢰성 보장을 위해 최소 두 개의 인스턴스를 실행하는 것이 좋다.
- 최적의 성능을 위해 인스턴스의 수는 적게 유지한다.
- 부하 분산기는 대개 API 게이트웨이에 내장되어 있다.
- 분산기는 디스커버리 서버에 등록된 인스턴스 목록을 가져와야 한다.
- 라운드 로빈 규칙을 적용하여 트래픽을 50/50으로 분배한다.
- 같은 규칙으로 마이크로서비스 측의 부하 분산기에 적용된다.
장애와 서킷 브레이커
- 장시간 응답을 기다려서 스레드를 점유하게 하는 대신 에러 응답을 보내는 것이 좋다.
서킷 브레이크 패턴
- 성공 및 실패 요청의 횟수를 센다.
- 에러의 비율이 가정된 임계치를 넘으면 차단이 발생하고 이후의 시도는 즉시 실패한다.
- 지정된 기간이 지난 후 다시 요청을 다시 시작하고 성공하면 서킷을 닫고 정성화 시킨다.
- 다수의 인스턴스 중에 일부가 다른 것보다 느리게 동작하면 해당 인스턴스는 무시된다.
폴백(fallback)
- 요청이 실패했을 때 수행되는 로직
- 캐싱된 데이터나 기본값, 빈 결과 목록을 반환할 수 있다.
- 캐싱된 데이터나 기본값을 반환하는 것보다 에러 코드를 전파하는 것이 확실하고 좋은 방법이다.