(57)【特許請求の範囲】
【請求項１】
カナリア分析を行う際に要求をルーティングするための、コンピュータによって実装される方法において、
第１の要求の少なくとも１つの特性、前記第１の要求と関連づけられた時間、およびルーティングのための時間窓に基づいて、第１のマッピングを計算する工程と、
前記第１のマッピングが、前記第１の要求が複数のサーバを介して提供されるサービスに対する変更と関連づけられることを示しているか否かを決定する工程と、
前記第１のマッピングが、前記第１の要求が前記変更と関連づけられることを示しているか否かに基づいて、前記第１の要求を、前記変更を実装する第１のサーバまたは前記変更を実装しない第２のサーバのいずれかにルーティングする工程とを含むことを特徴とする方法。
【請求項２】
前記第１の要求の前記少なくとも１つの特性が、装置識別子を含み、
前記第１のマッピングを計算する前記工程が、
前記装置識別子に対して第１のハッシュ処理を行うことにより装置ハッシュを生成する工程と、
現在の時間を前記ルーティングのための前記時間窓で除算することにより、前記第１の要求と関連づけられた前記時間が時区間内にある時区間を決定する工程と、
前記時区間に対して第２のハッシュ処理を行うことにより時間ハッシュを生成する工程と、
前記装置ハッシュおよび前記時間ハッシュに対して第３のハッシュ処理を行うことにより前記第１のマッピングを生成する工程と
を含む、請求項１記載のコンピュータによって実装される方法。
【請求項３】
前記第１の要求と関連づけられた前記時間が、前記ルーティングのための前記時間窓に等しい持続時間を有する第１の時区間内にあり、
第２の要求の少なくとも１つの特性が前記第１の要求の前記少なくとも１つの特性に等しい第２の要求を受信する工程と、
前記第２の要求と関連づけられた時間が前記第１の時区間内にあるか否かに基づいて、前記第１の要求を、前記変更を実装する第３のサーバまたは前記変更を実装しない第４のサーバのいずれかにルーティングする工程とを更に含む、
請求項１記載のコンピュータによって実装される方法。
【請求項４】
前記第１のマッピングを計算する前記工程が、前記第１の要求の第１の特性、前記第１の要求と関連づけられた前記時間、および前記ルーティングのための前記時間窓に対してハッシュ処理および巡回冗長検査処理のうちの少なくとも１つを行う工程を含む、請求項１記載のコンピュータによって実装される方法。
【請求項５】
前記変更がソウトウェア更新を含む、請求項１記載のコンピュータによって実装される方法。
【請求項６】
前記要求の前記少なくとも１つの特性が、装置識別子、クライアント識別子、ＥＳＮ、またはセッション識別子のうちの１つを含む、請求項１記載のコンピュータによって実装される方法。
【請求項７】
プロセッサによって指示が実行された際に、該プロセッサに、
第１の要求の第１の特性に基づいて、サービスに対する変更と関連づけられるマッピングの割合を決定する工程と、
前記第１の要求の第２の特性、前記第１の要求と関連づけられた時間、およびルーティングのための時間窓に基づいて、第１のマッピングを計算する工程と、
前記第１のマッピングおよび複数のマッピングの割合に基づく比較処理を行うことにより、前記第１のマッピングが、前記第１の要求が前記変更と関連づけられることを示しているか否かを決定する工程と、
前記第１のマッピングが、前記第１の要求が前記変更と関連づけられることを示しているか否かに基づいて、前記第１の要求を、前記変更を実装する第１のサーバまたは前記変更を実装しない第２のサーバのいずれかにルーティングする工程と
を行わせる指示を含むことを特徴とするコンピュータ可読ストレージ媒体。
【請求項８】
前記第１のマッピングを計算する前記工程が、前記第２の特性、前記第１の要求と関連づけられた前記時間、および前記ルーティングのための前記時間窓に対してハッシュ処理および巡回冗長検査処理のうちの少なくとも１つを行う工程を含む、請求項７記載のコンピュータ可読ストレージ媒体。
【請求項９】
前記ハッシュ処理および前記巡回冗長検査処理のうちの前記少なくとも１つが、前記変更と関連づけられた一意の定数に基づく、請求項８記載のコンピュータ可読ストレージ媒体。
【請求項１０】
前記第２の特性が装置識別子を含み、
前記第１のマッピングを計算する前記工程が、
前記装置識別子に対して第１のハッシュ処理を行うことにより装置ハッシュを生成する工程と、
現在の時間を前記ルーティングのための前記時間窓で除算することにより、前記第１の要求と関連づけられた前記時間が時区間内にある時区間を決定する工程と、
前記時区間に対して第２のハッシュ処理を行うことにより時間ハッシュを生成する工程と、
前記装置ハッシュおよび前記時間ハッシュに対して第３のハッシュ処理を行うことにより前記第１のマッピングを生成する工程と
を含む、請求項７記載のコンピュータ可読ストレージ媒体。
【請求項１１】
前記第１の要求と関連づけられた前記時間が、前記ルーティングのための前記時間窓に等しい持続時間を有する第１の時区間内にあり、
前記第１の要求の前記第１の特性に等しい第１の特性を有する第２の要求を受信する工程と、
前記第２の要求と関連づけられた時間が前記第１の時区間内にあるか否かに基づいて、前記第１の要求を、前記変更を実装する第３のサーバまたは前記変更を実装しない第４のサーバのいずれかにルーティングする工程と
を更に含む、請求項７記載のコンピュータ可読ストレージ媒体。
【請求項１２】
開始時間と終了時間との間の差分が前記ルーティングのための前記時間窓に等しく、
前記第１のマッピングを計算する前記工程が、
現在の時間が前記開始時間を超え且つ前記終了時間を超えない場合に、第１のハッシュ値に等しい前記第１のマッピングを設定する工程、または、
前記現在の時間が前記開始時間を超えないまたは前記終了時間を超える場合に、第２のハッシュ値に等しい前記第１のマッピングを設定する工程
を含む、請求項７記載のコンピュータ可読ストレージ媒体。
【請求項１３】
前記第１の要求の前記第２の特性が、前記第１の要求が第１のクライアント装置と関連づけられていることを指定しており、前記第１のクライアント装置が第１の装置タイプと関連づけられており、前記第１のマッピングが、前記要求が前記変更と関連づけられることを示しているか否かを決定する前記工程が、前記第１のマッピングと、前記変更と関連づけられる前記第１の装置タイプのクライアント装置の割合を指定するレートとに基づいて、比較処理を行う工程を含む、請求項７記載のコンピュータ可読ストレージ媒体。
【請求項１４】
前記ルーティングのための前記時間窓を、前記第１の特性に基づいて設定する工程を更に含む、請求項７記載のコンピュータ可読ストレージ媒体。
【請求項１５】
カナリア分析を行う際に要求をルーティングするよう構成されたシステムにおいて、
サービスに対する変更を実装する第１のサーバと、
前記サービスを実装するが前記変更を実装しない複数のサーバと、
スティッキーなカナリアルータであって、
要求の少なくとも１つの特性に基づいて第１のマッピングを計算し、
前記要求と関連づけられた時間、ルーティングのための時間窓、および前記変更と関連づけられた一意の定数に基づいて第２のマッピングを計算し、
前記第１のマッピングおよび前記第２のマッピングに基づいて第３のマッピングを計算し、
前記第３のマッピングが、前記要求が前記変更と関連づけられることを示しているか否かを決定し、
前記第３のマッピングが、前記要求が前記変更と関連づけられることを示しているか否かに基づいて、前記要求を前記第１のサーバまたは前記複数のサーバのいずれかにルーティングする
よう構成されたスティッキーなカナリアルータと
を含むことを特徴とするシステム。
【発明の詳細な説明】
【関連出願の相互参照】
【０００１】
本願は、２０１５年１０月２３日に出願された米国特許出願第１４／９２２，１０１号による利益を主張するものであり、これを参照して本明細書に組み込む。
【技術分野】
【０００２】
本発明の実施形態は、一般的に、コンピュータサイエンスに関し、より具体的には、カナリア分析を用いて、サーバ側挙動のクライアント側効果を決定する技術に関する。
【背景技術】
【０００３】
クライアントがクライアント装置を介してサービスを要求し、それに応答してサーバがサービスを提供するクライアント−サーバアーキテクチャを介して、多くのサービス提供者がサービスを供給している。例えば、Ｎｅｔｆｌｉｘ社は、オンデマンドストリーミングビデオをクライアントに供給するサービス提供者である。クライアントは要求を提出し（例えば、クライアント装置を介して、特定のビデオを再生することを要求し）、Ｎｅｔｆｌｉｘ社のサーバは、要求に応答して、ビデオをクライアント装置に配信するためにソウトウェアを実行する。クライアントは、サポートされている任意のクライアント装置（例えば、ビデオゲームコンソール、テレビ、携帯型機器等）を用いて、要求を入力し得る。
【０００４】
クライアント体験の改善の一部として、サービス提供者は、しばしば、新たな機能を導入する、既存の機能を改善する、および／または不具合を修正するソウトウェア更新を展開する。より具体的には、サービス提供者はソウトウェア更新をサーバに「プッシュ」し、次に、サーバは、更新されたソウトウェアを実行する。クライアント体験がソウトウェア更新によって悪影響を受けないことを確実にするための試みにおいて、サービス提供者は、ソウトウェア更新を展開する前に、ソウトウェア更新を検証するための様々なテスト方法を用いるのが典型的である。しかし、サポートされている全てのタイプのクライアント装置上において、全てのクライアントワークフローを通して、ソウトウェア更新を手動でテストすることは、たとえ不可能ではないとしても、通常は非常に困難であると共に時間がかかる。例えば、Ｎｅｔｆｌｉｘ社のオンデマンドストリーミングビデオサービスは、多くのブルーレイディスクプレイヤー、多くのタブレットコンピュータ、多くの携帯電話、多くの高精細テレビ受信機、多くのホームシアターシステム、多くのセットトップボックス、多くのビデオゲームコンソール等をサポートしている。その結果、サポートされている各タイプのクライアント装置を用いて、ソウトウェア更新を網羅的にテストするのに要する時間の量は、許容不可能なほど長い。更に、ソウトウェア更新の展開前に、ソウトウェア更新によって生じる不具合が検出されず、補正されない場合には、クライアント体験の質が低下し得る。
【０００５】
ソウトウェア更新によって生じる未検出の不具合の影響を低減する１つの手法において、一部のサービス提供者は、カナリア分析として知られている展開プロセスを用いる。カナリア分析では、サービス提供者は、ソウトウェア更新を比較的小さい割合の「カナリア」サーバにプッシュし、一方、比較的大きい割合の「ベースライン」サーバは変更されず、ベースライン（即ち、未更新の）ソウトウェアを実行する。ソウトウェア更新は限られた数のサーバ上のみでテストされるので、ソウトウェア更新によって不具合が生じた場合、その影響を受けるのは、比較的少数のクライアント装置と関連づけられた比較的小さい割合の要求である。
【０００６】
カナリアサーバおよびベースラインサーバが動作している際に、サービス提供者は、ソウトウェア更新の効果を評価するために、サーバの動作を測定する。一般的に、そのような測定の結果を「サーバ側測定指標」として参照する。カナリアサーバと関連づけられたサーバ側測定指標と、ベースラインサーバと関連づけられたサーバ側測定指標とを比較することにより、サービス提供者は、ソウトウェア更新によって生じた１以上の不具合を示す異常を検出し得る。例えば、ソウトウェア更新によって更なるレイテンシーが生じるものとする。カナリア分析中、サーバ側測定指標は、カナリアサーバと関連づけられたレイテンシーが、ベースラインサーバと関連づけられたレイテンシーを顕著に超えることを示し得る。この決定が行われたら、サービス提供者は、最終的なソウトウェア更新を全てのサーバにプッシュする前に、更なるレイテンシーを解消するためにソウトウェア更新を修正し得る。
【０００７】
しかし、カナリア分析は、カナリアサーバの動作における異常を検出することにより、ソウトウェア更新の展開と関連づけられたリスクを低減し得るが、ソウトウェア更新によって生じた一部の不具合が、上述のカナリア分析プロセスによる検出から逃れる場合もあり得る。特に、カナリア分析中に、ベースラインソウトウェアも使用可能であることにより、クライアント装置の動作に対するソウトウェア更新の効果が覆い隠される場合がある。例えば、特定のクライアント装置が、カナリアサーバによって受信される要求を発行し、次に、カナリアサーバが、要求に対する応答を生成するために、更新されたソウトウェアを実行するものとする。更に、更新されたソウトウェアと関連づけられた不具合が、カナリアサーバを誤作動させて、特定のクライアント装置が応答を解釈できなくなるものとする。従来のカナリア分析プロセスでは、特定のクライアント装置は要求を再試行し、サービスを実装するサーバのうちの比較的少数がカナリアサーバであるので、この第２の要求はベースラインサーバが受信する可能性が最も高い。ベースラインサーバはベースラインソウトウェアを実行し、その結果、第２の要求を正しく処理して、第２の要求に対する応答を生成する。この特定のクライアント装置は、第２の要求に対する応答を正しく解釈できるので、サーバ側測定指標は、ソウトウェア更新と関連づけられた問題を示さない。この場合、この不具合は実際上、検出から逃れることになる。
【０００８】
クライアント装置の動作に対するサーバの挙動のそのような未検出の効果（本明細書においては、サーバ側挙動のクライアント側効果と称する）は、データ差分、フォーマット変更、空のサーバ応答等を含み得る。動作においては、未検出の不具合を生じたソウトウェア更新が、カナリア分析で合格となった場合には、サービス提供者は、不具合に気づかずに、ソウトウェア更新を全てのサーバにプッシュすることとなる。このとき、ベースラインソウトウェアはもはや使用できないので、ソウトウェア更新に存在する不具合が、複数のタイプのクライアント装置にわたるクライアント体験に負の影響を与え得る。
【発明の概要】
【発明が解決しようとする課題】
【０００９】
上記で示した通り、当該技術分野において、サーバ装置上で実行されるソウトウェアに対する変更をテストする際に、不具合を検出するためのより効果的な技術が必要である。
【課題を解決するための手段】
【００１０】
本発明の一実施形態は、カナリア分析を行う際に要求をルーティングするための、コンピュータによって実装される方法を述べる。この方法は、第１の要求の少なくとも１つの特性、第１の要求と関連づけられた時間、およびルーティングのための時間窓に基づいて、第１のマッピングを計算する工程と、第１のマッピングが、第１の要求がサーバによって提供されるサービスに対する変更と関連づけられることを示しているか否かを決定する工程と、第１のマッピングが、第１の要求が変更と関連づけられることを示しているか否かに基づいて、第１の要求を、変更を実装する第１のサーバまたは変更を実装しない第２のサーバのいずれかにルーティングする工程とを含む。
【発明の効果】
【００１１】
要求をルーティングするための本開示の技術の１つの長所は、サービス提供者が、これらの技術を利用して、クライアント体験およびサーバの挙動の両方に対する、サービスの変更の効果を総合的に分析し得ることである。特に、変更のクライアント側効果をモニタリングするために、サービス提供者は、クライアント装置の或るサブセットからの要求が、ほぼ完全なクライアントセッションにわたって、変更を実装するサーバに一貫してルーティングされるように、時間窓を構成し得る。そのサブセットに含まれるクライアント装置は、その時間窓の持続時間にわたって、変更されていないサービスにアクセスできないので、サービス提供者は、サービス提供者がそれらのクライアント装置に対する変更の効果を分析することを可能にする測定指標を収集し得る。
【図面の簡単な説明】
【００１２】
【図１Ａ】本発明の１以上の態様を実装するよう構成されたシステムの概念図
【図１Ｂ】本発明の様々な実施形態による、図１Ａのサービス提供者インフラのより詳細な図
【図２】本発明の様々な実施形態による、図１Ｂのスティッキーなカナリアルータのより詳細な図
【図３】本発明の様々な実施形態による、図２のスティッキーなカナリアルータによって実装されるルーティングの一例を示す
【図４】本発明の様々な実施形態による、サービスと関連づけられたソウトウェア更新のカナリア分析を行う際に要求をルーティングする方法のステップのフロー図
【発明を実施するための形態】
【００１３】
本発明の上記の特徴を詳細に理解できるように、上記で簡潔に要約した本発明を、実施形態を参照してより具体的に説明する。実施形態の幾つかが、添付の図面に示されている。しかし、添付の図面は、本発明の典型的な実施形態のみを示すものであり、本発明の範囲を限定するものとは見なされず、本発明は、他の等しく効果的な実施形態を認め得ることを留意されたい。
【００１４】
以下の説明において、本発明のより完全な理解を提供するために、多くの具体的な詳細が述べられる。しかし、当業者には、これらの具体的な詳細の１以上を含まずとも本発明が実施され得ることが自明である。
【００１５】
システムの概観
図１は、本発明の１以上の態様を実装するよう構成されたシステム１００の概念図である。図示されるように、システム１００は、クラウド１０２とやりとりする機能がある様々なクライアント装置に接続されたクラウド１０２（例えば、カプセル化された共有リソース、ソフトウェア、データ等）を含むが、それに限定されない。そのようなクライアント装置としては、デスクトップコンピュータ１０８、ラップトップ１０６、スマートフォン１０４、スマートテレビ１０９、ゲームコンソール１０７、タブレット１０５、テレビに接続された機器（図示せず）、携帯型機器（図示せず）、およびストリーミングエンターテインメント機器（図示せず）が挙げられるが、それらに限定されない。
【００１６】
クラウド１０２は、任意の数（０を含む）の中央処理装置（ＣＰＵ）１１２、グラフィック処理装置（ＧＰＵ）１１４、メモリ１１６等で構成された任意の数のコンピュートインスタンス１１０を含み得る。動作においては、ＣＰＵ１１２はコンピュートインスタンス１１０のマスタープロセッサであり、コンピュートインスタンス１１０に含まれる他の構成要素の動作を制御し調和させる。具体的には、ＣＰＵ１１２は、ＧＰＵ１１４の動作を制御するコマンドを発行する。ＧＰＵ１１４には、グラフィックおよびビデオ処理のために最適化された回路（例えば、ビデオ出力回路を含む）が組み込まれている。様々な実施形態において、ＧＰＵ１１４には、コンピュートインスタンス１１０の他の要素のうちの１以上が統合され得る。メモリ１１６は、コンピュートインスタンス１１０のＣＰＵ１１２およびＧＰＵ１１４が用いるためのコンテンツ（例えばソフトウェアアプリケーションおよびオーディオビジュアルデータ等）を格納する。動作において、クラウド１０２は、クライアント装置（例えば、ラップトップ１１０）から入力されたクライアント情報を受信し、コンピュートインスタンス１１０のうちの１以上がクライアント情報に対する処理を行い、クラウド１０２は、処理された情報をクライアント装置に送信する。
【００１７】
別の実施形態では、クラウド１０２は、任意のタイプのクラウドコンピューティング環境と置き換えられ得る。他の実施形態では、システム１００は、クラウド１０２の代わりに、任意の分散型コンピュータシステムを含み得る。更に別の実施形態では、システム１００はクラウド１０２を含まず、その代わりに、システム１００は、任意の数の処理装置（例えば、任意の組合せの中央処理装置および／またはグラフィック処理装置）を実装する単一のコンピューティング装置を含む。
【００１８】
一般的に、クラウド１０２に含まれるコンピュートインスタンス１１０は、１以上のアプリケーションを実行する１以上のサーバを実装するよう構成される。図示されるように、コンピュートインスタンス１１０１〜１１０Ｎは、サービス提供者インフラ１１８に含まれるサーバとして構成される。
【００１９】
図１Ｂは、本発明の様々な実施形態による、図１Ａのサービス提供者インフラ１１８のより詳細な図である。図示されるように、サービス提供者インフラ１１８は、エッジサービスクラスタ１２０、プロダクションクラスタ１４０、ベースラインクラスタ１５０、およびカナリアクラスタ１６０を含むが、それらに限定されない。エッジサービスクラスタ１２０、プロダクションクラスタ１４０、ベースラインクラスタ１５０、およびカナリアクラスタ１６０は、サーバとして構成されたコンピュートインスタンス１１０のうちの１以上を含む。説明の目的で、プロダクションクラスタ１４０に含まれるサーバを、本明細書においてはプロダクションサーバとして参照し、ベースラインクラスタ１５０に含まれるサーバを、本明細書においてはベースラインサーバとして参照し、カナリアクラスタ１６０に含まれるサーバを、本明細書においてはカナリアサーバとして参照する。
【００２０】
動作においては、クライアント装置は、サービス提供者インフラ１１８において実装されるサービスとやりとりするクライアントセッションの一部として、要求を発行する。この要求に応答して、サービス提供者インフラ１８８に含まれるサーバは、ソウトウェアを実行し、要求に対する応答を発行する。各クライアントセッションは、１以上の関連するタスクを達成することが意図された一群の挙動を含む。例えば、サービスはビデオ配信サービスであり、クライアント装置はラップトップ１０６であるものとする。クライアントセッションは、クライアントが、サービス提供者インフラ１１８に含まれるサーバによって生成されたグラフィカルユーザインターフェース（ＧＵＩ）をロードしたときから、クライアントが再生するビデオを選択したときまでに、ラップトップ１０６によってサービス提供者インフラ１１８へと発行された複数の要求を含み得る。
【００２１】
動作においては、エッジサービスクラスタ１２０は、サービスを実装するサーバへのゲートウェイとして動作する。とりわけ、エッジサービスクラスタ１２０は、クライアント装置からの要求を受信し、それらの要求を、サービスを実装するソウトウェアを実行するサーバにルーティングする。典型的には、サービス提供者は、クライアント体験の改善の一部として、サービスと関連づけられたソウトウェアを定期的に変更する。より具体的には、サービス提供者は、サーバによって実装されるソウトウェアを修正するソウトウェア更新をプッシュする。典型的には、サービス提供者は、ソウトウェア更新をプッシュする前に、サービスと関連づけられたソウトウェア更新によって生じた不具合（あれば）を検出することを試みる。しかし、しばしば、サポートされているタイプのクライアント装置が多数であること、および／またはクライアントのワークフローが多数であることにより、総合的なテストは実現不可能である。この理由から、エッジサービスクラスタ１２０は、カナリア分析を可能にするよう構成される。
【００２２】
カナリア分析の一部として、エッジサービスクラスタ１２０は、要求を受信した際、その要求を、プロダクションクラスタ１４０、ベースラインクラスタ１５０、またはカナリアクラスタ１６０のうちの１つにルーティングする。プロダクションクラスタ１４０およびベースラインクラスタ１５０の各々は、要求に対する応答を発行するために、ソウトウェア更新を含まない、サービスと関連づけられたソウトウェアを実行するサーバを含む。説明の目的で、ソウトウェア更新を含まない、サービスと関連づけられたソウトウェアを、本明細書においては「ベースラインサービスソウトウェア」として参照する。それとは対照的に、カナリアクラスタ１６０は、要求に対する応答を発行するために、サービスと関連づけられたソウトウェア更新を実行するサーバを含む。説明の目的で、サービスと関連づけられたソウトウェア更新を、本明細書においては「サービスソウトウェア更新」として参照する。当業者には認識されるように、一部の実施形態では、サービスと関連づけられたソウトウェア更新は、集合的サービスソウトウェア更新を生成するために、ベースラインソウトウェアに加えて適用され得る。説明の目的で、本明細書においては、サービスソウトウェア更新および集合的サービスソウトウェア更新の両方を、サービスソウトウェア更新として参照する。
【００２３】
ベースラインクラスタ１５０およびカナリアクラスタ１６０に含まれるサーバが要求を実行した際、エッジサービスクラスタ１２０は、１以上のカナリア測定指標を介して、サーバおよび／またはクライアント装置の動作を捕捉して分析する。カナリア測定指標は、サービスソウトウェア更新によって生じた予期せぬ効果の検出を容易にするよう設計される。例えば、カナリア測定指標は、サーバエラーの数および／またはタイプ、サーバによって生じたレイテンシー、サーバの負荷、ＣＰＵ１１２の動態等を反映し得るが、それらに限定されない。一般的に、各カナリア測定指標について、エッジサービスクラスタ１２０は、ベースラインクラスタ１６０と関連づけられた値とカナリアクラスタ１７０と関連づけられた値とを比較して、カナリアクラスタ１７０において実装されたサービスソウトウェア更新がクライアント体験に負の影響を与え得ることを示す異常（あれば）を識別する。
【００２４】
エッジサービスクラスタ１２０は、技術的に可能な任意の方法で、カナリア測定指標を捕捉して分析し得る。例えば、一部の実施形態では、エッジサービスクラスタ１２０は、事象ストリーム処理システム（図示せず）と協働して動作して、応答ストリームおよび装置ログを分析し得る。より具体的には、エッジサービスクラスタ１２０は、エッジサービスクラスタ１２０がベースラインクラスタ１５０またはカナリアクラスタ１６０のいずれかにルーティングする各要求を「タグ付け」し得る。事象ストリーム処理システムは、タグ付けされた要求を識別し、タグ付けされた要求の識別特性（例えば、要求を発行したクライアント装置を識別するＥＳＮ（Electronic Serial Number）等）に基づいて、装置ログと応答ストリームとを相関させるよう構成され得る。
【００２５】
カナリア測定指標の分析に基づいて、エッジサービスクラスタ１２０は、識別された異常またはエラー（あれば）に関するカナリアデータをサービス提供者に提供する。カナリアデータは、異常またはエラーに関する任意のタイプの情報（クライアント装置のタイプ、影響を受けた要求の割合等を含むが、それらに限定されない）を含み得る。カナリアデータに基づいて、サービス提供者は、サービスソウトウェア更新のプッシュを拡大するか、または、サービスソウトウェア更新を「撤回」するかを決定し得る。サービス提供者は、技術的に可能な任意の方法で、サービスソウトウェア更新を撤回し得る。例えば、サービス提供者は、任意の数のサーバを、サービスソウトウェア更新の代わりにベースラインサービスソウトウェアを実行するよう再構成し得る。一部の実施形態では、サービス提供者は、識別された異常またはエラーを補正する新たなサービスソウトウェア更新をプッシュし得る。サービス提供者は、技術的に可能な任意の方法で、カナリアデータを分析し得る。例えば、一部の実施形態では、サービス提供者は、カナリアデータを解釈するための自動カナリア分析（ＡＣＡ）ツールを構成し得る。
【００２６】
しかし、カナリアデータが、カナリアクラスタ１６０において実装されたサービスソウトウェア更新がクライアント体験に負の影響を与え得ることを示していないことを、サービス提供者が決定した場合には、サービス提供者は、サービスソウトウェア更新を更なるサーバにプッシュすることにより、カナリアクラスタ１６０のサイズを増やしてもよい。最終的に、カナリアクラスタ１６０において実装されたサービスソウトウェア更新がクライアント体験に負の影響を与えないことを、カナリアデータが継続的に示している場合には、サービス提供者は、サービスソウトウェア更新をプロダクションにプッシュして、プロダクションクラスタ１４０に含まれるサーバを、ベースラインサービスソウトウェアの代わりにサービスソウトウェア更新を実行するよう構成し得る。
【００２７】
更に、一部の実施形態では、エッジサービスクラスタ１２０は、サービス提供者がカナリア分析を修正するのを可能にするアプリケーションプログラミングインターフェース（ＡＰＩ）を提供し得る。例えば、そのようなＡＰＩは、サービス提供者がカナリアデータを読み出すこと、カナリア分析を開始すこと、カナリア分析を停止すこと、カナリア分析を構成すること等を可能にし得る。更に別の実施形態では、エッジサービスクラスタ１２０が、カナリアクラスタ１６０において実装されたサービスソウトウェア更新がクライアント体験に負の影響を与え得ることを示す異常を検出した場合には、エッジサービスクラスタ１２０は、カナリア分析を自動的に停止することにより、変更の影響を限定的なものにし得る。
【００２８】
一般的に、カナリア測定指標の品質は、カナリア分析の有効性に影響を与える。より具体的には、ソウトウェアサービス更新に含まれる１以上の不具合が、カナリア測定指標に反映されていない場合には、サービス提供者は、それらの不具合を含むソウトウェアサービス更新をプロダクションクラスタ１４０にプッシュし得る。その場合、不具合は、許容できない数のクライアントに負の影響を与え得る。カナリア測定指標の品質を下げる従来のエッジサービスクラスタの１つの限界は、従来のエッジサービスクラスタによって実装されるランダムルーティング処理である。
【００２９】
従来のエッジサービスクラスタは、典型的には、要求のうちの比較的小さいランダムサンプリングをカナリアクラスタ１６０にルーティングする。ベースラインソウトウェアは依然として使用可能であり、ベースラインクラスタ１５０およびプロダクションクラスタ１４０に含まれるサーバによって実行されるので、ランダムサンプリング処理は、クライアント装置の動作に対するサービスソウトウェア更新の効果を覆い隠す場合がある。特に、カナリア測定指標は、カナリアクラスタ１６０に含まれるサーバとベースラインクラスタ１５０に含まれるサーバとの挙動の違いに起因するクライアント装置の動作に対する悪影響を反映しない場合がある。クライアント装置の動作に対するサーバの挙動のそのような未検出の効果（本明細書においては、サーバ側挙動のクライアント側効果として参照する）は、データ差分、フォーマット変更、空のサーバ応答等を含み得る。
【００３０】
例えば、カナリアクラスタ１６０は６台のカナリアサーバを含み、ベースラインクラスタ１５０は６台のベースラインサーバを含み、プロダクションクラスタ１４０は９８８台のプロダクションサーバを含むものとする。クライアントセッション中に、クライアント装置が３０個の要求を発行し、従来のエッジサービスクラスタがこれらの要求をルーティングする場合には、カナリアサーバのうちの１つがこれらの要求のうちの１つを処理する尤度は約３％になる。更に、従来のエッジサービスクラスタは、第１の要求をカナリアサーバにルーティングするものとする。カナリアサーバはサービスソウトウェア更新を実行するが、不具合を伴うサービスソウトウェア更新がカナリアサーバを誤作動させ、第１の要求に対する、クライアント装置が解釈できない応答を発行する。それに応答して、クライアント装置は、第２の要求を発行することによって要求を再試行するものとする。
【００３１】
従来のエッジサービスクラスタが第２の要求をルーティングする場合には、カナリアサーバのうちの１つが第２の要求を処理する尤度は約０．０９％となる。ベースラインサーバまたはプロダクトサーバのうちの１つが第２の要求を処理し、第２の要求に対する第２の応答を生成するためにベースラインソウトウェアを実行する場合には、クライアント装置は、この第２の応答を正しく解釈できる。従って、カナリア測定指標は問題を示さず、サービス提供者が変更をプロダクションクラスタ１４０にプッシュするまで、不具合は検出から逃れ得る。サービス提供者が変更をプロダクションクラスタ１４０にプッシュした後、クライアント装置が第１の要求を発行した場合には、プロダクションクラスタ１４０はサービスソウトウェア更新を実行し、クライアント装置は、再試行の回数に関係なく、応答を正しく解釈できなくなる。従って、クライアント体験の質が低下することとなる。
【００３２】
カナリア分析中に、変更のそのようなクライアント側効果の検出を可能にするために、エッジサービスクラスタ１２０は、スティッキーなカナリアルータ１３０を含む。一般的に、スティッキーなカナリアルータ１３０は、カナリア分析のために、小さい割合のクライアント装置から受信された要求を、限られた時間の量にわたって、カナリアクラスタ１６０またはベースラインクラスタ１５０のいずれかに一貫してルーティングする。限られた時間の量は、本明細書においては有効期間（ＴＴＬ：time-to-live）として参照され、典型的には、ほぼ完全なクライアントセッションを捕捉するよう選択される。ＴＴＬは、本明細書においては、ルーティングのための時間窓としても参照される。エッジサービスクラスタ１２０は、残りの要求をプロダクションクラスタ１４０にルーティングする。スティッキーなカナリアルータ１３０は、技術的に可能な任意の方法で実装され得る。例えば、一部の実施形態では、スティッキーなカナリアルータ１３０は、エッジサービスクラスタ１２０に含まれる１以上のフィルターとして実装され得る。
【００３３】
動作においては、ＴＴＬに等しい持続時間の時区間にわたって、スティッキーなカナリアルータ１３０は、クライアント装置の小さいサブセットからの要求をカナリアクラスタ１６０にルーティングすると共に、それとは異なるクライアント装置の小さいサブセットからの要求をベースラインクラスタ１５０にルーティングする。ＴＴＬに等しい持続時間の次の時区間にわたって、スティッキーなカナリアルータ１３０は、クライアント装置の更に別の小さいサブセットからの要求をカナリアクラスタ１６０にルーティングすると共に、それとは異なるクライアント装置の小さいサブセットからの要求をベースラインクラスタ１５０にルーティングする。カナリア分析が終了するまで、スティッキーなカナリアルータ１３０はこの処理を継続し、クライアント装置のそれぞれ異なるサブセットからの要求を、カナリアクラスタ１６０またはベースラインクラスタのいずれかにルーティングする。スティッキーなカナリアルータ１３０は、例えば合計時間等の技術的に可能な任意の基準に基づいて、カナリア分析を終了させるよう構成され得る。
【００３４】
単に説明の目的で、スティッキーなカナリアルータ１３０が所与のＴＴＬにわたって要求をカナリアクラスタ１６０にルーティングする対象であるクライアント装置の小さいサブセットを、本明細書においては「カナリアクライアント装置」として参照する。同様に、スティッキーなカナリアルータ１３０が所与のＴＴＬにわたって要求をベースラインクラスタ１５０にルーティングする対象であるクライアント装置の小さいサブセットを、本明細書においては「ベースラインクライアント装置」として参照する。残りのクライアント装置を、本明細書においては「プロダクションクライアント装置」として参照する。カナリアクライアント装置として参照される一組のクライアント装置、ベースラインクライアント装置として参照される一組のクライアント装置、およびプロダクションクライアント装置として参照される一組のクライアント装置は、時間が進むにつれて変わる。
【００３５】
スティッキーなカナリアルータ１３０は、関連づけられたクライアント装置に基づいて、要求を一貫してルーティングすることにより、エッジサービスクラスタ１２０が、クライアントセッション全体にわたるカナリアクラスタ１６０とのやりとりを正確且つ総合的に反映するカナリア測定指標を取得するのを可能にする点が有利である。その結果、従来のカナリア分析では検出から逃れる変更のクライアント側効果が、カナリア測定指標を介して決定され得る。特に、変更が望ましくないクライアント側効果を生じる場合には、カナリア測定指標は、典型的には、ベースラインクライアント装置と関連づけられた呼び出しパターンとは異なるカナリアクライアント装置と関連づけられた呼び出しパターンを反映する。
【００３６】
特に、スティッキーなカナリアルータ１３０は、ＴＴＬの持続時間にわたって、カナリアクライアント装置から受信された要求をベースラインソウトウェアから分離するので、ベースラインソウトウェアは、カナリアクライアント装置に対するサービスソウトウェア更新の効果を覆い隠さない。例えば、ＴＴＬは９０秒間であり、カナリアクライアント装置は、スティッキーなカナリアルータ１３０がカナリアクラスタ１６０にルーティングする第１の要求を発行するものとする。カナリアクラスタ１６０に含まれるカナリアサーバは、サービスソウトウェア更新を実行するが、サービスソウトウェア更新と関連づけられた不具合がカナリアサーバを誤作動させ、第１の要求に対する、クライアント装置が解釈できない応答を発行させる。それに応答して、クライアント装置は、第２の要求を発行することによって要求を再試行するものとする。スティッキーなカナリアルータ１３０は、この第２の要求をカナリアクラスタ１６０にルーティングし、カナリアサーバは、サービスソウトウェア更新を実行する。サービスソウトウェア更新は上記の不具合を含み、その結果、クライアント装置は、第２の要求に対するカナリアサーバの応答を解釈できない。
【００３７】
クライアント装置は、９０秒間のＴＴＬにわたって継続的に要求を再試行し得るが、そのＴＴＬの間、スティッキーなカナリア１３０は、クライアント装置から受信された要求のいずれもを、ベースラインクラスタ１５０またはプロダクションクラスタ１４０のいずれにもルーティングしないので、クライアント装置は良好に動作できなくなる。特に、サービスソウトウェア更新に含まれる不具合の結果として、カナリアクラスタ１６０によって受信された要求の容量は、ベースラインクラスタ１５０によって受信された要求の容量を劇的に超え得る。この容量の増加はカナリア測定指標に反映されるので、サービス提供者は、スティッキーなカナリア分析によって、サービスソウトウェア更新に含まれる不具合を検出でき、サービスソウトウェア更新を撤回して、不具合を修正できる。
【００３８】
更に、スティッキーなカナリアルータ１３０は、限られたＴＴＬにわたって、小さい割合のクライアント装置のみをカナリアクラスタ１６０にルーティングするよう構成されるので、クライアント体験に対するカナリアテストの影響は最小化される。例えば、スティッキーなカナリアルータ１３０は、１０秒間のＴＴＬにわたって、クライアント装置の３％からの要求をカナリアクラスタ１６０にルーティングするよう構成され得る。１０秒後、スティッキーなカナリアルータ１３０は、２分間の合計カナリアテスト時間の次の１０秒間にわたって、クライアント装置の異なる３％からの要求をカナリアクラスタ１６０にルーティングし得る。その結果、サービスソウトウェア更新に含まれる不具合（あれば）の各クライアント装置に対する影響は１０秒間に制限される。
【００３９】
なお、本明細書に記載される技術は限定するものではなく、説明のためのものであり、本発明のより広い趣旨および範囲から逸脱することなく変更され得る。特に、スティッキーなカナリアルータ１３０は、スティッキーなカナリアルータ１３０が、技術的に可能な任意の基準に基づいて、任意の時間の長さにわたって、要求をカナリアクラスタ１６０またはベースラインクラスタ１５０のいずれかに一貫してルーティングするのを可能にする任意のアルゴリズムを実装してよい。例えば、別の実施形態では、カナリアルータ１３０は、カナリアクラスタ１６０にルーティングする要求を、要求の装置識別子、クライアント識別子、ＥＳＮ、セッション識別子、または他の任意の特性に基づいて選択し得る。一部の実施形態では、カナリアルータ１３０は、特定のクライアント装置上で実行される１つのセッションからの要求をカナリアクラスタ１６０にルーティングし、特定のクライアント装置上で実行される他のセッションからの要求をプロダクションクラスタ１４０にルーティングし得る。
【００４０】
更に、一部の実施形態では、システム１００はエッジサービスクラスタ１２０を含まず、スティッキーなカナリアルータ１３０はスタンドアロンルーティングアプリケーションとして実装される。別の実施形態では、スティッキーなカナリアルータ１３０に含まれる機能性は、任意の装置またはアプリケーションに含まれてよく、技術的に可能な任意の方法で実装されてよい。様々な実施形態において、スティッキーなカナリアルータ１３０は、ソウトウェア、ハードウェア、またはそれらの任意の組合せで実装され得る。一部の実施形態では、サービスソウトウェア更新は、変更を実装するサーバの機能性を変える任意のタイプの変更と置き換えられ得る。例えば、一部の実施形態では、サービスソウトウェア更新は、任意の数および組合せのソウトウェア更新、データ更新、スクリプト更新、テンプレート更新等を含むサービス更新と置き換えられる。
【００４１】
スティッキーなカナリアルーティング
図２は、本発明の様々な実施形態による、図１のスティッキーなカナリアルータ１３０のより詳細な図である。図示されるように、スティッキーなカナリアルータ１３０は、装置ハッシュ２４２、時間ハッシュ２４６、およびルーティングハッシュ２４８を含むが、それらに限定されない。動作においては、スティッキーなカナリアルータ１３０は、１以上の要求２１０を受信し、１以上のルーティング構成２２０に基づいて、各要求２１０を処理する。次に、スティッキーなカナリアルータ１３０は、エッジサービスクラスタ１２０と協働して、各要求をカナリアクラスタ１６０、ベースラインクラスタ１５０、またはプロダクションクラスタ１４０のうちの１つにルーティングする。
【００４２】
図示されるように、要求２１０は、要求識別子（ＩＤ）２１２、クライアントＩＤ２１４、および装置ＩＤ２１６を含むが、それらに限定されない。要求ＩＤ２１２、クライアントＩＤ２１４、および装置ＩＤ２１６は、技術的に可能な任意の方法で指定されてよく、当該技術分野において知られている任意の慣習に従ってよい。例えば、装置ＩＤ２１６は、装置のシリアル番号が連結された装置タイプを含む文字列であり得る。別の実施形態では、要求２１０は、要求と関連づけられた任意の数の特性を識別する任意の数およびタイプの情報を含み得る。例えば、一部の実施形態では、要求２１０は、ＥＳＮおよびセッション識別子を含み得る。
【００４３】
スティッキーなカナリアルータ１３０は、ルーティング構成２２０を介して構成される。各ルーティング構成２２０は、装置タイプ２２２、ルーティング２２６、１００万分の１のレート（ＲＰＭ：rate per million）２３２、有効期間（ＴＴＬ）２３４、およびシード値２３６を含むが、それらに限定されない。装置タイプ２２２は、装置のタイプ（例えば、ＰｌａｙＳｔａｔｉｏｎ（登録商標）３（ＰＳ３）またはＢＩＶＬ（Best Resolution Audio Visual Integrated Architecture Internet Video Link）テレビ等）を指定する。ルーティング２２６は、ルーティング構成２２０がカナリアクラスタ１６０と関連づけられているかまたはベースラインクラスタ１５０と関連づけられているかを指定する。１００万分の１のレート（ＲＰＭ）２３２は、装置タイプ２２２のクライアント装置から受信される要求２１０のうちの、ルーティング２２６によって指定されているクラスタにルーティングされる割合を指定する。ＴＴＬ２３４は、クライアント装置の特定のサブセットが、装置ＩＤ２１６に基づいて、ルーティング２２６によって指定されているクラスタにルーティングされる時区間の持続時間を指定する。最後に、シード値２３６は、各ルーティング構成２２０に対して一意の値であり、スティッキーなカナリアルータ１３０がルーティング構成２２０に従ってルーティングするクライアント装置のサブセットが、ルーティング構成２２０間で変わることを確実にするよう選択される。
【００４４】
特に、ルーティング構成２２０は、スティッキーなカナリアルータ１３０に含まれる機能性が、様々なロジスティックな考慮に基づいて微調整されることを可能にする。一部の実施形態では、ルーティング構成２２０は、要求のルーティング２６０を、装置タイプ２２２に基づいて正規化し得る。例えば、ＢＩＶＬテレビの普及率は、ＰＳ３と比較して遥かに低い。従って、ＢＩＶＬテレビの十分なテストを確実にするために、ＢＩＶＬテレビと関連づけられたルーティング構成２２０のＲＰＭ２３２は１，０００であり、ＰＳ３と関連づけられたルーティング構成２２０のＲＰＭ２３２は１０であり得る。ルーティング構成２２０は、技術的に可能な任意の方法で、任意の形式で生成され得る。例えば、一部の実施形態では、事象ストリーム処理システムは、装置タイプ２２２のランク付けされた相対分布を生成してもよく、サービス提供者は、このランク付けされた分布に基づいて、ＲＰＭ２３２を決定してもよい。他の実施形態では、ＴＴＬ２３２は、異なる装置タイプ２２２と関連づけられた異なるクライアントフローについてのほぼ全セッションを捕捉するために、ルーティング構成２２０毎に微調整され得る。
【００４５】
動作においては、要求２１０を受信したら、スティッキーなカナリアルータ１３０は、要求２１０を発行したクライアント装置のタイプを、装置ＩＤ２１６に基づいて決定する。次に、スティッキーなカナリアルータ１３０は、「カナリア」のルーティング２２６およびクライアント装置のタイプに一致する装置タイプ２２２を含むルーティング構成２２０を識別するために、１以上の比較処理を行う。次に、スティッキーなカナリアルータ１３０は、装置ＩＤ２１６および識別された「カナリア」ルーティング構成２２０に基づいて、要求２１０をカナリアクラスタ１６０にルーティングするか否かを決定する。
【００４６】
スティッキーなカナリアルータ１３０が、要求２１０をカナリアクラスタ１６０にルーティングしないことを決定した場合には、スティッキーなカナリアルータ１３０は、「ベースライン」のルーティング２２６およびクライアント装置のタイプに一致する装置タイプ２２２を含むルーティング構成２２０を識別するために、比較処理を行う。次に、スティッキーなカナリアルータ１３０は、装置ＩＤ２１６および識別された「ベースライン」ルーティング構成２２０に基づいて、要求２１０をベースラインクラスタ１５０にルーティングするか否かを決定する。図示されるように、装置タイプ２２２「装置Ａ」と関連づけられた「カナリア」ルーティング構成２２０（１）に含まれるシード値２３６は、装置タイプ２２２「装置Ａ」と関連づけられた「ベースライン」ルーティング構成２２０（２）に含まれるシード値２３６とは異なる。
【００４７】
スティッキーなカナリアルータ１３０が、要求２１０をカナリアルーティングクラスタ２６０またはベースラインクラスタ２５０のいずれにもルーティングしないことを決定した場合には、エッジサービスクラスタ１２０は、要求２１０を、エッジサービスクラスタ２１０において実装されているデフォルトのルーティングに従って（典型的にはプロダクションクラスタ１４０に）ルーティングする。このようにして、スティッキーなカナリアルータ１３０およびエッジサービスクラスタ２１０は協働して、全ての要求２１０をルーティングする。
【００４８】
要求２１０を特定のルーティング構成２２０に基づいてルーティングするか否かを決定することの一部として、スティッキーなカナリアルータ１３０は、装置ハッシュ２４２、時間ハッシュ２４６、およびルーティングハッシュ２４８を計算する。より具体的には、スティッキーなカナリアルータ１３０は、装置ＩＤ２１６に基づいて、一貫した装置ハッシュ２４２を計算する。動作においては、スティッキーなカナリアルータ１３０は、ルーティング構成２２０に関係なく、特定のクライアント装置から受信された全ての要求２１０に対して、同じ値の装置ハッシュ２４２を計算する。それとは対照的に、スティッキーなカナリアルータ１３０は、異なるクライアント装置から受信された２つの要求２１０に対して、２つの異なる値の装置ハッシュ２４２を計算する。従って、幾つかの別の実施形態では、スティッキーなカナリアルータ１３０は、カナリアルーティング構成２２０を識別する前に、装置ハッシュ２４２を計算し得る。スティッキーなカナリアルータ１３０は、装置ＩＤ２１６の各値に対して一貫した値を確定的に返す技術的に可能な任意の方法で、装置ハッシュ２４２を計算し得る。例えば、一部の実施形態では、スティッキーなカナリアルータ１３０は、装置ＩＤ２１６に対して、ハッシュ処理または巡回冗長検査（ＣＲＣ）処理を行い得る。
【００４９】
スティッキーなカナリアルータ１３０は、ＴＴＬ２３４およびシード値２３６に基づいて、ＴＴＬ２３４に等しい持続時間にわたって一貫した時間ハッシュ２４６を計算するよう構成される。例えば、ＴＴＬ２３４が９０秒間であり、シード値２３６が「カナリアシード値」である場合には、スティッキーなカナリアルータ１３０は、９０秒間にわたって、時間ハッシュ２４６を「第１のカナリア時区間」として計算し得る。次に、次の９０秒間にわたって、スティッキーなカナリアルータ１３０は、時間ハッシュ２４６を「第２のカナリア時区間」として計算し得る（以下同様）。シード値２３６は各ルーティング構成２２０について別々に定義され得るので、ルーティング構成２２０のＴＴＬ２３４が等しいか否かに関係無く、時間ハッシュ２４６はルーティング構成２２０に基づいて変わり得る。
【００５０】
スティッキーなカナリアルータ１３０は、特定のシード値２３６について、技術的に可能な任意の方法で時間ハッシュ２４６を計算してよく、時間ハッシュ２４６が、ＴＴＬ２３４に等しい持続時間の時区間にわたって一貫した値であることを確実にする。例えば、図示されるように、スティッキーなカナリアルータ１３０は以下の式を実装し得る。
時間ハッシュ２４６＝floor（current_time_since_epoch（）/ＴＴＬ２３４）＊シード値２３６      …（１）
サーバ時間が複数のサーバ、クラスタ、および領域にわたって一貫していることを確実にするために、ＴＴＬ２３４は、ネットワーク・タイム・プロトコル（ＮＴＰ）を用いて同期される。従って、式１はそれらのサーバおよびサーバのクラスタにわたって有効である。
【００５１】
スティッキーなカナリアルータ１３０は、装置ハッシュ２４２および時間ハッシュ２４６を利用して、ルーティングハッシュ２４８を計算する。一般的に、装置ＩＤ２１６およびルーティング構成２２０については、スティッキーなカナリアルータ１３０は、ＴＴＬ２３４に等しい持続時間の時間間隔中に、ルーティングハッシュ２４８に対して単一の一意の値を一貫して計算するよう構成される。スティッキーなカナリアルータ１３０は、上述のルーティングハッシュ２４８の特性に従う技術的に可能な任意の方法で、ルーティングハッシュ２４８を計算し得る。例えば、図示されるように、スティッキーなカナリアルータ１３０は、装置ハッシュ２４２および時間ハッシュ２４６に対して、例えば、ハッシュリスト処理等のハッシュ処理を行い得る。別の実施形態では、スティッキーなカナリアルータ１３０は、装置ハッシュ２４２および時間ハッシュ２４６に対して、ＣＲＣ処理を行い得る。更に別の実施形態では、スティッキーなカナリアルータ１３０は、装置ハッシュ２４２と時間ハッシュ２４６との乗算処理を行い得る。
【００５２】
要求２１０についてのルーティングハッシュ２４８を計算後、スティッキーなカナリアルータ１３０は、ＲＰＭ２３２に基づいて、要求２１０をルーティングするか否かを決定する。具体的には、スティッキーなカナリアルータ１３０は、ルーティングハッシュ２４８および１００万という値（value one million）に対してモジュロ演算を行って、係数を決定する。次に、スティッキーなカナリアルータ１３０は、係数をＲＰＭ２３２と比較する。係数がＲＰＭ２３２より小さい場合には、スティッキーなカナリアルータ１３０は、要求２１０を、ルーティング構成２２０に含まれるルーティング２２６に基づいてルーティングする。例えば、ルーティング２２６の値が「カナリア」である場合には、スティッキーなカナリアルータ１３０は、要求２１０をカナリアクラスタ１６０にルーティングする。
【００５３】
特に、所与のＴＴＬ３２４によって指定されている時間窓にわたるルーティングハッシュ２４０の一貫した値は、スティッキーなカナリアルータ１３０が各クライアント装置に対して「スティッキーな」ルーティングを提供することを確実にする。より具体的には、所与のＴＴＬ３２４にわたって、スティッキーなカナリアルータ１３０は、カナリアクライアント装置から受信された要求２１０をカナリアクラスタ１６０にルーティングし、ベースラインクライアント装置から受信された要求２１０をベースラインクラスタ１５０にルーティングする。エッジサービスクラスタ１２０は、残りのクライアント装置（プロダクションクライアント装置）から受信された要求２１０をプロダクションクラスタ１４０にルーティングする。更に、ＲＰＭ２３２は、クライアント装置の総数に対して相対的なカナリアクライアント装置およびベースラインクライアント装置の割合を制御する。このようにして、スティッキーなカナリアルータ１３０は、ＴＴＬの持続時間にわたって、カナリアクライアント装置から受信された要求をベースラインソウトウェアから分離する。従って、ベースラインソウトウェアは、カナリアクライアント装置に対するサービスソウトウェア更新の効果を覆い隠さない。
【００５４】
図３は、本発明の様々な実施形態による、図２のスティッキーなカナリアルータ１２０によって生成されるルーティングの例である。図３の文脈は、複数のクライアント装置３０５から要求２１０が受信され、スティッキーなカナリアルータ１３０は、各要求２１０を、ルーティング構成２２０（図３には図示せず）に基づいて、カナリアクラスタ１６０、ベースラインクラスタ１５０、またはプロダクションクラスタ１４０のうちの１つにルーティングするというものである。
【００５５】
単に説明の目的で、要求２１０は、ルーティング構成２２０に含まれるＴＴＬ２３４以内にスティッキーなカナリアルータ１２０によって受信されるものとする。従って、スティッキーなカナリアルータ１２０は、特定のクライアント装置３０５から受信された全ての要求２１０を、カナリアクラスタ１６０、ベースラインクラスタ１５０、またはプロダクションクラスタ１４０に一貫してルーティングする。より具体的には、図示されるように、スティッキーなカナリアルータ１２０は、クライアント装置３０５（３）および３０５（５）から受信された全ての要求２１０をカナリアクラスタ１６０にルーティングする。それとは対照的に、スティッキーなカナリアルータ１２０は、クライアント装置３０５（４）および３０５（Ｍ）から受信された全ての要求２１０をベースラインクラスタ１５０にルーティングする。スティッキーなカナリアルータ１２０は、残りのクライアント装置３０５から受信された全ての要求２１０をエッジサービスクラスタ１２０に渡し、エッジサービスクラスタ１２０は、これらの要求２１０をプロダクションクラスタ１４０にルーティングする。
【００５６】
図４は、本発明の様々な実施形態による、サービスと関連づけられたソウトウェア更新のカナリア分析を行う際に要求をルーティングする方法のステップのフロー図である。この方法のステップは図１〜図３のシステムを参照して説明されるが、この方法のステップを任意の順序で実装するよう構成された任意のシステムが本発明の範囲内に含まれることが、当業者には理解されよう。
【００５７】
図示されるように、方法４００はステップ４０２において開始し、ここで、スティッキーなカナリアルータ１３０は、ルーティング構成２２０を受信する。各装置タイプ２２２について、スティッキーなカナリアルータ１３０は、２つのルーティング構成２２０を受信する。カナリアクラスタ２６０と関連づけられたルーティング構成は、ルーティング２２６についての「カナリア」の値によって示される。それとは対照的に、ベースラインクラスタ２５０と関連づけられたルーティング構成２２０は、ルーティング２２６についての「ベースライン」の値によって示される。ステップ４０４において、スティッキーなカナリアルータ１３０は要求２１０を受信する。要求２１０は、要求２１０を発行したクライアント装置３０５の装置ＩＤ２１６を含む。ステップ４０６において、スティッキーなカナリアルータ１３０は、装置ＩＤ２１６に基づいて、装置ハッシュ２４２を計算する。
【００５８】
ステップ４０８において、スティッキーなカナリアルータ１３０は、「カナリア」のルーティング２２６およびクライアント装置３０５のタイプに一致する装置タイプ２２２を含むルーティング構成２２０を選択する。スティッキーなカナリアルータ１３０は、技術的に可能な任意の方法で、クライアント装置３０５のタイプを取得し得る。例えば、一部の実施形態では、クライアント装置のタイプは装置ＩＤ２１６に埋め込まれている。ステップ４１０において、スティッキーなカナリアルータ１３０は、現在の時間、選択されたルーティング構成２２０に含まれるＴＴＬ２３４、および選択されたルーティング構成に含まれるシード値２３６に基づいて、時間ハッシュ２４６を計算する。本明細書において先に述べたように、スティッキーなカナリアルータ１３０は、シード値２３６について、ＴＴＬ２３４に等しい持続時間の時区間にわたって時間ハッシュ２４６が一貫した値であることを確実にする技術的に可能な任意の方法で、時間ハッシュ２４６を計算し得る。
【００５９】
ステップ４１２において、スティッキーなカナリアルータ１３０は、装置ハッシュ２４２および時間ハッシュ２４６に対してハッシュ処理を行い、ルーティングハッシュ２４８を計算する。特に、装置ＩＤ２１６および選択されたルーティング構成２２０について、スティッキーなカナリアルータ１３０は、ＴＴＬ２３４に等しい持続時間の時間間隔中に、ルーティングハッシュ２４８に対して単一の一意の値を一貫して計算するよう構成される。ステップ４１４において、スティッキーなカナリアルータ１３０は、ルーティングハッシュ２４８および１００万という値に対してモジュロ演算を行い、係数を決定する。次に、スティッキーなカナリアルータ１３０は、この係数を、選択されたルーティング構成２２０に含まれるＲＰＭ２３２と比較する。ステップ４１４において、スティッキーなカナリアルータ１３０が、係数がＲＰＭ２３２より小さいことを決定した場合には、方法４００はステップ４１６に進む。
【００６０】
ステップ４１６において、スティッキーなカナリアルータ１３０は、要求を、選択されたルーティング構成２２０に従ってルーティングする。より具体的には、選択されたルーティング構成２２０に含まれるルーティング２２６の値が「カナリア」である場合には、スティッキーなカナリアルータ１３０は、要求をカナリアクラスタ１６０にルーティングする。それとは対照的に、選択されたルーティング構成２２０に含まれるルーティング２２６の値が「ベースライン」である場合には、スティッキーなカナリアルータ１３０は、要求をベースラインクラスタ１５０にルーティングする。次に、方法４００はステップ４０４に戻り、ここで、スティッキーなカナリアルータ１３０は新たな要求２１０を受信する。
【００６１】
しかし、ステップ４１４において、スティッキーなカナリアルータ１３０が、係数がＲＰＭ２３２より小さくないことを決定した場合には、方法４００は直接ステップ４１８に進む。ステップ４１８において、スティッキーなカナリアルータ１３０は、選択されたルーティング構成２２０が、クライアント装置３０５の装置タイプについてのベースラインルーティング構成２２０であるか否かを決定する。より正確には、スティッキーなカナリアルータ１３０は、ルーティング２２６の値が「ベースライン」であるか否かを決定する。スティッキーなカナリアルータ１３０が、ルーティング２２６の値が「ベースライン」ではないことを決定した場合には、方法４００はステップ４２０に進む。
【００６２】
ステップ４２０において、スティッキーなカナリアルータ１３０は、「ベースライン」のルーティング２２６およびクライアント装置３０５のタイプに一致する装置タイプ２２２を含むルーティング構成２２０を選択する。次に、方法４００はステップ４１０に戻り、スティッキーなカナリアルータ１３０は、選択されたベースラインルーティング構成２２０およびクライアント装置３０５の装置ＩＤ２１６に基づいて、要求２１０をベースラインクラスタ１５０にルーティングするか否かを決定する。
【００６３】
しかし、ステップ４１８において、スティッキーなカナリアルータ１３０が、ルーティング２２６の値が「ベースライン」であることを決定した場合には、方法４００は直接ステップ４２２に進む。ステップ４２２において、エッジサービスクラスタ１２０は、エッジサービスクラスタ１２０において実装されているデフォルトのルーティングアルゴリズムに従って要求２１０をルーティングする。典型的には、エッジサービスクラスタ１２０は、要求２１０をプロダクションクラスタ１４０にルーティングする。次に、方法４００はステップ４０４に戻り、そこで、スティッキーなカナリアルータ１３０は新たな要求２１０を受信する。
【００６４】
このようにして、スティッキーなカナリアルータ１３０は、カナリア分析が終了したことをスティッキーなカナリアルータ１３０が決定するまで、ステップ４０４〜４２２のサイクルを継続する。スティッキーなカナリアルータ１３０は、技術的に可能な任意の方法で、カナリア分析が終了したことを決定し得る。例えば、スティッキーなカナリアルータ１３０は、１０分後にカナリア分析を終了させるよう構成され得る。
【００６５】
要約すると、本開示の技術は、サービスと関連づけられたソウトウェア更新によって生じた不具合を、クライアントに対する不具合の影響を最小化しつつ、効率的に検出するために用いられ得る。動作においては、各装置タイプについて、スティッキーなカナリアルータは、カナリア割合、ベースラインの割合、および所定の有効期間に等しい持続時間の時区間を設定する。特に、有効期間は、サービスとのクライアントのやりとりのほぼ完全なセッションを捕捉するよう構成される。特定の装置タイプの全てのクライアント装置について、特定の時区間内において、スティッキーなカナリアルータは、クライアント装置のうちのカナリアの割合（本明細書においてはカナリアクライアント装置として参照する）からの要求を、サービスと関連づけられたソウトウェア更新を実行するカナリアクラスタのサーバに一貫してルーティングする。それとは対照的に、特定の時区間内において、スティッキーなカナリアルータは、クライアント装置のうちのベースラインの割合（本明細書においてはベースラインクライアント装置として参照する）からの要求を、ソウトウェア更新を含まないソウトウェアと関連づけられたベースラインサービスを実行するベースラインクラスタのサーバに一貫してルーティングする。
【００６６】
特に、スティッキーなカナリアルータは、ＴＴＬの持続時間にわたって、カナリアクライアント装置から受信された要求をベースラインソウトウェアから分離するので、ベースラインソウトウェアは、カナリアクライアント装置に対するサービスソウトウェア更新の効果を覆い隠さない。従って、ソウトウェア更新が任意の数およびタイプのクライアント装置に悪影響を与え得ることを示す異常を検出するために、サーバおよび装置からのデータが分析され得る。
【００６７】
スティッキーなカナリアルータは、ほぼ完全なセッションにわたって、要求をサーバのカナリアクラスタにルーティングするよう構成され得るので、クライアント体験およびサーバの挙動の両方に対する既存のサービスの変更の効果が、従来の手法と比べてより総合的に分析され得る点が有利である。特に、スティッキーなカナリアルータは、ＴＴＬの持続時間にわたって、カナリアクライアント装置がベースラインソウトウェアにアクセスするのを防止するので、クライアント装置の動作が、測定可能に影響され得る。例えば、ソウトウェア更新によって生じた不具合がカナリアサーバを誤作動させ、要求に対して、カナリアクライアント装置が解釈できない応答を発行した場合には、カナリアクライアント装置は、ＴＴＬの持続時間にわたって、失敗した要求を再試行し得る。その結果、カナリアサーバによって受信された要求の容量は、ベースラインサーバによって受信された要求の容量を劇的に超え、そのことにより、サービスと関連づけられたソウトウェア更新が不具合を含んでいたことを示し得る。
【００６８】
更に、クライアント装置のタイプに基づいて、カナリアの割合および／または有効期間を選択することにより、スティッキーなカナリアルータは、異なる装置タイプの相対的な普及率および／または予期されるセッションの異なる長さに基づくカナリア分析の微調整を可能にする。例えば、第１の装置タイプのクライアント装置が比較的普及しており、第２の装置タイプのクライアント装置が比較的稀であるものとする。第２の装置タイプが十分なカナリアテストを受けることを確実にするために、第２の装置タイプと関連づけられたカナリアの割合は、第１の装置タイプと関連づけられたカナリアの割合より１０００倍大きい値に設定され得る。
【００６９】
説明の目的で、様々な実施形態の説明を示したが、これらは網羅的であることを意図したものではなく、開示された実施形態に限定することは意図しない。当業者には、記載された実施形態の範囲および趣旨から逸脱することなく、多くの修正および変形が自明である。
【００７０】
本明細書に記載された主題の複数の態様を、以下の番号を付した項において述べる。
【００７１】
１．  カナリア分析を行う際に要求をルーティングするための、コンピュータによって実装される方法において、第１の要求の少なくとも１つの特性、前記第１の要求と関連づけられた時間、およびルーティングのための時間窓に基づいて、第１のマッピングを計算する工程と、前記第１のマッピングが、前記第１の要求が複数のサーバを介して提供されるサービスに対する変更と関連づけられることを示しているか否かを決定する工程と、前記第１のマッピングが、前記第１の要求が前記変更と関連づけられることを示しているか否かに基づいて、前記第１の要求を、前記変更を実装する第１のサーバまたは前記変更を実装しない第２のサーバのいずれかにルーティングする工程とを含むことを特徴とする方法。
【００７２】
２．  前記第１の要求の前記少なくとも１つの特性が、装置識別子を含み、前記第１のマッピングを計算する前記工程が、前記装置識別子に対して第１のハッシュ処理を行うことにより装置ハッシュを生成する工程と、現在の時間を前記ルーティングのための前記時間窓で除算することにより、前記第１の要求と関連づけられた前記時間が時区間内にある時区間を決定する工程と、前記時区間に対して第２のハッシュ処理を行うことにより時間ハッシュを生成する工程と、前記装置ハッシュおよび前記時間ハッシュに対して第３のハッシュ処理を行うことにより前記第１のマッピングを生成する工程とを含む、項１記載のコンピュータによって実装される方法。
【００７３】
３．  前記第１の要求と関連づけられた前記時間が、前記ルーティングのための前記時間窓に等しい持続時間を有する第１の時区間内にあり、第２の要求の少なくとも１つの特性が前記第１の要求の前記少なくとも１つの特性に等しい第２の要求を受信する工程と、前記第２の要求と関連づけられた時間が前記第１の時区間内にあるか否かに基づいて、前記第１の要求を、前記変更を実装する第３のサーバまたは前記変更を実装しない第４のサーバのいずれかにルーティングする工程とを更に含む、項１または項２記載のコンピュータによって実装される方法。
【００７４】
４．  前記第１のマッピングを計算する前記工程が、前記第１の要求の第１の特性、前記第１の要求と関連づけられた前記時間、および前記ルーティングのための前記時間窓に対してハッシュ処理および巡回冗長検査処理のうちの少なくとも１つを行う工程を含む、項１〜３のいずれか一項に記載のコンピュータによって実装される方法。
【００７５】
５．  前記ハッシュ処理および前記巡回冗長検査処理のうちの前記少なくとも１つが、前記変更と関連づけられた一意の定数に基づく、項１〜４のいずれか一項に記載のコンピュータによって実装される方法。
【００７６】
６．  前記変更がソウトウェア更新を含む、項１〜５のいずれか一項に記載のコンピュータによって実装される方法。
【００７７】
７．  前記要求の前記少なくとも１つの特性が、装置識別子、クライアント識別子、ＥＳＮ、またはセッション識別子のうちの１つを含む、項１〜６のいずれか一項に記載のコンピュータによって実装される方法。
【００７８】
８．  プロセッサによって指示が実行された際に、該プロセッサに、第１の要求の第１の特性に基づいて、サービスに対する変更と関連づけられるマッピングの割合を決定する工程と、前記第１の要求の第２の特性、前記第１の要求と関連づけられた時間、およびルーティングのための時間窓に基づいて、第１のマッピングを計算する工程と、前記第１のマッピングおよび複数のマッピングの割合に基づく比較処理を行うことにより、前記第１のマッピングが、前記第１の要求が前記変更と関連づけられることを示しているか否かを決定する工程と、前記第１のマッピングが、前記第１の要求が前記変更と関連づけられることを示しているか否かに基づいて、前記第１の要求を、前記変更を実装する第１のサーバまたは前記変更を実装しない第２のサーバのいずれかにルーティングする工程とを行わせる指示を含むコンピュータ可読ストレージ媒体を含むことを特徴とするプログラム製品。
【００７９】
９．  前記第１のマッピングを計算する前記工程が、前記第２の特性、前記第１の要求と関連づけられた前記時間、および前記ルーティングのための前記時間窓に対してハッシュ処理および巡回冗長検査処理のうちの少なくとも１つを行う工程を含む、項８に記載のプログラム製品。
【００８０】
１０．  前記ハッシュ処理および前記巡回冗長検査処理のうちの前記少なくとも１つが、前記変更と関連づけられた一意の定数に基づく、項８または項９に記載のプログラム製品。
【００８１】
１１．  前記第２の特性が装置識別子を含み、前記第１のマッピングを計算する前記工程が、前記装置識別子に対して第１のハッシュ処理を行うことにより装置ハッシュを生成する工程と、現在の時間を前記ルーティングのための前記時間窓で除算することにより、前記第１の要求と関連づけられた前記時間が時区間内にある時区間を決定する工程と、前記時区間に対して第２のハッシュ処理を行うことにより時間ハッシュを生成する工程と、前記装置ハッシュおよび前記時間ハッシュに対して第３のハッシュ処理を行うことにより前記第１のマッピングを生成する工程とを含む、項８〜１０のいずれか一項に記載のプログラム製品。
【００８２】
１２．  前記第１の要求と関連づけられた前記時間が、前記ルーティングのための前記時間窓に等しい持続時間を有する第１の時区間内にあり、前記方法が、前記第１の要求の前記第１の特性に等しい第１の特性を有する第２の要求を受信する工程と、前記第２の要求と関連づけられた時間が前記第１の時区間内にあるか否かに基づいて、前記第１の要求を、前記変更を実装する第３のサーバまたは前記変更を実装しない第４のサーバのいずれかにルーティングする工程とを更に含む、項８〜１１のいずれか一項に記載のプログラム製品。
【００８３】
１３．  開始時間と終了時間との間の差分が前記ルーティングのための前記時間窓に等しく、前記第１のマッピングを計算する前記工程が、現在の時間が前記開始時間を超え且つ前記終了時間を超えない場合に、第１のハッシュ値に等しい前記第１のマッピングを設定する工程、または、前記現在の時間が前記開始時間を超えないもしくは前記終了時間を超える場合に、第２のハッシュ値に等しい前記第１のマッピングを設定する工程を含む、項８〜１２のいずれか一項に記載のプログラム製品。
【００８４】
１４．  前記要求の前記第２の特性が、装置識別子、クライアント識別子、ＥＳＮ、またはセッション識別子のうちの１つを含む、項８〜１３のいずれか一項に記載のプログラム製品。
【００８５】
１５．  前記第１の要求の前記第２の特性が、前記第１の要求が第１のクライアント装置と関連づけられていることを指定しており、前記第１のクライアント装置が第１の装置タイプと関連づけられており、前記第１のマッピングが、前記要求が前記変更と関連づけられることを示しているか否かを決定する前記工程が、前記第１のマッピングと、前記変更と関連づけられる前記第１の装置タイプのクライアント装置の割合を指定するレートとに基づいて、比較処理を行う工程を含む、項８〜１４のいずれか一項に記載のプログラム製品。
【００８６】
１６．  前記ルーティングのための前記時間窓を、前記第１の特性に基づいて設定する工程を更に含む、項８〜１５のいずれか一項に記載のプログラム製品。
【００８７】
１７．  カナリア分析を行う際に要求をルーティングするよう構成されたシステムにおいて、サービスに対する変更を実装する第１のサーバと、前記サービスを実装するが前記変更を実装しない複数のサーバと、スティッキーなカナリアルータであって、要求の少なくとも１つの特性に基づいて第１のマッピングを計算し、前記要求と関連づけられた時間、ルーティングのための時間窓、および前記変更と関連づけられた一意の定数に基づいて第２のマッピングを計算し、前記第１のマッピングおよび前記第２のマッピングに基づいて第３のマッピングを計算し、前記第３のマッピングが、前記要求が前記変更と関連づけられることを示しているか否かを決定し、前記第３のマッピングが、前記要求が前記変更と関連づけられることを示しているか否かに基づいて、前記要求を前記第１のサーバまたは前記複数のサーバのいずれかにルーティングするよう構成されたスティッキーなカナリアルータとを含むことを特徴とするシステム。
【００８８】
１８．  前記スティッキーなカナリアルータが、現在の時間を前記ルーティングのための前記時間窓で除算することにより、前記要求と関連づけられた前記時間が時区間内にある時区間を決定し、該時区間と前記一意の定数とを乗算することにより前記第２のマッピングを生成することによって、前記第２のマッピングを計算するよう構成された、項１７記載のシステム。
【００８９】
１９．  前記変更が、ソウトウェア更新およびデータ更新のうちの少なくとも１つを含む、項１７または項１８記載のシステム。
【００９０】
２０．  前記要求の前記少なくとも１つの特性が、装置識別子、クライアント識別子、ＥＳＮ、またはセッション識別子のうちの１つを含む、項１７〜１９のいずれか一項に記載のシステム。
【００９１】
本実施形態の態様は、システム、方法、またはコンピュータプログラム製品として具現化され得る。従って、本開示の態様は、完全にハードウェアの実施形態、完全にソフトウェアの実施形態（ファームウエア、常駐ソフトウェア、マイクロコード等を含む）、または、ソフトウェアおよびハードウェアの態様を組み合わせた実施形態の形態をとり得るものであり、それらの全てを、本明細書においては一般的に「回路」、「モジュール」、または「システム」と称する。更に、本開示の態様は、具現化されたコンピュータ可読プログラムコードを有する１以上のコンピュータ可読媒体において具現化されたコンピュータプログラム製品の形態をとり得る。
【００９２】
１以上のコンピュータ可読媒体の任意の組合せが用いられ得る。コンピュータ可読媒体は、コンピュータ可読信号媒体またはコンピュータ可読記憶媒体であり得る。コンピュータ可読記憶媒体は、例えば、電子、磁気、光、電磁、赤外線、もしくは半導体のシステム、装置、もしくはデバイス、またはそれらの任意の適切な組合せであり得るが、それらに限定されない。コンピュータ可読記憶媒体のより具体的な例（網羅的ではないリスト）としては、１以上のワイヤを有する電気的接続、ポータブルコンピュータのディスケット、ハードディスク、ランダムアクセスメモリ（ＲＡＭ）、読み出し専用メモリ（ＲＯＭ）、消去可能プログラマブル読み出し専用メモリ（ＥＰＲＯＭまたはフラッシュメモリ）、光ファイバ、ポータブルコンパクトディスク読み出し専用メモリ（ＣＤ−ＲＯＭ）、光ストレージ装置、磁気ストレージ装置、またはそれらの任意の適切な組合せが挙げられる。本明細書の文脈において、コンピュータ可読記憶媒体は、指示を実行するシステム、装置、またはデバイスによって用いられる、またはそれらに関連して用いられるためのプログラムを収容または格納可能な、任意の有体の媒体であり得る。
【００９３】
上記において、本開示の態様を、本開示の実施形態による方法、装置（システム）およびコンピュータプログラム製品のフローチャートおよび／またはブロック図を参照して説明した。フローチャートおよび／またはブロック図の各ブロック、並びに、フローチャートおよび／またはブロック図のブロックの組合せは、コンピュータプログラムの指示によって実装され得ることが理解されよう。これらのコンピュータプログラム指示は、汎用コンピュータ、専用コンピュータ、または他のプログラマブルデータ処理装置のプロセッサに供給されてマシンを生成し得るものであり、そのコンピュータまたは他のプログラマブルデータ処理装置のプロセッサによって実行される指示が、フローチャートおよび／またはブロック図の１または複数のブロックにおいて指定されている機能／動作の実装を可能にするようになっている。そのようなプロセッサは、汎用プロセッサ、専用プロセッサ、特定用途向けプロセッサ、またはフィールドプログラマブルプロッセサもしくはゲートアレイであり得るが、それらに限定されない。
【００９４】
図面中のフローチャートおよびブロック図は、本開示の様々な実施形態によるシステム、方法、およびコンピュータプログラム製品の可能な実装のアーキテクチャ、機能、および処理を示すものである。この点に関して、フローチャートまたはブロック図の各ブロックは、指定されている論理的機能を実装するための１以上の実行可能な指示を含むモジュール、セグメント、またはコードの一部を表し得る。なお、幾つかの別の実装例においては、ブロック内に記されている機能が、図面に記されている順序から外れて生じ得る。例えば、続けて示されている２つのブロックが、含まれる機能に応じて、実際には略並列に実行される場合もあり、または、それらのブロックが逆の順序で実行される場合もある。また、ブロック図および／またはフローチャートの各ブロック、並びに、ブロック図および／またはフローチャートのブロックの組合せは、指定された機能もしくは動作を行う専用ハードウェアに基づくシステムによって、または、専用ハードウェアとコンピュータ指示との組合せによって実装され得る。
【００９５】
上記は本開示の実施形態に向けられているが、本開示の基本的な範囲から逸脱することなく、本開示の他のおよび更なる実施形態も考案され得るものであり、本開示の範囲は添付の特許請求によって決定される。
以下、本発明の好ましい実施形態を項分け記載する。
実施形態１
カナリア分析を行う際に要求をルーティングするための、コンピュータによって実装される方法において、
第１の要求の少なくとも１つの特性、前記第１の要求と関連づけられた時間、およびルーティングのための時間窓に基づいて、第１のマッピングを計算する工程と、
前記第１のマッピングが、前記第１の要求が複数のサーバを介して提供されるサービスに対する変更と関連づけられることを示しているか否かを決定する工程と、
前記第１のマッピングが、前記第１の要求が前記変更と関連づけられることを示しているか否かに基づいて、前記第１の要求を、前記変更を実装する第１のサーバまたは前記変更を実装しない第２のサーバのいずれかにルーティングする工程とを含むことを特徴とする方法。
実施形態２
前記第１の要求の前記少なくとも１つの特性が、装置識別子を含み、
前記第１のマッピングを計算する前記工程が、
前記装置識別子に対して第１のハッシュ処理を行うことにより装置ハッシュを生成する工程と、
現在の時間を前記ルーティングのための前記時間窓で除算することにより、前記第１の要求と関連づけられた前記時間が時区間内にある時区間を決定する工程と、
前記時区間に対して第２のハッシュ処理を行うことにより時間ハッシュを生成する工程と、
前記装置ハッシュおよび前記時間ハッシュに対して第３のハッシュ処理を行うことにより前記第１のマッピングを生成する工程と
を含む、実施形態１記載のコンピュータによって実装される方法。
実施形態３
前記第１の要求と関連づけられた前記時間が、前記ルーティングのための前記時間窓に等しい持続時間を有する第１の時区間内にあり、
第２の要求の少なくとも１つの特性が前記第１の要求の前記少なくとも１つの特性に等しい第２の要求を受信する工程と、
前記第２の要求と関連づけられた時間が前記第１の時区間内にあるか否かに基づいて、前記第１の要求を、前記変更を実装する第３のサーバまたは前記変更を実装しない第４のサーバのいずれかにルーティングする工程とを更に含む、
実施形態１記載のコンピュータによって実装される方法。
実施形態４
前記第１のマッピングを計算する前記工程が、前記第１の要求の第１の特性、前記第１の要求と関連づけられた前記時間、および前記ルーティングのための前記時間窓に対してハッシュ処理および巡回冗長検査処理のうちの少なくとも１つを行う工程を含む、実施形態１記載のコンピュータによって実装される方法。
実施形態５
前記ハッシュ処理および前記巡回冗長検査処理のうちの前記少なくとも１つが、前記変更と関連づけられた一意の定数に基づく、実施形態４記載のコンピュータによって実装される方法。
実施形態６
前記変更がソウトウェア更新を含む、実施形態１記載のコンピュータによって実装される方法。
実施形態７
前記要求の前記少なくとも１つの特性が、装置識別子、クライアント識別子、ＥＳＮ、またはセッション識別子のうちの１つを含む、実施形態１記載のコンピュータによって実装される方法。
実施形態８
プロセッサによって指示が実行された際に、該プロセッサに、
第１の要求の第１の特性に基づいて、サービスに対する変更と関連づけられるマッピングの割合を決定する工程と、
前記第１の要求の第２の特性、前記第１の要求と関連づけられた時間、およびルーティングのための時間窓に基づいて、第１のマッピングを計算する工程と、
前記第１のマッピングおよび複数のマッピングの割合に基づく比較処理を行うことにより、前記第１のマッピングが、前記第１の要求が前記変更と関連づけられることを示しているか否かを決定する工程と、
前記第１のマッピングが、前記第１の要求が前記変更と関連づけられることを示しているか否かに基づいて、前記第１の要求を、前記変更を実装する第１のサーバまたは前記変更を実装しない第２のサーバのいずれかにルーティングする工程と
を行わせる指示を含むことを特徴とするコンピュータ可読ストレージ媒体。
実施形態９
前記第１のマッピングを計算する前記工程が、前記第２の特性、前記第１の要求と関連づけられた前記時間、および前記ルーティングのための前記時間窓に対してハッシュ処理および巡回冗長検査処理のうちの少なくとも１つを行う工程を含む、実施形態８記載のコンピュータ可読ストレージ媒体。
実施形態１０
前記ハッシュ処理および前記巡回冗長検査処理のうちの前記少なくとも１つが、前記変更と関連づけられた一意の定数に基づく、実施形態９記載のコンピュータ可読ストレージ媒体。
実施形態１１
前記第２の特性が装置識別子を含み、
前記第１のマッピングを計算する前記工程が、
前記装置識別子に対して第１のハッシュ処理を行うことにより装置ハッシュを生成する工程と、
現在の時間を前記ルーティングのための前記時間窓で除算することにより、前記第１の要求と関連づけられた前記時間が時区間内にある時区間を決定する工程と、
前記時区間に対して第２のハッシュ処理を行うことにより時間ハッシュを生成する工程と、
前記装置ハッシュおよび前記時間ハッシュに対して第３のハッシュ処理を行うことにより前記第１のマッピングを生成する工程と
を含む、実施形態８記載のコンピュータ可読ストレージ媒体。
実施形態１２
前記第１の要求と関連づけられた前記時間が、前記ルーティングのための前記時間窓に等しい持続時間を有する第１の時区間内にあり、
前記方法が、
前記第１の要求の前記第１の特性に等しい第１の特性を有する第２の要求を受信する工程と、
前記第２の要求と関連づけられた時間が前記第１の時区間内にあるか否かに基づいて、前記第１の要求を、前記変更を実装する第３のサーバまたは前記変更を実装しない第４のサーバのいずれかにルーティングする工程と
を更に含む、実施形態８記載のコンピュータ可読ストレージ媒体。
実施形態１３
開始時間と終了時間との間の差分が前記ルーティングのための前記時間窓に等しく、
前記第１のマッピングを計算する前記工程が、
現在の時間が前記開始時間を超え且つ前記終了時間を超えない場合に、第１のハッシュ値に等しい前記第１のマッピングを設定する工程、または、
前記現在の時間が前記開始時間を超えないまたは前記終了時間を超える場合に、第２のハッシュ値に等しい前記第１のマッピングを設定する工程
を含む、実施形態８記載のコンピュータ可読ストレージ媒体。
実施形態１４
前記要求の前記第２の特性が、装置識別子、クライアント識別子、ＥＳＮ、またはセッション識別子のうちの１つを含む、実施形態８記載のコンピュータ可読ストレージ媒体。
実施形態１５
前記第１の要求の前記第２の特性が、前記第１の要求が第１のクライアント装置と関連づけられていることを指定しており、前記第１のクライアント装置が第１の装置タイプと関連づけられており、前記第１のマッピングが、前記要求が前記変更と関連づけられることを示しているか否かを決定する前記工程が、前記第１のマッピングと、前記変更と関連づけられる前記第１の装置タイプのクライアント装置の割合を指定するレートとに基づいて、比較処理を行う工程を含む、実施形態８記載のコンピュータ可読ストレージ媒体。
実施形態１６
前記ルーティングのための前記時間窓を、前記第１の特性に基づいて設定する工程を更に含む、実施形態８記載のコンピュータ可読ストレージ媒体。
実施形態１７
カナリア分析を行う際に要求をルーティングするよう構成されたシステムにおいて、
サービスに対する変更を実装する第１のサーバと、
前記サービスを実装するが前記変更を実装しない複数のサーバと、
スティッキーなカナリアルータであって、
要求の少なくとも１つの特性に基づいて第１のマッピングを計算し、
前記要求と関連づけられた時間、ルーティングのための時間窓、および前記変更と関連づけられた一意の定数に基づいて第２のマッピングを計算し、
前記第１のマッピングおよび前記第２のマッピングに基づいて第３のマッピングを計算し、
前記第３のマッピングが、前記要求が前記変更と関連づけられることを示しているか否かを決定し、
前記第３のマッピングが、前記要求が前記変更と関連づけられることを示しているか否かに基づいて、前記要求を前記第１のサーバまたは前記複数のサーバのいずれかにルーティングする
よう構成されたスティッキーなカナリアルータと
を含むことを特徴とするシステム。
実施形態１８
前記スティッキーなカナリアルータが、
現在の時間を前記ルーティングのための前記時間窓で除算することにより、前記要求と関連づけられた前記時間が時区間内にある時区間を決定し、
前記時区間と前記一意の定数とを乗算することにより前記第２のマッピングを生成する
ことによって前記第２のマッピングを計算するよう構成された、実施形態１７記載のシステム。
実施形態１９
前記変更が、ソウトウェア更新およびデータ更新のうちの少なくとも１つを含む、実施形態１７記載のシステム。
実施形態２０
前記要求の前記少なくとも１つの特性が、装置識別子、クライアント識別子、ＥＳＮ、またはセッション識別子のうちの１つを含む、実施形態１７記載のシステム。
【符号の説明】
【００９６】
１００  システム
１１０  コンピュートインスタンス
１１８  サービス提供者インフラ
１２０  エッジサービスクラスタ
１３０  スティッキーなカナリアルータ
１４０  プロダクションクラスタ
１５０  ベースラインクラスタ
１６０  カナリアクラスタ
２１０  要求
２２０  ルーティング構成
２３２  １００万分の１のレート（ＲＰＭ）
２３４  有効期間（ＴＴＬ、時間窓）
２４２  装置ハッシュ
２４６  時間ハッシュ
２４８  ルーティングハッシュ
３０５  クライアント装置
【図１Ａ】
0006613373.tif 000002
【図１Ｂ】
0006613373.tif 000003
【図２】
0006613373.tif 000004
【図３】
0006613373.tif 000005
【図４】
0006613373.tif 000006