인터넷을 통해 컴퓨팅과 가상화된 IT 서비스를 제공하는 것
낮은 초기 투자, 사용 및 유지 보수 용이성, 확장성과 같은 이점 제공
클라우드 컴퓨팅 모델
- IaaS (Infrastructure as a Service)
- CaaS (Container as a Service)
- Paas (Platform as a Service)
- Faas (Function as a Service)
- Saas (Software as a Service)
마이크로서비스 아키텍처의 핵심 개념 중 하나는 각 서비스가 분리되어 독립적인 산출물로 패키징되고 배포된다는 것
서비스 인스턴스는 신속히 시작되어야 하고 각각은 서로 구별할 수 없어야 함
마이크로서비스를 작성할 때는 서비스를 어떤 형태로 배포할지 결정해야함
- 물리 서버
마이크로 서비스를 물리 서버에 구축, 실제로 이렇게 하는 곳은 많지 않으며, 확장성이 어렵고 막대한 비용이 발생
- 가상 머신 이미지
마이크로 서비스의 주요 이점중 하나는 확장성과 서비스 실패 이벤트에 대한 응답으로 인스턴스를 빠르게 시작하고 종료할 수 있는 것
가상 머신은 클라우드 제공업체의 심장이자 영혼
- 가상 컨테이너
VM 이미지에 마이크로서비스를 배포하는 데 대한 자연스러운 확장
많은 개발자는 전체 VM에 배포하지 않고 Docker Container로 클라우드에 배포
가상 컨테이너는 VM 내 실행되고 가상 컨테이너를 사용하여 하나의 VM을 동일 이미지를 공유하는 일련의 독립형 프로세스로 분리 가능
마이크로서비스는 패키징되어 서비스의 다수 인스턴스를 IaaS 사설 및 공용 클라우드에 신속히 배포하고 시작 가능
클라우드 기반 마이크로서비스의 장점은 탄력성 개념에 기반을 둠
클라우드 공급자는 새로운 VM과 컨테이너를 수분안에 가동할 수 있게 해줌
서비스에 대한 용량 요규가 감소하면 컨테이너 축소 가능
서버의 탄력성은 또한 어플리케이션이 회복적일 수 있음을 의미
서비스중 하나가 문제가 생겨 실패하고 있다면, 새 서비스 인스턴스가 기동되어 나중에 문제를 해결하기 전까지 어플리케이션을 정상상태로 유지할 수 있음
이 책에서 사용되는 CaaS 특징
- 간소화된 Infrastructure 관리
간단한 API 호출로 새로운 서비스를 시작하고 중지할 수 있음
- 대규모 수평 확장성
CaaS 공급자를 통해 빠르고 간결하고 하나 이상의 인스턴스를 시작할 수 있음, 서비스를 신속하게 할 수 있고, 장애가 있는 서버를 우회할 수 있음을 의미
- 지리적 분산을 이용한 높은 중복성
필요에 따라 CaaS 공급자는 여러 데이터 센터를 보유, 이 공급자를 통해 마이크로서비스를 배포하면 데이터 센터에서 클러스터를 사용하는 것 보다 더 높은 수준의 중복성을 얻을 수 있음
마이크로서비스 작성 지침
- 적정 규모
서비스가 한가지 책염 영역에 집중되도록 하려면 어떻게 해야하는가?- 위치 투명성
서비스 클라이언트에 영향을 주지 않고 서비스 인스턴스를 추가하고 삭제하려면 물리적 위치를 어떻게 관리해야 하는가?- 회복성
서비스에 문제가 있을 때 서비스 클라이언트가 빠르게 실패하려면 어떻게 해야 하는가?- 반복성
새로운 서비스가 시작할 때마다 항상 기존과 동일한 코드와 구성을 갖게 하려면 어떻게 해야 하는가?- 확장성
서비스 간 종속성을 최소화하면서 어플리케이션을 신속히 확장하려면 어떻게 해야하는가?
- 서비스 세분화
서비스의 적정 책임 수준은 어느정도 인가
- 통신 프로토콜
클라이언트와 서비스가 데이터를 주고받는 방식은?
- 인터페이스 설계
서비스 엔드포인트를 클라이언트에 노출하는 방식은?
- 구성 관리
커드와 구성이 독립적인 개체가 되도록 서비스가 어떻게 어플리케이션별 구성을 관리하는가?
- 이벤트 처리
서비스 간 상태 및 데이터 변경 사항을 전달하려고 이벤트를 사용하는 방식은?
마이크로 서비스를 사용하려는 클라이언트 어플리케이션이 서비스 위치를 발견하고 서비스로 라우팅하는 방법에 관한 것
클라우드 기반 어플리케이션을 위해서 수백 개의 마이크로서비스가 실행될 수 있음
보안과 콘텐츠 정책을 시행하려면 서비스의 물리적 IP를 추상화 하고, 서비스를 호출하는 단일 진입점이 필요