Apache APISIX 3.0: オープンソースAPIゲートウェイの11のハイライト
オープンソースのAPIゲートウェイであるApache APISIXのバージョン3.0がリリースされます!今回は11の重要な機能を選んで簡単にご紹介します。
APIゲートウェイは長い間、重要なコンポーネントとして機能してきました。ビジネスレベルでのレート制限、認証(例:Keycloakを使用してAPIを保護する)、オブザーバビリティなど、さまざまな機能を提供することを使命としてきました。
APIゲートウェイ Apache APISIX
Apache APISIXは、クラウドネイティブ環境やマイクロサービスにおける新しい問題を企業が解決するために生まれました。例えば、完全に動的な機能と一度の変更でビジネストラフィックの自動スケーリングを提供し、クラスタ管理をより簡単に実現します。
そのため、APISIXのアーキテクチャ設計では、データプレーンとコントロールプレーンを分離し、完全な動的性とクラスタ管理を実現しています。これは主にetcdコンポーネントによって達成されます。
APISIXは、ルーティング関連およびプラグイン関連の設定をetcdに保存・管理します。上図のように、Admin API(コントロールプレーン)からの設定はetcdに保存され、左側のデータプレーンは主にetcdの変更を監視します。データプレーンは、設定ファイルを変更することなく、迅速に変更を観察できます。
しかし、これらの問題を解決するだけでは十分ではありません。APIゲートウェイは、アップストリームとダウンストリームの両方からのリクエストを受けるミドルウェアとして、企業アーキテクチャにおいてトラフィックの入口およびサービス層間の接続として重要な位置を占めています。APIゲートウェイの役割は、ユーザーのビジネスレベルからのリクエストのみを受けるデータベースとは異なります。
ビジネスレベルの要件に加えて、APIゲートウェイにはカスタマイズや統合の要件もあります。そのため、APISIXを使用する際に開発者がカスタム開発をより簡単に行えるようにすることは、APISIXが解決するもう一つの重要な課題であり、開発者がコーディングする際のハードルを下げます。
APISIXでは、プラグインは主にLuaを使用して開発され、LuaJIT(LuaのJust-In-Timeコンパイラ)を使用して、コンパイルされたコードのパフォーマンスが十分であることを保証しています。
Luaに慣れていない場合、Plugin Runnerを使用して、慣れ親しんだプログラミング言語でAPISIXプラグインを開発できます。また、WasmをAPISIXに組み込み、Wasmを使用してWasmバイトコードをコンパイルし、APISIXで実行できます。その結果、ユーザーはLua、Go、Python、Wasmなどを使用してAPISIX上でカスタムプラグインを作成できます。
APISIXのアーキテクチャとパフォーマンスの優位性により、APISIXのグローバルユーザー数は、発足から3年間で予想をはるかに超える成長を遂げました。例えば、WPS、Sina Weibo、iQiyiなどの大手テクノロジー企業は、1日に数百億のAPIリクエストを処理するエンタープライズレベルのユーザーです。さらに、NASAやEuropean Factory Platformなどの科学研究機関もAPISIXを使用しています。
APISIX 3.0の11の新機能
APISIXは2022年初頭に新しい3.0ロードマップを提案しました。バージョン3.0では、そのイテレーションと更新が使いやすさとエコシステムに焦点を当てています。
APISIX 3.0は2022年10月下旬に正式にリリースされました。それでは、エキサイティングな新機能を簡単にご紹介します!
1. ARM64の完全サポート
ARM64は、クラウドメーカーにとって非常に主流のサーバーアーキテクチャ選択肢となっています。AWS Graviton、GCP Tau T2A、Huawei Kunpengなどの製品から、さまざまなクラウドメーカーがArmアーキテクチャに基づくサーバーをリリースし始めていることがわかります。以下のグラフは、人気のあるArmベースのサーバーでのAPISIXのストレステスト性能を示しています:
現在のデータによると、Armベースのサーバーの性能はx86の性能をわずかに上回っています。時代の技術トレンドに合わせて、APISIXもARM64で包括的なCI回帰テストを行い、ユーザーがArmアーキテクチャでAPISIXを実行する際に、さまざまな機能をスムーズに実行できることを保証しています。
2. AIプレーン
Apache APISIXは3.0バージョンでAIプレーンを追加し、性能を30%向上させました(ストレステスト下のQPSで測定)。AIプレーンは、ユーザーのルートやプラグインの設定、ログメトリクスなどの包括的なデータを活用して、データプレーンの設定を動的に最適化します。例えば、以下の3つのシナリオはAIプレーンによって自動的に最適化されます:
- マッチング要件が単純な場合(例:uriまたはhostのみを含む)、キャッシュを有効にしてルートマッチングプロセスを高速化
- プラグインがない場合、アップストリームに関連するコードのみを実行
- アップストリームノードが1つしかなく、他の設定オプションが有効でない場合、アップストリームを軽量な方法で設定
AIプレーンは、トラフィック処理に新しい可能性をもたらします。将来的には、アップストリームサービスの自動ウォームアップやセキュリティ脅威の検出などもAIプレーンを通じて処理できるようになります。
3. gRPCクライアントの追加
バージョン3.0では、Apache APISIXは新しいcore.grpc
モジュールをサポートします。ただし、NGINXやOpenRestyに慣れている方は、それらがgRPCのサポートがかなり限られていることをご存知でしょう。逆プロキシやロードバランシングなどの基本的な機能しか提供していません。
APISIXは現在の2.xバージョンで既にgRPCとHTTPプロトコル間のトランスコードを実装しています。バージョン3.0では、Apache APISIXは新しいgRPCクライアントを追加し、開発者が追加のコンポーネントを導入したり、サービスプロバイダーに異なるHTTPインターフェースを使用させたりすることなく、直接サードパーティのgRPCサービスを呼び出せるようにします。これにより、プロセスが大幅に簡素化されます。
4. Admin APIの再設計
現在APISIXを使用していると、APISIXのレスポンスボディに多くの無意味なデータが混在していることに気付くかもしれません。例えば、一部のetcdの戻り値がクライアントに直接渡され、何の調整もされていない場合があります。また、レスポンスボディ全体のアーキテクチャ設計も理想的ではなく、多くの冗長なフィールドが存在します。
APISIX 3.0バージョンでは、レスポンスボディの構造が改善されました。さらに、新しい設計により、全体的なリクエスト形式とレスポンスボディがよりRESTfulになり、ユーザーが最新バージョンのAdmin APIをより簡単に使用できるようになります。もちろん、このプロセスでは、パラメータを通じてどのバージョンのAdmin APIを使用するかを設定することもでき、互換性のないバージョンにアップグレードすることを恐れる必要がなくなります。
5. データプレーン(DP)とコントロールプレーン(CP)の分離
APISIXは過去2年間でいくつかのセキュリティ関連の脆弱性に悩まされてきました。ほとんどの脆弱性の根本原因は、デフォルトのデプロイメントモードでDPとCPが一緒にデプロイされていることです。そのため、データプレーンにセキュリティ脆弱性が存在すると、攻撃者はDPを通じて直接CPに侵入し、他のすべてのDPに影響を与える可能性があります。
そのため、バージョン3.0では、デプロイメントモードの設定がサポートされ、デフォルトのデプロイメントモードはtraditional
(DPとCPが一緒にデプロイされる)です。もちろん、新しいデプロイメントモードでは、属性をdata_planeまたはcontrol_planeに設定して分離することを推奨しています。
分離されると、上記のセキュリティリスクが解決されるだけでなく、DPとCPの機能イテレーションも互いに影響を与えることなく管理しやすくなります。
6. サービスディスカバリサポートの改善
現在のバージョンでは、APISIXはApache ZooKeeper、Consul、Nacosなど、多くのサービスディスカバリコンポーネントとの統合をサポートしています。しかし、現時点ではこれらの統合はすべてデータプレーンで行われています。DPに多くのノードがあると、以下のサービスディスカバリコンポーネントに大きな負荷がかかります。同時に、ユーザーの実際の生産環境では、Consul KVやDNS統合のようなシンプルな統合や、ヘルスチェックなどの完全な機能統合を望んでいます。
そのため、APISIX 3.0では、サブプロジェクトAPISIX-SEEDを追加して、コントロールプレーンレベルでのサービスディスカバリサポートを実現し、サービスディスカバリコンポーネントへの負荷を軽減します。
7. xRPCフレームワークの追加
現在のバージョンのAPISIXではTCPプロキシがサポートされていますが、純粋なTCPプロトコルのプロキシでは不十分な場合があります。ユーザーは特定のアプリケーションプロトコル(例:Redisプロキシ、Kafkaプロキシなど)のプロキシを必要としています。なぜなら、プロトコルがエンコードおよびデコードされた後にのみ、いくつかの機能を実装できるからです。
そのため、バージョン3.0では、APISIXはxRPCと呼ばれるトランスポート層プロトコル拡張フレームワークを実装し、開発者が特定のアプリケーションプロトコルをカスタマイズできるようにします。xRPCに基づいて、開発者はLuaコードを使用してリクエストとレスポンスをエンコードおよびデコードし、プロトコルの内容を理解した上で、フォールトインジェクション、ログレポート、動的ルーティングを実現できます。
xRPCフレームワークに基づいて、APISIXはいくつかの主要なアプリケーションプロトコルのプロキシ実装を提供できます。同時に、ユーザーはこのフレームワークに基づいて独自のプライベートなTCPベースのアプリケーションプロトコルをサポートすることもでき、HTTPプロトコルプロキシと同様の正確な粒度と高度なアプリケーション層制御を実現できます。さらに、異なるプロトコルの上で、いくつかの共通要素を抽象化して関連するプラグイン機能を実装し、他のプロトコルがこれらの機能を共有できるようにします。
8. トランスポート層プロトコルでのオブザーバビリティサポートの強化
APISIXは常にオブザーバビリティサポートに大きく投資しており、Zipkin、Apache SkyWalking、Datadogなど、ほぼすべてのオブザーバビリティコンポーネントをサポートしています。さまざまなロギングコンポーネントもサポートされていますが、ほとんどはアプリケーション層で行われています。
Apache APISIXは3.0でトランスポート層のオブザーバビリティサポートをさらに強化します。例えば、Prometheusやさまざまなログのサポートが追加され、ユーザーがアプリケーション層トラフィックの問題を簡単に観察できるようになり、トランスポート層トラフィックの動作状況を確認できるようになります。
9. OpenAPI仕様の統合
APIは、設計からコーディング、テスト、デプロイまでの開発ライフサイクル全体に関わる要素です。APISIX 3.0では、Apache APISIXは標準のOpenAPI 3.0仕様をサポートします。
そのため、API設計およびテストソフトウェアでAPIを管理している場合、APISIXのデータをエクスポートおよびインポートすることで、簡単に管理およびメンテナンスできます。同時に、APISIX内のさまざまなAPIもOpenAPI 3.0仕様を通じて他のシステムにインポートして使用できます。
さらに、APISIX 3.0はPostman関連のカスタムフォーマット(Postman Collection Format v2)もサポートしており、2つの間でのデータ転送を可能にし、統合を容易にします。
10. ゲートウェイAPIとサービスメッシュの完全サポート
APISIX Ingress ControllerでのゲートウェイAPIのサポートが始まり、最新の1.5リリースではほぼすべてのゲートウェイAPI設定がサポートされています。
この場合、APISIX IngressはゲートウェイAPIを使用して設定できるため、異なるデータプレーン間で切り替えることができます。今年末までに、APISIX IngressはゲートウェイAPIの完全なサポートと追加のトランスポートおよびアプリケーション層機能を提供します。
ほとんどのサービスメッシュソリューションとは異なり、APISIXのサービスメッシュソリューションはデータプレーンにおいて優位性があります(APISIX自体の高性能さによる)。そのため、コントロールプレーンの選択においては、コミュニティ内のいくつかの主流ソリューションと互換性があることを望んでいます。最後に、xDSプロトコルを使用してIstioと統合し、取得した設定をAPISIXのxDS設定センターに書き込むことで、APISIXが特定のルーティングルールを生成し、対応するルーティングリクエストを完了します。
このソリューションは、サービスメッシュ全体を軽量化するだけでなく、APISIXの高い拡張性により、カスタム開発と移行をより便利にします。
11. より多くのエコシステムとの統合
上記のOpenAPI標準に加えて、バージョン3.0ではOpenFunction、ClickHouse、Elasticsearch、SAML、CASなど、多くのエコシステムプラグインが追加され、認証、セキュリティ、オブザーバビリティのサポートがさらに強化されます。
その中でも興味深いプラグインの1つがworkflowで、トラフィックスケジューリングに使用されます:トラフィック制御レベルでいくつかの細かい処理を行うことができます。
curl http://127.0.0.1:9180/apisix/admin/routes/1 \
-H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' -X PUT -d '
{
"uri":"/hello/*",
"plugins":{
"workflow":{
"rules":[
{
"case": [
["uri", "==", "/hello/rejected"]
],
"actions": [
[
"return",
{"code": 403}
]
]
},
{
"case": [
["uri", "==", "/hello/v2/appid"]
],
"actions": [
[
"limit-count",
{
"count": 2,
"time_window": 60,
"rejected_code": 429
}
]
]
}
]
}
},
"upstream": {
"type": "roundrobin",
"nodes": {
"127.0.0.1:1980": 1
}
}
}'
例えば、条件Aが真の場合に特定のアクションを実行し、条件Bが真の場合に別のアクションを実行するなど、さまざまなビジネストラフィックをより簡単にスケジュールできます。
Apache APISIX 3.0を始めよう
APISIX 3.0はGitHubリリースページとダウンロードページでチェックできます!
APISIXは最初から3.0バージョンまで大きく成長しました。オープンソースプロジェクトは、性能や機能だけで判断されるべきではありません。ユーザー、開発者、企業の視点から、現在の課題を迅速かつ効果的に解決するために製品を使用できるかどうかを考慮する必要があります。
この記事で紹介したハイライトと新機能はすべてオープンソースコミュニティを通じて作成されました。Apache APISIXは、さまざまな開発者や企業ユーザーからのフィードバックを受けて、より活気のあるものになっています。この雰囲気に参加したい場合は、こちらからコミュニティをチェックしてください!