NGINX Microservices 참조 아키텍처 소개

NGINX는 초창기부터 Microservices 이동에서 중요한 역할을 하고 있습니다. NGINX Microservices 의 가벼우며 높은 성능과 유연성은 Microservices에 완벽하게 맞습니다.

NGINX Docker 이미지는 Docker Hub에서 가장 많이 다운로드되는 어플리케이션 이미지로, 오늘날 웹에서 찾을 수 있는 대부분의 Microservices 플랫폼은 NGINX를 어떤 형태로든 배포하고 Welcome 페이지에 연결하는 데모를 포함합니다.

저희는 고객의 성공에 꼭 필요한 Microservices 이동을 지지하며, 이러한 변화를 지원하기 위해 기능과 관행을 개발하기 위한 전용 프로그램을 출시했습니다.
또한, 우리는 Microservices를 구현하는 다양한 방법이 있음을 인식하고 있으며, 이러한 방법 중 많은 것들은 개별 개발팀의 요구에 특화된 독창적인 방법입니다.
우리는 회사가 자체 Microservices 기반 애플리케이션을 개발하고 전달할 수 있도록 모델이 필요하다고 생각합니다.

이를 바탕으로, NGINX Professional Services에서는 여러분이 직접 Microservices 애플리케이션을 생성할 수 있는 모델 세트인 NGINX Microservices Reference Architecture (MRA)을 개발 중입니다.

MRA는 세 가지 모델의 상세한 설명과, 우리의 예제 사진 공유 프로그램 Ingenious를 구현하는 다운로드 가능한 코드로 구성됩니다.
세 가지 모델 중 유일한 차이점은 각각의 모델에 대한 NGINX Plus 구성 코드입니다.
이번 시리즈의 블로그 포스트에서는 각 모델의 개요 설명을 제공하며, 상세한 설명, 구성 코드 및 Ingenious 샘플 프로그램의 코드는 올해 후반에 제공될 예정입니다.

NGINX팀이 이 참조 아키텍처를 구축하는 목표는 다음과 같습니다.

  • Microservices 기반 시스템을 구축하는 데 사용할 수 있는 준비된 청사진을 제공하여 개발을 가속화하고 개선함으로써 고객 및 산업에 제공하는 것입니다.
  • NGINX 및 NGINX Plus의 새로운 기능을 테스트하는 플랫폼을 만들어 내부 또는 외부에서 개발된 제품 코어 또는 동적 모듈로 분산시키는 것입니다.
  • 파트너 시스템 및 구성 요소를 이해하여 Microservices 생태계에 대한 전반적인 시각을 얻는 것입니다.

NGINX Microservices 참조 아키텍처는 NGINX 고객을 위한 전문 서비스 제공의 중요한 부분입니다. MRA에서는 가능한 경우 NGINX 오픈소스 및 NGINX Plus 공통 기능을 사용하며, 필요한 경우 NGINX Plus 특정 기능을 사용합니다.
보다 복잡한 모델에서는 NGINX Plus 의존성이 더욱 강해집니다. MRA의 많은 사용자들이 NGINX 전문 서비스 및 NGINX Plus 구독과 함께 제공되는 기술 지원에 혜택을 받을 것으로 예상합니다.

목차

1. Microservices 참조 아키텍처 개요
2. Proxy 모델 개요
3. Router Mesh 모델로 Microservices 강화
4. SSL/TLS 옵션이 있는 Fabric 모델
5. MRA를 위한 독창적인 데모 앱

1. NGINX Microservices 참조 아키텍처 개요

우리는 Twelve-Factor 원칙을 따라 준수 가능한 참조 아키텍처를 구축하고 있습니다. 서비스는 가볍고 일시적이며 상태를 저장하지 않도록 설계되었습니다.

MRA는 Docker 컨테이너, Java, PHP, Python, NodeJS/JavaScript, Ruby와 같은 다양한 언어, NGINX 기반의 네트워킹과 같은 산업 표준 구성 요소를 사용합니다.

Microservices로 이동할 때 애플리케이션 디자인 및 아키텍처에서 가장 큰 변화 중 하나는 애플리케이션 구성 요소 간 통신에 네트워크를 사용하는 것입니다. 모놀리식 앱에서는 애플리케이션 구성 요소가 메모리 내에서 통신합니다. Microservices 앱에서는 해당 통신이 네트워크를 통해 이루어지므로 네트워크 디자인과 구현이 중요해집니다.

이를 반영하기 위해, MRA는 NGINX 또는 NGINX Plus를 사용하는 세 가지 다른 네트워킹 모델을 사용하여 구현되었습니다. 이 모델들은 상대적으로 간단하거나 기능이 풍부하고 복잡한 것까지 다양합니다:

  • Proxy 모델 – Microservices 애플리케이션의 컨트롤러 또는 API Gateway로 NGINX Plus를 구현하기에 적합한 간단한 네트워킹 모델입니다. 이 모델은 Docker Cloud를 기반으로 구축되었습니다.
  • Router Mesh 모델 – 각 호스트에 로드 밸런서가 있고 시스템 간 연결을 관리하는 더 견고한 네트워킹 접근 방식입니다. 이 모델은 Deis 1.0 아키텍처와 유사합니다.
  • Fabric 모델 – MRA의 중요한 기능 중 하나로, 각 컨테이너에 NGINX Plus가 있어 모든 Ingress 및 Egress 트래픽을 처리합니다. high-load 시스템에서 잘 작동하며, NGINX Plus가 모든 Microservices 에 걸쳐 SSL/TLS를 지원하며, 지연 시간을 줄이고 지속적인 SSL/TLS 연결, service discovery 및 회로 차단기(circuit breaker) 패턴을 제공합니다.

우리의 의도는 여러분이 이러한 모델을 자신의 Microservices 구현의 출발점으로 사용하며, MRA를 개선하는 방법에 대한 피드백을 환영합니다. (아래 코멘트를 추가함으로써 시작할 수 있습니다.)

각 모델에 대한 간략한 설명은 다음과 같습니다. 여러분이 하나 이상의 모델을 최적으로 활용하는 방법을 이해하기 시작할 수 있도록 모든 설명을 읽는 것이 좋습니다.

2. 프록시 모델 개요

Proxy Model은 비교적 간단한 네트워크 모델입니다. 초기 Microservices 애플리케이션을 시작하는 데 좋은 출발점이며, 다소 복잡한 모놀리식 레거시 앱을 변환할 때 대상 모델로 사용할 수 있습니다.

Proxy Model에서 NGINX 또는 NGINX Plus는 Ingress Controller 역할을 수행하여 요청을 NGINX Microservices 로 라우팅합니다. NGINX Plus는 새로운 서비스가 생성될 때 동적 DNS를 사용하여 Service Discovery를 수행할 수 있습니다. Proxy Model은 또한 NGINX를 API Gateway로 사용할 때 템플릿으로 사용하기에 적합합니다.

Proxy Model

대부분의 복잡도가 있는 애플리케이션에서는 서비스 간 통신이 필요합니다. 이 경우, 서비스 레지스트리가 클러스터 내에서 메커니즘을 제공합니다. Docker Cloud는 기본적으로 이러한 접근 방식을 사용합니다. 다른 서비스에 연결하려면 서비스가 DNS를 쿼리하고 요청을 보낼 IP 주소를 가져옵니다.

일반적으로 Proxy Model은 단순하고 적당히 복잡한 애플리케이션에 적합합니다.
특히 대규모로 확장하는 경우 효율적인 로드 밸런싱 접근 방식/모델이 아니므로, 무거운 로드 밸런싱 요구 사항이 있다면 아래에서 설명하는 모델 중 하나를 사용하세요. (“확장”은 대규모의 Microservices 와 높은 트래픽 볼륨을 모두 의미할 수 있습니다.)

3. Router Mesh 모델로 Microservices 강화

Router Mesh 모델은 약간의 복잡도를 가지며, 견고한 새로운 애플리케이션 설계와, Fabric 모델의 기능이 필요하지 않은 복잡한 모놀리식 레거시 앱을 변환하는 데 적합합니다.

Router Mesh 모델은 Proxy 모델보다 더 견고한 네트워킹 접근 방식을 취하여 각 호스트에서 로드 밸런서를 실행하고, Microservices 간의 연결을 적극적으로 관리합니다. Router Mesh 모델의 주요 이점은 서비스간 보다 효율적이고 견고한 로드 밸런싱입니다. NGINX Plus를 사용하면 개별 서비스 인스턴스를 모니터링하기 위한 active-health-checks 을 구현하고, 이를 기반으로 그들이 종료될 때 순조롭게 트래픽을 조절할 수 있습니다.

NGINX Microservices Router Mesh Model

Deis Workflow는 Router Mesh 모델과 유사한 접근 방식을 사용하여 서비스 간 트래픽을 라우팅합니다.
각 호스트에서 컨테이너 내에서 NGINX 인스턴스를 실행하여 서비스 간 연결을 관리합니다.
새로운 앱 인스턴스가 생성되면 프로세스가 etcd 서비스 레지스트리에서 서비스 정보를 추출하여 NGINX에 로드합니다. NGINX Plus도 이 모드에서 작동할 수 있으며, 다양한 위치와 관련된 업스트림을 사용합니다.

4. SSL/TLS 옵션이 있는 Fabric 모델

NGINX에서는 Fabric Model에 가장 흥미롭게 생각하고 있습니다.
이 모델은 고성능, 유연한 로드 밸런싱 및 각각의 Microservices 수준까지 보장되는 보안성 등 NGINX Microservices 가 제공하는 가장 흥미로운 기능을 실현합니다. Fabric Model은 안전한 애플리케이션에 적합하며 대규모 애플리케이션에 확장 가능합니다.

Fabric Model에서는 NGINX Plus가 각 컨테이너 내부에 배치되어 모든 HTTP 트래픽의 프록시 역할을 합니다.
애플리케이션은 서비스 연결에 대해 localhost 위치와 통신하며, NGINX Plus가 Service Discovery, 로드 밸런싱 및 Health Check를 수행합니다.

Fabric Model

NGINX Plus는 앱이 연결해야 하는 모든 서비스의 인스턴스를 얻기 위해 ZooKeeper에 쿼리를 보냅니다.
예를 들어 유효한 DNS 빈도를 1초로 설정하면, NGINX Plus는 1초마다 ZooKeeper에서 인스턴스 변경 사항을 스캔하고 적절하게 트래픽을 라우팅합니다.

NGINX Plus의 강력한 HTTP 처리 기능 덕분에, keepalive를 사용하여 Microservices 와의 상태 유지 연결을 유지하면서 지연 시간을 줄이고 성능을 향상시킬 수 있습니다.
이는 특히 Microservices 간 트래픽을 보호하기 위해 SSL/TLS를 사용할 때 유용한 기능입니다.

마지막으로, NGINX Plus의 Active Health Checks를 사용하여 트래픽을 건강한 인스턴스로 관리하고, 사실상 무료로 서킷 브레이커(circuit breaker) 패턴을 구축합니다.

5. MRA를 위한 독창적인 NGINX Microservices 데모 앱

MRA에는 데모로 샘플 애플리케이션인 Ingenious 사진 공유 앱이 포함되어 있습니다. Ingenious는 Proxy, Router Mesh 및 Fabric의 세 가지 모델 각각에서 구현됩니다. Ingenious 데모 앱은 올해 후반에 공개될 예정입니다.

Ingenious는 Flickr 또는 Shutterfly와 같은 사진 저장 및 공유 애플리케이션의 단순화된 버전입니다.
다음과 같은 몇 가지 이유로 사진 공유 애플리케이션을 선택했습니다.

  • 사용자와 개발자 모두 그것이 무엇을 하는지 쉽게 파악할 수 있습니다.
  • 관리할 여러 데이터 차원이 있습니다.
  • 아름다운 디자인을 앱에 쉽게 통합할 수 있습니다.
  • 고강도 및 저강도 처리가 혼합된 비대칭 컴퓨팅 요구 사항을 제공하여 다양한 종류의 기능에서 장애 조치, 확장 및 모니터링 기능을 실제로 테스트할 수 있습니다.
NGINX Microservices Ingenious

NGINX Microservices 를 직접 사용해 보십시오. 오늘 무료 30일 평가판을 시작하거나 사용 사례에 대해 논의하려면 NGINX STORE 에 문의하십시오.