以下の説明では、様々な実施形態のより完全な理解をもたらすために、多数の具体的な詳細が規定される。しかし、これらの具体的な詳細の1つ以上がなくても発明概念を実践しうることが当業者にとって明らかであろう。
ユーザは典型的に、インターネットに接続されたクライアントデバイス上で実行されるクライアントアプリケーションを介して、メディアストリーミングサービスと対話する。例えば、スマートテレビ上で実行されるクライアントアプリケーションは、メディアストリーミングサービスによって提供されるメディアコンテンツを閲覧、検索、選択、ダウンロード、およびストリーミングすることをユーザに可能にさせることができる。多くのクライアントアプリケーションは、HTTP/1.x over TCPを使用してメディアストリーミングサービスにアクセスする。その際、クライアントアプリケーションは、HTTPトランザクションによってメディアストリーミングサービスと対話する。典型的なクライアントアプリケーションは、比較的少ない対話型HTTPトランザクションおよび比較的多い情報提供型HTTPトランザクションを開始する。対話型HTTPトランザクションでは、クライアントアプリケーションは、ホームページ用の表示情報など、クライアントアプリケーションと対話しているユーザに提供する必要があるデータをダウンロードする。情報提供型HTTPトランザクションでは、クライアントアプリケーションは、メディアストリーミングサービスが情報提供の目的で使用するデータを1つ以上のサーバマシンにアップロードする。例えば、クライアントアプリケーションは、イベントログ、クライアントアプリケーションのパフォーマンスを示すメトリックログ、および/またはストリーミングセッションがアクティブであることを示す「ハートビート」をアップロードすることができる。
HTTP/1.x over TCPを使用することの1つの欠点は、大量の情報提供型HTTPトランザクションが、所与のクライアントアプリケーションに関連する対話型HTTPトランザクションの送信および処理を大幅に遅延させる可能性がある点にある。HTTP/1.x over TCPでは、各HTTPトランザクションは、専用のTCP接続を要する。さらに、クライアントアプリケーションが実行されるクライアントプラットフォームでは、TCP接続の同時処理数が2~6接続に制限されることがよくある。また、よく理解されているように、アップロード速度は通常、ダウンロード速度よりも遅い。例えば、インターネットサービスプロバイダ(「ISP」)は、アップロード速度が最大で5メガビット/秒(「Mbps」)であるのに対し、ダウンロード速度が最大で250Mbpsのサービス階層を提供することができる。その結果、様々な時点で、利用可能なTCP接続が全て、情報提供型HTTPトランザクションのみに割り当てられる場合がある。保留中の対話型HTTPトランザクションは、HTTPトランザクションの相対的に遅いアップロード部分を含む情報提供型HTTPトランザクションの1つが完了するまで待機しなければならない。保留中の対話型HTTPトランザクションに関連するデータのダウンロードの結果的な遅延により、全般的なユーザエクスペリエンスの低下を招く場合がある。例えば、選択された映像に関連する情報を見るために50ミリ秒待つ代わりに、ユーザは1秒待つことになる。
しかし、開示の技術により、HTTP/1.x over TCPを実装するクライアントアプリケーションのための情報提供型HTTPトランザクションによって対話型HTTPトランザクションが遅延する可能性が低くなる。一実施形態では、プロキシアプリケーションが、1つ以上のクライアントアプリケーションと、メディアストリーミングサービスを提供するバックエンドサーバとの間の仲介役として機能するプロキシサーバ上で実行される。プロキシサーバとバックエンドサーバとは、HTTP/2 over TCPを介して通信し、複数のHTTPトランザクションを各TCP接続上で多重化することができる。
幾つかの実施形態では、クライアントアプリケーションは、情報提供型HTTPトランザクションを開始する各要求に「fire-and-forget」ヘッダを追加する。要求を受信すると、プロキシアプリケーションは、要求がfire-and-forgetヘッダを含んでいるかどうかに基づいて、要求についてオフロードをアクティブにするかどうかを判定する。プロキシアプリケーションが要求についてオフロードをアクティブにすれば、プロキシアプリケーションは、バックエンドサーバに要求を送信する前に、有効な包括的応答をクライアントアプリケーションに送信する。有効な包括的応答は、バックエンドサーバが要求の処理に成功したと意図的に誤って示す。要求についてオフロードがアクティブであるかどうかに関わらず、プロキシアプリケーションはバックエンドサーバに要求を送信する。オフロードがアクティブであれば、プロキシアプリケーションは、バックエンドサーバから受信された応答を破棄する。そうでない場合、プロキシアプリケーションは、バックエンドサーバから受信された応答をクライアントアプリケーションに送信する。
先行技術に比べた開示の技術の少なくとも1つの技術的利点は、開示の技術により、HTTP/1.x over TCPを実装するクライアントアプリケーションのための情報提供型HTTPトランザクションによって対話型HTTPトランザクションが遅延する可能性が低くなる点にある。特に、プロキシサーバがクライアントアプリケーションから送信された情報提供型HTTPトランザクションに応答するとすぐに、クライアントアプリケーションは、バックエンドサーバからの応答を待つ必要なしに、関連するTCP接続を閉じるかまたは再使用することができる。したがって、クライアントアプリケーションが、利用可能なTCP接続を全て情報提供型HTTPトランザクションに使用し、対話型HTTPトランザクションの送信および処理を遅延させる可能性が低くなる。その結果、クライアントアプリケーションを介してメディアストリーミングサービスによって提供される典型的なユーザエクスペリエンスが向上する。これらの技術的利点は、先行技術のアプローチに対する1つ以上の技術的進歩を表すものである。
システムの概要
図1は、本発明の1つ以上の態様を実施するように構成されたシステム100の概念図である。図示されているように、システム100は、限定されないが、ネットワークベースのサービスシステム102、任意の数のクライアントデバイス104、および任意の数の高速化システム106を含む。説明を目的として、同様のオブジェクトの複数のインスタンスが、オブジェクトを識別する参照番号と、必要な場合にはインスタンスを識別する括弧内の番号とで示される。
ネットワークベースのサービスシステム102と、クライアントデバイス104と、高速化システム106とは、通信ネットワーク(図示せず)を介して通信する。通信ネットワークは、データ通信を促進するように構成された、ルータやスイッチなどの複数のネットワーク通信システムを含む。当業者であれば、周知のインターネット通信ネットワークを展開する際に実践される技術など、通信ネットワークを構築するための技術的に実現可能な多くの技術が存在することを認識するであろう。
ネットワークベースのサービスシステム102は、限定されないが、世界中に分散され、ネットワークベースのサービス(例えば、ストリーミングメディアサービス)に関連するデータを受信、送信、処理、および/または記憶する、相互接続されたノードのネットワークを含む。相互接続されたノードは、これらの望ましい機能を行うソフトウェア、ファームウェア、およびハードウェアの任意の適切な組み合わせを含むことができる。特に、ネットワークベースのサービスシステム102は、同じ場所に配置されていてよく、物理的に互いに分散されていてもよい、複数のコンピューティングデバイスを含む。例えば、これらのコンピューティングデバイスは、1つ以上の汎用PC、Macintosh、ワークステーション、Linux(登録商標)系のコンピュータ、サーバコンピュータ、1つ以上のサーバプール、または他の任意の適切なデバイスを含むことができる。コンピューティングデバイスは、対応するアプリケーションプログラミングインタフェース(「API」)を介するなど、技術的に実現可能な任意の手法でリモートアクセス可能な1つ以上のプログラムを記憶して実行する。様々な実施形態では、任意の数のコンピューティングデバイスを、1つ以上のクラウドコンピューティング環境(すなわち、カプセル化された共有リソース、ソフトウェア、データなど)で実施してもよい。
各クライアントデバイス104は、ソフトウェアアプリケーションを実行し、通信ネットワークを介して他のデバイスと通信することができる、任意の種類のデバイスであってよい。例えば、クライアントデバイス104(1)は、タブレット、セットトップボックス、スマートテレビ、ゲーム機、ストリーミングメディアプレーヤ、スマートフォンなどのモバイルデバイスなどであってよい。クライアントデバイス104は、任意の数の物理的な場所に分散されていてよい。クライアントデバイス104はそれぞれ、データを受信、処理、記憶、および通信するための任意の適当な入力デバイス(キーパッド、タッチスクリーン、マウス、または情報を受容することができる他のデバイスなど)、出力デバイス、大容量記憶媒体、または他の適切な構成要素を含むことができる。入力デバイスと出力デバイスとの両方は、磁気コンピュータディスク、CD-ROMなどの固定式のまたはリムーバブルな記憶媒体を含むことができる。各クライアントデバイス104は、限定されないが、任意の数のプロセッサと任意の数のメモリとを任意の組み合わせで含むことができる。任意の数のクライアントデバイス104は、技術的に実現可能な任意の手法でマルチプロセッシング環境を提供することができる。
各クライアントデバイス104は、特定の動作のためにネットワークベースのサービスシステム102に依存する、コンピュータハードウェアおよび/またはコンピュータソフトウェアを含む。特に、各クライアントデバイス104は、それぞれ任意の数のソフトウェアアプリケーションを実行する任意の数のクライアントプラットフォームを含むことができる。クライアントプラットフォームの例としては、限定されないが、ウェブブラウザ、スマートテレビのオペレーティングシステム(OS)、携帯電話のOS、ビデオゲーム機のOSなどが挙げられる。通信ネットワークを介してネットワークベースのサービスシステム102と通信し、様々な動作を行うソフトウェアアプリケーションを、本明細書では「クライアントアプリケーション」と称する。
幾つかの実施形態では、クライアントアプリケーションは、ネットワークベースのサービスシステム102に要求を発行することによって動作する。クライアントデバイス104は、ネットワークベースのサービスシステム102とのネットワーク接続を確立すると、ネットワーク接続を介してネットワークベースのサービスシステム102に要求を送信する。要求の受信に応じて、ネットワークベースのサービスシステム102は、要求を処理し、ネットワーク接続を介してクライアントアプリケーションに返送される応答を生成する。要求を発行し、対応する応答を受信するプロセスを、本明細書では「トランザクション」と称する。クライアント104上で実行されるクライアントアプリケーションと、ネットワークベースのサービスシステム102の要求処理部との間のラウンドトリップを、本明細書ではトランザクションラウンドトリップと称する。一般に、ネットワークベースのサービスシステム102の要求処理部からクライアント104が離れるほど、トランザクションラウンドトリップの待ち時間が長くなる。さらに、ネットワーク接続の輻輳が大きいほど、トランザクションラウンドトリップの待ち時間が長くなる。
高速化システム106は、ネットワークベースのサービスシステム102とクライアントデバイス104との間の仲介役として動作して、トランザクションラウンドトリップの待ち時間を低減する。高速化システム106は、世界中に分散されており、それぞれがクライアントデバイス104とネットワークベースのサービスシステム102との間の仲介役として動作する、相互接続されたシステムのネットワークを含む。所与の高速化システム106が、所与のクライアントデバイス104とのネットワーク接続を確立し、接続を介して要求を受信する。高速化システム106は、ネットワークベースのサービスシステム102とのネットワーク接続を介して、要求の処理を促進する。
様々な実施形態では、任意の数の高速化システム106を、インターネットサービスプロバイダ(「ISP」)に関連するネットワーク内に組み込むことができる。幾つかのそのような実施形態では、高速化システム106(x)がISPに関連するネットワーク内に組み込まれていれば、高速化システム106(x)は、ISPに関連しているかつ/またはISPに加入しているクライアントデバイス104によってのみアクセス可能となる。同じまたは他の実施形態では、任意の数の高速化システム106が、インターネットエクスチェンジ内で、またはインターネットエクスチェンジに関連して、ISPから独立して動作してもよい。インターネットエクスチェンジは、ISPとコンテンツ配信ネットワーク(「CDN」)がインターネットトラフィックを交換するための物理的なインフラストラクチャである。
高速化システム106が、ネットワークベースのサービスシステム102とクライアントデバイス104との間の仲介役として動作する場合、少なくとも2つの理由により、トランザクションの実行に要する時間が低減される。第1に、幾つかの実施形態では、高速化システム106は一般に、ネットワークベースのサービスシステム102に比べて、クライアントデバイス104に物理的に近い。よって、クライアントデバイス104と高速化システム106との間でネットワーク接続を確立するために必要とされるラウンドトリップ時間が、クライアントデバイス104とネットワークベースのサービスシステム102との間でネットワーク接続を確立する必要がある場合に比べて短くなる。第2に、幾つかの実施形態では、高速化システム106が複数のクライアントデバイス104からの大量の要求を有することに起因して、高速化システム106は、ネットワークベースのサービスシステム102との予め確立され予め認証された安定したネットワーク接続を有する。よって、ネットワークベースのサービスシステム102とのネットワーク接続を要求ごとに確立し認証する必要がない。
本明細書に示すシステム100が例示的なものであって変形および変更が可能であることが理解されるであろう。例えば、システム100の様々な構成要素間の接続トポロジは、所望に応じて変更可能である。なお、本明細書に記載している技術は、限定的でなく例示的なものであり、本発明のより広義の趣旨および範囲から逸脱することなく改変可能である。様々な実施形態では、本明細書に開示している任意の数の技術が実施可能である一方、他の技術を技術的に実現可能な任意の手法で省略することもできる。
説明のみを目的として、図2~図4は、TCP接続および特定バージョンのHTTPプロトコルの文脈でシステム100の機能を説明する。しかし、本明細書に記載される技術は、限定的でなく例示的なものであり、本発明のより広義の趣旨および範囲から逸脱することなく改変可能である。記載している実施形態および技術の範囲および趣旨から逸脱しない多くの変更および変形が当業者にとって明らかであろう。
図2は、本発明の様々な実施形態による、動作中の図1の高速化システム106の1つのより詳細な図である。より正確に、図2は、任意の数のクライアントデバイス104(1)~104(N)上で実行される任意の数のクライアントアプリケーション220(1)~220(M)と、高速化システム106(1)に含まれるプロキシサーバ240と、ネットワークベースのサービスシステム102に含まれるバックエンドサーバ270との間の対話を示す。
バックエンドサーバ270は、限定されないが、ネットワークベースのサービスシステム102に含まれる任意の数のコンピューティングデバイスを含む。コンピューティングデバイスはそれぞれ、ネットワークベースのサービスシステム102に対するHTTP要求を処理し、これに応答する任意の数および種類のソフトウェアアプリケーションを実行することができる。
プロキシサーバ240は、高速化システム106(1)に含まれるコンピューティングデバイスである。代替的な実施形態では、プロキシサーバ240は、高速化システム106(1)に含まれる任意の数のコンピューティングデバイスを含むことができる。図示されているように、クライアントデバイス104とプロキシサーバ240とは、クライアント/プロキシTCP接続230を介してHTTP/1.1を使用して通信する。プロキシサーバ240とバックエンドサーバ270とは、プロキシ/バックエンドTCP接続260を介してHTTP/2を使用して通信する。動作中、プロキシサーバ240は、クライアントデバイス104(1)~104(N)とバックエンドサーバ270との間の仲介役として機能して、HTTPトランザクションの実行に要する時間を低減する。プロキシサーバ240は、往々にして「リバースプロキシサーバ」と称される。
プロキシサーバ240は、少なくとも3つの理由により、HTTPトランザクションの実行に要する時間を短縮する。第1に、プロキシサーバ240は一般的に、バックエンドサーバ270に比べて、クライアントデバイス104(1)~104(N)に物理的に近い。特に、幾つかの実施形態では、プロキシサーバ240は、クライアントデバイス104(1)~104(N)にも関連するISPに関連するネットワーク内に組み込まれる。よって、クライアントデバイス104とプロキシサーバ240との間でネットワーク接続を確立するために必要とされるラウンドトリップ時間が、クライアントデバイス104とバックエンドサーバ270との間でネットワーク接続を確立する必要がある場合に比べて短くなる。第2に、幾つかの実施形態では、プロキシサーバ240が複数のクライアントデバイス104からの大量の要求を有することに起因して、プロキシサーバ240は、バックエンドサーバ270との安定した予め確立され予め認証された任意の数のプロキシ/バックエンドTCP接続260を有する。よって、バックエンドサーバ270とのTCP接続を、HTTP要求ごとに確立し認証する必要がない。
第3に、プロキシサーバ240とバックエンドサーバ270とは、HTTP/2を使用して通信する。周知のように、HTTP/2は、HTTP/1.xに比べて多種多様なパフォーマンス向上策を実装する。特に、HTTP/2では、複数のHTTPトランザクションが、各接続(例えば、プロキシ/バックエンドTCP接続260(1))上で多重化される。したがって、HTTP対話の同時処理数が必ずしも制限されない。幾つかの実施形態では、プロキシサーバ240は、通常の動作中に到達する可能性が低い同時処理リミットを設定する。例えば、幾つかの実施形態では、プロキシサーバ240は、2つのプロキシ/バックエンドTCP接続260(1)および260(2)を介してバックエンドサーバ270に接続し、TCP接続ごとに50の同時処理のHTTPトランザクションからなる同時処理リミットを設定する。したがって、プロキシサーバ240とバックエンドサーバ270との間では、最大で100のHTTPトランザクションを同時に実行することができる。
図示されているように、プロキシサーバ240は、限定されないが、プロセッサ212およびメモリ216を含む。プロセッサ212は、命令を実行することができる任意の命令実行システム、装置、またはデバイスであってよい。例えば、プロセッサ212は、中央処理装置(CPU)、グラフィックス処理装置(GPU)、コントローラ、マイクロコントローラ、ステートマシン、またはこれらの任意の組み合わせで構成することができる。メモリ216は、演算インスタンス110のプロセッサ212が使用するための、ソフトウェアアプリケーションおよびデータなどのコンテンツを記憶する。
メモリ216は、ランダムアクセスメモリ(RAM)、リードオンリーメモリ(ROM)、フロッピーディスク、ハードディスク、またはローカルもしくはリモートの他の任意の形態のデジタルストレージなどの、容易に入手可能なメモリの1つ以上であってよい。幾つかの実施形態では、ストレージ(図示せず)が、メモリ216を補完または置換してもよい。ストレージは、プロセッサ212にとってアクセス可能な任意の数および種類の外部メモリを含むことができる。例えば、限定されないが、ストレージは、SDカード(Secure Digital Card)、外部フラッシュメモリ、ポータブルコンパクトディスクリードオンリーメモリ(CD-ROM)、光学記憶装置、磁気記憶装置、またはこれらの任意の適切な組み合わせを含むことができる。代替的な実施形態では、プロキシサーバ240は、限定されないが、任意の数のプロセッサ212と任意の数のメモリ216とを任意の組み合わせで含むことができる。同じまたは他の実施形態では、プロキシサーバ240に含まれる任意の数のコンピューティングデバイスが、技術的に実現可能な任意の手法でマルチプロセッシング環境を提供することができる。
プロキシサーバ240は、クライアントアプリケーション220がバックエンドサーバ270を介してネットワークベースのサービスにアクセスすることを可能にする1つ以上のアプリケーションを実装するように構成される。各アプリケーションは、プロキシサーバ240の単一のメモリ216に常駐し、プロキシサーバ240の単一のプロセッサ212上で実行されるものとして説明される。しかし、当業者が認識するように、各アプリケーションの機能は、任意の数の演算装置のメモリ216に常駐し、任意の数の演算装置のプロセッサ212上で実行される、任意の数の他のアプリケーションに分散されてもよい。さらに、任意の数のアプリケーションの機能を、単一のアプリケーションまたはサブシステムに統合してもよい。
クライアントアプリケーション220はそれぞれ、HTTP1.x over TCPを使用してネットワークベースのサービスシステム102にアクセスする。その際、クライアントアプリケーション220はそれぞれ、1つ以上のクライアント/プロキシTCP接続230を介してプロキシサーバ240と対話する。各クライアント/プロキシTCP接続230は、クライアントデバイス104の1つで実行されるクライアントアプリケーション220の1つをプロキシサーバ240に接続する。クライアントアプリケーション220(1)について示すように、クライアントアプリケーション220はそれぞれ、最大TCP接続数204に関連付けられる。最大TCP接続数204(1)は、クライアントアプリケーション220(1)が各ネットワークベースのサービスシステム102に対して有することができるTCP接続の最大数を指定する。典型的に、最大TCP接続数204は、クライアントアプリケーション220を実行するクライアントプラットフォーム(例えば、ウェブブラウザ、スマートテレビ操作システムなど)によって設定されて実施される。説明のみを目的として、クライアントアプリケーション220(1)の最大TCP接続数204は3つである。したがって、クライアントアプリケーション220(1)は、最大で3つのクライアント/プロキシTCP接続230を確立することができる。
HTTP/1.x over TCPでは、各HTTPトランザクションは、専用のTCP接続を要する。典型的なクライアントアプリケーション220は、比較的少ない対話型HTTPトランザクションおよび比較的多い情報提供型HTTPトランザクションを開始する。対話型HTTPトランザクションでは、クライアントアプリケーション220は、ホームページ用の表示情報など、クライアントアプリケーション220と対話しているユーザに提供する必要があるデータをダウンロードする。情報提供型HTTPトランザクションでは、クライアントアプリケーション220は、ネットワークベースのサービスシステム102が情報提供の目的で使用するデータをバックエンドサーバ270にアップロードする。例えば、クライアントアプリケーション220は、イベントログ、クライアントアプリケーション220のパフォーマンスを示すメトリックログ、および/またはクライアントアプリケーション220が適切に実行されていることを示す「ハートビート」をアップロードすることができる。
HTTP/1.x over TCPを使用することの1つの欠点は、大量の情報提供型HTTPトランザクションが、所与の従来のクライアントアプリケーションに関連する対話型HTTPトランザクションの送信および処理を大幅に遅延させる可能性がある点にある。従来のクライアントアプリケーションは、TCP接続の最大数に制限されるだけでなく、アップロード速度は、通常、ダウンロード速度よりも遅い。その結果、様々な時点で、利用可能なTCP接続が全て情報提供型HTTPトランザクションのみに割り当てられる場合がある。保留中の対話型HTTPトランザクションは、HTTPトランザクションの相対的に遅いアップロード部分を含む情報提供型HTTPトランザクションの1つが完了するまで待機しなければならない。保留中の対話型HTTPトランザクションに関連するデータのダウンロードの結果的な遅延により、全般的なユーザエクスペリエンスの低下を招く場合がある。
本明細書で前述したように、上記の問題に対処する取り組みでは、対話型HTTPトランザクションに利用可能なTCP接続の数が自動的に低減されてしまい、情報提供型HTTPトランザクションによってネットワークベースのサービスに送信される情報が欠落するリスクが増大し、かつ/または適用範囲が制限される。
バックエンドサーバのオフロード
上記の問題により効果的に対処するために、プロキシサーバ240は、限定されないが、プロキシアプリケーション250を含む。図示されているように、プロキシアプリケーション250は、メモリ216に常駐し、プロキシサーバ240のプロセッサ212上で実行される。プロキシアプリケーション250は、クライアントアプリケーション220とバックエンドサーバ270との間の仲介役として機能する一方で、情報提供用アップロードのための任意の数のHTTP要求への応答を、バックエンドサーバ270から選択的にオフロードする。情報提供用アップロードのためのHTTP要求および対応するHTTP応答を、本明細書では情報提供型HTTPトランザクションと称する。
HTTP/1.x要求232(x)を生成するときに、対応するHTTP/1.x応答234(x)がクライアントアプリケーション220にとって重要でなければ、クライアントアプリケーション220は、HTTP/1.x要求232(x)に「fire-and-forget」ヘッダを追加することができる。当業者が認識しているように、対応するHTTP/1.x応答234(x)がクライアントアプリケーション220にとって重要でないHTTP/1.x要求232(x)は典型的に、データをアップロードするために使用される、「POST」や「PUT」などのHTTPメソッドを指定する。
fire-and-forgetヘッダは、HTTP/1.x要求232(x)への応答をバックエンドサーバ270からプロキシアプリケーション250にオフロードできることをプロキシアプリケーション250に示す。なお、関連するクライアントアプリケーション220に対して情報提供型HTTP対話が典型的に有する唯一の影響は、潜在的に他のHTTP対話を遅延させ、このためにクライアントアプリケーション220のパフォーマンスを低下させる点である。このため、幾つかの実施形態では、クライアントアプリケーション220は、情報提供型HTTP対話を開始する各HTTP/1.x要求232にfire-and-forgetヘッダを追加する。
fire-and-forgetヘッダは、限定されないが、名称「Fire-and-Forget」および成功コードリスト(成功コードパラメータの1つ以上の値)を含む。名称「Fire-and-Forget」は、対応するHTTP/1.x応答234(x)が重要でないことを示す。成功コードリストは、HTTP/1.x応答234(x)の成功をそれぞれ示す1つ以上のステータスコードを指定する。例えば、HTTP/1.x要求232(x)のfire-and-forgetヘッダのための成功コードリストは、「200,204」を指定することができ、HTTP/1.x要求232(y)のfire-and-forgetヘッダの成功コードリストは、「200」を指定することができる。
HTTP/1.x要求232(x)がfire-and-forgetヘッダを含んでいれば、HTTP/1.x要求232(x)は、HTTP/1.x要求232(x)に関連する重要度に相関するパーシステンスレベルに関連付けられる。HTTP1.x要求232(x)のパーシステンスレベルは、HTTP1.x要求232(x)に含まれる「persistence」ヘッダによって指定することができる。HTTP1.x要求232(x)がパーシステンスヘッダを含んでいなければ、HTTP1.x要求232(x)は、デフォルトのパーシステンスレベルに関連付けられる。
パーシステンスヘッダは、限定されないが、名称「Persistence」およびパーシステンスレベル(パーシステンスパラメータの値)を含む。許容される各パーシステンスレベルは、あるバージョンの関連するHTTP要求232をバックエンドサーバ270が処理に成功しない場合にプロキシアプリケーション250が行うことになる、異なるエラー処理プロセスに関連付けられる。より正確には、HTTP要求232(x)のパーシステンスレベルは、バックエンドサーバがHTTP/2要求262(x)の処理に成功できない場合にプロキシアプリケーション250が行うことになる、エラー処理プロセスを指定する。HTTP/2要求262(x)は、HTTP/1.x要求232(x)のHTTP/2バージョンである。
クライアントアプリケーション220の1つからHTTP/1.x要求232(x)を受信すると、プロキシアプリケーション250は、HTTP/1.x要求232(x)についてオフロードをアクティブにするかどうかを判定する。幾つかの実施形態では、プロキシアプリケーション250は、HTTP/1.x要求232(x)がfire-and-forgetヘッダを含む場合に、HTTP/1.x要求232(x)についてオフロードをアクティブにする。他の実施形態では、プロキシアプリケーション250は、HTTP/1.x要求232(x)がfire-and-forgetヘッダおよび任意の数の追加の基準を含むかどうかに基づいて、HTTP/1.x要求232(x)についてオフロードをアクティブにするかどうかを判定してもよい。
例えば、様々な実施形態では、プロキシアプリケーション250は、HTTP/1.x要求232(x)がfire-and-forgetヘッダおよび最大オフロード同時処理数(図1には示さず)を含むかどうかに基づいて、HTTP/1.x要求232(x)についてオフロードをアクティブにするかどうかを判定する。最大オフロード同時処理数は、任意の所与の時間にオフロードをアクティブにすることができるHTTP/1.x要求232の最大数を指定する。HTTP/1.x要求232(x)がfire-and-forgetヘッダを含み、オフロードがアクティブであるHTTP1.x要求232の総数が最大オフロード同時処理数よりも少なければ、プロキシアプリケーション250は、HTTP/1.x要求232(x)についてオフロードをアクティブにする。そうでない場合、プロキシアプリケーション250は、HTTP/1.x要求232(x)についてオフロードをアクティブにしない。プロキシアプリケーション250は、技術的に実現可能な任意の手法で追跡してオフロードをアクティブにすることができる。
例えば、幾つかの実施形態では、図3と併せてより詳細に説明するように、プロキシアプリケーション250は、Go言語で書かれており、各HTTP/1.x要求232は、異なる実行スレッドによって処理される。オフロード機能は、オフロード機能を実行するスレッドの数を最大オフロード同時処理数に制限するHTTP.handlerに含まれる。
HTTP/1.x要求232(x)についてオフロードがアクティブであれば、プロキシアプリケーション250は、HTTP/要求232(x)が受信されたクライアント/プロキシTCP接続230を使用して、「有効な」包括的HTTP/1.x応答234(x)をクライアントアプリケーション220に送信する。この場合、クライアントアプリケーション220は、クライアント/プロキシTCP接続230を再使用してもよく、閉じてもよい。有効な包括的HTTP/1.x応答234(x)は、バックエンドサーバ270がHTTP/1.x要求232(x)の処理に成功したことを意図的に誤って示す。プロキシアプリケーション250は、技術的に実現可能な任意の手法で、有効な包括的HTTP/1.x応答234(x)を生成することができる。
例えば、幾つかの実施形態では、プロキシアプリケーション250は、HTTP/1.x要求232(x)のfire-and-forgetヘッダの成功コードリストに指定されたステータスコードの1つを含む有効な包括的HTTP/1.x応答234(x)を生成する。例えば、成功コードリストが200のステータスコードを含んでいれば、プロキシアプリケーション250は、HTTPステータスライン「200 OK」および空のボディを有する、有効な包括的HTTP/1.x応答234(x)を生成することができる。当業者が認識するように、「HTTPステータスライン」は、関連する理由フレーズ(例えば、「OK」)を伴うステータスコード(例えば、200)である。200のステータスコードは、バックエンドサーバ270がHTTP/1.x要求232(x)の処理に成功したことを示している。別の例では、成功コードリストが204のステータスコードを含んでいれば、プロキシアプリケーション250は、HTTPステータスライン「204 No Content」を有する有効な包括的HTTP/1.x応答234(x)を生成することができる。204のステータスコードは、バックエンドサーバ270がHTTP/1.x要求232(x)の処理に成功しており、コンテンツも返さないことを示している。
その後、HTTP/1.x要求232(x)についてオフロードがアクティブであるかどうかにかかわらず、プロキシアプリケーション250は、HTTP/1.x要求232(x)をHTTP/2要求262(x)に変換する。HTTP/2要求262(x)は、HTTP/1.x要求232(x)のHTTP/2バージョンである。プロキシアプリケーション250は、技術的に実現可能な任意の手法で、HTTP/1.x要求232(x)をHTTP/2要求262(x)に変換することができる。次いで、プロキシアプリケーション250は、プロキシ/バックエンドTCP接続260の1つを介して、バックエンドサーバ270へのHTTP/2要求262(x)の送信を試行する。HTTP/1.xトランザクションとは対照的に、任意の数のHTTP/2要求262および任意の数のHTTP/2応答264が、プロキシ/バックエンドTCP接続260のそれぞれを共有することができるため、任意の数のHTTP/2トランザクションを同時に実行することができる。
HTTP/2要求262(x)についてオフロードがアクティブでなく、プロキシアプリケーション250がバックエンドサーバ270からHTTP/2応答264(x)の受信に成功すれば、プロキシアプリケーション250は、HTTP/2応答264(x)をHTTP1.x応答234(x)に変換する。HTTP/1.x応答234(x)は、HTTP/2応答264(x)のHTTP/1.xバージョンである。プロキシアプリケーション250は、技術的に実現可能な任意の手法で、HTTP/2応答264(x)をHTTP1.x応答234(x)に変換することができる。次いで、プロキシアプリケーション250は、HTTP/要求232(x)が受信されたクライアント/プロキシTCP接続230を使用して、HTTP/1.x応答234(x)をクライアントアプリケーション220に送信する。この場合、クライアントアプリケーション220は、クライアント/プロキシTCP接続230を再使用してもよく、閉じてもよい。
HTTP/2要求262(x)についてオフロードがアクティブでなく、プロキシアプリケーション250がバックエンドサーバ270からHTTP/2応答264(x)を受信しなければ、プロキシアプリケーション250は「server error」のHTTP/2応答264(x)を生成する。プロキシアプリケーション250は、様々な理由により、バックエンドサーバ270からHTTP/2応答264(x)を受信しない場合がある。例えば、バックエンドサーバ270は過負荷となる可能性がある。サーバエラーのHTTP応答264(x)は、サーバエラーのためHTTP/1.x要求232(x)が成功しなかったことを示す。例えば、幾つかの実施形態では、サーバエラーのHTTP応答264(x)は、HTTPステータスライン「502 Bad Gateway」を有する。502のステータスコードは、プロキシサーバ240がバックエンドサーバ270から無効な応答を受信したことを示す。
HTTP/2要求262(x)についてオフロードがアクティブであり、プロキシアプリケーション250がバックエンドサーバ270から成功を示すHTTP/2応答264(x)を受信すれば、プロキシアプリケーション250はHTTP/2応答264(x)を破棄する。プロキシアプリケーション250は、技術的に実現可能な任意の手法で、HTTP/2応答264(x)が成功を示しているかどうかを判定することができる。例えば、幾つかの実施形態では、プロキシアプリケーション250は、HTTP/1要求232(x)に関連する成功コードリストに基づいて、HTTP/2応答264(x)が成功を示しているかどうかを判定する。HTTP/2応答264(x)に含まれるステータスコードが、成功コードリストに含まれるステータスコードの1つに一致すれば、プロキシアプリケーション250は、HTTP/2応答264(x)が成功を示していることを判定する。一致しない場合、プロキシアプリケーション250は、HTTP/2応答264(x)が成功を示していないことを判定する。
HTTP/2要求262(x)についてオフロードがアクティブであり、プロキシアプリケーション250がバックエンドサーバ270からHTTP/2応答を受信しなければ、プロキシアプリケーション250は、パーシステンスレベルに従ってエラー処理プロセスを実行する。同様に、HTTP/2要求262(x)についてオフロードがアクティブであり、プロキシアプリケーション250がバックエンドサーバ270から成功を示していないHTTP/2応答264(x)を受信すれば、プロキシアプリケーション250は、パーシステンスレベルに従ってエラー処理プロセスを実行する。
プロキシアプリケーション250は、技術的に実現可能な任意の手法で、任意の数および種類の許容可能なパーシステンスレベルに基づく、任意の数および種類のエラー処理プロセスを実施することができる。例えば、幾つかの実施形態では、許容可能なパーシステンスレベルは、「低」、「中」、「高」(デフォルトのパーシステンスレベル)、および「耐久性」である。HTTP/1.x要求232(x)のパーシステンスレベルが低であれば、プロキシアプリケーション250は、HTTP/1.x要求232(x)に関して更なる操作を行わない。パーシステンスレベルが中であれば、プロキシアプリケーション250は、比較的短い間隔で最大で3回の再送信の試行を行う。再送信の試行は、HTTP/2要求262(x)をバックエンドサーバ270に再送信する試行である。
パーシステンスレベルが高であれば、プロキシアプリケーション250は、成功を示すHTTP/2応答264(x)をバックエンドサーバ270から受信するまで、再送信の試行を行う。なお、最大オフロード同時処理数に到達すれば、プロキシアプリケーション250は、もはやオフロードをアクティブにせず、代わりに同期プロキシ操作を行う。その結果、パーシステンスレベルが高であるので、プロキシアプリケーション250にバックログは生じない。
パーシステンスレベルが耐久性であれば、プロキシアプリケーション250は、再起動を越えて存続するためにHTTP/2要求262(x)を持続的なストレージ(例えば、ディスク)に書き込み、成功を示すHTTP/2応答264(x)をプロキシアプリケーション250がバックエンドサーバ270から受信するまで、再送信の試行を行う。エラー処理プロセス中の任意の時点で、成功を示すHTTP/2応答264(x)をプロキシアプリケーション250がバックエンドサーバ270から受信すると、プロキシアプリケーション250は、HTTP/2応答264(x)を破棄し、エラー処理プロセスを終了する。
各クライアントアプリケーション220は、技術的に実現可能な任意の手法で、各HTTP/1.x要求232のパーシステンスレベルを判定することができる。例えば、幾つかの実施形態では、ハートビートが比較的頻繁に発生するので、クライアントアプリケーション220は、ハートビートのアップロードを伴う各HTTP/1.x要求232に、低のパーシステンスレベルを指定するパーシステンスヘッダを含める。イベントログおよびメトリックログは典型的には頻繁に生成されないため、クライアントアプリケーション220は、イベントログまたはメトリックログのアップロードを伴うHTTP/1.x要求232にパーシステンスヘッダを含めず、これによって関連するパーシステンスレベルを高にデフォルト設定する。
説明のみを目的として、図2は、クライアントアプリケーション220(1)、プロキシアプリケーション250、およびバックエンドサーバ270の間の一連の対話を、一連の丸囲み番号として示す。クライアントアプリケーション220(1)は、クライアントデバイス104(1)上で実行され、最大で3つの接続204(1)を有する。
ネットワークベースのサービスシステム102と対話するために、クライアントアプリケーション220(1)は、4つのHTTP/1.x要求232(1)~232(4)を生成する。HTTP/1.x要求232(1)~232(4)はそれぞれ、ネットワークベースのサービスシステム102をホストとして指定する。HTTP/1.x要求232(1),232(2),232(4)はそれぞれダウンロードの要求であり、fire-and-forgetヘッダを含まない。対照的に、HTTP/1.x要求232(3)は、イベントログのアップロードの要求であり、fire-and-forgetヘッダを含む。この場合、クライアントアプリケーション220(1)は、プロキシアプリケーション250へのHTTP/1.x要求232(1)~232(4)の送信を試行する。
クライアントアプリケーション220(1)が最大で3つのTCP接続に制限されるため、クライアントデバイス104は、HTTP/1.x要求232(1)~232(3)のための3つのクライアント/プロキシTCP接続230(1)~(3)をそれぞれ生成する。HTTP/1.x要求232がそれぞれ専用のクライアント/プロキシTCP接続230を要し、利用可能なクライアント/プロキシTCP接続230が全て使用中であるため、HTTP/1.x要求232(4)の送信は遅延してしまう。
HTTP/1.X要求232(x)のためのクライアント/プロキシTCP接続230(x)を生成するために、クライアントデバイス104(1)およびプロキシサーバ240は、TCPハンドシェイクに続いてトランスポート層セキュリティ(「TLS」)ハンドシェイクを行う。TCPハンドシェイクは、クライアントデバイス104とプロキシサーバ240とが、互いに通信するためのTCP通信セッションをネゴシエートして開始するためのメカニズムである。TLSハンドシェイクは、クライアントデバイス104(1)とプロキシサーバ240とが、安全な通信セッションを確立するために必要なセキュリティキーを交換するメカニズムである。
丸囲みの1~3番で示されているように、プロキシアプリケーション250は、それぞれクライアント/プロキシTCP接続230(1)~230(3)を介してHTTP/1.x要求232(1)~232(3)を受信する。プロキシアプリケーション250は、HTTP/1.x要求232(3)がfire-and-forgetヘッダを含み、現在のオフロード同時処理総数が最大オフロード同時処理数よりも少ないことを判定する。したがって、丸囲みの4番で示されているように、プロキシアプリケーション250は、HTTP/1.x要求232(3)についてオフロードをアクティブにし、HTTPステータスライン「200 OK」を含むHTTP/1.x応答234(3)を、クライアント/プロキシTCP接続230(3)を介してクライアントアプリケーション220(1)に送信する。
プロキシアプリケーション250は、HTTP/1.x要求232(1)~232(3)をそれぞれHTTP/2要求262(1)~262(3)に変換し、バックエンドサーバ270へのHTTP/2要求262(1)~262(3)の送信を試行する。有利には、プロキシサーバ240とバックエンドサーバ270とは、TCPハンドシェイクおよびTLSハンドシェイクを従前に行って、予め確立され予め認証された任意の数のプロキシ/バックエンドTCP接続260を生成している。さらに、プロキシサーバ240とバックエンドサーバ270との間のトラフィック量が比較的多いことに起因して、プロキシ/バックエンドTCP接続260は持続的である。その結果、プロキシサーバ240は、追加のハンドシェイクを行うことなく、プロキシ/バックエンドTCP接続260(1)を介してバックエンドサーバ270へのHTTP/2要求262(1)~262(3)の送信を開始する。より正確には、プロキシサーバ240は、HTTP/2要求262(1)~262(3)と、任意の数の他のHTTP/2要求262および/またはHTTP/2応答264とを、プロキシ/バックエンドTCP接続260(1)上で多重化する。
クライアントアプリケーション220(1)がHTTP/1.x応答234(3)を受信すると、クライアントデバイス104(1)は、遅延したHTTP/1.x要求232(4)のためにクライアント/プロキシTCP接続230(3)を再生成する(例えば、閉じて再確立し再認証する)。代替的な実施形態では、クライアントデバイス104(1)は、クライアント/プロキシTCP接続230(3)を閉じて再確立し再認証することなく、遅延したHTTP/1.x要求232(4)のためにクライアント/プロキシTCP接続230(3)を再使用してもよい。次いで、クライアントデバイス104(1)は、クライアント/プロキシTCP接続230(3)を介してプロキシサーバ240へのHTTP/1.x要求232(4)の送信を開始する。
有利には、プロキシサーバ240は、バックエンドサーバ270に比べて、クライアントデバイス104(1)に物理的に近い。そのため、丸囲みの5番で示されているように、プロキシアプリケーション250は、HTTP/2要求262(1)~262(3)がバックエンドサーバ270に到達する前に、HTTP/1.x要求232(4)を受信する。プロキシアプリケーション250は、HTTP/1.x要求232(4)をHTTP/2要求262(4)に変換し、バックエンドサーバ270へのHTTP/2要求262(4)の送信を試行する。プロキシサーバ240は、HTTP/2要求262(4)と、HTTP/2要求262(1)~262(3)および任意の数の他のHTTP/2要求262および/またはHTTP/2応答264とを、プロキシ/バックエンドTCP接続260(1)上で多重化する。
その後、丸囲みの6~8番で示されているように、バックエンドサーバ270は、プロキシ/バックエンドTCP接続260(1)を介して、HTTP/2要求262(1),262(2)および262(4)を受信する。HTTP/2要求262(3)は、アップロードを伴うため、バックエンドサーバ270への到達までにより長い時間を要する。バックエンドサーバ270は、HTTP/2要求262(1),262(2)および262(4)を処理し、HTTP/2応答264(1),264(2)および264(4)をそれぞれ生成する。バックエンドサーバ270は、プロキシ/バックエンドTCP接続260(1)を介してプロキシアプリケーション250へのHTTP/2応答264(1),264(2)および264(4)の送信を開始する。
丸囲みの9~11番で示されているように、プロキシアプリケーション250は、プロキシ/バックエンドTCP接続260(1)を介して、HTTP/2応答264(1),264(2)および264(4)を有効に受信する。HTTP/1.x要求232(1),232(2)および232(4)についてオフロードがアクティブでないため、プロキシアプリケーション250は、HTTP/2応答264(1),264(2)および264(4)をそれぞれHTTP/1.x応答234(1),234(2)および234(4)に変換する。次いで、プロキシアプリケーション250は、クライアント/プロキシTCP接続230(1)を介したHTTP1.x応答234(1)の送信、クライアント/プロキシTCP接続230(2)を介したHTTP1.x応答234(2)の送信、およびクライアント/プロキシTCP接続230(3)を介したHTTP1.x応答234(4)の送信を開始する。
HTTP/1.x応答234(1),234(2)および234(4)がクライアントアプリケーション220(1)に伝わっている間、バックエンドサーバ270は、HTTP/2要求262(3)を受信する(丸囲みの12番で示している)。バックエンドサーバ270は、HTTP/2要求262(3)を処理し、HTTP/2応答264(3)を生成し、プロキシ/バックエンドTCP接続260(1)を介してプロキシアプリケーション250へのHTTP/2応答264(3)の送信を開始する。
丸囲みの13~15番で示されているように、HTTP/2応答264(3)がプロキシアプリケーション250に伝わっている間に、クライアントアプリケーション220(1)は、HTTP/1.x応答234(1),234(2)および234(4)を受信する。その後、丸囲みの16番で示されているように、プロキシアプリケーション250は、HTTP/2応答264(3)を受信する。HTTP/1.x要求232(3)についてオフロードがアクティブであり、バックエンドサーバ270がHTTP/1.x要求232(3)の処理に成功したことをHTTP/2応答264(3)が示すため、プロキシアプリケーション250は、HTTP/2応答264(3)を破棄する。
説明のみを目的として、図2~図3は、TCP接続および特定バージョンのHTTPプロトコルの文脈でシステム100の機能を説明する。しかし、本明細書に記載される技術は、限定的でなく例示的なものであり、本発明のより広義の趣旨および範囲から逸脱することなく改変可能である。記載している実施形態および技術の範囲および趣旨から逸脱しない多くの変更および変形が当業者にとって明らかであろう。
一般的な事項として、本明細書に概説される技術は、ネットワークベースのサービスに要求を送信する前に、ネットワークベースのサービスのための選択された要求に応じて、有効な包括的応答を返すことに適用可能である。代替的な実施形態では、要求および応答は、任意の数および種類の伝送プロトコルに準拠し、任意の数および種類の接続を介して送信されてもよい。一般に、クライアントアプリケーション220から受信されたHTTP要求に応答するとき、プロキシアプリケーション250は、HTTPフォーマットのHTTP要求でクライアントアプリケーション220へのHTTP応答を生成または中継する。HTTP要求をバックエンドサーバ270に中継するとき、プロキシアプリケーションは、バックエンドサーバ270へのあるバージョンのHTTP要求の最も効率的な送信を確実にするために、HTTP要求に任意の数の変換操作を行うことができる。
例えば、幾つかの代替的な実施形態では、任意の数のクライアントアプリケーション220がHTTP/2を実装する。HTTP/2要求262(x)を生成するとき、クライアントアプリケーションは、対応するHTTP/2応答264(x)が重要でないことを示すために、HTTP/2要求262(x)にfire-and-forgetヘッダを追加することができる。プロキシアプリケーション250は、HTTP/2要求262(x)がfire-and-forgetヘッダを有するかどうか、および最大オフロード同時処理数に基づいて、HTTP/2要求262(x)についてオフロードをアクティブにするかどうかを判定する。HTTP/2要求262(x)についてオフロードがアクティブであれば、プロキシアプリケーション250は、有効な包括的HTTP/2応答264をクライアントアプリケーション220に送信する。HTTP/2要求262(x)についてオフロードがアクティブであるかどうかにかかわらず、プロキシアプリケーション250は、バックエンドサーバ270へのHTTP/2要求262(x)の送信を試行する。HTTP/2要求262(x)についてオフロードがアクティブであれば、プロキシアプリケーション250は、バックエンドサーバ270から受信したHTTP/2応答264(x)を破棄する。HTTP/2要求262(x)についてオフロードがアクティブでなく、プロキシアプリケーション250がHTTP/2要求262(x)をバックエンドサーバ270に送信できなければ、プロキシアプリケーション250は、サーバエラーのHTTP/2応答をクライアントアプリケーション220に送信する。そうでなく、HTTP/2要求262(x)についてオフロードがアクティブでなければ、プロキシアプリケーション250は、バックエンドサーバ270から受信したHTTP/2応答264(x)をクライアントアプリケーション220に送信する。
代替的な実施形態では、fire-and-forgetヘッダおよびパーシステンスヘッダは、技術的に実現可能な任意の手法で指定され、任意の量および種類の関連情報を含むことができる。例えば、幾つかの実施形態では、fire-and-forgetヘッダは、成功コードリストを指定しない。そのような実施形態では、プロキシアプリケーション250は、技術的に実現可能な任意の手法で、各HTTP/2応答264が成功を示しているかどうかを判定することができる。例えば、プロキシアプリケーション250は、所定の成功コードリストを実装することができる。同じまたは他の実施形態では、パーシステンスヘッダが実装されず、fire-and-forgetヘッダは、任意でパーシステンスレベルを指定する。
図3は、本発明の様々な実施形態による、図2のプロキシアプリケーション250のより詳細な図である。説明のみを目的として、図3は、Goプログラミング言語で書かれたプロキシアプリケーション250の例を説明する。しかし、本明細書に記載される技術は、限定的でなく例示的なものであり、本発明のより広義の趣旨および範囲から逸脱することなく改変可能である。特に、プロキシアプリケーション250は、任意の数および種類のアルゴリズムを実行することができ、技術的に実現可能な任意の数(1つを含む)のプログラミング言語および/またはスクリプト言語で記述することができる。
図示されているように、プロキシアプリケーション250は、限定されないが、HTTPライブラリ層310、fire-and-forgetプロキシハンドラ320、任意の数のハンドラ330、およびプロキシハンドラ340を含む。HTTPライブラリ層310は、プロキシサーバ240への各HTTP/1.x要求232を異なる実行スレッドとして受信するように構成される。HTTP/1.x要求232(x)を受信すると、HTTPライブラリ層310は、関連する実行スレッドの制御を、ネストされたHTTPハンドラの双方向パイプラインに転送する。
双方向パイプラインは、順方向で順に、fire-and-forgetプロキシハンドラ320、任意の数のハンドラ330、およびプロキシハンドラ340を含む。代替的な実施形態では、任意の数のハンドラ330がパイプライン内でfire-and-forgetプロキシハンドラ320に先行してもよいし、任意の数のハンドラ330がパイプライン内でプロキシハンドラ340に後続してもよい。
HTTPハンドラはそれぞれ、2つの引数、http.ResponseWriterとhttp.Requestへのポインタを有するhttp.HandlerFunc型である。http.Requestは、HTTP/1.x要求232(x)を表すデータ構造である。http.responseWriterは、HTTP/1.x要求232(x)に対するHTTP/1.x応答234(x)を生成して送信する。HTTPハンドラがhttp.responseWriterにデータを書き込めば、http.responseWriterは、HTTP/1.x要求232(x)が受信されたクライアント/プロキシTCP接続230を介して、対応するHTTP/1.x応答234(x)を送信する。加えて、パイプライン内の様々なHTTPハンドラが、HTTP/1.x要求232(x)に対するHTTP応答を表すhttp.Responseデータ構造にアクセスする。
HTTPハンドラはそれぞれ、HTTP/1.x要求232(x)および/またはHTTP/2要求262(x)に関連する任意の数および種類の操作をhttp.Requestによって行うことができる。同様に、HTTPハンドラはそれぞれ、HTTP/1.x応答234(x)および/またはHTTP/2応答264(x)に関連する任意の数および種類の操作をhttp.Responseによって行うことができる。また、HTTPハンドラはそれぞれ、http.responseWriterへの書き込み、いずれかの方向でのパイプライン内の次のHTTPハンドラへの制御の転送、パイプラインを通じた制御の伝播の停止などを行うことができる。
HTTP/1.x要求232(x)に関連する実行スレッドがHTTPライブラリ層310に入ると、HTTPライブラリ層310は、http.responseWriterと、HTTP/1.x要求232(x)を表すhttp.Requestとを生成する。次いで、HTTPライブラリ層310は、パイプライン内の最初のHTTPハンドラに制御を転送して、順方向の伝播を開始する。図3に示す実施形態では、パイプライン内の最初のHTTPハンドラは、fire-and-forgetハンドラ320である。
図示されているように、fire-and-forgetハンドラ320は、限定されないが、HTTPヘッダトリガ324、最大オフロード同時処理数322、およびオフロード操作326を含む。HTTPヘッダトリガ324は、fire-and-forgetヘッダを区別する名称「Fire-and-Forget」を指定する。最大オフロード同時処理数322は、任意の所与の時間でオフロードをアクティブにすることができるHTTP/1.x要求232(すなわち、スレッド)の最大数を指定する。オフロード操作326は、実行スレッドのオフロードがアクティブであるときに実行されるfire-and-forgetハンドラ320における操作である。
fire-and-forgetハンドラ320が実行スレッドの制御を受け取ると、fire-and-forgetハンドラ320は、HTTPヘッダトリガ324に基づいて、HTTP/1.x要求232(x)がfire-and-forgetヘッダを含んでいるかどうかを判定する。fire-and-forgetハンドラ320が、HTTP/1.x要求232(x)がfire-and-forgetヘッダを含んでいないことを判定すれば、fire-and-forgetハンドラ320は、順方向のパススルーとして機能する。より正確には、fire-and-forgetハンドラ320は、オフロード操作326を実行することなく、順方向でパイプライン内の次のハンドラ330(1)に制御を転送する。
しかし、HTTP/1.x要求232(x)がfire-and-forgetヘッダを含んでいることをfire-and-forgetハンドラ320が判定した場合、fire-and-forgetハンドラ320は、最大オフロード同時処理数322に基づき、HTTP/1.x要求232(x)についてオフロードをアクティブにするかどうかを判定する。一般に、fire-and-forgetハンドラ320は、オフロードがアクティブであるHTTP/1.x要求232の総数を、最大オフロード同時処理数322に制限する。
fire-and-forgetハンドラ320は、技術的に実現可能な任意の手法で、オフロードがアクティブであるHTTP/1.x要求232の総数を追跡し制限することができる。例えば、幾つかの実施形態では、fire-and-forgetハンドラ320は、GO言語の同時処理機能(例えば、チャネル)を使用して、任意の所与の時間にオフロードがアクティブであるスレッドの総数を制限することができる。他の実施形態では、fire-and-forgetハンドラ320は、オフロードがアクティブである実行スレッドのカウントを維持し、そのカウントを最大オフロード同時処理数322と比較することもできる。カウントが最大オフロード同時処理数322と等しければ、fire-and-forgetハンドラ320は、HTTP/1.x要求232(x)についてオフロードをアクティブにせず、順方向のパススルーとして機能する。より正確には、fire-and-forgetハンドラ320は、オフロード操作326を実行することなく、順方向でパイプライン内の次のハンドラ330(1)に制御を転送する。
代替的な実施形態では、fire-and-forgetハンドラ320は、技術的に実現可能な任意の手法で、HTTP/要求232(x)についてオフロードをアクティブにすることができる。例えば、fire-and-forgetハンドラ320は、HTTP/要求232(x)に関連するオフロードフラグを偽に初期化することができる。HTTP/要求232(x)がfire-and-forgetヘッダを含み、オフロードがアクティブであるHTTP要求の総数が最大オフロード同時処理数322よりも少なければ、fire-and-forgetハンドラ320はオフロードフラグを真に設定する。オフロードフラグが偽であれば、fire-and-forgetハンドラ320はオフロード操作326を実行しない。偽でなければ、fire-and-forgetハンドラ320はオフロード操作326を実行する。
fire-and-forgetハンドラ320が実行スレッドの制御を保持していれば、HTTP/1.x要求232(x)についてオフロードがアクティブであり、fire-and-forgetハンドラ320は、オフロード操作326の実行を開始する。fire-and-forgetハンドラ320は、有効な包括的HTTP/1.x応答234(x)を生成する。次いで、fire-and-forgetハンドラ320は、有効な包括的HTTP/1.x応答234(x)をhttp.responseWriterに書き込む。これに応じて、http.responseWriterは、HTTP/1.x要求232(x)が受信されたクライアント/プロキシTCP接続230を介して、有効な包括的HTTP/1.x応答234(x)を送信する。なお、http.responseWriterへの書き込みは、実行スレッドに関して非停止操作である。http.responseWriterへの書き込み後、fire-and-forgetハンドラ320は、実行スレッドの制御を順方向でパイプライン内の次のハンドラ330(1)に転送する。
ハンドラ330はそれぞれ、実行スレッドの制御をパイプライン内の次のHTTPハンドラに転送する前に、任意の数および種類の操作を行うことができる。実行スレッドの制御がプロキシハンドラ340に転送されると、プロキシハンドラ340は、HTTP/1.x要求232(x)をHTTP/2要求262(x)に変換する。次いで、プロキシハンドラ340は、バックエンドサーバ270へのHTTP/2要求262(x)の送信を試行する。バックエンドサーバ270へのHTTP/2要求262(x)の送信により、プロキシハンドラ340がHTTP/2応答264(x)を受信するか、またはバックエンドサーバ270が対応するHTTP/2応答を送信できないとプロキシハンドラ340が判定するまで、実行スレッドが停止される。バックエンドサーバ270が対応するHTTP/2応答を送信できないとプロキシハンドラ340が判定すれば、プロキシハンドラ340は、HTTP/1.x要求232(x)に関連する成功コードリストに含まれていないステータスコードを有するサーバエラーのHTTP/2応答264(x)を生成する。その後、プロキシハンドラ340は、実行スレッドの制御を、プロキシハンドラ340が制御を受け取ったHTTPハンドラに戻し、これにより逆方向でパイプラインの伝播を開始する。
実行スレッドの制御がfire-and-forgetハンドラ320に戻されると、fire-and-forgetハンドラ320は、オフロード操作326の外または内のいずれかで実行を再開する。HTTP/要求232(x)についてオフロードがアクティブでなければ、fire-and-forgetハンドラ320は、オフロード操作326の外で実行を再開する。fire-and-forgetハンドラ320は、HTTP/2応答264(x)をHTTP/1.x応答234(x)に変換する。次いで、fire-and-forgetハンドラ320は、HTTP/1.x応答234(x)をhttp.responseWriterに書き込む。これに応じて、http.responseWriterは、HTTP/1.x要求232(x)が受信されたクライアント/プロキシTCP接続230を介して、HTTP/1.x応答234(x)を送信する。
しかし、HTTP/1.x要求232(x)についてオフロードがアクティブである場合、fire-and-forgetハンドラ320はオフロード操作326内で実行を再開する。HTTP/2応答264(x)のステータスコードが成功を示していれば、fire-and-forgetハンドラ320は、実行スレッドを終了する。成功を示していない場合、fire-and-forgetハンドラ320は、HTTP/1.x要求232(x)に関連するパーシステンスレベルに対応するエラー処理手順を実行する。
本明細書で前述したように、HTTP/2応答264(x)のステータスコードが、HTTP/1.x要求232(x)に関連する成功コードリストに含まれるステータスコードの1つに一致すれば、fire-and-forgetハンドラ320は、HTTP/2応答264(x)が成功を示していることを判定する。一致しない場合、fire-and-forgetハンドラ320は、HTTP/2応答264(x)が成功を示していないことを判定する。一般に、バックエンドサーバ270は、HTTP/2応答264(x)に任意のステータスコードを含めることができる。このため、HTTP/2応答264(x)がバックエンドサーバ270によって生成されれば、HTTP/2応答264(x)は、成功コードリストに従って成功を示してもよいし、示さなくてもよい。対照的に、バックエンドサーバ270がHTTP/2要求262(x)に応答できなかったことを示すHTTP/2応答264(x)がプロキシハンドラ340によって生成されれば、HTTP/2応答264(x)は成功コードリストに従って成功を示さない。
エラー処理手順の実行の一部として、fire-and-forgetハンドラ320は、fire-and-forgetハンドラ320とプロキシハンドラ340との間で実行スレッドを繰り返し往復伝播させてもよい。エラー処理手順は、実行スレッドをイベントによって(eventfully)終了する。
本明細書に記載されるプロキシアプリケーション250が例示的なものであり、変形および変更が可能であることが理解されるであろう。例えば、代替的な実施形態では、fire-and-forgetハンドラ320は、技術的に実現可能な任意の手法で、HTTP/要求232(x)についてオフロードがアクティブであるかどうかをプロキシハンドラ340に示すことができる。HTTP/要求232(x)についてオフロードがアクティブでなければ、プロキシハンドラ340は、HTTP/1.x応答234(x)を生成し、http.responseWriterに書き込む。次いで、プロキシハンドラ340は実行スレッドを終了する。
説明のみを目的として、図3は、クライアントアプリケーション220(1)から受信される、図2のHTTP/1.x要求232(3)に関連する実行スレッドの制御を、一連の丸囲み番号として示す。HTTP/1.x要求232(3)は、限定されないが、要求ライン、HOSTヘッダ、fire-and-forgetヘッダ、およびボディを含む。要求ラインは、POSTメソッド、要求ターゲット「/upload」、プロトコルバージョンHTTP/1.1を指定する。POSTメソッドは、要求ターゲット「/upload」を作成または修正するために、HTTP/1.x要求232(3)のボディ(図示せず)をバックエンドサーバ270に送る。HOSTヘッダは、バックエンドサーバ270のドメイン名「www.XYZ.com」を指定する。fire-and-forgetヘッダは、名称「Fire-and-Forget」、および200のステータスコードを含む成功コードリストを指定する。HTTP/1.x要求232(3)は、パーシステンスヘッダを含まないため、HTTP/1.x要求232(3)は、デフォルトの高のパーシステンスレベルに関連付けられる。
丸囲みの1番で示されているように、HTTP/1.x要求232(3)に関連する実行スレッドは、HTTPライブラリ層310に入る。HTTPライブラリ層310は、http.responseWriterと、HTTP/1.x要求232(3)を表すhttp.Requestとを生成して、fire-and-forgetハンドラ320に制御を転送する。HTTP/1.x要求232(3)がfire-and-forgetヘッダを含むため、fire-and-forgetハンドラ320は、最大オフロード同時処理数322に基づいて、HTTP/1.x要求232(3)についてオフロードをアクティブにするかどうかを判定する。説明のみを目的として、オフロードがアクティブであるHTTP/1.x要求232の総数は、最大オフロード同時処理数322よりも少ない。したがって、fire-and-forgetハンドラ320は、HTTP/1.x要求232(3)についてオフロードをアクティブにし、オフロード操作326の実行を開始する。
丸囲みの2番が示されているように、fire-and-forgetハンドラ320は、http.responseWriterを構成して、有効な包括的HTTP応答234(x)を非停止態様でクライアントアプリケーション220(1)に送信する。この場合、fire-and-forgetハンドラ320は、実行スレッドを、プロキシハンドラ340が実行スレッドの制御を受け取るまで、パイプラインを通して順方向に伝播させる。プロキシハンドラ340は、HTTP/1.x要求232(3)をHTTP/2要求262(3)に変換する。
丸囲みの3番で示されているように、プロキシハンドラ340は、HTTP/2要求262(3)をバックエンドサーバ270に送信する。この場合、実行スレッドが、丸囲みの4番で示すHTTPステータスライン「504 Gateway Timeout」を指定するHTTP/2応答264(3)を受信する。その後、プロキシハンドラ340は、実行スレッドを、fire-and-forgetハンドラ320に到達するまで、パイプラインを通して逆方向に伝播させる。
fire-and-forgetハンドラ320は、オフロード操作326内で実行を再開する。HTTP/2応答264(3)が成功のステータスコードを指定していないため、fire-and-forgetハンドラ320は、高のパーシステンスレベルに対応するエラー処理プロセスを実行する。より具体的には、丸囲みの5番で示されているように、fire-and-forgetハンドラ320は、再送信の試行328を行う。再送信の試行328を実行するために、fire-and-forgetハンドラ320は、実行スレッドの制御をプロキシハンドラ320(1)に転送し、実行スレッドは、プロキシハンドラ340に到達するまで、パイプラインを通って順方向に再伝播する。
丸囲みの6番で示されているように、プロキシハンドラ340は、バックエンドサーバ270へのHTTP/2要求262(3)の再送信を試行する。その後、丸囲みの7番で示されているように、プロキシハンドラ340は、HTTPステータスライン「200 OK」を指定するHTTP/2応答264(3’)を受信する。プロキシハンドラ340は、実行スレッドを、fire-and-forgetハンドラ320に到達するまで、パイプラインを通して逆方向に再伝播させる。fire-and-forgetハンドラ320は、エラー処理プロセス内で実行を再開する。HTTP/2応答264(3’)のステータスコードが成功を示しているため、fire-and-forgetハンドラ320は実行スレッドを終了する。
なお、本明細書に記載している技術は、限定的でなく例示的なものであり、本発明のより広義の趣旨および範囲から逸脱することなく改変可能であり、記載している実施形態および技術の範囲および趣旨から逸脱しない多くの変更および変形が当業者にとって明らかであろう。特に、プロキシアプリケーション250の機能は、技術的に実現可能な任意の手法で実施することができる。例えば、代替的な実施形態では、プロキシアプリケーション250は、HTTPハンドラ機能のパイプラインの代わりに、任意の数(1つを含む)および種類の機能を含むことができる。
図4は、本発明の様々な実施形態による、ネットワークベースのサービスに関連する要求を処理するための方法ステップのフロー図である。図1~図3のシステムを参照して方法ステップを説明するが、当業者であれば、方法ステップを任意の順序で実施するように構成された任意のシステムが本発明の範囲に入ることを理解するであろう。
図示されているように、方法400は、プロキシアプリケーション250がクライアントアプリケーション220の1つからHTTP要求を受信する、ステップ402で始まる。HTTP要求は、HTTP/1.xフォーマット(すなわち、HTTP/1.x要求232(x))であってもよいし、HTTP/2フォーマット(すなわち、HTTP/2要求262(x))であってもよい。ステップ404で、fire-and-forgetハンドラ320は、HTTP要求がfire-and-forgetヘッダを含んでいるかどうかに基づいて、任意で、最大オフロード同時処理数322にも基づいて、HTTP要求についてオフロードをアクティブにするかどうかを判定する。ステップ406で、fire-and-forgetハンドラ320は、HTTP要求についてオフロードがアクティブであるかどうかを判定する。ステップ406で、HTTP要求についてオフロードがアクティブであることをfire-and-forgetハンドラ320が判定した場合、方法400はステップ408に進む。
ステップ408で、fire-and-forgetハンドラ320は、HTTP要求に関連するバージョンのHTTPで、有効な包括的HTTP応答をクライアントアプリケーション220に送信する。ステップ410で、プロキシハンドラ340は、バックエンドサーバ270への、HTTP要求に対応するHTTP/2要求262の送信を試行する。HTTP要求に対応するHTTP/2要求262は、HTTP要求であってよい。ステップ412で、fire-and-forgetハンドラ320は、成功を示すHTTP/2応答264をプロキシハンドラ340が受信したかどうかを判定する。ステップ412で、成功を示すHTTP/2応答264をプロキシハンドラ340が受信したとfire-and-forgetハンドラ320が判定した場合、方法400は終了する。
しかし、ステップ412で、成功を示すHTTP/2応答264をプロキシハンドラ340が受信しなかったとfire-and-forgetハンドラ320が判定した場合、方法400はステップ414に進む。ステップ414で、fire-and-forgetハンドラ320は、パーシステンスレベルに基づいてエラー処理プロセスを実行する。パーシステンスレベルは、HTTP要求のパーシステンスヘッダで指定されるか、デフォルトのパーシステンスレベルに等しいかのいずれかである。エラー処理プロセスは、任意の数(ゼロを含む)の再送信の試行328を含んでもよい。次いで、方法400は終了する。
ここでステップ406に戻ると、HTTP要求についてオフロードがアクティブでないとfire-and-forgetハンドラ320が判定すれば、方法400はステップ416に直接に進む。ステップ416で、プロキシハンドラ340は、バックエンドサーバ270への、HTTP要求に対応するHTTP/2要求262の送信を試行する。HTTP要求に対応するHTTP/2要求262はHTTP要求であってよい。
ステップ418で、プロキシハンドラ340は、対応するHTTP/2応答264がバックエンドサーバ270から受信されたかどうかを判定する。ステップ418で、対応するHTTP/2応答264がバックエンドサーバ270から受信されたとプロキシハンドラ340が判定した場合、方法400はステップ422に直接に進む。ステップ418で、対応するHTTP/2応答264がバックエンドサーバ270から受信されなかったとプロキシハンドラ340が判定した場合、方法400はステップ420に進む。ステップ420で、プロキシハンドラ340は、サーバエラーのHTTP/2応答264を生成し、方法400はステップ422に進む。
ステップ422で、fire-and-forgetハンドラ320は、あるバージョンのHTTP/2応答264をクライアントアプリケーション220に送る。クライアントアプリケーション220から受信されたHTTP要求がHTTP/2フォーマットであれば、fire-and-forgetハンドラ320は、HTTP/2応答264をクライアントアプリケーション220に送信する。HTTP/2フォーマットでない場合、fire-and-forgetハンドラ320は、HTTP/2応答264をHTTP/1.x応答234に変換し、HTTP/1.x応答234をクライアントアプリケーション220に送信する。次いで、方法400は終了する。
まとめると、開示の技術を使用して、プロキシアプリケーションにより、HTTP/1.x over TCPを実装するクライアントアプリケーションが、ネットワークベースのサービスにアクセスするためにバックエンドサーバと効率的に対話することを可能にすることができる。クライアントアプリケーションは、対応するHTTP応答が重要でないことを示すために、情報提供用アップロードのためのHTTP要求に「fire-and-forget」ヘッダを追加することができる。fire-and-forgetヘッダは、成功とみなされるステータスコードの成功コードリストを指定する。fire-and-forgetヘッダは、デフォルトのパーシステンスレベルに関連付けられ、クライアントアプリケーションは、パーシステンスレベルを明示的に指定する「パーシステンス」ヘッダをHTTP要求に追加することもできる。パーシステンスレベルは、HTTP要求を受信するバックエンドサーバにとっての重要度に相関する。
プロキシアプリケーションは、クライアントアプリケーションとバックエンドサーバとの間の仲介役として機能するプロキシサーバ上で実行される。クライアントアプリケーションからHTTP要求を受信すると、プロキシアプリケーションは、HTTP要求についてオフロードをアクティブにするかどうかを判定する。HTTP要求がfire-and-forgetヘッダを有し、最大オフロード同時処理数に到達していなければ、プロキシアプリケーションは、HTTP要求についてオフロードをアクティブにする。そうでない場合には、プロキシアプリケーションは、HTTP要求のfire-and-forgetをアクティブにしない。
HTTP要求についてオフロードがアクティブであれば、プロキシアプリケーションは有効な包括的HTTP応答をクライアントに送信する。有効な包括的HTTP応答は、成功コードリストに含まれるステータスコードの1つを指定し、これにより、バックエンドサーバがHTTP要求を有効に受信して処理したと意図的に誤って示す。この場合、プロキシアプリケーションは、バックエンドサーバへのHTTP/2バージョンのHTTP要求の送信を試行する。成功コードリストに従って成功を示すHTTP/2応答をプロキシアプリケーションが受信すれば、プロキシアプリケーションは、HTTP/2応答を破棄する。受信しない場合、プロキシアプリケーションは、パーシステンスレベルに基づいてエラー処理プロセスを実行する。エラー処理プロセスは、任意の数の再送信の試行を含むことができる。
HTTP要求についてオフロードがアクティブでなければ、プロキシアプリケーションは、バックエンドサーバへのHTTP/2バージョンのHTTP/1.x要求の送信を試行する。プロキシアプリケーションがバックエンドサーバからHTTP/2応答を受信しなければ、プロキシアプリケーションは、サーバエラーのHTTP/1.x応答をクライアントアプリケーションに送信する。そうでない場合、プロキシアプリケーションは、バックエンドサーバから受信したHTTP/1.xバージョンのHTTP/2応答をクライアントアプリケーションに送信する。
先行技術に比べた開示の技術の少なくとも1つの技術的利点は、開示の技術により、HTTP/1.x over TCPを実装するクライアントアプリケーションのための情報提供型HTTPトランザクションによって対話型HTTPトランザクションが遅延する可能性が低くなる点にある。特に、クライアントアプリケーションから送信された情報提供型HTTPトランザクションにプロキシサーバが応答するとすぐに、クライアントアプリケーションは、バックエンドサーバからの応答を待つ必要なしに、関連するTCP接続を閉じるかまたは再使用することができる。したがって、クライアントアプリケーションが利用可能なTCP接続を全て情報提供型HTTPトランザクションに使用し、対話型HTTPトランザクションの送信および処理を遅延させる可能性が低くなる。さらに、その後にバックエンドサーバへの情報提供型HTTPトランザクションに関連する情報のアップロードをプロキシサーバが試行するため、情報が欠落してしまう可能性が増大しない。また、プロキシサーバが、予め確立され予め認証されたTCP接続を使用してHTTP/2を介してバックエンドサーバと通信するので、クライアントアプリケーションとバックエンドサーバとの間の通信時間が短縮される。これらの技術的利点は、先行技術のアプローチに対する1つ以上の技術的進歩を表すものである。
1. 幾つかの実施形態では、方法は、クライアントアプリケーションから受信された第1の要求が、第1の要求に対する応答をサーバマシンからオフロードできることを示していることを判定するステップと、第1の要求をサーバマシンに送信する前に、サーバマシンが第1の要求の処理に成功したことを示す、第1の要求に対する第1の応答を、クライアントアプリケーションに送信するステップとを含み、第1の応答を受信したことに応じて、クライアントアプリケーションが第2の要求を開始することが可能となる。
2. 第1の要求は、サーバマシンが第1の要求の処理に成功したことを示すステータスコードを含む、条項1記載の方法。
3. 第1の要求は、Hypertext Transmission Protocol(HTTP)/1.xに関連しており、第1の要求をサーバマシンに送信するステップが、第1の要求に基づいて、HTTP/2に関連する第2の要求を生成するステップと、第2の要求とHTTP/2に関連する少なくとも第3の要求とを、サーバマシンへの第1のTransmission Control Protocol(TCP)接続上で多重化するステップとを含む、条項1または2記載の方法。
4. 方法は、サーバマシンが第1の要求の処理に成功していないことを判定するステップと、第1の要求が第1のパーシステンスレベルを示していることを判定するステップと、第1のパーシステンスレベルに基づいて1つ以上のエラー処理操作を行うステップであって、1つ以上のエラー処理操作によりサーバマシンに第1の要求を有効に処理させるステップとをさらに含む、条項1から3までのいずれか1項記載の方法。
5. 第1の要求が第1のパーシステンスレベルを示していることを判定するステップは、第1の要求が、第1のパーシステンスレベルに相当するパーシステンスパラメータの値を指定するヘッダ部分を含んでいることを判定することを含む、条項1から4までのいずれか1項記載の方法。
6. 第1の要求は、サーバマシンにアップロードされる情報提供データを含む、条項1から5までのいずれか1項記載の方法。
7. 第1の要求に対する第2の応答をサーバマシンから受信するステップと、第2の応答をクライアントアプリケーションに送信する代わりに、第2の応答を破棄するステップとをさらに含む、条項1から6までのいずれか1項記載の方法。
8. クライアントアプリケーションが、Transmission Control Protocol(TCP)接続を介して第1の応答を受信し、TCP接続を再使用または再生成して第2の要求を開始する、条項1から7までのいずれか1項記載の方法。
9. 方法は、クライアントアプリケーションから受信された第2の要求が、第2の要求に対する応答をサーバマシンからオフロードできることを示していないことを判定するステップと、第2の要求をサーバマシンに直接に送信するステップと、第2の要求に対する第2の応答をサーバマシンから受信したことに応じて、第2の応答をクライアントアプリケーションに送信するステップとをさらに含む、条項1から8までのいずれか1項記載の方法。
10. 第1の要求に対する応答をオフロードできることを第1の要求が示していることを判定するステップは、第1の要求に対する応答が重要でないことを示すヘッダ部分を第1の要求が含んでいると識別することを含む、条項1から9までのいずれか1項記載の方法。
11. 幾つかの実施形態では、1つ以上の非一時的なコンピュータ可読媒体が、プロセッサによって実行される際に、プロセッサに、クライアントアプリケーションから受信された第1の要求をサーバマシンからオフロードできることを判定するステップと、第1の要求をサーバマシンに送信する前に、サーバマシンが第1の要求の処理に成功したことを示す、第1の要求に対する第1の応答を、クライアントアプリケーションに送信するステップとを行わせるための命令を含み、第1の応答を受信したことに応じて、クライアントアプリケーションが第2の要求を開始することが可能となる。
12. 第1の要求は、Hypertext Transmission Protocol(HTTP)/1.xに関連しており、第1の要求をサーバマシンに送信するステップが、第1の要求に基づいて、HTTP/2に関連する第2の要求を生成するステップと、第2の要求とHTTP/2に関連する少なくとも第3の要求とを、サーバマシンへの第1のTransmission Control Protocol(TCP)接続上で多重化するステップとを含む、条項11記載の1つ以上の非一時的なコンピュータ可読媒体。
13. サーバマシンが第1の要求の処理に成功していないことを判定するステップと、第1の要求が第1のパーシステンスレベルを示していることを判定するステップと、第1のパーシステンスレベルに基づいて1つ以上のエラー処理操作を行うステップであって、1つ以上のエラー処理操作によりサーバマシンに第1の要求を有効に処理させるステップとをさらに含む、条項11または12記載の1つ以上の非一時的なコンピュータ可読媒体。
14. 1つ以上のエラー処理操作は、第1の要求を持続的なストレージに記憶する1つ以上の書き込み操作を含む、条項11から13までのいずれか1項記載の1つ以上の非一時的なコンピュータ可読媒体。
15. 第1の要求は、イベントログ、クライアントアプリケーションが適切に実行されていることを示すハートビート、およびメトリックログのうちの少なくとも1つを含む、条項11から14までのいずれか1項記載の1つ以上の非一時的なコンピュータ可読媒体。
16. 第1の要求に対する第2の応答をサーバマシンから受信するステップと、第2の応答をクライアントアプリケーションに送信する代わりに、第2の応答を破棄するステップとをさらに含む、条項11から15までのいずれか1項記載の1つ以上の非一時的なコンピュータ可読媒体。
17. クライアントアプリケーションが、Transmission Control Protocol(TCP)接続を介して第1の応答を受信し、TCP接続を再使用または再生成して第2の要求を開始する、条項11から16までのいずれか1項記載の1つ以上の非一時的なコンピュータ可読媒体。
18. クライアントアプリケーションから受信された第2の要求をサーバマシンからオフロードできることを判定するステップと、現在のオフロード同時処理数が最大オフロード同時処理数に等しいことを判定するステップと、第2の要求をサーバマシンに直接に送信するステップと、第2の要求に対する第2の応答をサーバマシンから受信したことに応じて、第2の応答をクライアントアプリケーションに送信するステップとをさらに含む、条項11から17までのいずれか1項記載の1つ以上の非一時的なコンピュータ可読媒体。
19. 第1の要求をオフロードできることを判定するステップが、第1の要求に対する応答が重要でないことを示すヘッダ部分を第1の要求が含んでいることを識別することを含む、条項11から18までのいずれか1項記載の1つ以上の非一時的なコンピュータ可読媒体。
20. 幾つかの実施形態では、システムが、命令を記憶する1つ以上のメモリと、1つ以上のメモリに結合された1つ以上のプロセッサとを備え、1つ以上のプロセッサが、命令を実行する際に、クライアントアプリケーションから第1の接続を介して受信された第1の要求が、第1の要求に対する応答をサーバマシンからオフロードできることを示していることを判定し、第1の要求をサーバマシンに送信する前に、サーバマシンが第1の要求の処理に成功したことを示す、第1の要求に対する第1の応答を、クライアントアプリケーションに送信するように構成されており、第1の応答を受信したことに応じて、クライアントアプリケーションが第1の接続を再使用または再生成して第2の要求を開始することが可能となる。
いずれかの請求項に記載される請求項の要素および/または本出願に記載しているいずれかの要素のあらゆる任意のまた全ての組み合わせが、本発明および保護の企図された範囲内に入る。
様々な実施形態の説明は、例示を目的として提示しているものであり、網羅的な提示または開示している実施形態への限定を意図するものでない。記載している実施形態の範囲および趣旨から逸脱しない多くの変更および変形が当業者にとって明らかであろう。
本実施形態の態様は、システム、方法、またはコンピュータプログラム製品として具現化することができる。したがって、本開示の態様は、完全にハードウェアの実施形態、完全にソフトウェアの実施形態(ファームウェア、常駐ソフトウェア、マイクロコードなどを含む)、またはソフトウェアおよびハードウェアの態様を組み合わせた実施形態の形態をとることができ、本明細書では、これらは全て「モジュール」、「システム」、または「コンピュータ」と総称する場合がある。加えて、本開示に記載される任意のハードウェアおよび/またはソフトウェア技術、プロセス、機能、構成要素、エンジン、モジュール、またはシステムは、回路または回路のセットとして実装することができる。さらに、本開示の態様は、コンピュータ可読プログラムコードが具現化された1つ以上のコンピュータ可読媒体に具現化されたコンピュータプログラム製品の形態をとることができる。
1つ以上のコンピュータ可読媒体の任意の組み合わせを利用することができる。コンピュータ可読媒体は、コンピュータ可読信号媒体またはコンピュータ可読記憶媒体であってよい。コンピュータ可読記憶媒体は、例えば、限定されないが、電子的な、磁気的な、光学的な、電磁的な、赤外線的な、もしくは半導体のシステム、装置、もしくはデバイス、またはこれらの任意の適切な組み合わせであってよい。コンピュータ可読記憶媒体のより具体的な例(非排他的なリスト)としては、1本以上の電線を有する電気接続部、ポータブルコンピュータディスケット、ハードディスク、ランダムアクセスメモリ(RAM)、リードオンリーメモリ(ROM)、消去可能なプログラマブルリードオンリーメモリ(EPROMまたはフラッシュメモリ)、光ファイバ、ポータブルコンパクトディスクリードオンリーメモリ(CD-ROM)、光学記憶装置、磁気記憶装置、またはこれらの任意の適切な組み合わせを挙げることができよう。本文書の文脈では、コンピュータ可読記憶媒体は、命令実行システム、装置もしくはデバイスによってまたはこれらに関連して使用されるプログラムを含むこと、または記憶することができる任意の有形の媒体であってよい。
本開示の態様は、本開示の実施形態による方法、装置(システム)、およびコンピュータプログラム製品のフローチャート図および/またはブロック図を参照して上述されている。フローチャート図および/またはブロック図の各ブロック、ならびにフローチャート図および/またはブロック図のブロックの組み合わせは、コンピュータプログラム命令によって実施できることが理解されるであろう。これらのコンピュータプログラム命令は、機械を製造するために、汎用コンピュータ、特殊目的用コンピュータ、または他のプログラム可能なデータ処理装置のプロセッサに提供することができる。命令は、コンピュータまたは他のプログラム可能なデータ処理装置のプロセッサによって実行される際に、フローチャートおよび/またはブロック図の1つ以上のブロックに指定された機能/行為の実施を可能にする。このようなプロセッサは、限定されないが、汎用プロセッサ、特殊目的用プロセッサ、特定用途向けプロセッサ、またはフィールドプログラマブルゲートアレイであってよい。
図中のフローチャートおよびブロック図は、本開示の様々な実施形態によるシステム、方法、およびコンピュータプログラム製品の可能な実施のアーキテクチャ、機能、および動作を例示するものである。これに関連して、フローチャートまたはブロック図の各ブロックは、指定された論理的機能を実施するための1つ以上の実行可能な命令を含むコードのモジュール、セグメントまたは部分を表すことができる。なお、幾つかの代替的な実施形態では、ブロックに記載される機能が、図に記載される順序以外で行われる場合がある。例えば、連続して示される2つのブロックが、関係する機能に応じて、実際には実質的に同時に実行される場合があり、ブロックが逆の順序で実行される場合もある。なお、ブロック図および/またはフローチャート図の各ブロック、ならびにブロック図および/またはフローチャート図のブロックの組み合わせは、指定された機能または行為を行う特殊目的用のハードウェア式システム、または特殊目的用のハードウェアとコンピュータ命令との組み合わせによって実施することができる。
前述した事項は、本開示の実施形態に向けられるが、本開示の基本的な範囲から逸脱することなく、本開示の他の実施形態および更なる実施形態を考案することができ、本開示の範囲は、以下の請求項によって決定される。
以下、本発明の好ましい実施形態を項分け記載する。
実施形態1
コンピュータ実装方法であって、前記方法が、
クライアントアプリケーションから受信された第1の要求が前記第1の要求に対する応答をサーバマシンからオフロードできることを示していることを判定するステップと、
前記第1の要求を前記サーバマシンに送信する前に、前記サーバマシンが前記第1の要求の処理に成功したことを示す、前記第1の要求に対する第1の応答を、前記クライアントアプリケーションに送信するステップと
を含み、
前記第1の応答を受信したことに応じて、前記クライアントアプリケーションが第2の要求を開始することが可能となる、方法。
実施形態2
前記第1の要求は、前記サーバマシンが前記第1の要求の処理に成功したことを示すステータスコードを含む、実施形態1記載の方法。
実施形態3
前記第1の要求は、Hypertext Transmission Protocol(HTTP)/1.xに関連しており、前記第1の要求を前記サーバマシンに送信するステップが、
前記第1の要求に基づいて、HTTP/2に関連する第2の要求を生成するステップと、
前記第2の要求とHTTP/2に関連する少なくとも第3の要求とを、前記サーバマシンへの第1のTransmission Control Protocol(TCP)接続上で多重化するステップと
を含む、実施形態1記載の方法。
実施形態4
前記方法は、
前記サーバマシンが前記第1の要求の処理に成功していないことを判定するステップと、
前記第1の要求が第1のパーシステンスレベルを示していることを判定するステップと、
前記第1のパーシステンスレベルに基づいて1つ以上のエラー処理操作を行うステップであって、前記1つ以上のエラー処理操作により前記サーバマシンに前記第1の要求を有効に処理させるステップと
をさらに含む、実施形態1記載の方法。
実施形態5
前記第1の要求が第1のパーシステンスレベルを示していることを判定するステップは、前記第1の要求が、前記第1のパーシステンスレベルに相当するパーシステンスパラメータの値を指定するヘッダ部分を含んでいることを判定するステップを含む、実施形態4記載の方法。
実施形態6
前記第1の要求は、前記サーバマシンにアップロードされる情報提供データを含む、実施形態1記載の方法。
実施形態7
前記方法は、
前記第1の要求に対する第2の応答を前記サーバマシンから受信するステップと、
前記第2の応答を前記クライアントアプリケーションに送信する代わりに、前記第2の応答を破棄するステップと、
をさらに含む、実施形態1記載の方法。
実施形態8
前記クライアントアプリケーションが、Transmission Control Protocol(TCP)接続を介して前記第1の応答を受信し、前記TCP接続を再使用または再生成して前記第2の要求を開始する、実施形態1記載の方法。
実施形態9
前記方法は、
前記クライアントアプリケーションから受信された前記第2の要求が、前記第2の要求に対する応答を前記サーバマシンからオフロードできることを示していないことを判定するステップと、
前記第2の要求を前記サーバマシンに直接に送信するステップと、
前記第2の要求に対する第2の応答を前記サーバマシンから受信したことに応じて、前記第2の応答を前記クライアントアプリケーションに送信するステップと、
をさらに含む、実施形態1記載の方法。
実施形態10
前記第1の要求に対する応答をオフロードできることを前記第1の要求が示していることを判定するステップは、前記第1の要求に対する前記応答が重要でないことを示すヘッダ部分を前記第1の要求が含んでいることを識別するステップを含む、実施形態1記載の方法。
実施形態11
1つ以上の非一時的なコンピュータ可読媒体であって、1つ以上のプロセッサによって実行される際に、前記1つ以上のプロセッサに、
クライアントアプリケーションから受信された第1の要求をサーバマシンからオフロードできることを判定するステップと、
前記第1の要求を前記サーバマシンに送信する前に、前記サーバマシンが前記第1の要求の処理に成功したことを示す、前記第1の要求に対する第1の応答を、前記クライアントアプリケーションに送信するステップと
を行わせるための命令を含み、
前記第1の応答を受信したことに応じて、前記クライアントアプリケーションが第2の要求を開始することが可能となる、1つ以上の非一時的なコンピュータ可読媒体。
実施形態12
前記第1の要求は、Hypertext Transmission Protocol(HTTP)/1.xに関連しており、前記第1の要求を前記サーバマシンに送信するステップが、
前記第1の要求に基づいて、HTTP/2に関連する第2の要求を生成するステップと、
前記第2の要求とHTTP/2に関連する少なくとも第3の要求とを、前記サーバマシンへの第1のTransmission Control Protocol(TCP)接続上で多重化するステップと
を含む、実施形態11記載の1つ以上の非一時的なコンピュータ可読媒体。
実施形態13
前記サーバマシンが前記第1の要求の処理に成功していないことを判定するステップと、
前記第1の要求が第1のパーシステンスレベルを示していることを判定するステップと、
前記第1のパーシステンスレベルに基づいて1つ以上のエラー処理操作を行うステップであって、前記1つ以上のエラー処理操作により前記サーバマシンに前記第1の要求を有効に処理させるステップと
をさらに含む、実施形態11記載の1つ以上の非一時的なコンピュータ可読媒体。
実施形態14
前記1つ以上のエラー処理操作は、前記第1の要求を持続的なストレージに記憶する1つ以上の書き込み操作を含む、実施形態13記載の1つ以上の非一時的なコンピュータ可読媒体。
実施形態15
前記第1の要求は、イベントログ、前記クライアントアプリケーションが適切に実行されていることを示すハートビート、およびメトリックログのうちの少なくとも1つを含む、実施形態11記載の1つ以上の非一時的なコンピュータ可読媒体。
実施形態16
前記第1の要求に対する第2の応答を前記サーバマシンから受信するステップと、
前記第2の応答を前記クライアントアプリケーションに送信する代わりに、前記第2の応答を破棄するステップと
をさらに含む、実施形態11記載の1つ以上の非一時的なコンピュータ可読媒体。
実施形態17
前記クライアントアプリケーションが、Transmission Control Protocol(TCP)接続を介して前記第1の応答を受信し、前記TCP接続を再使用または再生成して前記第2の要求を開始する、実施形態11記載の1つ以上の非一時的なコンピュータ可読媒体。
実施形態18
前記クライアントアプリケーションから受信された前記第2の要求を前記サーバマシンからオフロードできることを判定するステップと、
現在のオフロード同時処理数が最大オフロード同時処理数に等しいことを判定するステップと、
前記第2の要求を前記サーバマシンに直接に送信するステップと、
前記第2の要求に対する第2の応答を前記サーバマシンから受信したことに応じて、前記第2の応答を前記クライアントアプリケーションに送信するステップと、
をさらに含む、実施形態11記載の1つ以上の非一時的なコンピュータ可読媒体。
実施形態19
前記第1の要求をオフロードできることを判定するステップは、前記第1の要求に対する前記応答が重要でないことを示すヘッダ部分を前記第1の要求が含んでいることを識別するステップを含む、実施形態11記載の1つ以上の非一時的なコンピュータ可読媒体。
実施形態20
システムであって、
命令を記憶する1つ以上のメモリと、
前記1つ以上のメモリに結合された1つ以上のプロセッサと
を備え、前記1つ以上のプロセッサが、前記命令を実行する際に、
クライアントアプリケーションから第1の接続を介して受信された第1の要求が、前記第1の要求に対する応答をサーバマシンからオフロードできることを示していることを判定し、
前記第1の要求を前記サーバマシンに送信する前に、前記サーバマシンが前記第1の要求の処理に成功したことを示す、前記第1の要求に対する第1の応答を、前記クライアントアプリケーションに送信する
ように構成されており、
前記第1の応答を受信したことに応じて、前記クライアントアプリケーションが前記第1の接続を再使用または再生成して第2の要求を開始することが可能となる、システム。