Amazonを活用したApache APISIXのエコシステムと成長
October 26, 2022
著者 Chao Zhang は、Apache APISIX の PMC メンバーであり、API7.ai の技術エキスパートでもあります。彼は API7 Cloud のプロダクトリードであり、オープンソース愛好家でもあります。この記事は、Chao が「AWS Summit Greater China 2022」で共有した内容をまとめたものです。
Apache APISIX
2019年、2人のソフトウェアエンジニアが小さなオフィスを借り、APIゲートウェイプロジェクトをゼロから立ち上げ、オープンソース化し、Apache Software Foundation に寄贈しました。そのプロジェクトである APISIX は、後に Apache のトップレベルプロジェクトとなり、活発なコミュニティと急速な成長を遂げ、最も人気のあるオープンソース API ゲートウェイプロジェクトとなりました。API7.ai を設立したこの2人のエンジニアは、現在、世界中の志を同じくする多くの人々と共に、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 リポジトリでは、多くのコミュニティユーザーが Issue、PR、Discussion での質問に回答し、問題を解決している様子を見ることができます。このようなポジティブなコミュニティ環境は、製品のアップグレードを加速し、エコシステムを豊かにするのに役立っています。
そのため、APISIX は世界中の企業クライアントを持つようになりました。例えば、Airwallex、Sina Weibo、European Factory Platform、NASA、Nayuki などが挙げられます。さらに、多くの企業が APISIX を使用し、貢献することで、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 の拡張方法を示しています。これは、APISIX からのリクエストを従来の Unix ドメインソケットを介して RPC 方式で受け取り、APISIX がこのトラフィックを処理するのを支援します。
Amazon 上での APISIX の探求
現在、APISIX は Amazon を基にした製品とパフォーマンスに関するいくつかの探求を行っています。
Amazon Marketplace
注: API7.ai は Zhiliu Technology としても知られています
Amazon Marketplace で APISIX を検索すると、上記の結果が表示されます。これは2021年からプラットフォームに掲載されています。上記のソフトウェアを使用することで、APISIX をすべての Amazon EC2 インスタンスに迅速にデプロイできます。また、このソフトウェアは無料で、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 ベースのインスタンスは、同等の EC2 インスタンスと比較して、同じ性能で最大60%少ないエネルギーを使用します。
AWS Graviton3 プロセッサのリリース直後、APISIX は AWS Graviton3 プロセッサに基づいて完全な回帰テストを行いました。これにより、ユーザーは Graviton3 EC2 インスタンス上で APISIX を自信を持って使用できます。互換性の問題はありません。また、AWS Graviton プロセッサファミリーに対してパフォーマンステストも行いました。以下の2つのシナリオを参照して、AWS Graviton2 と AWS Graviton3 プロセッサでパフォーマンステストを実施しました。
- 単一のアップストリーム: このシナリオでは単一のアップストリームのみを使用し(プラグインなし)、純粋なバックトゥソースプロキシモードでの APISIX のパフォーマンスを主にテストしました。
- 単一のアップストリーム + 複数のプラグイン: このシナリオでは単一のアップストリームと2つのプラグインを使用し、
limit-count
とprometheus
という2つのコアなパフォーマンス消費プラグインを有効にした場合の APISIX のパフォーマンスをテストしました。
上記の図から、APISIX は安定性やトラフィック処理能力に関して優れたパフォーマンスを発揮していることがわかります。AWS Graviton3 プロセッサは、API ゲートウェイのような IO 集約型の計算シナリオで最大76%の性能向上を提供し、最大38%の遅延を削減します。このデータは、AWS が提供する上記の公式データ(25%の性能向上)よりもさらに優れています。
全体的に、Grafana 3 上で APISIX を使用する場合、その性能は非常に優れています。AWS Graviton3 のような高性能プロセッサを基に、APISIX は実際のビジネスで効率を向上させ、リソースとコストを削減するのに役立ちます。
API7 Cloud が Amazon を活用して製品の急速な成長を実現する方法
クラウドネイティブの急速な成長に伴い、多くの企業がビジネスをクラウドに移行しています(通常、複数のパブリッククラウドプラットフォームを選択します)。そのため、クラウド API を効率的に管理およびデプロイする方法が緊急の課題となっています。
API7 Cloud は APISIX を基にした SaaS サービスで、ユーザーが任意のクラウドプラットフォームにデプロイされたすべての SaaS 製品を接続するのを支援します。API7 Cloud は2022年3月に最初にリリースされ、ユーザーに使いやすい API 管理機能、柔軟で豊富なオブザーバビリティメトリクス、および API セキュリティを提供し、API 接続をより効率的で安全かつ信頼性の高いものにします。
この製品は、API コール数に基づいてユーザーに課金し、現在、データプレーンのデプロイ方法として2つの方法をサポートしています。1つ目はセルフホストで、ユーザーが自身のインフラストラクチャを準備し、APISIX をそのインフラストラクチャにデプロイして、APISIX が API7 Cloud と通信できるようにします。もう1つの方法はセミマネージド、またはセミホストと呼ばれます。まず、ユーザーは 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)を選択しています。ユーザーのメタデータ(API のソースデータやユーザーアクションなど)を RDS に保存します。SaaS 製品として、ユーザーがどのように製品を使用しているかを知り、レイアウトや開発者のユーザーエクスペリエンスに問題がないかどうかを判断し、製品の将来の方向性を決定する必要があります。
API7 Cloud では Amazon ElasticCache コンポーネントも使用しており、マスタースレーブモードの Redis を選択しています。Redis は主にデータプレーンのインスタンスの状態を保存するために使用されます。これは、APISIX が API7 Cloud と接続する際に定期的にクラウドに送信される状態データです。このデータは機密性が高くなく、重要なデータでもないため、リレーショナルデータベースは選択しませんでした。また、このコンポーネントには別の重要な用途があります。それはメッセージキューとして使用できることです。Redis 5.0 では Stream データ構造が導入されたため、これを超軽量のメッセージキューとして使用し、ユーザーがデータをより迅速に作成、操作、破棄できるようにします。
結論
この記事では、APISIX 関連プロジェクトの観点からユーザーエクスペリエンスを共有しました。Amazon のサービスとエコシステムのサポートにより、APISIX はそのエコシステムをさらに探求しました。APISIX と Amazon がより多くの興味深い統合を行い、共により良いエコシステムを構築することを願っています。