HTTP/TCPバランサー HAProxy 2.0のリリース

公開済み ロードバランサーのリリース HA Proxy 2.0これにより、多くの要素 (サーバーの可用性のチェック、負荷レベルの評価、DDoS 対策など) を考慮して、サーバーのグループ間で HTTP トラフィックと任意の TCP リクエストを分散し、一次データ フィルタリングを実行できます (たとえば、HTTP ヘッダーの解析、送信の不正なクエリ パラメーターのフィルタリング、SQL および XSS 置換のブロック、コンテンツ処理エージェントの接続などを行うことができます。 HAProxy では次のこともできます。 適用する マイクロサービス アーキテクチャに基づいてシステム内のコンポーネントの相互作用を調整します。 プロジェクトのコードは C で書かれており、 供給された GPLv2 に基づいてライセンスされています。 このプロジェクトは、Airbnb、Alibaba、GitHub、Imgur、Instagram、Reddit、StackOverflow、Tumblr、Twitter、Vimeo を含む多くの大規模サイトで使用されています。

リリースの主な特徴:

  • 新しい API が導入されました データプランを使用すると、REST Web API を介して HAProxy 設定をオンザフライで管理できます。 これには、バックエンドとサーバーの動的追加と削除、ACL の作成、リクエスト ルーティングの変更、IP へのハンドラー バインディングの変更が含まれます。
  • nbthread ディレクティブが追加されました。これにより、HAProxy で使用されるスレッドの数を構成してマルチコア CPU のパフォーマンスを最適化できるようになります。 デフォルトでは、ワーカー スレッドの数は現在の環境で利用可能な CPU コアに応じて選択され、クラウド環境ではデフォルトは XNUMX スレッドです。 ハード リミットを設定するために、アセンブリ オプション MAX_THREADS および MAX_PROCS が追加され、スレッドとプロセスの数の上限が制限されます。
  • ハンドラーをネットワーク アドレスにバインドするためのバインド ディレクティブの使用が簡素化されました。 セットアップ時に、プロセス パラメータを定義する必要はなくなりました。デフォルトでは、接続はアクティブな接続の数に応じてスレッド間で分散されます。
  • 分離されたコンテナーで実行する場合のログのセットアップが簡素化され、ログを stdout および stderr に加えて、既存のファイル記述子 (たとえば、「log fd@1 local0」) に送信できるようになりました。
  • HTX (ネイティブ HTTP 表現) のサポートはデフォルトで有効になっており、エンドツーエンド HTTP/2、レイヤー 7 再試行、gRPC などの高度な機能を使用するときにバランスをとることができます。 HTX はヘッダーをその場で置き換えるのではなく、変更操作を削除してリストの最後に新しいヘッダーを追加するだけで済むため、HTTP プロトコルの拡張バリアントを操作できるようになり、ヘッダーの元のセマンティクスが維持され、次のことが可能になります。 HTTP/2 から HTTP/1.1 へ、またはその逆に変換する際に、より高いパフォーマンスを実現します。
  • エンドツーエンド HTTP/2 モード (プロキシとクライアント間の対話だけでなく、バ​​ックエンドへの呼び出しを含む HTTP/2 のすべての段階の処理) の公式サポートを追加しました。
  • gRPC プロトコルの双方向プロキシの完全サポートが実装されており、gRPC ストリームの解析、個々のメッセージの強調表示、ログ内の gRPC トラフィックの反映、ACL を使用したメッセージのフィルタリングが可能です。 gRPC を使用すると、ユニバーサル API を使用して相互に対話するさまざまなプログラミング言語でマイクロサービスの作業を整理できます。 gRPC のネットワーク通信は HTTP/2 プロトコルの上に実装され、データのシリアル化のためのプロトコル バッファーの使用に基づいています。
  • 「レイヤー 7 再試行」モードのサポートが追加されました。これにより、ネットワーク接続の確立の問題とは関係のないソフトウェア障害が発生した場合 (たとえば、応答がない場合や応答が空の場合など)、HTTP リクエストを繰り返し送信できるようになります。 POST リクエスト)。 このモードを無効にするために、「disable-l7-retry」フラグが「http-request」オプションに追加され、デフォルト、リッスン、およびバックエンドのセクションで微調整するための「retry-on」オプションが追加されました。 次のサインは再送信に利用できます: all-retryable-errors、none、conn-failure、empty-response、junk-response、response-timeout、0rtt-rejected、および戻りステータス コード (404 など) へのバインド。 ;
  • 新しいプロセス マネージャーが実装され、HAProxy のハンドラーを使用して外部実行可能ファイルの呼び出しを構成できるようになりました。
    たとえば、データ プラン API (/usr/sbin/dataplaneapi) およびさまざまなオフロード ストリーム処理エンジンは、このような外部ハンドラーの形式で実装されます。

  • SPOE (ストリーム処理オフロード エンジン) および SPOP (ストリーム処理オフロード プロトコル) 拡張機能を開発するための .NET Core、Go、Lua、Python のバインディングが追加されました。 以前は、拡張機能の開発は C でのみサポートされていました。
  • リクエストを別のサーバーにミラーリングするための外部 spoa-mirror ハンドラー (/usr/sbin/spoa-mirror) を追加しました (たとえば、実際の負荷の下で実験環境をテストするために運用トラフィックの一部をコピーするため)。
  • から提出された HAProxy Kubernetes Ingress コントローラー Kubernetes プラットフォームとの統合を確実にするため。
  • 統計を監視システムにエクスポートするための組み込みサポートを追加しました プロメテウス;
  • HAProxy を実行している他のノードと情報を交換するために使用されるピア プロトコルが拡張されました。 ハートビートと暗号化されたデータ送信の追加サポートが含まれます。
  • 「sample」パラメータが「log」ディレクティブに追加されました。これにより、リクエストの一部のみ(たとえば 1 件中 10 件)をログにダンプして、分析サンプルを形成できます。
  • 自動プロファイリング モードを追加しました (profiling.tasks ディレクティブ。auto、on、off の値を取ることができます)。 平均遅延が 1000 ミリ秒を超える場合、自動プロファイリングが有効になります。 プロファイリング データを表示するには、「show profiling」コマンドがランタイム API に追加されているか、統計をログにリセットすることができます。
  • SOCKS4 プロトコルを使用してバックエンド サーバーにアクセスするためのサポートが追加されました。
  • TCP 接続を迅速に開くためのメカニズム (TFO - TCP Fast Open、RFC 7413) に対するエンドツーエンドのサポートが追加されました。これにより、最初のステップを 3 つのリクエストに結合し、XNUMX 番目のステップを XNUMX つのリクエストに組み合わせることで、接続セットアップのステップ数を削減できます。古典的な XNUMX ステップの接続ネゴシエーション プロセスにより、接続確立の初期段階でデータを送信できるようになります。
  • 新しいアクションが追加されました:
    • 「http-request replace-uri」は正規表現を使用して URL を置き換えます。
    • ホスト名を解決するための「tcp-request content do-resolve」および「http-request do-resolve」。
    • 「tcp-request content set-dst」および「tcp-request content set-dst-port」をターゲットの IP アドレスとポートに置き換えます。
  • 新しい変換モジュールが追加されました:
    • aes_gcm_dev: AES128-GCM、AES192-GCM、および AES256-GCM アルゴリズムを使用してストリームを復号化します。
    • protobuf はプロトコル バッファー メッセージからフィールドを抽出します。
    • ungrpc を使用して gRPC メッセージからフィールドを抽出します。

    出所: オープンネット.ru

コメントを追加します