API Gateway Apache APISIX と Kong の選択比較
API7.ai
January 18, 2020
Apache APISIXとKongは、どちらもオープンソースのマイクロサービスAPIゲートウェイです。では、これらをどのように比較し、選択すればよいのでしょうか?
これらのプロジェクトは、完全なドキュメントとテストでカバーされており、多くのプロダクションユーザーが使用しているため、安定性や持続可能な開発について心配する必要はありません。この記事では、最も直接的で検証可能な機能とパフォーマンスに焦点を当て、異なる視点から比較を行います。
機能 | Apache APISIX | KONG |
---|---|---|
ダイナミックアップストリーム | はい | はい |
ダイナミックルーター | はい | はい |
ヘルスチェック | はい | はい |
ダイナミックSSL | はい | はい |
L4およびL7プロキシ | はい | はい |
Opentracing | はい | はい |
カスタムプラグイン | はい | はい |
REST API | はい | はい |
CLI | はい | はい |
より詳細な比較は以下の通りです。
機能 | Apache APISIX | Kong |
---|---|---|
所属 | Apache Software Foundation | Kong Inc. |
技術アーキテクチャ | Nginx + etcd | Nginx + postgres |
コミュニケーションチャネル | メーリングリスト、Wechatグループ、QQグループ、GitHub、ミートアップ | GitHub、freenode、フォーラム |
シングルコアCPU、QPS(limit-countおよびprometheusプラグイン有効時) | 18000 | 1700 |
レイテンシー | 0.2 ms | 2 ms |
Dubbo | はい | いいえ |
設定ロールバック | はい | いいえ |
TTL付きルート | はい | いいえ |
プラグインホットローディング | はい | いいえ |
カスタムLBおよびルート | はい | いいえ |
REST API <--> gRPCトランスコーディング | はい | いいえ |
Tengine | はい | いいえ |
MQTT | はい | いいえ |
設定有効時間 | イベント駆動、< 1ms | ポーリング、5秒 |
ダッシュボード | はい | いいえ |
IdP | はい | いいえ |
設定センターHA | はい | いいえ |
指定時間ウィンドウでの速度制限 | はい | いいえ |
Nginx変数をルーティング条件としてサポート | はい | いいえ |
パフォーマンス
limit-countおよびprometheusプラグインを有効にした後、Apache APISIXのパフォーマンスはKongの10倍です。
詳細な手順はこちら:https://gist.github.com/membphis/137db97a4bf64d3653aa42f3e016bd01、興味のある開発者は画像を参照して検証できます。
なぜApache APISIXが優れているのか?
ここでは、機能とパフォーマンスの違いの背後にある理由について説明します:
-
Apache APISIXのルーティングの複雑さはO(k)で、uriの長さのみに関係し、ルートの数とは無関係です。Kongのルーティングの時間複雑さはO(n)で、ルートの数に比例して増加します。
-
Apache APISIXのIPマッチングの時間複雑さはO(1)で、大量のIP判断を行ってもCPUリソースを使い果たすことはありません。
-
Apache APISIXのルートマッチングは、Nginxのすべての変数を条件として受け入れ、カスタム関数をサポートします。他のゲートウェイにはいくつかの組み込み条件があります。
-
Apache APISIXはetcdを設定センターとして使用します。単一障害点がなく、任意のマシンがダウンしてもゲートウェイクラスターは正常に動作します。リレーショナルデータベースに基づく他のゲートウェイは単一障害点の問題を抱えています。
-
Apache APISIXの設定は、etcd watchを使用して1ミリ秒以内にすべてのゲートウェイノードに到達します。他のゲートウェイは定期的にデータベースをポーリングし、最新の設定を取得するのに通常5秒かかります。
-
Apache APISIXのプラグインは、高負荷下でもミリ秒レベルのレイテンシーを維持するように慎重に調整されています。
-
Apache APISIXの独自のプラグイン配置とローコード機能により、二次開発のハードルを大幅に下げることができます。