블로그 | NGINX

NGINX의 마이크로서비스 참조 아키텍처 소개

NGINX-F5-수평-검정-유형-RGB의 일부
크리스 스테트슨 썸네일
크리스 스테트슨
2016년 4월 18일 게시

작성자 메모이 블로그 게시물은 시리즈의 첫 번째입니다.

  1. NGINX 마이크로서비스 참조 아키텍처 소개(이 게시물)
  2. MRA, 2부: 프록시 모델
  3. MRA, 3부: 라우터 메시 모델
  4. MRA, 4부: 패브릭 모델
  5. MRA, 5부: 마이크로서비스를 위한 12가지 요소 앱 적용
  6. MRA, 6부: NGINX Plus로 Circuit Breaker 패턴 구현

여섯 개의 블로그와 마이크로서비스 애플리케이션을 위한 웹 프런트엔드에 대한 블로그<.htmla>가 무료 전자책 으로 엮어졌습니다 .

마이크로서비스에 대한 다른 NGINX 리소스도 확인해 보세요.

소개

NGINX는 초창기부터 마이크로서비스 운동에 참여해 왔습니다. NGINX의 가볍고 고성능이며 유연한 특성은 마이크로서비스에 매우 적합합니다.

NGINX Docker 이미지 는 Docker Hub에서 가장 많이 다운로드된 애플리케이션 이미지이며, 오늘날 웹에서 찾을 수 있는 대부분의 마이크로서비스 플랫폼에는 어떤 형태로든 NGINX를 배포하고 시작 페이지에 연결하는 데모가 포함되어 있습니다.

NGINX에서는 고객의 성공을 위해 마이크로서비스로의 전환이 매우 중요하다고 믿기 때문에 웹 애플리케이션 개발 및 제공 분야에서 이러한 획기적인 변화를 지원하는 기능과 관행을 개발하는 전담 프로그램을 시작했습니다. 또한 우리는 마이크로서비스를 구현하는 데에는 다양한 접근 방식이 있으며, 그 중 많은 것이 새롭고 개별 개발팀의 요구 사항에 맞게 설계되었다는 점을 인식하고 있습니다. 우리는 기업이 자체 마이크로서비스 기반 애플리케이션을 보다 쉽게 개발하고 제공할 수 있도록 하는 모델이 필요하다고 생각합니다.

이 모든 것을 염두에 두고 NGINX Professional Services에서는 NGINX 마이크로서비스 참조 아키텍처(MRA)를 개발하고 있습니다. 이는 사용자가 자체 마이크로서비스 애플리케이션을 만드는 데 사용할 수 있는 모델 세트입니다.

MRA는 두 가지 구성 요소로 이루어져 있습니다. 세 가지 모델 각각에 대한 자세한 설명과, 예제 사진 공유 프로그램인 Ingenious를 구현하는 다운로드 가능한 코드입니다. 세 가지 모델 간의 유일한 차이점은 각각의 모델에 대해 NGINX Plus를 구성하는 데 사용되는 구성 코드입니다. 이 블로그 게시물 시리즈에서는 각 모델에 대한 개요를 제공합니다. 자세한 설명, 구성 코드 및 Ingenious 샘플 프로그램에 대한 코드는 올해 말에 제공될 예정입니다.

이 참조 아키텍처를 구축하는 데 있어서 우리의 목표는 세 가지입니다.

  • 고객과 업계에 마이크로서비스 기반 시스템을 구축하고 개발을 가속화하고 개선하기 위한 즉시 사용 가능한 청사진을 제공합니다.
  • NGINX 및 NGINX Plus에서 내부적으로 또는 외부적으로 개발되어 제품 코어에 배포되거나 동적 모듈 로 배포되는 새로운 기능을 테스트하기 위한 플랫폼을 생성합니다.
  • 파트너 시스템과 구성 요소를 이해하여 마이크로서비스 생태계에 대한 전체적인 관점을 얻을 수 있도록 돕습니다.

마이크로서비스 참조 아키텍처는 NGINX 고객을 위한 전문 서비스 제공 의 중요한 부분이기도 합니다. MRA에서는 가능한 경우 NGINX 오픈 소스NGINX Plus 에 공통된 기능을 사용하고, 필요한 경우 NGINX Plus에만 해당하는 기능을 사용합니다. NGINX Plus 종속성은 아래에 설명된 대로 더 복잡한 모델에서 더 강합니다. 우리는 많은 MRA 사용자가 NGINX Plus 구독을 통해 제공되는 NGINX 전문 서비스와 기술 지원을 이용할 수 있어 이점을 얻을 것으로 예상합니다.

마이크로서비스 참조 아키텍처 개요

우리는 Twelve‑Factor App 의 원칙을 준수하도록 참조 아키텍처를 구축하고 있습니다. 서비스는 가볍고, 일시적이며, 무상태로 설계되었습니다.

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

마이크로서비스로 전환할 때 애플리케이션 설계 및 아키텍처에서 가장 큰 변화 중 하나는 네트워크를 사용하여 애플리케이션의 기능적 구성 요소 간 통신을 하는 것입니다. 모놀리식 앱에서는 애플리케이션 구성 요소가 메모리에서 통신합니다. 마이크로서비스 앱에서 해당 통신은 네트워크를 통해 이루어지므로 네트워크 설계와 구현이 매우 중요해집니다.

이를 반영하기 위해 MRA는 세 가지 서로 다른 네트워킹 모델을 사용하여 구현되었으며, 이는 모두 NGINX 또는 NGINX Plus를 사용합니다. 비교적 간단한 것부터 기능이 풍부하고 더 복잡한 것까지 다양합니다.

  • 프록시 모델 – 마이크로서비스 애플리케이션을 위한 컨트롤러나 API 게이트웨이 로 NGINX Plus를 구현하는 데 적합한 간단한 네트워킹 모델입니다. 이 모델은 Docker Cloud를 기반으로 구축되었습니다.
  • 라우터 메시 모델 – 각 호스트에 로드 밸런서를 두고 시스템 간 연결을 관리하는 보다 강력한 네트워킹 접근 방식입니다. 이 모델은 Deis 1.0 의 아키텍처와 유사합니다.
  • 패브릭 모델 – MRA의 핵심인 패브릭 모델은 각 컨테이너에 NGINX Plus를 탑재하여 모든 유입 및 유출 트래픽을 처리합니다. 고부하 시스템에 적합하며 모든 레벨에서 SSL/TLS를 지원합니다. NGINX Plus는 지연 시간 감소, 지속적인 SSL/TLS 연결, 서비스 검색 및 모든 마이크로서비스에 걸친 회로 차단기 패턴을 제공합니다.

저희는 여러분이 이 모델을 여러분의 마이크로서비스 구현을 위한 시작점으로 삼기를 바라며, MRA를 개선하는 방법에 대한 여러분의 피드백을 환영합니다. (아래의 댓글에 추가하여 시작할 수 있습니다.)

각 모델에 대한 간략한 설명은 다음과 같습니다. 모든 설명을 읽고 하나 이상의 모델을 가장 잘 활용하는 방법에 대한 아이디어를 얻으시기 바랍니다. 이후의 블로그 게시물에서는 각 모델을 블로그 게시물당 하나씩 자세히 설명할 예정입니다.

프록시 모델 간략 설명

프록시 모델은 비교적 간단한 네트워킹 모델입니다. 이는 초기 마이크로서비스 애플리케이션을 시작하기에 좋은 출발점이고, 중간 정도로 복잡한 모놀리식 레거시 앱을 변환하기 위한 대상 모델로도 좋습니다.

프록시 모델에서 NGINX 또는 NGINX Plus는 인그레스 컨트롤러 역할을 하여 마이크로서비스에 대한 요청을 라우팅합니다. NGINX Plus는 새로운 서비스가 생성될 때 동적 DNS를 사용하여 서비스를 검색 할 수 있습니다. 프록시 모델은 NGINX를 API 게이트웨이 로 사용할 때 템플릿으로 사용하기에도 적합합니다.

NGINX의 마이크로서비스 참조 아키텍처의 프록시 모델에서 NGINX Plus는 애플리케이션의 마이크로서비스 인스턴스에 대한 역방향 프록시 서버 및 인그레스 컨트롤러 역할을 합니다.

서비스 간 통신이 필요한 경우(복잡도에 관계없이 대부분의 애플리케이션에서 필요함) 서비스 레지스트리가 클러스터 내에서 메커니즘을 제공합니다. ( 서비스 간 커뮤니케이션 메커니즘 에 대한 자세한 목록은 이 블로그 게시물을 참조하세요.) Docker Cloud는 기본적으로 이 방법을 사용합니다. 다른 서비스에 연결하려면 서비스가 DNS를 쿼리하고 IP 주소를 받아서 요청을 보냅니다.

일반적으로 프록시 모델은 간단한 것부터 적당히 복잡한 것까지의 애플리케이션에 적합합니다. 로드 밸런싱을 위한 가장 효율적인 접근 방식/모델은 아니며, 특히 규모에 따라 다릅니다. 로드 밸런싱 요구 사항이 큰 경우 아래에 설명된 모델 중 하나를 사용하세요. ("규모"는 많은 수의 마이크로서비스와 높은 트래픽 볼륨을 의미할 수 있습니다.)

편집자 - 이 모델에 대한 심층적인 탐색은 MRA, 2부 - 프록시 모델을 참조하세요.

라우터 메시 모델로의 전환

라우터 메시 모델은 적당히 복잡하여 견고한 새로운 애플리케이션 디자인과 Fabric 모델의 기능이 필요 없는 더 복잡하고 일체형 레거시 앱을 변환하는 데 적합합니다.

라우터 메시 모델은 각 호스트에서 로드 밸런서를 실행하고 마이크로 서비스 간의 연결을 적극적으로 관리함으로써 프록시 모델보다 네트워킹에 대한 접근 방식을 더 강력하게 취합니다. 라우터 메시 모델의 주요 이점은 서비스 간의 부하 분산이 더욱 효율적이고 강력해진다는 것입니다. NGINX Plus를 사용하면 활성 상태 검사를 구현하여 개별 서비스 인스턴스를 모니터링하고 서비스 중단 시 트래픽을 정상적으로 조절할 수 있습니다.

NGINX의 마이크로서비스 참조 아키텍처의 라우터 메시 모델에서 NGINX Plus는 각 서버에서 실행되어 해당 서버에서 실행되는 마이크로서비스의 부하를 분산하고 프런트엔드 서버에서 역방향 프록시를 실행하여 서비스 검색을 통해 애플리케이션 서버로의 트래픽 부하를 분산합니다.

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

편집자 - 이 모델에 대한 심층적인 탐색은 MRA, 3부 - 라우터 메시 모델을 참조하세요.

마지막으로, 선택적 SSL/TLS를 갖춘 Fabric 모델

NGINX에서 가장 기대하는 것은 Fabric 모델입니다. 이 솔루션은 고성능, 부하 분산의 유연성, 개별 마이크로서비스 수준까지의 유비쿼터스 SSL/TLS를 포함하여 마이크로서비스의 가장 흥미로운 약속 중 일부를 현실로 구현합니다. Fabric 모델은 보안 애플리케이션에 적합하며 매우 대규모 애플리케이션으로 확장 가능합니다.

Fabric 모델에서 NGINX Plus는 각 컨테이너 내에 배포되고 컨테이너로 들어오고 나가는 모든 HTTP 트래픽에 대한 프록시가 됩니다. 애플리케이션은 모든 서비스 연결에 대해 로컬호스트 위치와 통신하고 NGINX Plus를 사용하여 서비스 검색, 부하 분산 및 상태 검사를 수행합니다.

NGINX의 마이크로서비스 참조 아키텍처의 패브릭 모델에서 NGINX Plus는 각 컨테이너 내에 배포되고 컨테이너로 들어오고 나가는 모든 HTTP 트래픽에 대한 순방향 및 역방향 프록시가 됩니다.

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

NGINX Plus의 강력한 HTTP 처리 기능 덕분에 keepalives를 사용하여 마이크로서비스에 대한 상태 저장 연결을 유지하여 대기 시간을 줄이고 성능을 개선할 수 있습니다. 이 기능은 SSL/TLS를 사용하여 마이크로서비스 간 트래픽을 보호할 때 특히 유용합니다.

마지막으로 NGINX Plus의 활성 상태 검사를 사용하여 정상적인 인스턴스에 대한 트래픽을 관리하고 기본적으로 회로 차단기 패턴을 무료로 구축합니다.

편집자 - 이 모델에 대한 심층적인 탐색은 MRA, 4부 - 패브릭 모델을 참조하세요.

MRA를 위한 독창적인 데모 앱

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

인지니어스는 플리커나 셔터플라이와 비슷한 사진 저장 및 공유 애플리케이션의 간소화된 버전입니다. 우리는 몇 가지 이유로 사진 공유 앱을 선택했습니다.

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

결론

NGINX 마이크로서비스 참조 아키텍처는 우리에게, 그리고 지금까지 이를 공유해 온 고객과 파트너에게도 흥미로운 개발입니다. 앞으로 몇 달 동안 이를 자세히 설명하는 일련의 블로그 게시물을 게시하고, 올해 말에 공개할 예정입니다. 또한 2016년 9월 7~9일 텍사스 오스틴에서 열리는 nginx.conf 2016 에서 이에 대해 자세히 논의할 예정입니다. 피드백을 주시면 감사하겠습니다. 여러분을 뵙기를 기대합니다.

그동안 NGINX Plus로 MRA를 직접 사용해 보세요. 오늘 무료 30일 평가판을 시작하거나 사용 사례에 대해 논의하기 위해 저희에게 연락하세요 .


"이 블로그 게시물에는 더 이상 사용할 수 없거나 더 이상 지원되지 않는 제품이 참조될 수 있습니다. 사용 가능한 F5 NGINX 제품과 솔루션에 대한 최신 정보를 보려면 NGINX 제품군을 살펴보세요. NGINX는 이제 F5의 일부가 되었습니다. 이전의 모든 NGINX.com 링크는 F5.com의 유사한 NGINX 콘텐츠로 리디렉션됩니다."