API7 Enterprise 3.2.9 の新機能:アップグレードされた Health Check 設定
April 16, 2024
新ヘルスチェック機能の紹介
API7 Enterpriseのバージョン3.2.9では、ヘルスチェックの設定インタラクション体験が全面的に最適化されました。
-
以前は散在していた設定項目が、プローブ設定や正常/異常ノードの判定基準など、論理的に集約され、より構造化されました。
-
一部の抽象的な設定項目名が、より直感的で意味のある表現に変換され、ユーザーは穴埋め形式で関連パラメータを直接入力できるようになり、設定の実践的な効果をより明確に理解できるようになりました。
-
アップストリームノードとヘルスチェックプロセスの設定中に、より多くのプロンプトメッセージが追加され、ユーザーがアップストリームノードとヘルスチェックの内在的な関連性をよりよく理解し、設定タスクをより簡単に完了できるよう支援します。
ヘルスチェックの基本概念
API7 Enterpriseでは、アップストリームノードの優先度設定は、ロードバランシングとヘルスチェックのメカニズムと密接に関連しています。ユーザーがゲートウェイに異なる優先度を持つ複数のアップストリームノードを設定すると、ゲートウェイはロードバランシング中に最も優先度の高いノードを優先します。つまり、最も優先度の高いノードが正常である限り、ゲートウェイはこれらのノードにトラフィックをルーティングし続けます。
最も優先度の高いノードがすべてヘルスチェックの失敗により利用不能と判断された場合にのみ、ゲートウェイは自動的に降格し、トラフィックを次に優先度の高いアップストリームノードにリダイレクトします。この設計により、トラフィックの効率的な利用とシステムの高可用性が確保されます。
なお、サービスに複数の優先度レベルのアップストリームノードが設定されているが、ヘルスチェック機能が無効になっている場合、すべてのクライアントリクエストは、実際のヘルスステータスに関係なく、常に最も優先度の高いノードにルーティングされます。
ヘルスチェックの設定方法
プローブ設定
プローブは、アップストリームノードの活性とサービスステータスを検出するために使用されます。APISIXでは、プローブは「検査官」のようなもので、定期的にドアをノックしてアップストリームサービスが正常に機能しているかどうかを確認します。問題が見つかった場合やサービスが「利用不能」である場合、APISIXに「このサービスは現在利用不能なので、ここにリクエストを送るのを控えてください」と通知します。この「ドアをノックする」プロセスは、プローブを通じて実行されます。
プローブには主に以下の設定項目が含まれます:
-
プローブスキーム: ヘルスチェックプローブが使用するプロトコルタイプで、TCP、HTTP、HTTPSをサポートします。
-
並行性: この設定項目では、ヘルスチェックリクエストの並行数を設定できます。つまり、アップストリームサービスの応答性を確認するために同時に「ドアをノックする」回数を設定します。並行性を調整することで、実際のシナリオでの可能な並行リクエストをシミュレートし、アップストリームサービスのパフォーマンスと安定性をよりよく評価できます。
-
ホスト: チェックするアップストリームサーバーのホストアドレスを指定します。これは、どの家の「ドアをノックする」かを決定するようなものです。
-
ポート: アップストリームサービスのポート番号です。プローブ中にどのドアをノックするかを知るようなものです。
-
パス: HTTPプローブを使用する場合、この設定項目はアクセスしたいURLパスを指定します。プローブに、中に入ったら正確な部屋をチェックするように指示するようなものです。
正常ノードの判定基準
正常ノードの判定に関して、システムはユーザーが設定した間隔(秒単位)で、以前に異常とマークされたノードを定期的にチェックし、一時的なノード異常をタイムリーに検出して適切に処理できるようにします。
プローブがTCPプロトコルを使用する場合、プローブがユーザーが設定した回数だけアップストリームノードに正常に接続した後、ノードは正常と見なされます。
プローブがHTTP/HTTPSプロトコルを使用する場合、システムはノードから指定されたステータスコード(200
や302
など)を含むプローブリクエストを連続して受信した場合にのみ、ノードを正常と見なします。つまり、ノードがこれらの特定のステータスコードを連続して返す場合にのみ、ノードが正常に動作していると見なされます。
異常ノードの判定基準
異常ノードの判定に関して、設定方法は正常ノードの判定と似ています。システムはユーザーが設定した間隔で、正常とマークされたノードを定期的にチェックします。これらのノードが事前に設定された異常条件を満たすと、再分類されて異常と見なされます。
正常ノードの判定とは少し異なり、異常ノードの判定プロセス中に、クライアントリクエスト検証という追加の設定項目が追加されます。この機能が有効になると、ゲートウェイはプローブの検査結果に依存するだけでなく、クライアントからのリクエストとアップストリームサービスの実際の応答を深く観察し分析します。これらのデータとユーザー定義の判定基準に基づいて、ゲートウェイはアップストリームサービスの実行ステータスをより正確に評価できます。
ヘルスチェックのベストプラクティス
適切なプローブタイプの選択
-
TCPプローブ: サービスポートが開いているかどうか、アクセス可能かどうかの確認のみが必要なシナリオに適しています。例えば、データベースサービスでは、TCPプローブを使用してポートが開いていることを確認するだけで十分な場合があります。
-
HTTP/HTTPSプローブ: ネットワーク接続が正常であるだけでなく、サービスがリクエストを正しく処理できることを確認する必要があるシナリオにより適しています。例えば、WebサーバーやAPIサービスの場合、接続を受け取るだけでなく、正しいページやデータを返すことができることを確認する必要があります。
ヘルスチェックの合理的なパラメータ設定
ヘルスチェックを設定する際には、いくつかの重要なパラメータに注意を払う必要があります:
-
チェック間隔: 短すぎると不要なオーバーヘッドが発生し、長すぎると問題が発生した場合の応答が遅くなります。例えば、高トラフィックのECサイトの場合、30秒ごとにチェックするのが比較的合理的な選択です。この間隔は、システムリソースを過度に消費せず、サイトの問題の検出と処理を遅らせません。
もちろん、この間隔は絶対的なものではなく、サイトの実際の状況に基づいて調整する必要があります。例えば、サイトのトラフィックが大きく変動する場合や特定の期間(プロモーションキャンペーン中など)にトラフィックが急増する場合、これらの変化に対応するためにチェック間隔を調整する必要があるかもしれません。
-
タイムアウト: プローブがサービスの応答を待つ時間です。サービスがこの時間内に応答しない場合、プローブはサービスを異常と見なします。この値は、サービスの実際の応答時間に応じて設定する必要があります。
-
リトライ回数: プローブがサービスを異常と判断する前に接続を試行する回数です。この値は適度である必要があり、誤判定を避けるために適切に設定する必要があります。
ビジネスに基づいた戦略の調整
ヘルスチェック戦略は、実際のビジネス状況に基づいて調整する必要があります。特定の時間帯にサービスが通常高い負荷を受ける場合、これらの期間中にヘルスチェック間隔を増やしたり、リトライ回数を減らしたりして、サービスに追加の圧力をかけないようにすることができます。
適切なクライアントリクエスト検証の有効化
クライアントリクエスト検証は、実際のビジネスリクエストに基づいてサービスのステータスを効果的に判断できます。特に、ビジネスロジックに密接に関連する問題を特定するのに役立ちます。ただし、すべてのビジネスシナリオに適しているわけではありません。
-
低トラフィックサービス: サービストラフィックが低い場合、クライアントリクエストに基づく受動的なヘルスチェックでは、サービスのステータスを正確に評価するための十分なデータポイントが得られない可能性があります。このような場合、アクティブなプローブチェックに依存する方がより信頼性が高いかもしれません。
-
高並行環境でのパフォーマンス考慮: 受動的なヘルスチェックでは、すべてのクライアントリクエストを監視および処理する必要があり、高並行環境では追加のパフォーマンスオーバーヘッドが発生する可能性があります。パフォーマンスが主な懸念事項であり、他の手段でサービスが十分に監視されている場合、受動的なヘルスチェックを閉じることを検討できます。
-
他の監視システムの存在: 企業内ですでに成熟した監視システムが展開されており、サービスのステータスをリアルタイムで捕捉および分析できる場合、データの冗長性と追加の複雑さを避けるために、受動的なヘルスチェックは必要ないかもしれません。
結論
ヘルスチェックは、APIゲートウェイの高可用性を確保するための重要な側面です。API7 Enterpriseのバージョン3.2.9では、ヘルスチェックのインタラクティブな設定を全面的に最適化し、操作を簡素化し、ユーザーエクスペリエンスを向上させました。
プローブを適切に設定し、正常/異常ノードの判定基準を設定し、実際のビジネスニーズに基づいて戦略を調整することで、ユーザーはアップストリームサービスのステータスをより効果的に監視し、トラフィックが常に正常なノードにルーティングされるようにすることができます。これにより、システムの安定性と可用性が向上し、ユーザーのリクエストがタイムリーかつ正確に応答されることが保証されます。