Alternative to NGINX That Makes Your Life Easier: Apache APISIX
September 15, 2022
APIはデジタル世界の重要な部分であり、APIゲートウェイはそのセキュリティと安定性を保護するという重責を担っています。多くのソフトウェアエンジニアやチームは以前NGINXを使用していましたが、NGINXのボトルネックや制限に悩まされていました。より良い代替手段はあるのでしょうか?
NGINXの優れた代替手段はApache APISIXです。では、Apache APISIXとは何でしょうか?
Apache APISIXとは
Apache APISIXは、高性能で動的、全トラフィック対応のAPIゲートウェイです。Apache APISIXの4つの注目すべき特徴は以下の通りです:
- Apacheの特性: APISIXはオープンソースであり、Apache Software Foundationのトップレベルプロジェクトでもあります。ElasticSearchやMongoDBのように、途中でオープンソースライセンスを変更することはできません。APISIXはApache Software Foundation(ASF)に属しているため、もはや企業や個人のプロジェクトではありません。
- 高性能: APISIXはOpenResty(NGINXのディストリビューション)に基づいて開発されているため、APISIXもNGINX自体の力を継承しています。
- 動的: NGINXが堅牢な基盤アーキテクチャを提供する一方で、OpenRestyはLuaを使用してNGINXの動作を制御することを可能にし、NGINXにさらなる可能性を追加します。そしてAPISIXは、その柔軟性と他のシステムとの強力な連携により、完全に動的なAPIゲートウェイとなります。
- リアルタイム: APISIXは設定をetcdに保存します。この利点は、etcd自体が分散型KVデータベースであり、Kubernetesも設定を保存するために使用しているため、設定の変更をetcdのRESTful APIを通じてリアルタイムで監視および取得できることです。NGINXは設定を静的ファイルに保存し、設定が更新されるとNGINXのリロードに時間がかかります。
Apache APISIX vs NGINX
APISIXがNGINXに基づいて開発されていると述べましたが、APISIXとNGINXの違いは何でしょうか?
まず注意すべきは、APISIXとNGINXの比較は単純な比較ではありません。結局のところ、NGINXは軽量なプロキシであり、APISIXは製品の機能をより成熟させることに焦点を当てています。また、APISIXはNGINXに基づいて再開発されているため、より多くの機能を備えています。
もしあなたがNGINXをゲートウェイとして使用している場合、APISIXの以下の2つの利点がより深く感じられるでしょう。
より柔軟な設定
NGINXの設定ファイルと比較して、APISIXはさまざまな設定方法を提供します。例えば:
- HTTP APIを使用してAPISIXを設定できます。設定はetcdに書き込まれ、その後etcdによって各ノードに同期されます。
- APISIX Dashboardを使用して設定できます。APISIX Dashboardでは、グラフィカルな視覚化により、より明確に設定を行うことができます。
- etcdのようなステートフルなストレージ方法を使用したくない場合、K8sのような静的ファイルを使用できます。APISIXはローカルのYAMLファイルから個別の設定を取得することもサポートしています。
- K8sにAPISIXをデプロイする場合、APISIX Ingress Controllerを使用してCRDによって発行された設定を取得できます。
- IstioのデータプレーンとしてAPISIXをデプロイする場合、xDSを識別することでIstioによって発行された設定を取得することもできます。
より優れた拡張性
NGINXもNJSを導入して動的制御を実現していますが、APISIXの拡張性ほど理想的ではありません。
APISIXはLuaJITで拡張できるため、Go、Java、Python、Node.jsなどの言語で書かれた外部プラグインを実行するためのout-process Plugin Runnerもサポートしています。
さらに、APISIX 2.11以降、Wasmプラグインを実行できます。この機能により、RustやTinyGoなどの言語でAPISIXのプラグインを書き、それをWasmコードにコンパイルしてAPISIX上で実行することができます。
APISIXでWasmプラグインとLuaプラグインを設定する場合、機能的な違いはほとんどありません。その結果、Luaのネイティブ実装に匹敵するパフォーマンスを達成し、高級言語の開発効率を実現できます。
Apache APISIXの主な利点
上記の利点は非常に良いですが、APISIXの最も重要な利点ではありません。APISIXの最大の利点は、多くのプロジェクトと絡み合ったエコシステムネットワークです。
- 認証レベルでは、APISIXはOIDCやLDAPなどのプロトコルをサポートしています。同時に、Keycloak、Casdoor、Casbin、OPAなどの複数の認証サービスやフレームワークと統合できます。
- 可観測性レベルでは、APISIXはClickhouse、Datadog、Splunk、Apache Kafka、Apache RocketMQなどの複数のログツールとの接続をサポートしています。また、Prometheusを通じて豊富なメトリクスを公開し、OpenTracing、OpenTelemetry、Apache Skywalkingなどの複数のトレーシングシステムをサポートします。
- サービスディスカバリレベルでは、APISIXはNacos、Eureka、Consul、Zookeeperからアップストリームアドレスを取得するだけでなく、DNS(A/AAAAレコードまたはSRVレコード)からも取得できます。さらに、APISIXをK8s Ingress Controllerとして使用する場合、Ingressリソースから対応する設定を取得できます(APISIXはK8s Gateway API仕様をサポートしています)。
現在のAPISIXはまだ急速な発展段階にあります。時間の経過とともに、APISIXはますます多くのプロジェクトと統合され、協力の可能性を広げ、既存システムとの統合作業を大幅に簡素化します。
もし接続したいサービスがAPISIXのプラグインエコシステムにない場合、既存のプラグインをカスタム開発に直接使用し、ビジネスに特化した機能を実現できます。
どのAPIゲートウェイを選ぶべきか
もちろん、適切なゲートウェイを選ぶためには、実際のビジネス状況も考慮する必要があります。
もしすでにビジネスアプリケーションの前にNGINXをプロキシとして使用しており、いくつかのロジックをNGINXに配置している場合、APISIXが最良の選択肢となるでしょう。APISIXはNGINXに基づいて開発されているため、必要に応じてNGINXからAPISIXにスムーズに移行できます。
もしゲートウェイを使用したことがなく、チームの状況に基づいて適切なオープンソースAPIゲートウェイプロジェクトを選びたい場合、以下の点に注目する必要があります:
- 更新頻度が十分かどうか。各プロジェクトの活動状況を観察することで、よくメンテナンスされているAPIゲートウェイプロジェクトを選ぶことができます。なぜなら、誰も衰退するプロジェクトを選びたくないからです。Contributor Over Timeグラフを通じてプロジェクトの活動状況を把握できます。
- プロジェクトの機能が十分かどうか。選んだゲートウェイがチームの現在および将来のビジネスニーズを満たせず、プロジェクトが開発作業(設定管理、内部サービスとの連携など)を増やす場合、慎重に検討してください。
- プロジェクトの複雑な技術指標が良好かどうか。例えば、QPS、レイテンシ、メモリ使用量がビジネス要件を満たしているかどうか。一般的に、ゲートウェイの根本的な最適化は難しいため、これらの複雑な指標を満たせない場合、後でどのようにイテレーションしても突破が難しいでしょう。
- チームにAPIゲートウェイを学び、維持するための十分な人材と時間があるかどうか。結局のところ、技術的な意思決定は純粋に技術的な活動ではありません。
もちろん、他のAPIゲートウェイを使用しているが、現在のビジネスシナリオを満たせない場合、Apache APISIXを選択肢の一つとして検討できます。
NginxからApache APISIXへの移行方法
ここまで読んで、既存のNGINXをAPISIXに置き換えることを決めたあなたは賢明です!
しかし、移行する前に、使用しているまたは使用予定の製品機能を確認する必要があります。通常、これらの機能は以下の3つのカテゴリに分けられます:
- 直接置換可能。APISIXはユーザーがNGINX設定を直接使用することを許可しているため、NGINXのグローバル設定のほとんどはAPISIXで再利用できます。アプリケーションレベルの設定については、APISIX Routesで置き換えることができます。
- 調整が必要なもの。例えば、メトリクスの変更など。
- 追加開発が必要なもの
必要な開発を完了した後、実際のビジネスシナリオでNGINXをAPISIXに徐々に置き換えます。スムーズな移行プロセス中に、以下の3つの質問を考慮する必要があります:
- クライアントリクエストをAPISIXにプロキシする方法は?
- 同等の設定をAPISIXとNGINXにどのように配置するか?
- APISIXとNGINXの両方が公開するメトリクスをどのように処理するか?
上記の3つの質問と実際のアプリケーション環境を考慮する必要があります。最後に、バグの「ロールバック計画」を事前に準備することを忘れないでください。
この記事を通じて、Apache APISIXの力を理解したと思います。Apache APISIXをあなたのAPIゲートウェイとして試してみましょう!