Application Real-Time Monitoring Service (ARMS) の Python エージェントは、モンキーパッチを使用してアプリケーションのパフォーマンスを管理することにより、可観測性を向上させます。これは、ある程度の性能オーバーヘッドをもたらします。ただし、ARMS チームは、アプリケーションの安定性を損なうことなく、エージェントの性能オーバーヘッドを削減するための多くの手法を採用しています。このテストレポートでは、トラフィックの異なるシナリオをシミュレートして、Python 用 ARMS エージェントの性能オーバーヘッドをテストします。アプリケーションをアプリケーション監視に接続する前に、このレポートを参照して包括的な評価を行うことをお勧めします。
テストシナリオ
フローチャート
Performance Testing Service (PTS) は、FastAPI フレームワークで構築された Python アプリケーションにトラフィックを転送することにより、ストレステストを開始します。次に、Python アプリケーションは Python Instrumentor を介してトレースを収集し、メトリクスを生成し、このデータを ARMS サーバーに転送します。
テスト環境
ストレステストのソースは PTS によって提供されます。
Python アプリケーションは、Alibaba Cloud Container Service for Kubernetes (ACK) クラスタにデプロイされています。ノードのインスタンスタイプは ecs.c6.2xlarge で、ノードのオペレーティングシステムのバージョンは Alibaba Cloud Linux 3.2104 LTS 64 ビットです。
アプリケーションの各ポッドには、2 コア、2 GB のメモリ、および 2 つのレプリカがあります。
Python 用 ARMS エージェント V1.0.0 を使用します。
テスト手順
500、1,000、および 2,000 QPS で 3 つのストレステストを実行します。各ストレステストは 1 時間続きます。各ストレステストの前に、Python アプリケーションを 100 QPS で 3 分間ウォームアップします。テスト結果は、ベースライン パフォーマンス メトリックとして使用されます。
Python 用 ARMS エージェントをインストールします。サンプリングポリシーで固定サンプリングレート 10% を設定し、手順 1 のストレステストを繰り返して、Python アプリケーションの CPU オーバーヘッド、メモリオーバーヘッド、および応答時間の差を比較します。
データレポートを無効にし、プラグインを有効にして、手順 1 ~ 2 を繰り返します。
ベースライン パフォーマンス メトリック
項目 | CPU | メモリ | 応答時間 (単位: ミリ秒) |
500 QPS | 8% | 2% | 17.28 |
1,000 QPS | 15% | 2% | 36.3 |
2,000 QPS | 27.12% | 2% | 44.9 |
Python 用 ARMS エージェントのパフォーマンス メトリック
項目 | CPU | メモリ | 応答時間 (単位: ミリ秒) |
500 QPS | 11.9% | 4.8% | 17.31 |
1,000 QPS | 22.5% | 4.8% | 37.1 |
2,000 QPS | 36.67% | 4.8% | 46.6 |
Python 用 ARMS エージェントの性能オーバーヘッド
項目 | CPU | メモリ | 応答時間 (単位: ミリ秒) |
500 QPS | +3.9% | +2.8% | +0.03 |
1,000 QPS | +7.5% | +2.8% | +0.80 |
2,000 QPS | +9.55% | +2.8% | +1.67 |
結論
Python 用 ARMS エージェントは、CPU とメモリのオーバーヘッドを 10% 以下に増加させます。
Python 用 ARMS エージェントは、応答時間への影響はわずかです。