2016년 8월, Amazon Web Services(AWS)는 HTTP 및 HTTPS 트래픽의 계층 7 로드 밸런싱을 위한 Application Load Balancer를 출시했습니다 . 새로운 제품에는 AWS의 기존 Layer 4 및 Layer 7 로드 밸런서인 Elastic Load Balancer에서 누락된 여러 기능이 추가되었으며, 공식적으로 Classic Load Balancer로 이름이 변경되었습니다.
1년 후, AWS는 향상된 레이어 4 로드 밸런싱을 위해 Network Load Balancer를 출시했습니다 . 따라서 AWS에서 고가용성, 확장 가능한 애플리케이션을 실행하는 사용자를 위한 선택 사항은 다음과 같습니다.
이 게시물에서는 ALB의 기능을 검토하고 가격과 기능을 NGINX Open Source 및 NGINX Plus와 비교합니다.
참고사항–
ALB는 Classic Load Balancer나 NLB와 마찬가지로 AWS와 긴밀하게 통합되어 있습니다. Amazon에서는 이를 7계층 로드 밸런서라고 설명하지만 단독 7계층 역방향 프록시 및 로드 밸런서가 제공할 수 있는 모든 기능, 튜닝 및 직접 제어를 제공하지는 않습니다.
ALB는 Classic Load Balancer에서 누락된 다음과 같은 기능을 제공합니다.
호스트
헤더, 표준 및 사용자 정의 HTTP 헤더와 메서드, 쿼리 매개변수, 소스 IP 주소를 포함하는 요청의 필드를 기반으로 하는 콘텐츠 기반 라우팅을 지원합니다. ( ALB 설명서 의 "클래식 로드 밸런서에서 마이그레이션하는 이점"을 참조하세요.)(ALB와 Classic Load Balancer의 전체 기능 비교는 AWS 설명서 의 "제품 비교"를 참조하세요.)
ALB는 Classic Load Balancer의 제한된 기능 세트로 어려움을 겪어 온 AWS 사용자에게 중요한 업데이트였으며, 웹 애플리케이션의 트래픽을 보호, 최적화 및 제어할 수 있어야 하는 정교한 사용자의 요구 사항을 해결하는 데 큰 도움이 되었습니다. 하지만 여전히 전용 역방향 프록시(NGINX 등) 및 로드 밸런서(NGINX Plus 등)의 모든 기능을 제공하지는 않습니다.
사용자는 Amazon ALB를 사용하는 대신 AWS에 NGINX Open Source 또는 NGINX Plus를 배포하여 트래픽을 제어하고 부하를 분산할 수 있습니다. 여러 가용성 영역에서 높은 가용성을 달성하기 위해 Classic Load Balancer 또는 Network Load Balancer를 프런트엔드로 배포할 수도 있습니다. 이 표에서는 ALB, NGINX, NGINX Plus에서 지원하는 기능을 비교했습니다.
메모: 다음 표의 정보는 2020년 7월 현재 정확하지만 변경될 수 있습니다.
아마존 ALB | NGINX 오픈소스 | NGINX 플러스 | |
---|---|---|---|
부하 분산 방법과 특징 |
쿠키 기반 세션 지속성, 가중치가 적용된 대상 그룹 및 느린 시작을 갖춘 라운드 로빈 및 최소 미해결 요청 방법 |
가중치가 적용된 업스트림 서버를 사용한 다중 부하 분산 방법(라운드 로빈, 최소 연결, 해시, IP 해시 및 랜덤 포함) | NGINX 오픈 소스와 동일하며 최소 시간 방식, 더 많은 세션 지속성 방식 및 느린 시작 기능이 추가되었습니다. |
캐싱 | ❌ 로드 밸런서에서 캐싱이 지원되지 않습니다. | ✅ 정적 파일 캐싱 및 동적(애플리케이션) 캐싱 | ✅ 정적 및 동적 캐싱과 고급 기능 |
건강 검진 | 활성(비동기 검사에 대해 반환된 상태 코드를 확인하여 실패한 서버를 식별) | 수동(클라이언트 요청에 대한 응답을 확인하여 실패한 서버를 식별) | 활성 및 수동 모두 - 활성 검사는 ALB보다 더 풍부하고 구성이 가능합니다. |
높은 가용성 | HA를 위해 여러 가용성 영역에 ALB 인스턴스를 배포할 수 있지만 지역 간에는 배포할 수 없습니다. | NLB를 사용한 액티브-액티브 HA 및 탄력적 IP 주소를 사용한 액티브-패시브 HA | NGINX 오픈 소스와 동일하며 모든 NGINX Plus 인스턴스에서 원활한 HA를 위한 내장 클러스터 상태 공유 기능이 추가되었습니다. |
IP 제품군의 모든 프로토콜 지원 | ❌ HTTP 및 HTTPS만 | ✅ 수동 상태 검사가 포함된 TCP 및 UDP도 있습니다. | ✅ 또한 TCP 및 UDP, 활성 및 수동 상태 검사 포함 |
로드 밸런서 인스턴스당 여러 애플리케이션 | ✅ | ✅ | |
콘텐츠 기반 라우팅 | ✅ 요청 URL, 호스트 헤더, 표준 및 사용자 정의 HTTP 헤더, 메서드, 쿼리 매개변수, 소스 IP 주소를 포함한 요청 필드를 기반으로 함 |
✅ ALB와 동일한 요소에 기반하며, NGINX JavaScript 모듈을 인라인 JavaScript 엔진으로 사용하여 쿠키 및 동적 계산을 추가합니다. | ✅ NGINX 오픈 소스와 동일한 요소 기반, 키-값 저장소의 JWT 클레임 및 값 추가 |
컨테이너화된 애플리케이션 | Amazon ID, ECS 컨테이너 인스턴스, 자동 확장 그룹 및 AWS Lambda 함수에 대한 로드 밸런싱이 가능합니다. | 수동 구성 또는 구성 템플릿이 필요합니다. | SRV 레코드를 포함한 DNS를 사용한 자동 구성; 주요 레지스트리 서비스와 협력 |
휴대성 | ❌ 모든 환경(개발, 테스트 및 프로덕션)은 AWS에 있어야 합니다. | ✅ 모든 환경은 모든 배포 플랫폼에 있을 수 있습니다. | |
SSL/TLS | ✅ SNI를 지원하는 다중 SSL/TLS 인증서 ❌ SSL/TLS 업스트림 검증이 지원되지 않습니다. |
✅ SNI를 지원하는 다중 SSL/TLS 인증서 ✅ SSL/TLS 암호의 전체 선택 ✅ SSL/TLS 업스트림의 전체 검증 |
|
HTTP/2 및 웹소켓 | ✅ | ✅ | |
인증 기능 | – OIDC, SAML, LDAP, AD IdP 인증 옵션 – AWS Cognito 및 CloudFront와 통합 |
다양한 인증 옵션 | |
고급 기능 | ❌ 기본 API | ✅ 원본 제공, 우선 순위 지정, 속도 제한 등 | ✅ NGINX 오픈 소스와 동일하며 RESTful API, 키-값 저장소가 있습니다. |
로깅 및 디버깅 | ✅ Amazon 바이너리 로그 형식 | ✅ 사용자 정의 가능한 로그 파일 및 다중 디버그 인터페이스 | ✅ NGINX에서 완벽하게 지원하는 완전 사용자 정의 로그 파일 및 다중 디버그 인터페이스 |
모니터링 도구 | ✅ Amazon CloudWatch와 통합됨 | ✅ NGINX 컨트롤러* 및 기타 타사 도구 | ✅ NGINX 컨트롤러 및 기타 타사 도구; 보고된 통계의 확장된 세트 |
공식 기술 지원 | ✅ 추가 비용 | ❌ 커뮤니티 지원만 가능 | ✅ 가격에 포함되며 NGINX에서 직접 제공 |
무료 티어 | ✅ 첫 750시간 | ✅ 항상 무료 | ✅ 30일 체험 구독 |
* NGINX 컨트롤러는 이제 F5 NGINX 관리 제품군 입니다.
물론, 기능 체크리스트가 아닌 완벽한 보안, 최대 가용성, 완벽한 제어 기능을 갖추고 애플리케이션을 완벽하게 제공하는 데 필요한 기능을 평가하여 로드 밸런싱 선택을 평가해야 합니다.
Amazon의 Classic Load Balancer(이전 ELB)는 트래픽 급증에 대한 대응력이 부족했습니다. 로드 밸런서 인스턴스는 현재 트래픽 수준에 맞게 자동으로 크기가 조정되었으며, 트래픽이 급증하면 ELB가 응답하고 추가 용량을 배포하는 데 몇 분이 걸릴 수 있습니다. 사용자는 트래픽 급증에 앞서 추가 리소스를 요청하기 위해 수동 양식 기반 프로세스에 의존해야 했습니다(이를 "사전 워밍"이라고 함). ALB는 NGINX 기반이므로 ALB 인스턴스는 훨씬 더 많은 트래픽을 처리할 수 있지만 트래픽 급증에 대한 대응으로 여전히 크기 조정 이벤트가 발생할 수 있습니다. 게다가 트래픽 급증은 자동으로 로드 밸런서 용량 단위(LCU)의 소모가 더 커지고 결과적으로 비용도 증가합니다.
부하 분산 프록시를 직접 배포하고 확장하면 용량과 비용을 완벽하게 제어할 수 있습니다. NGINX와 NGINX Plus는 표준 Amazon 인스턴스 내에 배포되며, 크기 가이드는 다양한 용량을 갖춘 인스턴스 유형의 잠재적인 최대 성능을 나타냅니다. NGINX Plus의 가격은 모든 인스턴스 크기에 동일하므로 급증하는 트래픽을 처리하기 위해 초과 용량을 배포하는 것이 비용 효율적이며, 더 많은 용량이 필요할 때 양식을 작성할 필요 없이 빠르게 더 많은 인스턴스를 배포할 수 있습니다.
Amazon ALB에 대한 테스트 결과, "수동" 상태 검사를 구현하지 않는 것으로 나타났습니다. 비동기 테스트를 통해 예상된 상태 코드가 반환되지 않는다는 것이 확인되면 서버가 실패한 것으로 감지됩니다.
우리는 인스턴스 클러스터의 부하를 분산하기 위해 ALB 인스턴스를 생성하면서 이를 발견했습니다. 최소 5초 간격과 최소 2번의 검사 실패 임계값으로 상태 검사를 구성하고 ALB에 꾸준한 요청 스트림을 보냈습니다. 인스턴스 중 하나를 중지했을 때 일부 요청에 대해 ALB가 다음을 반환했습니다. 502
나쁜
게이트웨이
인스턴스가 다운된 것을 상태 검사에서 감지할 때까지 몇 초 동안 오류가 발생했습니다. 수동 상태 검사(NGINX와 NGINX Plus에서 모두 지원)를 통해 이러한 유형의 오류가 최종 사용자에게 드러나는 것을 방지할 수 있습니다.
ALB의 상태 검사는 HTTP 상태 코드(예:)를 검사하여 인스턴스의 상태만 확인할 수 있습니다. 200
확인
또는 404
찾을 수
없음
). 이러한 상태 검사는 신뢰할 수 없습니다. 예를 들어, 일부 웹 애플리케이션은 서버에서 생성된 오류를 사용자 친화적인 페이지로 바꾸고, 일부 오류는 웹 페이지 본문에만 보고됩니다.
NGINX Plus는 수동 및 능동적 상태 검사를 모두 지원하며, 후자는 ALB보다 더욱 강력하여 응답 본문과 상태 코드를 모두 일치시킬 수 있습니다.
마지막으로, ALB를 구축하는 경우 직면하게 되는 가장 큰 문제는 비용입니다. 부하 분산은 Amazon 청구서의 중요한 부분이 될 수 있습니다 .
AWS는 복잡한 알고리즘을 사용하여 가격을 결정합니다 . 매달 새로운 연결 수, 동시 연결 수, 관리할 데이터 양을 정확히 알지 못하는 한(이는 예측하기 매우 어려움) Amazon과 같은 방식으로 LCU를 계산하지 않는다면 매달 Amazon 청구서에 대해 걱정하게 될 것입니다.
AWS의 NGINX Plus는 완벽한 예측 가능성을 제공합니다. 고정 시간당 비용에 AWS 호스팅 비용을 추가하면 전체 지원이 포함된 훨씬 더 강력한 로드 밸런싱 솔루션을 얻을 수 있습니다.
NGINX Plus는 레이어 7 로드 밸런싱을 위한 검증된 솔루션이며 레이어 4 로드 밸런싱 기능도 제공합니다. Amazon의 Classic Load Balancer 또는 NLB와 함께 사용하면 효과적입니다.
AWS 환경에서 이미 매우 인기 있는 솔루션인 NGINX 및 NGINX Plus의 지속적이고 확대된 사용을 장려합니다. 아직 NGINX Plus 사용자가 아니라면 오늘 무료 30일 체험판을 시작하거나 저희에게 문의하여 사용 사례에 대해 논의해 보세요 .
"이 블로그 게시물에는 더 이상 사용할 수 없거나 더 이상 지원되지 않는 제품이 참조될 수 있습니다. 사용 가능한 F5 NGINX 제품과 솔루션에 대한 최신 정보를 보려면 NGINX 제품군을 살펴보세요. NGINX는 이제 F5의 일부가 되었습니다. 이전의 모든 NGINX.com 링크는 F5.com의 유사한 NGINX 콘텐츠로 리디렉션됩니다."