Amazon을 활용한 Apache APISIX의 생태계 및 성장 전략
October 26, 2022
저자 Chao Zhang은 Apache APISIX PMC 멤버이자 API7.ai의 기술 전문가입니다. 그는 API7 Cloud의 제품 리드이자 오픈소스 열정가입니다. 이 글은 "AWS Summit Greater China 2022"에서 Chao가 공유한 내용을 정리한 것입니다.
Apache APISIX
2019년, 두 명의 소프트웨어 엔지니어가 작은 사무실을 임대하고, API 게이트웨이 프로젝트를 0에서 1로 만들어 오픈소스로 공개한 후 Apache 소프트웨어 재단에 기부했습니다. 이 프로젝트인 APISIX는 이후 Apache의 최상위 프로젝트가 되었으며, 활발한 커뮤니티와 빠른 성장을 통해 가장 인기 있는 오픈소스 API 게이트웨이 프로젝트로 자리 잡았습니다. 이 두 엔지니어는 API7.ai를 설립했으며, 현재 전 세계에서 같은 생각을 가진 많은 사람들과 함께 Apache APISIX에 기여하며, 이를 API 관리 분야에서 빛나는 별로 만들고 있습니다.
최고의 성능 & 풍부한 확장성
APISIX는 태생부터 클라우드 네이티브 API 게이트웨이로서 높은 성능 요구를 가지고 있습니다. 따라서 Apache APISIX를 사용할 때 사용자들이 가장 직접적으로 느끼는 것은 높은 성능과 낮은 지연 시간입니다. 한편, 기능 측면에서 APISIX는 트래픽 처리에 있어 광범위한 능력을 가지고 있습니다. 따라서 APISIX는 카나리 릴리스와 블루-그린 배포에 자주 사용됩니다. 또한, APISIX는 API 보안과 관련된 인증 기능도 제공하며, JWT Auth, HMAC Auth, Open ID Connect 프로토콜 등 다양한 인증 방식을 지원합니다.
또한, APISIX는 확장 및 커스텀 개발을 하는 개발자들에게도 친화적입니다. APISIX 자체가 Lua를 지원할 뿐만 아니라, APISIX Plugin Runner를 통해 Java, Go, Python 및 WebAssembly와 같은 고급 언어를 사용하여 APISIX를 확장할 수 있습니다. 다국어 플러그인 지원을 통해 추가 학습 비용 없이도 커스텀 개발을 할 수 있습니다.
다양한 생태계 & 활발한 오픈소스 커뮤니티
APISIX는 생태계와 관련하여 많은 활동을 하고 있으며, 다양한 유형의 프로젝트를 기반으로 통합 개발을 진행했습니다. APISIX의 메인 리포지토리는 70개 이상의 다양한 플러그인을 보유하고 있습니다.
이러한 플러그인을 사용하여 AWS와 같은 플랫폼과의 빠른 통합 및 배포를 달성할 수 있으며, 사용 중 추가 개발 비용을 줄이는 데도 도움이 됩니다.
한편, APISIX 커뮤니티의 월간 기여자 수는 보통 30명 정도로 유지되며, 이는 매우 활발한 수치입니다. APISIX의 Github 리포지토리에서도 많은 커뮤니티 사용자들이 이슈, PR, Discussion에서 질문에 답변하고 문제를 해결하는 모습을 볼 수 있습니다. 긍정적인 커뮤니티 환경은 제품 업그레이드를 가속화하고 생태계를 풍부하게 하는 데 도움이 됩니다.
따라서 APISIX는 전 세계적으로 Airwallex, Sina Weibo, European Factory Platform, NASA, Nayuki 등과 같은 기업 고객을 확보하기 시작했습니다. 또한, 점점 더 많은 기업들의 사용과 기여 덕분에 APISIX는 대중에게 더 잘 알려지게 되었습니다. 현재 APISIX의 기여자는 300명을 넘어섰으며, 시간이 지남에 따라 APISIX 관련 오픈소스 프로젝트의 전체 기여자는 500명을 넘어섰습니다.
아키텍처 업그레이드
제품의 아키텍처 수준으로 돌아가면, APISIX의 아키텍처는 다음과 같은 데이터 플레인 + 컨트롤 플레인 모드를 사용합니다.
왼쪽은 APISIX 자체로, 전체 API 게이트웨이의 데이터 플레인이며, 주로 사용자의 비즈니스 트래픽을 처리합니다. 또한, APISIX는 속도 제한, 로드 밸런싱 등의 서비스 관리 기능을 제공합니다. 오른쪽은 API 게이트웨이의 컨트롤 플레인으로, APISIX의 운영 컴포넌트를 제어하며, 운영 상태 데이터를 수집하는 관찰 가능성 관련 로깅 컴포넌트도 포함됩니다. 한편, etcd와 Admin API를 통해 APISIX는 사용자가 관련 규칙을 구성할 수 있도록 도와주어 APISIX가 의도한 대로 운영될 수 있게 합니다.
위에서 언급한 바와 같이, 다국어 플러그인은 왼쪽의 데이터 플레인 아키텍처에 내장될 수 있습니다. 예를 들어, 사용자는 APISIX 내부의 wasm plugin
모듈을 통해 C++ 또는 Rust와 같은 프로그래밍 언어를 사용하여 APISIX를 확장할 수 있습니다. 한편, 오른쪽은 Plugin Runner를 기반으로 여러 언어를 사용하여 APISIX를 확장하는 방법을 보여줍니다. 이는 언어별 Plugin Runner(예: Java Plugin Runner)를 호출하여 전통적인 Unix 도메인 소켓을 통해 APISIX로부터 요청을 RPC 방식으로 받아들이고, APISIX가 이 트래픽을 처리할 수 있도록 도와줍니다.
Amazon에서의 APISIX 탐구
현재 APISIX는 Amazon을 기반으로 제품 및 성능에 대한 탐구를 진행하고 있습니다.
Amazon Marketplace
참고: API7.ai는 Zhiliu Technology로도 알려져 있습니다.
Amazon Marketplace에서 APISIX를 검색하면 위와 같은 결과를 볼 수 있습니다. 이 소프트웨어는 2021년부터 플랫폼에 등록되었습니다. 위 소프트웨어를 사용하면 모든 Amazon EC2 인스턴스에 APISIX를 빠르게 배포할 수 있습니다. 또한, 이 소프트웨어는 무료이므로 EC2 인스턴스 요금만 지불하면 됩니다.
이 소프트웨어는 EC2 인스턴스 내에서 APISIX와 etcd 인스턴스를 실행합니다. 따라서 기존 Amazon 사용자가 APISIX를 직접 사용하거나 POC(Proof of Concept)를 통해 APISIX가 목표 시나리오의 요구 사항을 충족하는지 확인하려는 경우에 더 적합합니다.
CDK APISIX
CDK는 Amazon이 제공하는 오픈소스 소프트웨어 개발 프레임워크로, 사용자가 코딩을 통해 클라우드 인프라를 조작할 수 있도록 도와줍니다.
APISIX 커뮤니티의 기여자인 Pahud Hsieh는 CDK를 기반으로 cdk-apisix를 개발했습니다. 이 프로젝트는 사용자가 코딩과 자동화 방식을 통해 APISIX 인스턴스를 생성할 수 있도록 합니다. 위에서 언급한 것과 달리, 이는 AWS Fargate에 직접 APISIX를 배포할 수 있습니다. 따라서 이벤트 트리거가 필요한 일부 시나리오에서 자동 배포 및 파괴를 달성할 수 있습니다. 전체 과정은 수동 작업 없이도 더 반응적으로 이루어집니다.
위 아키텍처를 기반으로, 클라이언트의 트래픽은 클라우드 ELB를 통해 APISIX로 전달되며, APISIX는 인증, 속도 제한 등과 같은 기본 처리를 수행한 후, 최종적으로 백엔드의 실제 애플리케이션 인스턴스로 트래픽을 전송합니다.
CDK 방식을 사용하면, 사용자는 익숙한 코딩 언어를 사용하여 Apache APISIX를 배포할 수 있으며, 이러한 고급 언어의 속성을 활용하여 Amazon에서 APISIX를 더 편리하게 배포할 수 있습니다. 또한, 사용 측면에서 배포 템플릿 구성을 완료하면 이를 복사하고 커스터마이징할 수 있습니다. 따라서 향후 필요할 때 이 템플릿 구성을 직접 사용하여 배포 과정을 간소화할 수 있습니다.
Amazon-Lambda 플러그인
Lambda 또는 Serverless를 사용하여 애플리케이션을 배포할 때, 관련 프로젝트를 실행하는 매우 저렴한 방법이 있으며, 즉각적인 확장 및 기타 비즈니스 시나리오를 달성할 수 있습니다. 이러한 방식으로 애플리케이션을 배포할 때, 일반적으로 이벤트 트리거가 필요하며, API 게이트웨이는 이벤트 트리거를 위한 통로가 될 수 있습니다.
사용자가 APISIX의 amazon-lambda
플러그인을 라우팅에 구성하면, 전체 트래픽을 사용자가 구성한 Lambda 함수 주소로 리디렉션할 수 있습니다. Lambda 함수는 이러한 요청을 처리하고 결과를 APISIX를 통해 클라이언트에게 다시 전송합니다.
이 플러그인은 Amazon IAM 식별 및 Key AUth도 지원합니다. 이 경우, 백엔드에 배포된 Lambda 함수는 보안을 희생하지 않고도 APISIX와 더 잘 통합될 수 있습니다.
관련 성능 테스트
2022년 5월, AWS Graviton 3 프로세서가 공식 출시되었습니다. DDR5 메모리 덕분에 Graviton3 프로세서는 AWS Graviton2 프로세서 대비 최대 25% 더 나은 컴퓨팅 성능, 최대 2배 더 높은 부동 소수점 성능, 그리고 50% 더 많은 메모리 대역폭을 제공합니다; Graviton3 기반 인스턴스는 동일한 성능 대비 최대 60% 적은 에너지를 사용합니다.
AWS Graviton3 프로세서 출시 직후, APISIX는 AWS Graviton3 프로세서를 기반으로 완전한 회귀 테스트를 수행했으며, 이는 사용자가 Graviton3 EC2 인스턴스에서 APISIX를 안심하고 사용할 수 있음을 의미합니다. 호환성 문제는 없을 것입니다. 한편, 우리는 AWS Graviton 프로세서 제품군에 대한 성능 테스트도 수행했습니다. 다음 두 시나리오를 참조하여 AWS Graviton2 및 AWS Graviton3 프로세서에서 성능 테스트를 수행했습니다.
- 단일 업스트림: 이 시나리오에서는 단일 업스트림만 사용하며(플러그인 없이), 순수 백투소스 프록시 모드에서 APISIX의 성능을 주로 테스트합니다.
- 단일 업스트림 + 다중 플러그인: 이 시나리오에서는 단일 업스트림과 두 개의 플러그인을 사용하며,
limit-count
및prometheus
와 같은 두 개의 핵심 성능 소모 플러그인을 활성화할 때 APISIX의 성능을 주로 테스트합니다.
위 이미지에서 볼 수 있듯이, APISIX는 안정성 또는 트래픽 처리 능력 측면에서 뛰어난 성능을 보여줍니다. AWS Graviton3 프로세서는 API 게이트웨이와 같은 IO 집약적인 컴퓨팅 시나리오에서 최대 76% 더 나은 성능을 제공하며, 최대 38%의 지연 시간을 줄입니다. 이 데이터는 AWS에서 제공한 공식 데이터(25% 성능 향상)보다도 더 나은 성능을 보여줍니다.
전반적으로, AWS Graviton3와 같은 고성능 프로세서를 사용할 때 APISIX의 성능은 매우 뛰어납니다. 실제 비즈니스에서 APISIX는 효율성을 높이고 리소스와 비용을 절감하는 데 도움이 될 수 있습니다.
API7 Cloud가 Amazon을 활용하여 제품 성장을 빠르게 달성하는 방법은?
클라우드 네이티브의 빠른 성장과 함께, 점점 더 많은 기업들이 자신들의 비즈니스를 클라우드로 이전하고 있습니다(일반적으로 여러 공용 클라우드 플랫폼을 선택합니다). 따라서 클라우드 API를 효율적으로 관리하고 배포하는 방법이 시급한 문제가 되었습니다.
API7 Cloud는 APISIX를 기반으로 한 SaaS 서비스로, 사용자가 모든 클라우드 플랫폼에 배포된 모든 SaaS 제품을 연결할 수 있도록 도와줍니다. API7 Cloud는 2022년 3월에 처음 출시되었으며, 사용자에게 사용하기 쉬운 API 관리 기능, 유연하고 풍부한 관찰 가능성 지표, 그리고 API 보안을 제공하여 API 연결을 더 효율적이고 안전하며 신뢰할 수 있게 만듭니다.
이 제품은 API 호출 횟수에 따라 사용자에게 요금을 청구하며, 현재 데이터 플레인을 배포하는 두 가지 방법을 지원합니다. 첫 번째는 자체 호스팅으로, 사용자가 자신의 인프라를 준비하고 APISIX를 해당 인프라에 배포하여 APISIX가 API7 Cloud와 통신할 수 있도록 합니다. 다른 방법은 세미 매니지드, 즉 세미 호스팅입니다. 먼저 사용자는 API7 Cloud가 자신의 클라우드 계정(예: Amazon 계정)을 관리할 수 있도록 권한을 부여해야 합니다. 그런 다음 API7 Cloud 구성 패널에서 한 번의 클릭으로 자신의 계정 아래 모든 인프라에 APISIX를 배포할 수 있습니다.
현재, 전체 API7 Cloud 컴포넌트는 AWS에 호스팅되어 있으며 AWS 서비스를 사용하고 있습니다; 제품 아키텍처는 다음과 같습니다:
위 이미지에서 볼 수 있듯이, APISIX가 포함된 데이터 플레인은 다양한 클라우드 플랫폼에 배포될 수 있으며, 심지어 사용자의 인프라 또는 데이터 센터에도 배포될 수 있습니다. API7 Cloud 측에서는 주로 관찰 가능성, 기본 API 관리, 보안과 같은 중요한 속성을 제공합니다.
Amazon의 서비스를 활용함으로써, API7 Cloud는 더 나은 제품 성능을 달성했습니다.
먼저, APISIX는 Amazon EKS 서비스에 의존합니다. 새로운 SaaS 제품으로서, API7 Cloud는 처음부터 K8s에 배포되었습니다. 따라서 모든 컴포넌트를 EKS 클러스터에 배포하여 클라우드가 제공하는 일부 기능을 사용할 수 있습니다. 한편, 각 사용자는 서로 다른 컴포넌트를 가지며, 개별 컴포넌트는 클러스터 내에서 실행될 수 있습니다. 따라서 NetworkPolicy를 기반으로 개발된 테넌트 격리 방법을 사용하여 이러한 테넌트의 네임스페이스가 서로 접근할 수 없도록 네트워크 격리를 수행했습니다. 이 서비스에서는 APISIX Ingress Controller를 게이트웨이로 사용하여 전체 운영을 원활하게 실행합니다.
APISIX Ingress Controller는 Ingress 컨트롤러의 구현으로, 사용자가 구성된 규칙을 APISIX 규칙으로 변환하여 APISIX가 실제 트래픽을 처리할 수 있도록 합니다.
둘째, 제품에서 가장 중요한 컴포넌트인 API7 Cloud는 Amazon RDS(Postgre SQL)를 데이터베이스로 선택했습니다. 우리는 사용자의 메타데이터를 RDS에 저장하며, 예를 들어 API의 소스 데이터 및 사용자 행동 등을 포함합니다. SaaS 제품으로서, 우리는 사용자가 우리 제품을 어떻게 사용하는지 알아야 하며, 레이아웃 및 개발자 사용자 경험에 문제가 있는지 확인하여 제품의 미래 방향을 결정해야 합니다.
또한, API7 Cloud에서는 Amazon ElasticCache 컴포넌트를 사용하며, 마스터-슬레이브 모드의 Redis를 선택했습니다. Redis는 주로 데이터 플레인의 인스턴스 상태를 저장하는 데 사용되며, 이는 APISIX가 API7 Cloud와 연결될 때 주기적으로 클라우드로 전송되는 상태 데이터입니다. 이 데이터는 민감하지도 않고 중요하지도 않으며, 데이터 플레인은 컨트롤 플레인과 자주 통신해야 하므로 여기서는 관계형 데이터베이스를 선택하지 않았습니다.
이 외에도, 이 컴포넌트는 메시지 큐로도 사용될 수 있습니다. Redis 5.0은 Stream 데이터 구조를 도입했으므로, 이를 초경량 메시지 큐로 사용하여 사용자가 데이터를 더 빠르게 생성, 조작 및 파괴할 수 있도록 도와줍니다.
결론
이 글은 APISIX 관련 프로젝트의 관점에서 사용자 경험을 공유합니다. Amazon의 서비스와 생태계의 지원을 받아, APISIX는 생태계를 더욱 탐구했습니다. 우리는 APISIX와 Amazon이 더 흥미로운 통합을 이루고 함께 더 나은 생태계를 개발하기를 바랍니다.