(1) 호스트 하나에 여러 개의 서비스를 구성
(2) 호스트마다 서비스 하나씩 구성
가상머신 기반 구성
이 방식에서 각 서비스는 VM Image로 패키징되고 VM 이미지를 이용해서 VM 상에서 동작하는 서비스 인스턴스를 구성
예를 들어 AMI(Amazon Machine Image)를 이용해 서비스 인스턴스가 실행되는 EC2 인스턴스를 생성하는 방식
이를 클라우드 환경에서 구성할 경우, 클라우드 벤더에서 제공하는 로드밸런싱, 오토스케일링 등의 기능을 쉽게 적용하여 사용 가능. 또한 VM 이미지를 이용해서 배포하기 때문에 훨씬 더 간단하고 안정적 배포 가능.
하지만 VM 은 운영체제를 포함하고 있기에 이미지 크기도 커지고 실행 시간 소모가 높음
이에 따라 오토스케일링 시 시간도 더 소요되고 자원 활용의 효율성도 떨어짐
컨테이너 기반 구성
이 방식은 VM 대신 각 서비스를 컨테이너에 올리는 방식으로 컨테이너는 운영체제 수준 가상화 방식으로 운영체제 커널을 공유
-> 각자 OS를 가지고 있는 VM과 달리 하나의 OS에 여러 컨테이너가 올라가게 되므로 크기도 작고 리소스를 훨씬 적게 사용
컨테이너는 대표적으로 Docker를 사용 서비스를 컨테이너 이미지로 패키징해서 하나의 호스트안에 여러 개의 컨테이너를 실행 가능
컨테이너 사용시 VM의 장점을 활용하고 단점 보완 가능
-> VM에 비해 빠르고 경량화된 기술로 컨테이너 이미지는 매우 빠르게 빌드되고 부팅없이 실행 그러나 OS 커널을 공유하기 때문에 안전하지 않은 단점 발생
그럼에도 불구하고 컨테이너 기반의 구성 방식은 작은 서비스를 많이 사용하고 자주 업데이트가 일어나는 마이크로서비스의 서비스 운영에 최적의 런타임 환경을 제공
컨테이너는 관리되고 통제되어야 하기에 컨테이너 오케스트레이션 기술이 필요
(1) 스케줄링
(2) 구성 스크립팅
(3) 모니터링
(4) 업그레이드와 롤백
(5) 서비스 디스커버리, 로드밸런싱
(6) 컨테이너 오토스케일링
컨테이너와 서비스가 많아지면 컨테이너의 배치 및 유지 관리가 매우 복잡해짐
대규모로 운영되는 경우 컨테이너의 배치,관리,확장,네트워킹 및 컨테이너의 가용성을 자동화하는 컨테이너 오케스트레이션 도구로 K8s,Openshift Origin,DC/OS,Dcoker Swarm,Rancher 등이 존재
AWS는 자체 컨테이너 오케스트레이션 도구로 ECS 제공, K8s 기반의 EKS 역시 제공
이미지는 컨테이너 실행에 필요한 파일과 설정값 등을 포함하고 있는 것으로 상태값을 가지지 않고 변하지 않음.
컨테이너는 이미지를 실행한 상태로 추가되거나 변하는 값은 이미지와 별개로 컨테이너에 저장
같은 이미지에서 여러 컨테이너 생성가능하며 이미지는 컨테이너를 생성할 수 있는 생성 파일