일반적인 클라우트 컴퓨팅 모델
- IaaS(Infrastructure as a Service) : 공급업체는 서버, 스토리지, 네트워크 같은 컴퓨팅 자원에 접근할 수 있는 인프라스트럭처를 제공한다.
- CaaS(Container as a Service) : IaaS와 PaaS의 중간 모델로, 컨테이너 기반 가상화의 한 형태다.
개발자가 서비스가 배포되는 가상 머신을 관리하는 IaaS 모델과는 달리 CaaS를 사용하면 도커처럼 경량의 이식성 높은 가상 컨테이너 내 마이크로서비스를 클라우드 공급자 환경에 배포할 수 있다.
- PaaS(Platform as a Service) : 이 모델은 사용자가 애플리케이션의 개발, 실행, 유지 관리에 집중할 수 있는 플랫폼과 환경을 제공한다. 사용자는 물리 인프라스트럭처에 투자할 필요가 없고 이들 도구를 관리하는데 시간을 할애할 필요도 없어 사용자는 온전히 애플리케이션 개발에 전념할 수 있다.
- FaaS(Function as a Service) : 서버리스 아키텍처라고도 하는데, 이름에 '서버리스'가 있음에도 이 아키텍처는 서버 없이 특정 코드를 실행하는 것을 의미하지 않는다. 실제로는 공급업체가 필요한 모든 서버를 제공하는 클라우드 환경에서 기능(Functionalities)의 실행 방법을 의미한다. 서버리스 아키텍처를 사용하면 확장, 프로비저닝 및 서버 관리를 걱정할 필요가 없어 서비스 개발에만 집중할 수 있다.
- Saas(Software as a Service) : 주문형 소프트웨어라고도 하는 이 모델을 사용하면 사용자는 특정 애플리케이션을 배포하거나 유지 관리할 필요 없이 사용할 수 있다.
물리서버
마이크로서비스를 물리 머신에 구축하고 배포할 수 있지만 물리 서버가 제한되어 있어 실제로 이렇게 수행하는 조직은 많지 않다. 물리 서버 용량도 신속하게 늘릴 수도 없으며 수평적으로 마이크로서비스를 확장하는 데 막대한 비용이 소요된다.
가상 머신 이미지
마이크로서비스의 주요 이점 중 하나는 확장성과 서비스 실패 이벤트에 대한 응답으로 인스턴스를 빠르게 시작하고 종료할 수 있다.
가상 컨테이너
가상 컨테이너는 VM 이미지에 마이크로서비스를 배포하는 데 대한 자연스러운 확장이다.
서비스를 전체 VM에 배포하는 대신 도커 컨테이너로 클라우드에 배포한다.
클라우드 기반 마이크로서비스의 장점은 탄력성(elasticity) 개념에 기반을 둔다. 클라우드 공급자를 통해 마이크로서비스를 배포하면 애플리케이션에 대한 훨씬 더 높은 수평 확장성(서버와 서비스 인스턴스를 추가해서)을 얻을 수 있다.
- 적정 규모 : 마이크로서비스가 너무 많은 책임을 지지 않도록 적절한 마이크로서비스 크기를 유지하는 방법이다.
- 위치 투명성 : 서비스 호출에 대한 물리적 상세 정보를 관리하는 방법이다.
- 회복성 : 실패한 서비스를 우회하고 "빠른 실패" 방식을 적용하여 마이크로서비스 소비자와 애플리케이션의 전반적인 무결성을 보호하는 방법이다.
- 반복성 : 서비스의 모든 새 인스턴스가 시작할 때 운영 환경의 다른 서비스와 동일한 구성과 코드베이스를 보장하는 방법이다.
- 확장성 : 서비스 간 직접적인 종속 관계를 최소화하고 마이크로서비스를 적절히 확장할 수 있도록 통신 방식을 구축하는 방법이다.