IBM Developer 한국어 사이트가 2021년 6월 1일자로 종료됩니다. developer.ibm.com 영문 사이트는 계속 사용하실 수 있습니다.

Archived ko | Istio로 Java 마이크로 서비스의 회복 탄력성 높이기

Archived content

Archive date: 2019-12-18

이 콘텐츠는 더 이상 업데이트 되거나 유지 관리되지 않습니다. 내용은 “현재 상태로만” 제공됩니다. 기술의 빠른 발전으로 인해 일부 내용, 단계 또는 그림이 변경되었을 수 있습니다.

Summary

12 요소(12 factors)의 기본을 지키는 것은 여러분의 마이크로 서비스의 설계와 구현에 있어 실패 상황에 대처할 수 있도록 만들어 줍니다. 이것은 마이크로 서비스의 증가와 함께 실패 상황은 피할 수 없으며 애플리케이션은 반드시 내결함성을 가져야 한다는 것을 의미합니다. Istio 서비스 메쉬는 애플리케이션 코드의 변경 없이 여러분의 마이크로 서비스에 대한 회복 탄력성을 높이는데 도움을 줄 수 있습니다.

Description

마이크로 서비스를 빌드하고 패키지하는 것은 이 이야기의 일부분입니다. 높은 확장성을 가진 그리고 분산 배포된 마이크로 서비스들이 각각 다른 레이어에서 실패하게 된다고 한다면, 이러한 마이크로 서비스의 회복 탄력성과 내결함성을 어떻게 높일 수 있을까요? 세분화된 접근 통제와 속도 제한과 같은 정책 결정 사항을 어떻게 강제할까요? 타임아웃/재시도, 헬스체크 등과 같은 것은 어떻게 활성화할까요? 비록 일부 언어에 제한적인-프레임워크에서 이 문제를 해결하긴 합니다만, 이에 대한 구현은 종종 프레임워크나 언어 국한됩니다. 만약 프레임워크나 언어가 바뀌게 되는 경우, 회복성을 위한 기능은 재구현이나 포팅을 필요로 하게 됩니다. 그리고 일부의 경우 애플리케이션이 이미 회복 탄력성과 내결함성에 필요한 코드와 설정의 책임을 가지고 있는 경우가 있습니다. 서비스 메쉬(service-mesh) 아키텍쳐는 애플리케이션과 프레임워크에서 마이크로 서비스 프레임웍크에서 필요로 하는 공통의 회복 기능을 추출하고 이를 플랫폼 자체에 넣는 방법으로 이 문제를 해결하려 시도합니다. Istio는 이러한 서비스 메쉬를 쉽게 생성 할 수 있는 방법을 제공합니다.

이 개발자 과정에서는 Java™ MicroProfile 마이크로 서비스에 대한 빌드, 배포 그리고 연결하는 방법을 시연합니다. 그리고 애플리케이션 소스 코드 변경 없이 Istio의 서킷 브레이커(circuit breaker), 타임아웃/재시도, 속도 제한 그리고 기타 회복 탄력 기능을 어떻게 설정하고 사용하는지 보여줍니다.

Flow

flow

  1. 이 단계에서는 사용자가 쿠버네티스 클러스터에서 실행하게 위해 설정된 Java 애플리케이션을 배포합니다. 이 MicroProfile 애플리케이션은 다섯 개의 마이크로 서비스로 구성되어 있습니다. 이 애플리케이션은 Angular와 Java로 작성되었습니다. \’Vote\’ 마이크로 서비스는 두 가지 버젼이 있습니다. V1은 데이터를 로컬에 저장하고, V2는 데이터를 Cloudant® 데이터베이스에 저장합니다. 사용자는 Istio 서비스 메쉬 컨트롤 플래인(Control plane)이 쿠버네티스에서 실행 상태가 되도록 해야 합니다.
  2. 사용자는 Istio envoy를 애플리케이션에 주입하여 애플리케이션이 Istio의 기능을 사용할 수 있도록 합니다. Envoy는 각각의 마이크로 서비스들에 사이드카(sidecar)로서 배포됩니다. Envoy를 마이크로서비스로 주입하는 것은 Envoy 사이드카가 서비스간 주고 받는 호출을 관리하게 된다는 것을 의미합니다. 사용자는 또한 Istio ingress에서 들어오는 트래픽을 받을 수 있도록 igress를 생성합니다.
  3. 사용자는 이제 MicroProfile을 위한 고급 Istio 기능을 설정하며 Cloudant 데이터베이스에 대한 서킷 브레이커(circuit breaker)를 생성합니다. 우리는 Cloudant에 대한 최대 활성 연결 갯수와 최대 요청 대기 수를 지정합니다. 만약 Cloudant에 허용된 최대 요청 수 보다 많은 요청을 하게 되면, 이는 지정된 임계값만큼 대기 요청을 갖게되며, 이를 넘어가는 추가적인 요청은 거부하게 됩니다.
  4. 사용 가능한 또 다른 서킷 브레이커는 로드 밸런싱 풀(pool)의 인스턴스의 건강 상태에 기반하는 것입니다. 사용자가 두 개의 Cloudant 인스턴스를 가지고 로드 밸런스 풀을 생성하면, 응답이 없는 인스턴스를 탐지하고 제거하는데 서킷 브레이커를 사용할 수 있습니다.
  5. 사용자가 \‘Vote\’ 마이크로 서비스에서 Cloudant로의 접속에 대한 타임아웃 및 재시도 규칙(rule)을 생성합니다. 이 규칙은 허용 된 응답 시간의 임계 값을 초과하는 응답 시간에 대해 타임아웃을 발생합니다. 사용자가 또한 얼마나 많은 재시도를 할지 재시도에 대한 타임아웃은 얼마나 할지를 Istio에게 전달하여 재시도 규칙을 반영 할 수 있습니다. 사용자는 Cloudant 데이터베이스에 대해 결함 주입(fault injection)을 생성하여 실패 상황을 시뮬레이션 하고 타임아웃과 재시도가 잘 동작하는 확인합니다.

Instructions

  1. 애플리케이션 코드를 가져와 빌드합니다.
  2. 애플리케이션 마이크로 서비스 및 Istio Envoy를 배포합니다.
  3. Istio 탄력성 기능 살펴보기: Circuit Breakers 와 Fault Injection