進化: 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 のこと

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

推薦する

ニュースマーケティング: プレスリリースを掲載するのに最適な場所トップ 10

ニュースマーケティングは、企業マーケティングの最も重要な側面の1つになっています。多くの企業企画マネ...

Baidu ランキング クリッカーはまもなく終了

みなさんこんにちは。私は徐子宇です。 Baidu Ranking Clicker について聞いたこと...

大手企業がクラウド コンピューティングの覇権を競い合う! 5Gと疫病はどんな新たな変化をもたらすのでしょうか?

パソコンやインターネットに続き、クラウドコンピューティングが IT 業界に新たな改革の波を起こしまし...

クラウド障害に備える6つのステップ

企業は、多くのアプリケーション タイプに柔軟性、迅速な拡張性、信頼性を提供するパブリック クラウドに...

フロントエンド検索のユーザーをターゲットにしたオンラインアライアンスの広告配置戦略について簡単に説明します。

長い間記事を書いていませんでした。今日は、オンラインアライアンスの広告戦略と、オンラインアライアンス...

2018 年のインターネット予測トップ 10: 成長、画面スワイプ、お金の使い方、製品の進化

もう一年が過ぎ、冬が去り、春が戻ってきました。インターネット業界において、毎年最初の2か月は採用や就...

IoTデバイスは爆発的に増加し、クラウドコンピューティングは「フォグコンピューティング」へと移行している

モノのインターネットは、インターネット経由で電源のオン/オフを切り替えられるトースターという最初の ...

外部リンクに対して何をしたかを覚えていますか?

外部リンクに対して何をしたかを覚えていますか? SEO 業界では、「コンテンツは王様、外部リンクは皇...

テンセントにとって、2018 年のゲーム業界にはどのような可能性があるのでしょうか?

テンセントは7年前に「汎エンターテインメント」という概念を提唱し、それ以来、文学、音楽、映画、テレビ...

ウェブサイト構築の専門家が、インテリジェントなウェブサイト構築ソフトウェアが企業に与える影響を分析します。

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

locvps 日本ソフトバンク回線ネイティブIPシリーズVPSシンプルレビュー

locvpsは今月、日本の大阪データセンターにVPSを追加しました。ソフトバンク回線に接続され、日本...

iPadよりも高価:中国におけるSurfaceの市場見通し分析

筆者の理解によれば、Surface Proは4月2日21時に発売され、Suning.comとMicr...

あなたが知らないブランド名マーケティングのルール!

王老基は誰もが知っていますが、趙老基、陳老基、周老基については聞いたことがありますか?今年の春節マー...

hostmybytes - アジア向けに最適化された KVM VPS、512M、年間 9 ドル、Windows 搭載

Hostmybytes は、今月中旬に OpenVZ ベースの仮想 VPS を超低価格で開始しました...

reliablehostingservices-50USD/E3-1225v2/16GB RAM/2x2TB ディスク/5IP/バージニア

すべてのサーバーには、デフォルトで 5 つの独立した IPv4、100M ポート、5T トラフィック...