Istio #1 - MSA란? Istio란?
Istio를 설명하고자하는데 뭐부터 해야할까 생각을 하다보니 MSA부터 간략하게 언급을 해야될거 같다는 생각이 들었습니다.
MSA는 소프트웨어 개발 기법 중 하나입니다.
MSA
MicroService Architecture의 줄임말입니다.
MSA란 작고, 독립적으로 배포 가능한 각각의 기능을 수행하는 서비스로 구성된
프레임워크라고 할 수 있습니다.
MSA 아키텍처는 나중에 자세하게 포스팅을 다시 하도록 할게요.
한가지만 아셔야하는 부분은 MSA를 하게되면 기존의 레거시에서 쉽게 IPC, MSG 통신이 아마 안되실겁니다.
그러므로, MSA에서는 로깅, 내부 네트워킹, 휘발성 프로세스에 대한 처리, 트래픽 부하 분산, 서킷브레이커 등등.. 수많은 것들을 역설적으로 관리를 해주어야 합니다. (서두가 길었지만 마이 필요합니다..!!)
말로 하면 얼마 안될거 같지만 시간이 지나면 아래처럼 어마어마 해집니다. ㅋㅋ;;
이처럼 많은 마이크로 서비스간의 통신을 동기적으로 HTTP통신을 하기 위해서는 Envoy형태인 서비스 메쉬 구조가 되어 어야합니다. 그 중심엔 Istio가 있는것이죠.
1. Istio란 무엇인가?
IBM, Google에 의해, Sidecar 패턴을 이용한 Service Mesh Architecture 구현체이다.
Spring Cloud Netflix와 유사하지만 좀 더 발전된 형태라고 할 수 있는데, 비교를 해보자면..
물론 Spring Cloud는 필요한 도구만 선택적으로 선택할 수 있으며, 애플리케이션에 직접 적용하기 때문에 유연하게 적용 가능하다. 대신 자바와 스프링이라는 제약이 발생하고 코드 레벨에서 제어해야 한다는 점이 있다.
반대로 Istio는 응용(코드) 레벨이 아닌 인프라 레벨로 존재하여 플랫폼 의존성이 적고 개발 언어에도 독립적이다. 근데 아직 시장 성숙도가 낮고 서비스마다 Proxy가 추가되는 형태로 오버헤드가 크다.
2. Service Mesh란?
Service Mesh는 Micro Service Architecture의 원활한 통신을 지원하고 각 서비스간 통신 방법을 구체화한 방법이다.
(Service Mesh는 추후 자세히 포스팅하도록 할게요)
Istro의 경우 service mesh의 관리해야할 영역을 자동 inject으로
각 서비스에 Sidecar로 위치하면서 서비스의 인/아웃 트래픽을 제어하여, Netflix OSS 라이브러리에 비해 손쉽게 MSA를 적용할 수 있습니다.
이는 아래와 같은 기능을 제공한다.
2.1. Trafic Management
Istio의 쉬운 규칙 설정 및 트래픽 라우팅은 서비스간 트래픽 흐름과 API 콜을 제어할 수 있게 해준다.
2.2. Security
Istio의 보안 기능은 개발자들에게 애플리케이션 단에서의 보안에 대산 근심을 덜어준다.
2.3. Policies
Istio는 애플리케이션을 위한 커스텀 정책을 설정할 수 있게 해준다.
2.4. Observability
Istio의 트레이싱, 모니터링, 로깅 기능은 서비스 매시 배포 내부를 더 깊이 살펴볼 수 있게 해준다.
3. Istio 구조 (다음 포스팅에서 자세히)
내부적으로 Data plane과 Control plane으로 구분된다.
3.1. Data plane
- Envoy 셋으로 구성
- Sidecar 형태로 배포
- 서비스간의 통신을 연결, 제어
3.2. Control Plane
- Envoy가 네트워크 트래픽을 라우팅할 수 있도록 설정 및 관리
- Mixers가 정책을 적용하고 telemetry를 수집하도록 설정하는 역할
- Mixer : 플랫폼 독립적인 구성 요소로 Service Mesh 전반에 접근 제어와 정책 사용을 적용하며 Envoy proxy와 다른 서비스들로부터 telemetry 데이터를 수집한다.
4. Envoy
L7 프록시로 로드 밸런스 정책을 정의, 적용할 수 있다.
L7이기 때문에 다른 L4 Proxy에 비해서는 다소 느리다.
5. 기타
5.1. Amazon App Mesh
2019년 현재 일부 지역에서만 제한적으로 제공이 되고 있다. Fargate, ECS, EKS 등과 함께 사용 가능하다.
App Mesh도 컨테이너에 오가는 트래픽 관리를 위해 Envoy를 사용한다. 애플리케이션 내부 코드 수정이나 로드 밸런서 사용이 필요 없다. 각 마이크로 서비스 시작 시 프록시가 App Mesh에 연결하고 다른 마이크로 서비스의 위치를 담고 있는 데이터를 받는다.
5.2. Google Istio
Istio 그 자체이다.