進化: Web プロキシ サーバーから分散プッシュ サーバーへの Tengine

進化: Web プロキシ サーバーから分散プッシュ サーバーへの Tengine

テンエンジン

プロキシ サーバーとして、Tengine はグループ内で幅広いアプリケーションを備えています。単一のアプリケーション マシンに展開された Tengine から、クラスター展開の統合アクセスとしての Aserver まで、グループ内のほぼすべてのアプリケーション マシンで Tengine が実行されていると言えます。もちろん、Tengine の展開形式が異なれば、機能も異なります。これは、優れたリバース プロキシ サーバーとしての Tengine が、高性能、低レイテンシ、高可用性という特性を備えているためです。

[[317809]]

次の図は、一般的な統合アクセス モデルを示しています。

HTTP ロング接続サービスの現在の状況

クライアントによって開始されたリクエストが HTTP2 であるか HTTP 1.1 であるかに関係なく、リバース プロキシ サーバーとしての Tengine は、次の図に示すように、アプリケーション サーバーと短時間接続します (Tengine が keepalive で構成されていない場合)。

Tengine は、クライアントとの長い接続を維持し、特定の負荷分散アルゴリズムを使用してアプリケーション サーバーとの短い接続をスケジュールする役割を担います。

現在のHTTPプッシュソリューション

通常、プッシュリクエストは、決まった時間にデータを末端に送信するものです。

投票

クライアントはビジネス データをポーリングするための要求を定期的に送信します。

これは最もシンプルで簡単な方法ですが、実際のプロジェクトで使用される可能性が最も低い解決策であることがよくあります。なぜなら、その欠点は非常に明白だからです。

1. 短い間隔のポーリング要求により、サーバーは目的もなく無駄な QPS を処理することになり、QPS は端末の数に比例します。

2. ポーリング要求のプッシュの適時性は、より長い間隔では保証されません。

アプリケーションサービス処理

つまり、Tengine はリバース プロキシ サーバーとして、基本的な転送機能のみを実行し、HTTP 要求を保持し、必要に応じてそれに応答します。

欠点は明らかです。アプリケーションは、長時間の接続のライフサイクルを自ら維持する必要があり、プッシュ シナリオのユーザーは、超大規模な端末デバイスであることが多いです。超大規模で長い接続は、当然ながら、アプリケーション マシンのリソースを大量に消費します。

HTTP2 プッシュ (サーバー プッシュ)

実際、HTTP2 のプッシュ機能は、単一のリクエストに対して複数の応答があることを意味し、長い接続チャネルでの継続的なデータ転送の要件と一致しません。

以下は RFC によるサーバー プッシュ機能の紹介ですが、ここでは詳しく説明しません。

  1. HTTP/2では、サーバー事前または  「プッシュ」 )応答
  2. 対応する「約束された」リクエストとともにクライアント 
  3. 以前のクライアントが開始したリクエストとの関連付け。これは
  4. サーバーがクライアントがそれらを必要とすることを知っている場合に便利です
  5. 回答は以下で入手可能 注文 応答完全処理するために
  6. 元のリクエスト。

テンエンジンシングルマシンプッシュ

現在、主流のオープンソース Nginx モジュールはスタンドアロン プッシュ機能をサポートしています。

プッシュプロセス

実はMQTTのSUB PUBモードと非常に似ていますが、HTTPを使用して実装されています。具体的なプロセスは以下のとおりです。

1. A がリクエストを開始し、Tengine がそのリクエストをハイジャックして保持し、Tengine はそれに対応する KeyA を生成します。

2. B が A にデータをプッシュする場合、KeyA をパラメーター (またはヘッダー) として使用して、指定された Tengine に POST データを送信できます。

3. Tengine は、B から受信した POST データから KeyA に対応する接続​​を取得し、A に返します。

欠点

1. BはAの存在を認識する必要がある

つまり、A のリクエストが Tengine に届いたとき、Tengine はそれをバイパスして B に送信する必要があり、つまり B に A の存在を通知する必要があり、B は A に対応する KeyA を記録する必要があります。

解決策: Tengine の auth_request 関数を使用できます。もちろん、Lua の ngx.location.capture メソッドを使用することもできます。

2. Tengineがクラスタに導入されている場合、Bは集中型ストレージを必要とする

B は通常、非モノリシック アプリケーション、つまり複数のマイクロサービスで構成されます。どのリンクであっても、B が A にメッセージをプッシュする必要がある場合、明らかに Tengine クラスター内のどのマシン A が稼働しているかを知る必要があります。したがって、B アプリケーションでは、どの Tengine にリクエストを送信するかを決定するために、少なくとも 1 つのマイクロサービスを集中ストレージ (redis、memcache など) に保存する必要があります。

Tengine 実装ソリューション

1. Tengineには集中型ストレージが付属

Tengine は、TCP 接続ごとにキー (リクエスト ヘッダーなどもキーとして使用できます) を生成し、キーと対応するマシン IP 間のマッピング情報を集中ストレージに保存します。アプリケーションは、Tengine クラスター内の任意のマシンにデータをプッシュするだけで、Tengine が分散ルーティングを実行します。次の図は、プッシュの観点から Tengine がどのように機能するかを示しています。

1. アプリケーションは、Tengine クラスター内のランダムなマシンにプッシュされます。プッシュには、プッシュ先の接続を示す対応するキーが含まれます。

2. Sc はプッシュ メッセージを受信し、対応するリクエストを保持している Tengine マシンを Tair で検索します。たとえば、プッシュの宛先接続が Sb にあることがわかります。

3. Sc は Sb に転送されます。

4. データを受信した後、Sb は対応するクライアント接続を見つけて、データをクライアントにプッシュします。

アプリケーションは vipserver を使用して Tengine マシンをランダムに検索できます。 Tengine は、ビジネス アクセス用に vip/slb を申請し、vip/slb の負荷分散機能を利用して Tengine にランダムにアクセスすることもできます。

2. ストリーミングをサポート

通常、長い接続では、プッシュ メッセージの終了後に新しいプッシュ メッセージを作成するのではなく、複数のプッシュ メッセージを受信することが予想されます。 Tengine は豊富な HTTP 処理機能に依存しており、multipart/form-data を使用してプッシュ データの境界が明確であることを確認します。複数のプッシュには明確な境界線があり、クライアントは複数のプッシュ データを取得するために 1 つの接続のみを必要とします。

3. マルチプロトコルサポート

Tengine 自体は複数のプロトコルをサポートしています。クライアントが HTTP を開始するか HTTP2 を開始するかに関係なく、上記のプッシュ機能を継承できます。

4. 高いパフォーマンス

プロキシ サーバーとして、Tengine の転送パフォーマンスは業界のベンチマークとなっています。 Tengine が分散ルーティング機能を持つことができるように、Tengine 転送プロセスに集中型ストレージ機能を追加しました。

<<:  Docker コンテナで避けるべき 10 のこと

>>:  より柔軟なハイブリッドクラウド環境を構築する方法

推薦する

分散遅延メッセージングの実装方法を尋ねられたら、この記事を教えてあげてください。

背景RocketMQ のオープン ソース バージョンでは、メッセージ キューの遅延レベルは 18 レ...

世界中の安価で安定したVPS業者をいくつかリストアップ

私たちは世界中から安価で安定した VPS をいくつか集め、安価で安定した VPS を必要とする友人に...

伝統産業の機会と課題:製紙業界における革新的な電子商取引モデル

多くの伝統産業では、過剰生産能力や産業衰退は珍しいことではありません。多くの産業の発展は独自のボトル...

マルチエントリーパフォーマンスストレステストのキラー:ワンストップストレステストプラットフォーム OPM の背後にあるテクノロジーを明らかにする

課題アリババの「双十一」は世界的なスーパープロジェクトとなった。このスーパープロジェクトでは、フルリ...

高品質なソフト記事の書き方、ソフト記事によるマーケティングプロモーションの実施方法とは?

2018年最もホットなプロジェクト:テレマーケティングロボットがあなたの参加を待っています前回の記事...

統計データからウェブサイトのプロモーション効果を分析する方法

科学のバックグラウンドを持つウェブマスターとして、データ分析は私にとって実はかなり頭の痛い作業です。...

【純乾物】5G?エッジコンピューティング?またまた大げさな「コンセプトの誇大宣伝」?

エッジ コンピューティングを理解したいなら、クモという動物について言及する必要があります。蜘蛛の頭は...

分散コンピューティングにおけるデータ品質に関する講演

[[442615]] 1. 概要1. データ品質の問題はどこにでもある基本的に、データを利用するすべ...

モバイル ゲームは夏休み中に市場シェアを獲得しようと急いでいます。これらのチャネルを逃すと、何百万人ものユーザーを失うことになります。

今年も夏休みがやってきました。今年の夏休みは特に「暑い」です。『王者栄耀』の人気は上昇中です。『王者...

2020 年のエッジ コンピューティング オープンソース プロジェクト トップ 10

2020年は非常に特別な年です。あらゆる階層の人々が極めて困難な時期に直面しています。しかし、この傾...

簡単なレビュー:onetechcloud香港1Gbps高帯域幅VPS、3つのネットワーク直接接続

onetechcloud は香港データセンターに VPS を追加しました。香港 VPS はデフォルト...

Mito テンプレート: ソフトウェア情報会社の Web サイト テンプレートの推奨

2018年最もホットなプロジェクト:テレマーケティングロボットがあなたの参加を待っています2018年...

SEO最適化は個人の関与によってのみうまく行える

SEO に関連するもう一つの言葉、UEO も最近かなり人気があります。特別に調べてみたところ、UEO...

123systems-256MメモリKVM VPS簡易評価

123systems の最近の 2 つの KVM VPS プロモーションをご利用になったでしょうか。...

検索エンジンを分析するためのSEOテクニック

インターネットには国境の概念はありません。インターネットにアクセスできる世界中のどの国からでも、あら...