vivo 如何与 APISIX 集成

November 25, 2022

Case Study

概要

2021年5月以来、vivoApache APISIXをAPIゲートウェイとして導入しました。vivoでの1年以上の実践を経て、APISIXは多くの技術的およびビジネスの課題を解決し、大規模に使用されています。

APISIX使用前の課題

  • ビジネスシナリオとシステムメンテナンスの複雑な管理

    ビジネスの急速な成長により、さまざまなシナリオとそれらをサポートするシステムが存在し、vivoはそれらを統一して管理する方法を必要としていました。

  • データプレーンとコントロールプレーン間の相互作用

    vivoのような中規模から大規模な企業にとって、データプレーンで発生する小さなトラブルがコントロールプレーンに影響を与えることは予期せぬことでした。

  • 多次元リソースのサポートがない

    多様なプロジェクトにより、さまざまなドメイン名とURLが存在します。ビジネス部門は、異なるリソース次元に従って検索する必要があります。

  • 問題の影響が制御不能

    vivoのプロジェクトは複雑であり、遭遇する問題の影響が制御不能です。一部の複雑なプラグインの使用がこれをさらに悪化させます。

APISIXをNGINXに置き換えることで、vivoは最終的に以下のような一連の成果を達成しました。

APISIX使用後の成果

  • 高可用性

    APISIXがvivoで導入されて以来、重大な障害は発生しておらず、システムの可用性は**99.99%**を超えています。

  • 高性能

    重要なオンライントラフィックを引き受け、多数のサービスを提供しており、現在のオンライン転送トラフィックは100万QPS(クエリ/秒)に近づいています。

  • 豊富な機能

    APISIXの豊富な機能により、APISIXはほぼすべての一般的なNGINXプロキシシナリオをカバーできます。vivoのプロジェクトの約50%がNGINXからAPISIXクラスタに移行されました。

  • クラウドネイティブの構築と開発のサポート

    コンテナ化をサポートするK8sベアメタルは10,000の規模に達しています。プロジェクトの約40%がベアメタルと仮想マシンからK8sコンテナプラットフォームに移行され、vivoのコンテナ化の進展をサポートし、促進しています。

APISIXに基づくvivoのシステム設計

次に、APISIXを採用した後のvivoのシステム設計を見てみましょう。

APISIX上のカスタマイズされたアーキテクチャ表示

vivoのAPISIXを使用したAPIゲートウェイアーキテクチャ

上記の図から、vivoは以下を達成したことがわかります。

  • レイヤー4レイヤー7のトラフィックゲートウェイの構築を完了し、APISIXによってサポートされています。
  • ベアメタル、仮想マシン、コンテナのトラフィックアクセスと混合デプロイを実現しました。
  • APISIXクラスタ管理を実装しました。
  • 内部のDevOpsプラットフォームとビジネスデプロイサービスを接続し、トラフィックを迅速かつ自動的にアクセスできるようにしました。
  • 監視構築を改善しました。

構成管理と起動の改善

ビジネス部門の実際のニーズをよりよく満たすために、vivoはAPISIXに一連の適応を行いました。以下は、コントロールプレーンの変更、クラスタ分離管理、データ転送などの調整の一部です。

コントロールプレーンの変更

全体のプロセスは以下の通りです。

A6変更プラットフォームでデータが構成されると、情報はRPC通知を通じてManagerAPIに配信されます。ManagerAPIは、vivoがオープンソースのAPISIX Dashboardに基づいて構築したものです。

その後、トラフィックはapisix-agentに送信されます。APISIXは特権プロセスを通じて定期的にapisix-agentをポーリングし、変更タスクをバッチで取得します。次に、特権プロセスは共有キューを通じてworkerに通知し、メモリ内の変更を実現します。

その間、APISIXはタスクの結果をapisix-agentに通知し、それをManagerAPIに配信します。さらに、A6変更プラットフォームはManagerAPIをポーリングしてタスク結果を取得できます。

vivoの管理と公開モード

etcdはAPISIXのハイライトであり、コントロールプレーンとデータプレーンの独立した操作を可能にします。そのアーキテクチャの独自性を考慮して、vivoは上記のプロセスでetcdを廃棄しました。以下はその理由です。

vivoのプロジェクトの多様性により、さまざまなドメイン名とURLが存在します。さらに、ビジネス部門は異なる次元でクエリを行う必要があります。APISIXがetcdだけでなく、さまざまなデータベースにも適応できるため、vivoはMongoDBなどのデータベースを簡単に利用してAPISIXと連携することができました。

さらに、vivoはApache APISIXとの互換性を確保するために以下の貢献を行いました。

  • エージェントコンポーネントの開発

    2021年5月以来、vivoはApache APISIXを導入しました。技術的背景と文脈を考慮して、vivoはOpenRestyとLuaの経験がないため、APISIXを採用できないのではないかと不安を感じていました。さらに、ログ収集や監視処理などの非転送タスクが多く、データプレーンの管理の複雑さを増す可能性がありました。その結果、vivoは開発の複雑さを軽減するためにエージェントコンポーネントを開発しました。

  • ディスクへのデータ書き込み

    システムを調整可能にし、データプレーンが独立して動作できるようにするため、vivoは設定ファイルをディスクに書き込みました。APISIXが起動すると、設定センターから完全にプルすることをサポートし、ローカルディスクのファイルディレクトリから直接設定リソースを取得することもサポートします。これにより、データの独立性とシステムの堅牢性が大幅に向上します。さらに、ディスクに配置された設定されたルートとアップストリーム情報を直感的に理解できるため、トラブルシューティングに役立ちます。

  • 変更タスク結果のコールバック

    大規模な企業であるvivoは、ルーターやアップストリームなどのリソースへの変更が確実に有効かつ成功することを確認し、これらの変更が失敗した場合でもシステムがエラーを報告できるようにする必要があります。このACK(確認コード)のロジックにより、マシン上のNGINXワーカーがコールバックできるようになります。コールバックタスクが成功すると、APISIX上のすべてのワーカーがリソース変更を関連するメモリに更新します。

クラスタ分離管理

クラスタ分割管理

APISIXのオープンソースバージョンは、etcdを提供しています。しかし、企業のプロジェクトは複雑であり、遭遇する問題は制御不能です。さらに、複雑なプラグインを使用することは避けられず、システムのパフォーマンスに影響を与えます。

そのため、クラスタ分離によって管理され、APISIX上のクラスタ構成の分離を実現し、以下が可能です。

  • 障害ドメインを制御し、他のプロジェクトに影響を与えずにプロジェクトの複雑さを効果的にサポートします。
  • コンテナノードが頻繁に変更される場合に、APISIXの非転送層による負荷を効果的に軽減します。
  • ヘルスチェックによる負荷の影響を軽減します。

HTTPSによるQPSの増加

中国の工業情報化省の関連要件に従い、外部ネットワークトラフィックはHTTPSプロトコルを経由する必要があります。TLSベースのHTTP暗号化プロトコルであるHTTPSは、暗号化と復号化のプロセスでCPUに大きな負荷をかけます。

ルーティングやその他の設定が同じ場合、HTTPSが引き受けられるトラフィックはHTTPの約1/8 - 1/10です。

Intel® QAT(QuickAssist Technology)アクセラレータカードにパッチを適用した後、vivoは復号化処理をQATアクセラレータカードに委託し、CPUを解放することで、単一マシンでのHTTPSによるQPSを増加させました。以下の図からわかるように、単一マシンのHTTPS負荷能力は約2倍になりました

vivoのトラフィック負荷能力の改善を示すデータ

vivoがビジネスとAPISIXをどのように組み合わせているか

コンテナ化開発のサポート

コンテナ化開発をサポートするために、vivoはK8s ingressコントローラーを独自に開発しました。以下はその機能の一部です。

  1. vivoの変更された非同期プッシュ構成変更メカニズムに適応する

  2. 複数のK8sクラスタイベント処理通知をAPISIXに実施する

  3. 以下のような複雑なプロジェクトシナリオに対応する:

  • 1つのサーバーに複数のポートがある場合

  • DubboやgRPCなどの他のRPCフレームワークサーバーがK8sに接続されている場合、プロジェクトの構成特性に応じてAPISIXや他のフレームワークにポート情報を通知するための統一された処理ロジックが必要です。

  1. 企業内部のDevOpsやその他の自動化シナリオの特定のニーズに適応し、迅速なデプロイを容易にし、トラフィックを有効にします。

NGINXからAPISIXへのプロジェクト移行の支援

vivoのプロジェクトは既存のNGINXクラスタにデプロイされており、長期間安定して稼働しています。しかし、非ビジネスワークロードとプロジェクトの不安定性をもたらします。そのため、移行を行うことは困難です。では、どのようにしてプロジェクトをAPISIXに移行するのでしょうか?

  • まず、協力部門のプロジェクトを見つけ、ビジネス部門に良いサービスを提供してベンチマークを設定し、技術的なガイダンスとトレーニングを提供します。

  • ビジネスアクセスとビジネス部門の多次元管理を容易にする使いやすいコントロールプレーンシステムを構築します。

  • NGINX構成からAPISIX構成への自動変換機能と基本構成を提供します。

APISIXのアップグレードとオープンソースバージョンのサポート

APISIX 2.4バージョンに基づいて、vivoはいくつかの調整を行い、新しいバージョンをリリースしました。今年の第2四半期には、さらに新しいバージョンにアップグレードされました。

一方で、APISIXのモジュールアーキテクチャのおかげで、vivoの変更されたLuaコードをAPISIXの上位バージョンのブランチに統合するのは比較的簡単です。一方で、vivoはOpenRestyセクションもアップグレードしており、約1年に1回のバージョンアップを行っています。vivoは多くのPATCHとQATなどの有用な機能を利用しているため、このコンポーネントのアップグレードは困難で労力がかかります。

NGINXコミュニティの無料バージョンの機能は更新が遅く、活発ではありません。vivoはAPISIXと共同で構築するかどうかを検討しています。関連するシステムテストに必要な人材を削減するために、vivoはシステム統合テストのための汎用テスト自動化フレームワークであるRobot Frameworkを採用しました。彼らは、ユニットテストのカバレッジとTDD(テスト駆動開発)の開発モデルのための関連コンポーネントを推進しています。

vivoの将来の計画

来年、vivoはAPISIXをトラフィックゲートウェイからAPIゲートウェイに拡張し、レート制限認証、サーキットブレーカーなどの利点を活用する予定です。APISIXとDPDK-NGINXを組み合わせることを検討しており、技術者を育成し、コミュニティの設立に参加する予定です。さらに、基本的なスキルを強化し、トラフィックとサービスガバナンスの基盤を築く予定です。

Apache APISIXについてもっと学びたい方は、https://api7.ai/contactでお問い合わせください。

Tags: