特許第5714571号(P5714571)IP Force 特許公報掲載プロジェクト 2022.1.31 β版

知財求人 - 知財ポータルサイト「IP Force」

▶ アリババ・グループ・ホールディング・リミテッドの特許一覧

特許5714571キャッシュクラスタを構成可能モードで用いるキャッシュデータ処理
<>
  • 特許5714571-キャッシュクラスタを構成可能モードで用いるキャッシュデータ処理 図000002
  • 特許5714571-キャッシュクラスタを構成可能モードで用いるキャッシュデータ処理 図000003
  • 特許5714571-キャッシュクラスタを構成可能モードで用いるキャッシュデータ処理 図000004
  • 特許5714571-キャッシュクラスタを構成可能モードで用いるキャッシュデータ処理 図000005
  • 特許5714571-キャッシュクラスタを構成可能モードで用いるキャッシュデータ処理 図000006
  • 特許5714571-キャッシュクラスタを構成可能モードで用いるキャッシュデータ処理 図000007
  • 特許5714571-キャッシュクラスタを構成可能モードで用いるキャッシュデータ処理 図000008
  • 特許5714571-キャッシュクラスタを構成可能モードで用いるキャッシュデータ処理 図000009
  • 特許5714571-キャッシュクラスタを構成可能モードで用いるキャッシュデータ処理 図000010
  • 特許5714571-キャッシュクラスタを構成可能モードで用いるキャッシュデータ処理 図000011
  • 特許5714571-キャッシュクラスタを構成可能モードで用いるキャッシュデータ処理 図000012
  • 特許5714571-キャッシュクラスタを構成可能モードで用いるキャッシュデータ処理 図000013
  • 特許5714571-キャッシュクラスタを構成可能モードで用いるキャッシュデータ処理 図000014
  • 特許5714571-キャッシュクラスタを構成可能モードで用いるキャッシュデータ処理 図000015
  • 特許5714571-キャッシュクラスタを構成可能モードで用いるキャッシュデータ処理 図000016
  • 特許5714571-キャッシュクラスタを構成可能モードで用いるキャッシュデータ処理 図000017
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】5714571
(24)【登録日】2015年3月20日
(45)【発行日】2015年5月7日
(54)【発明の名称】キャッシュクラスタを構成可能モードで用いるキャッシュデータ処理
(51)【国際特許分類】
   G06F 11/20 20060101AFI20150416BHJP
【FI】
   G06F11/20 310F
【請求項の数】18
【全頁数】24
(21)【出願番号】特願2012-513037(P2012-513037)
(86)(22)【出願日】2010年5月20日
(65)【公表番号】特表2012-528382(P2012-528382A)
(43)【公表日】2012年11月12日
(86)【国際出願番号】US2010001502
(87)【国際公開番号】WO2010138168
(87)【国際公開日】20101202
【審査請求日】2013年5月15日
(31)【優先権主張番号】12/800,691
(32)【優先日】2010年5月19日
(33)【優先権主張国】US
(31)【優先権主張番号】200910143736.3
(32)【優先日】2009年5月25日
(33)【優先権主張国】CN
(73)【特許権者】
【識別番号】510330264
【氏名又は名称】アリババ・グループ・ホールディング・リミテッド
【氏名又は名称原語表記】ALIBABA GROUP HOLDING LIMITED
(74)【代理人】
【識別番号】110000028
【氏名又は名称】特許業務法人明成国際特許事務所
(72)【発明者】
【氏名】チェン・ウェンチュ
【審査官】 ▲高▼橋 正▲徳▼
(56)【参考文献】
【文献】 特開2000−148704(JP,A)
【文献】 米国特許出願公開第2008/0172679(US,A1)
【文献】 特開2003−022259(JP,A)
【文献】 特開2007−200103(JP,A)
【文献】 特開2009−098715(JP,A)
【文献】 国際公開第2007/133300(WO,A1)
【文献】 特開平07−013792(JP,A)
【文献】 特開2008−217285(JP,A)
【文献】 米国特許第06782492(US,B1)
【文献】 米国特許出願公開第2002/0120887(US,A1)
【文献】 米国特許第06243795(US,B1)
【文献】 米国特許第07890701(US,B1)
【文献】 米国特許第06038641(US,A)
【文献】 特開2008−269462(JP,A)
【文献】 特表2009−534738(JP,A)
【文献】 特開2004−295656(JP,A)
(58)【調査した分野】(Int.Cl.,DB名)
G06F 11/16−11/20
(57)【特許請求の範囲】
【請求項1】
キャッシュデータを処理する方法であって、
複数のキャッシュサービス・ノードを含むキャッシュクラスタ内のマスタ・キャッシュサービス・ノードに対してキャッシュ処理要求を送信し、前記キャッシュクラスタは、前記複数のキャッシュサービス・ノードのすべてが稼働状態にあって、マスタ・キャッシュサービス・ノードが前記複数のキャッシュサービス・ノードの中から選択されるアクティブ・クラスタ構成モード、あるいは、前記複数のキャッシュサービス・ノードの中で唯一稼働状態にあるノードがマスタ・キャッシュサービス・ノードであるスタンバイ・クラスタ構成モードのいずれかに構成可能であり、前記キャッシュ処理要求はオペレーションを含み、
前記マスタ・キャッシュサービス・ノードからの応答を待機し、
前記マスタ・キャッシュサービス・ノードに障害が発生したか否かを判断し、
前記マスタ・キャッシュサービス・ノードに障害が発生した場合に
前記キャッシュ処理要求を実行するためにバックアップ・キャッシュサービス・ノードを選択し、
前記キャッシュ処理要求を前記バックアップ・キャッシュサービス・ノードに送信し、タスク実行スレッドプールは前記バックアップ・キャッシュサービス・ノード以外の前記複数のキャッシュサービス・ノードの内の1または複数のキャッシュサービス・ノードが前記オペレーションを実行することを防止し、
前記バックアップ・キャッシュサービス・ノードから前記キャッシュ処理要求に対応するオペレーション成功結果を受け取り、
前記オペレーション成功結果に応じて、前記オペレーションおよび前記オペレーション成功結果をクラスタ・オペレーション・タスク・キューに格納し、前記マスタ・キャッシュサービス・ノードが障害から復帰すると、前記オペレーションおよび前記オペレーション成功結果は前記クラスタ・オペレーション・タスク・キューから前記マスタ・キャッシュサービス・ノードにコピーされること、
を備える方法。
【請求項2】
前記マスタ・キャッシュサービス・ノードに障害が発生したか否かの判断は、障害回数を閾値と比較することを含む、請求項1に記載の方法。
【請求項3】
前記マスタ・キャッシュサービス・ノードに障害が発生した場合に、前記マスタ・キャッシュサービス・ノードに障害タグを関連付けることをさらに備える、請求項1に記載の方法。
【請求項4】
前記マスタ・キャッシュサービス・ノードに障害が発生した場合に、前記マスタ・キャッシュサービス・ノードに障害タグを関連付け、前記マスタ・キャッシュサービス・ノードの障害有効期間を設定すること、をさらに備える、請求項1に記載の方法。
【請求項5】
前記バックアップ・キャッシュサービス・ノードの選択は、
前記クラスタ内の障害タグが付けられていない利用可能なキャッシュサービス・ノードを識別し、
前記利用可能なキャッシュサービス・ノードの中から前記バックアップ・キャッシュサービス・ノードを選択すること、を含む、請求項1に記載の方法。
【請求項6】
前記バックアップ・キャッシュサービス・ノードからの応答を待つことをさらに備える、請求項1に記載の方法。
【請求項7】
前記マスタ・キャッシュサービス・ノードにキャッシュ処理要求を送信に先立って、前記方法は、
障害タグが付けられていない利用可能なキャッシュサービス・ノードを識別し、
前記利用可能なキャッシュサービス・ノードの中から前記マスタ・キャッシュサービス・ノードを選択すること、をさらに備える請求項1に記載の方法。
【請求項8】
前記キャッシュ処理要求の送信、および前記応答の待機は、非同期的に実行される、請求項1に記載の方法。
【請求項9】
前記マスタ・キャッシュサービス・ノードについてハートビート検出を実行し、
前記マスタ・キャッシュサービス・ノードに継続して障害が発生している場合に、前記マスタ・キャッシュサービス・ノードに関連付けられている障害タグを更新すること、をさらに備える、請求項1に記載の方法。
【請求項10】
キャッシング・システムであって、
複数のキャッシュサービス・ノードを含むキャッシュクラスタであって、前記キャッシュクラスタは、前記複数のキャッシュサービス・ノードのすべてが稼働状態にあって、マスタ・キャッシュサービス・ノードが前記複数のキャッシュサービス・ノードの中から選択されるアクティブ・クラスタ構成モード、あるいは、前記複数のキャッシュサービス・ノードの中で唯一稼働状態にあるノードがマスタ・キャッシュサービス・ノードであるスタンバイ・クラスタ構成モードのいずれかに構成可能であり、
キャッシュ・クライアントであって、
前記マスタ・キャッシュサービス・ノードにキャッシュ処理要求を送信し、前記キャッシュ処理要求はオペレーションを含み、
前記マスタ・キャッシュサービス・ノードからの応答を待機し、
前記マスタ・キャッシュサービス・ノードに障害が発生したか否かを判断し、
前記マスタ・キャッシュサービス・ノードに障害が発生した場合に
前記キャッシュ処理要求を実行するためにバックアップ・キャッシュサービス・ノードを選択し、
前記キャッシュ処理要求を前記バックアップ・キャッシュサービス・ノードに送信し、タスク実行スレッドプールは前記バックアップ・キャッシュサービス・ノード以外の前記複数のキャッシュサービス・ノードの内の1または複数のキャッシュサービス・ノードが前記オペレーションを実行することを防止し、
前記バックアップ・キャッシュサービス・ノードから前記キャッシュ処理要求に対応するオペレーション成功結果を受け取り、
前記オペレーション成功結果に応じて、前記オペレーションおよび前記オペレーション成功結果をクラスタ・オペレーション・タスク・キューに格納し、前記マスタ・キャッシュサービス・ノードが障害から復帰すると、前記オペレーションおよび前記オペレーション成功結果は前記クラスタ・オペレーション・タスク・キューから前記マスタ・キャッシュサービス・ノードにコピーされる、ように構成されているキャッシュ・クライアントと、を備えるシステム。
【請求項11】
前記マスタ・キャッシュサービス・ノードに障害が発生したか否かの判断は、障害回数を閾値と比較することを含む、請求項10に記載のシステム。
【請求項12】
前記マスタ・キャッシュサービス・ノードに障害が発生した場合に、前記キャッシュ・クライアントは、さらに、前記マスタ・キャッシュサービス・ノードに障害タグを関連付けるように構成されている、請求項10に記載のシステム。
【請求項13】
前記マスタ・キャッシュサービス・ノードに障害が発生した場合に、前記キャッシュ・クライアントは、さらに、前記マスタ・キャッシュサービス・ノードに障害タグおよび障害有効期間を関連付けるように構成されている、請求項10に記載のシステム。
【請求項14】
前記バックアップ・キャッシュサービス・ノードは、
前記クラスタ内の障害タグが付けられていない利用可能なキャッシュサービス・ノードを識別し、
前記利用可能なキャッシュサービス・ノードの中から前記バックアップ・キャッシュサービス・ノードを選択すること、を含む、請求項10に記載のシステム。
【請求項15】
前記キャッシュ・クライアントは、さらに、前記バックアップ・キャッシュサービス・ノードからの応答を待つように構成されている、請求項10に記載のシステム。
【請求項16】
前記マスタ・キャッシュサービス・ノードにキャッシュ処理要求の送信に先立って、前記キャッシュ・クライアントは、さらに、
障害タグが付けられていない利用可能なキャッシュサービス・ノードを識別し、
前記利用可能なキャッシュサービス・ノードの中から前記マスタ・キャッシュサービス・ノードを選択するように構成されている、請求項10に記載のシステム。
【請求項17】
前記キャッシュ処理要求の送信、および前記応答の待機は、非同期的に実行される、請求項10に記載のシステム。
【請求項18】
前記キャッシュ・クライアントは、さらに、
前記マスタ・キャッシュサービス・ノードについてハートビート検出を実行し、
前記マスタ・キャッシュサービス・ノードに継続して障害が発生している場合に、前記マスタ・キャッシュサービス・ノードに関連付けられている障害タグを更新するように構成されている、請求項10に記載のシステム。
【発明の詳細な説明】
【技術分野】
【0001】
[他の出願の相互参照]
本出願は、全ての目的のために参照により本明細書に組み込まれる、発明の名称を“METHOD,SYSTEM AND DEVICE FOR CACHE DATA PROCESSING(キャッシュデータ処理の方法、システムおよびデバイス)”とする、2009年5月25日に出願された中華人民共和国特許出願番号200910143736.3に基づく優先権を主張する。
【0002】
本出願は、概して、ネットワーク技術の分野に関し、より具体的には、キャッシュデータ処理に関するものである。
【背景技術】
【0003】
分散キャッシュとは、分散システムのメモリにデータを保存することである。キャッシュするコンテンツを物理的に分離されたキャッシュサービス・ノードに分散させることで、イベント駆動型アプリケーションにおいて、高い可用性、高いパフォーマンス、およびスケーラビリティを実現することができる。イベント駆動型サードパーティ・アプリケーションは、出力イベントをいくつかの分散キャッシュに分散させることができ、これにより、結果の高可用性を確保することができる。多くのイベント駆動型サードパーティ・アプリケーションは、ストリームデータを、永続記憶装置から取得したデータなどの外部データと結合する必要がある。キャッシングを利用することで、非ストリームデータへのアクセス速度を向上させることができ、ひいてはアプリケーション全体のパフォーマンスを向上させることができる。このため、キャッシングは、インターネットベースのアプリケーションおよび大規模ウェブサイトのアーキテクチャ設計において広く用いられている。
【0004】
現在の分散キャッシュには、一般的に、サーバ分散キャッシュとクライアント分散キャッシュとが含まれる。データは、所定のアルゴリズムによりキャッシュサービス・ノードに分散される。キャッシュサービス・ノードが異常動作すると、そのキャッシュサービス・ノードのすべてのデータが失われることがある。さらに、キャッシュサービス・ノードの障害によって、正常なサービスが中断されることがある。また、データは所定のアルゴリズムによりキャッシュサービス・ノードに分散されるので、ひとたびキャッシュサービス・ノードが異常動作し始めると、そのキャッシュサービス・ノードに分散される更なる要求は受け付けられなくなる。
【図面の簡単な説明】
【0005】
本発明の様々な実施形態は、以下の詳細な説明および添付の図面において開示される。
【0006】
図1】典型的なサーバ分散キャッシュを示す図である。
【0007】
図2】典型的なクライアント分散キャッシュの構造図である。
【0008】
図3】キャッシュ処理方法の一実施形態を示すフローチャートである。
【0009】
図4】クラスタ内の複数のキャッシュサービス・ノードがアクティブ・クラスタ構成モードにあるときのキャッシュ要求処理プロセスの一実施形態を示すフローチャートである。
【0010】
図5】マスタ・キャッシュサービス・ノードを選択するプロセスの一実施形態を示すフローチャートである。
【0011】
図6】キャッシュサービス・ノードがスタンバイ・クラスタ構成モードに構成されているキャッシュクラスタにおけるキャッシュデータ処理プロセスの一実施形態を示すフローチャートである。
【0012】
図7】アクティブ構成モードでのキャッシュデータ処理プロセスの一実施形態において用いられるメッセージおよびステップを示すフローチャートである。
【0013】
図8】非同期処理プロセスの一実施形態を示すフローチャートである。
【0014】
図9】アクティブ構成モードでのキャッシュデータ処理プロセスの一実施形態において用いられるメッセージおよびステップを示すフローチャートである。
【0015】
図10】障害タグが付けられたキャッシュサービス・ノードについてハートビート検出を実行するプロセスの一実施形態を示すフローチャートである。
【0016】
図11】障害タグが付けられていないキャッシュサービス・ノードについてハートビート検出を実行するプロセスの一実施形態を示すフローチャートである。
【0017】
図12】データキャッシング・システムの一実施形態を示すブロック図である。
【0018】
図13】キャッシュ・クライアントの一実施形態を示すブロック図である。
【0019】
図14】アクティブ・クラスタ構成モードにあるキャッシュ・クライアントを示すブロック図である。
【0020】
図15】スタンバイ・クラスタ構成モードにあるキャッシュ・クライアントを示すブロック図である。
【0021】
図16】容量拡張が可能なキャッシュ・ノードを示す図である。
【発明を実施するための形態】
【0022】
本発明は、数多くの方法で実施することが可能であり、それには、プロセス、装置、システム、組成物、コンピュータ読み取り可能な記憶媒体上で実現されるコンピュータプログラム・プロダクトとしての実施、および/または、プロセッサに結合されたメモリに記憶された命令および/またはそれにより提供される命令を実行するように構成されたプロセッサなど、プロセッサとしての実施が含まれる。本明細書では、このような実施の形態、あるいは本発明が取り得るその他の形態を、技術と呼ぶ場合がある。一般的に、開示されるプロセスのステップの順序は、発明の範囲内で変更することができる。特に明記しない限り、タスクを実行するように構成されたものとして記載されるプロセッサまたはメモリなどのコンポーネントは、所与の時間に一時的にそのタスクを実行するように構成された汎用コンポーネント、あるいはそのタスクを実行するように作製された専用コンポーネントとして実現することができる。本明細書において用いられる場合の「プロセッサ」
という用語は、コンピュータプログラム命令などのデータを処理するように構成された1つまたは複数のデバイス、回路、および/または処理コアを指している。
【0023】
本発明の1つまたは複数の実施形態についての詳細な説明が、以下で、本発明の原理を示す添付図面と共に提供される。本発明は、それらの実施形態に関連させて説明されるが、本発明は、いずれの実施形態にも限定されるものではない。本発明の範囲は、請求項によってのみ限定されるものであり、本発明は、多くの代替案、変形、および均等物を包含している。発明についての完全な理解を与えるため、様々な具体的詳細が以下の説明において記載される。これらの詳細は、例示目的で提供されるものであり、本発明は、これら特定の詳細の一部または全部を省いて、請求項に基づき実施することができる。明確にする目的で、発明が不必要に不明瞭になることがないよう、本発明に関連する技術分野で知られている技術的事項については詳細に記載していない。
【0024】
図1は、典型的なサーバ分散キャッシュを示す図である。このシステムは、キャッシュ・クライアント、キャッシュ・ノードA、キャッシュ・ノードB、およびキャッシュ・ノードCを含んでいる。分散オペレーションは、キャッシュ・ノードBでサーバにより実行される。ノード間で通信プロトコルを実行するために、JGroupsによるマルチキャスト通信がしばしば用いられ、オペレーションおよびデータ同期は、通常、3段階のビジネスプロトコルにより実行される。この種の代表的なシステムは、JBoss CacheおよびEhCacheを含んでいる。マルチキャスト通信は信頼性が低く、また、3段階のビジネスプロトコルは非常に複雑であるため、このような設定は、効率が低く、頻度および同時性の高い要求を処理しなければならないシステムには一般的に適さない。
【0025】
図2は、典型的なクライアント分散キャッシュの構造図である。このシステムは、キャッシュ・クライアント、キャッシュ・ノードA、キャッシュ・ノードB、およびキャッシュ・ノードCを含んでいる。キャッシュ・サーバは、分散型キャッシュである。異なるクライアントには異なるキーを配布することができ、これにより、拡張可能なクライアント分散キャッシュシステムを形成している。この種の代表的なシステムは、Memcachedシステムを含んでいる。この種のシステムは、拡張性に優れ、高効率であるが、フォールトトレラント機構を欠いている。データキャッシュサービス・ノードの一部に障害が発生すると、システムは、ビジネスシステムの正常な利用に影響するいくらかのデータを失う。Sina Networkにより開発されたオープンソースのMemcachedデータベースは、データをメモリデータベースまたはローカルハードディスクに保存することにより、データの完全性を保証するが、しかしながら、要求の同時性が高い環境では、フォールトトレランスあるいは負荷分散を高度に実現することができない。
【0026】
以下で説明する実施形態では、マスタ・キャッシュサービス・ノードがキャッシュデータ処理の実行に失敗した場合、キャッシュ・クライアントが、そのマスタ・キャッシュサービス・ノードに障害タグを付けて、バックアップ・キャッシュサービス・ノードを選択し、そのバックアップ・キャッシュサービス・ノードにオペレーション要求を送る。本願は、クラスタ内に複数のキャッシュサービス・ノードを含むネットワークにおいて適用されるキャッシュデータ処理の方法を提供し、キャッシュサービス・ノードの障害の結果としてキャッシュサービス・ノードが利用不可能になるという問題およびデータ損失の問題を解決する。
【0027】
図12は、データキャッシング・システムの一実施形態を示すブロック図である。このシステムは、キャッシュ・クライアント1201、マスタ・キャッシュサービス・ノード1202、および1つまたは複数のバックアップ・キャッシュサービス・ノード1203を含んでいる。キャッシュ・クライアントは、コンピュータ、スマートフォンなどのモバイル機器、あるいは、ネットワークを介してマスタ・キャッシュサービス・ノード1202にオペレーション要求を送信し、マスタ・キャッシュサービス・ノード1202からオペレーション要求の結果を受信するように構成された他の適当なデバイスとして実現することができる。その結果が、マスタ・キャッシュサービス・ノード1202から受信したオペレーション要求が失敗したことを示している場合、あるいは要求がタイムアウトした場合、キャッシュ・クライアントは、バックアップ・キャッシュサービス・ノード1203を選択して、そのバックアップ・キャッシュサービス・ノード1203にオペレーション要求をリダイレクトするように構成されている。マスタ・キャッシュサービス・ノード1202は、キャッシュ・クライアント1201により送信されるキャッシュデータ処理要求を受信して、オペレーション結果をキャッシュ・クライアント1201にリターンするように構成されている。バックアップ・キャッシュサービス・ノード1203は、マスタ・キャッシュサービス・ノード1202に障害が発生した場合に、キャッシュ・クライアント1201により送信されるキャッシュデータ処理要求を受信する。
【0028】
マスタ・キャッシュサービス・ノードとバックアップ・キャッシュサービス・ノードは、アクティブ・クラスタ構成モードあるいはスタンバイ・クラスタ構成モードに構成することができる。アクティブ・クラスタ構成モードでは、クラスタ内の複数のキャッシュサービス・ノードが稼働状態にあり、要求の処理が必要となるたびにマスタ・キャッシュサービス・ノードが選択される。1つのキャッシュサービス・ノードに障害が発生すると、他のキャッシュサービス・ノードで要求を共有する。スタンバイ・クラスタ構成モードでは、クラスタ内の複数のキャッシュサービス・ノードのうち、1つのみがマスタ・キャッシュサービス・ノードとして機能し、稼働状態にあるキャッシュサービス・ノードである。他のキャッシュサービス・ノードは、バックアップ状態にある。マスタ・キャッシュサービス・ノードに障害が発生すると、他のキャッシュサービス・ノードの1つがマスタ・キャッシュサービス・ノードに代わって新しいマスタ・キャッシュサービス・ノードとなって、要求を処理する。また、キャッシュサービス・ノードは、クラスタ内のキャッシュサービス・ノードの容量が不足しているときに動的にノードの容量を拡張できるように、仮想化されている。
【0029】
図3は、キャッシュ処理方法の一実施形態を示すフローチャートである。このプロセス300は、図12の1200のようなキャッシュ処理システムにおいて実行することができる。ステップ302において、キャッシュ・クライアントが、マスタ・キャッシュサービス・ノードにキャッシュ処理要求を送信する。ステップ304において、キャッシュ・クライアントは、マスタ・キャッシュサービス・ノードからの応答(すなわち、キャッシュ処理要求の結果)を待つ。ステップ306において、マスタ・キャッシュサービス・ノードがキャッシュデータ処理の実行に失敗したか否か判断される。受信した応答がエラーコード、不正確なチェックサムなどを含んでいる場合、あるいは応答がタイムアウトになった場合は、マスタ・キャッシュサービス・ノードは障害が発生したと判断される。この場合、ステップ308において、キャッシュ・クライアントにより、バックアップ・キャッシュサービス・ノードが新しいマスタ・キャッシュサービス・ノードとして選択されて、その後のキャッシュ処理要求は、そのバックアップ・キャッシュサービス・ノードへ送信される。そうでない場合は、その後のキャッシュ処理要求は、引き続き同じマスタ・キャッシュサービス・ノード宛てに送られる。
【0030】
一部の実施形態では、クラスタ構成モードに、アクティブ・クラスタ構成モードとスタンバイ・クラスタ構成モードとが含まれる。アクティブ・クラスタ構成モードでは、クラスタ内の複数のキャッシュサービス・ノードが稼働状態にあり、それらが共同で要求を処理し、マスタ・キャッシュサービス・ノードは必ずしも1つだけではない。1つのキャッシュサービス・ノードに障害が発生すると、その他のキャッシュサービス・ノードで、引き続き要求の処理を共有する。要求が処理されるときには、クラスタ内のノードのデータ同期化が実行される。スタンバイ・クラスタ構成モードでは、クラスタ内の複数のキャッシュサービス・ノードのうち1つのキャッシュサービス・ノードのみが稼働状態にあって、マスタ・キャッシュサービス・ノードとして機能しており、他のキャッシュサービス・ノードは、すべてバックアップ状態にある。マスタ・キャッシュサービス・ノードに障害が発生すると、バックアップ・キャッシュサービス・ノードの1つが、新しいマスタ・サービス・ノードとして選択されて、これが、キャッシュ処理要求を受信して処理し、クラスタ内のノードのデータ同期化を定期的に実行する。アクティブ・クラスタ構成モードおよびスタンバイ・クラスタ構成モードによって、ネットワーク全体の自動障害リカバリが可能となり、また、キャッシュ・クライアントによる無中断のデータアクセスが確保される。
【0031】
図4は、クラスタ内の複数のキャッシュサービス・ノードがアクティブ・クラスタ構成モードにあるときのキャッシュ要求処理プロセスの一実施形態を示すフローチャートである。このプロセスは、キャッシュ・クライアントにおいて実行することができる。
【0032】
ステップ402において、キャッシュ・クライアントは、アルゴリズムにより、あるいはクライアントの構成に応じて、クラスタ内の複数のキャッシュサービス・ノードからマスタ・キャッシュサービス・ノードを選択する。クラスタ内のキャッシュサービス・ノードに障害が発生した場合、その障害が発生したノードは、障害状態を保持する。この情報は、他のキャッシュサービス・ノードにブロードキャストされるか、あるいはネットワーク上の指定の記憶場所に保存されるものとすることができる。キャッシュ・クライアントは、キャッシュサービス・ノードに問合せすることにより、あるいは指定の場所から情報を取り出すことにより、障害状態のタグが付けられたキャッシュサービス・ノードを得る。一部の実施形態では、キャッシュ・クライアントは、さらに、ネットワーク上の利用可能なキャッシュサービス・ノードを得る。キャッシュ・クライアントは、利用可能なキャッシュサービス・ノードから1つのキャッシュサービス・ノードを、新しいマスタ・キャッシュサービス・ノードとして選択する。選択方法の例には、動的負荷分散選択、ハッシュ法、またはコンシステント・ハッシュ法が含まれる。
【0033】
マスタ・キャッシュサービス・ノードを選択した後に、ステップ404で、キャッシュ・クライアントは、キャッシュデータ処理要求をマスタ・キャッシュサービス・ノードに送信する。
【0034】
ステップ406において、キャッシュ・クライアントは、マスタ・キャッシュサービス・ノードからの応答を待つ。ステップ408において、マスタ・キャッシュサービス・ノードがキャッシュデータ処理の実行に失敗したか否か判断される。要求が正常に処理されたことを応答が示している場合、その後のキャッシュ処理要求は、ステップ404において、引き続き同じマスタ・キャッシュサービス・ノード宛てに送られる。
【0035】
受信した応答がエラーコード、不正確なチェックサムなどを含んでいる場合、あるいは応答がタイムアウトした場合は、マスタ・キャッシュサービス・ノードは障害が発生したと判断される。一部の実施形態では、マスタ・キャッシュサービス・ノードがキャッシュデータ処理の実行に失敗すると、キャッシュ・クライアントは、マスタ・キャッシュサービス・ノードに関連する失敗オペレーション回数をインクリメントする。失敗オペレーション回数は所定の閾値と比較される。失敗オペレーション回数が閾値を超えている場合、マスタ・キャッシュサービス・ノードは、障害状態のマークが付けられる。一部の実施形態では、障害が発生したノードに対して障害期間が設定され、この間は、その障害ノードを利用できないが、リセットまたはリカバリにより再び利用可能になる機会があるとされる。
【0036】
マスタ・キャッシュサービス・ノードに障害が発生した場合、ステップ410において、キャッシュ・クライアントは、アルゴリズムにより、あるいは構成に応じて、バックアップ・キャッシュサービス・ノードを新しいマスタ・キャッシュサービス・ノードとして選択し、その後のキャッシュ処理要求は、そのバックアップ・キャッシュサービス・ノードに送信する。
【0037】
一部の実施形態では、キャッシュ・クライアントは、実行されるべきタスクを保持するクラスタ・オペレーション・タスク・キューと、クラスタのキャッシュサービス・ノードにオペレーションを実行させるために用いられるスレッドを管理するタスク実行スレッド・プールとを用いて、非同期処理を実現する。要求オペレーションに成功すると、キャッシュ・クライアントは、オペレーション結果をキャッシュし、そのオペレーションとオペレーション結果をクラスタ・オペレーション・タスク・キューに保存する。タスク実行スレッド・プールは、マスタ・キャッシュサービス・ノードへの要求の送信およびそこからの応答の受信に用いられるスレッドを管理し、また、他のキャッシュサービス・ノードによりオペレーションが処理されることがないようにしている。
【0038】
アクティブ・クラスタ構成モードでは、マスタ・キャッシュサービス・ノードに障害が発生すると、その障害が発生したマスタ・キャッシュサービス・ノードの代わりとなるバックアップ・キャッシュサービス・ノードが選択される。障害が発生したマスタ・キャッシュサービス・ノードが回復すると、クラスタ・オペレーション・タスク・キューは、バックアップ・キャッシュサービス・ノードにより実行されたオペレーションおよびそのオペレーション結果を、マスタ・キャッシュサービス・ノードにリターンする、あるいはコピーする。一方、マスタ・キャッシュサービス・ノードは再び稼働状態となって、バックアップ・キャッシュサービス・ノードは、もはや代理のマスタ・キャッシュサービス・ノードとして機能しなくなる。この非同期処理は、さらに、マスタ・サービス・ノードに障害が発生していない場合に、マスタ・キャッシュサービス・ノードにより実行されたオペレーションを他のすべてのキャッシュサービス・ノードで更新するために用いられる。つまり、アクティブ・クラスタ構成モードでは、オペレーションが進行すると、マスタ・キャッシュサービス・ノードまたはバックアップ・キャッシュサービス・ノードのどちらかが、そのオペレーションおよびオペレーション結果をクラスタ・オペレーション・タスク・キューに保存し、クラスタ内の他のすべてのキャッシュサービス・ノードのデータ非同期処理の実行を待つ。これによって、クラスタ内のすべてのキャッシュサービス・ノードのデータ整合性が確保される。
【0039】
オペレーション結果に基づきオペレーションが失敗したと判断される場合は、キャッシュ・クライアントは、そのバックアップ・キャッシュサービス・ノードを障害インジケータでマークして、バックアップ・キャッシュサービス・ノードを再選択する。
【0040】
一部の実施形態では、ステップ402において、マスタ・キャッシュサービス・ノードは、動的負荷分散選択法を用いて選択される。図5は、マスタ・キャッシュサービス・ノードを選択するプロセスの一実施形態を示すフローチャートである。このプロセスは、キャッシュ・クライアントにより実行することができる。
【0041】
ステップ502において、キャッシュ・クライアントは、キャッシュサービス・ノードに問合せすることにより、利用可能キャッシュサービス・ノードのパラメータを取得する。これらのパラメータには、キャッシュサービス・ノードの処理能力指標W[i]、キャッシュサービス・ノードの現在の総キャッシュデータ量C[i]、およびキャッシュサービス・ノードの要求応答時間R[i]が含まれる。
【0042】
ステップ504においては、取得した利用可能キャッシュサービス・ノードのパラメータが、昇順または降順にソートされる。例えば、F(K[i],{K[1] ...K[N]}, ASC)は、配列{K[1] ...K[N]}が昇順にまずソートされて、その結果K[i]の添字の位置に返されることを示している。同様に、F(K[i],{K[1] ...K[N]}, DESC)は、配列{K[1] ...K[N]}が降順にまずソートされて、その結果K[i]の添字の位置に返されることを示している。
【0043】
ステップ506においてパラメータ式が計算される。一部の実施形態では、キャッシュサービス・ノードを選択するための加重計算式は次のようなものである。
【0044】
Max(F(W[i],{W[1] ...W[N]}, ASC)*25%+F(C[i],{C[1] ...C[N]}, DESC)*25%+F(R[i],{R[1] ...R[N]},DESC)*50%)。
【0045】
上記の式によると、処理能力について、その処理能力ができる限り大きくあるべきであるということが25%、総キャッシュコンテンツ量について、その総キャッシュコンテンツ量ができる限り少なくあるべきであるということが25%、そして応答時間について、その応答時間ができる限り短くあるべきであるということが50%を占める。
【0046】
ステップ508において、計算結果に基づきマスタ・キャッシュサービス・ノードが選択される。ステップ506において示した式が用いられる例では、最大値をもつキャッシュサービス・ノードが選択される。
【0047】
図6は、キャッシュサービス・ノードがスタンバイ・クラスタ構成モードに構成されているキャッシュクラスタにおけるキャッシュデータ処理プロセスの一実施形態を示すフローチャートである。このプロセス600は、クライアントがマスタ・キャッシュサービスを選択する必要がないことを除けば、プロセス400に類似している。代わりに、クラスタ内のマスタ・キャッシュサービス・ノードが既に指定されている。一部の実施形態では、クラスタ内のキャッシュサービス・ノードは、障害またはリカバリを経験すると、順序リストで削除または追加される。この場合、マスタ・キャッシュサービス・ノードは、順序リストでのノードの位置に基づき指定される。つまり、キャッシュサービス・ノードは、それらのキャッシュサービス・ノードが順序列に追加された順番で配列され、順序列で最初のものがマスタ・キャッシュサービス・ノードとして指定される。マスタ・キャッシュサービス・ノードに障害が発生すると、順序列で次のキャッシュサービス・ノードが、新しく指定されるマスタ・キャッシュサービス・ノードとなり、一方、障害が発生した旧マスタ・キャッシュサービス・ノードは、順序列から削除されて、回復したら順序列の最後尾に追加される。
【0048】
一部の実施形態では、データセキュリティ要件が高く、かつ、読み出し/書き込み比の高いシステムにおいて、アクティブ・クラスタ構成モードが用いられる。図7は、アクティブ構成モードでのキャッシュデータ処理プロセスの一実施形態において用いられるメッセージおよびステップを示すフローチャートである。この例では、ネットワークは、アプリケーション(多くの場合、サードパーティ・アプリケーション)、キャッシュ・クライアント、キャッシュ・ノードAおよびBを含んでいる。他の実施形態において、追加のキャッシュ・ノードを用いることができる。サードパーティ・アプリケーションがキャッシュ処理を必要とする場合、すなわち、そのサードパーティ・アプリケーションがキャッシュデータ読み出しまたはキャッシュデータ処理の要求を送信する場合に、動的負荷分散法に従ってキャッシュ・クライアントによりキャッシュデータ処理実行用に選択されたキャッシュ・ノードAに障害が発生したら、キャッシュ・クライアントは、キャッシュ・ノードBをキャッシュデータ処理実行用に選択する。キャッシュ・ノードBがキャッシュデータ処理を正常に実行すると、データ非同期処理が実行される。
【0049】
図示の例では、ステップ701において、アプリケーションが、キャッシュデータ読み出しまたはキャッシュデータ処理の要求をキャッシュ・クライアントに送信する。
【0050】
ステップ702において、キャッシュ・クライアントが、アプリケーションにより送信された要求を受信して、利用可能なキャッシュサービス・ノードを確認する。クラスタ内のキャッシュサービス・ノードに障害が発生した場合、その障害が発生したノードに障害タグが関連付けられて保存される。キャッシュ・クライアントは、すべてのキャッシュサービス・ノードの状態を調べて、そして、それらの障害タグに基づきキャッシュサービス・ノードが利用可能であるかどうか判断する。キャッシュ・クライアントは、障害タグ無しのキャッシュサービス・ノードが、利用可能なキャッシュサービス・ノードであることを確認する。キャッシュ・クライアントは、利用可能なキャッシュサービス・ノードが見つからないときは、サードパーティ・アプリケーションにエラー情報を送信する。キャッシュ・クライアントは、1つまたは複数の利用可能なキャッシュサービス・ノードを見つけると、図5の500と同様のプロセスを用いてマスタ・キャッシュサービス・ノードを選択することによりステップ703を実行する。
【0051】
この例では、キャッシュ・クライアントは、キャッシュ・ノードAをマスタ・キャッシュサービス・ノードとして選択する。ステップ704で、キャッシュ・クライアントは、キャッシュ・ノードAにキャッシュデータ処理要求を送信する。あるいは代わりに、キャッシュ・ノードBをマスタ・キャッシュサービス・ノードとして選択することができ、以下で説明する処理ステップが同じように適用可能である。
【0052】
ステップ705において、キャッシュ・ノードAは、キャッシュ・クライアントにより送信されたオペレーション要求を受信して、キャッシュデータ処理を実行する。ステップ706において、キャッシュ・ノードAは、オペレーション要求を完了すると、オペレーション結果をキャッシュ・クライアントにリターンする。
【0053】
ステップ707において、キャッシュ・クライアントは、リターンされたオペレーション結果に基づき、マスタ・キャッシュサービス・ノードに障害が発生したかどうか判断する。
【0054】
キャッシュ・ノード自体の障害の他に、オペレーションの失敗の原因となる他の多くの理由(たとえば、ネットワーク接続の不具合)があり得る。このため、キャッシュ・ノードAは、障害が発生したとして直ちにタグが付けられるわけではない。その代わりに、障害カウンタがキャッシュ・ノードに関連付けられて、オペレーションに失敗したと見なされるたびにカウントがインクリメントされる。障害カウンタには閾値Nが設定されている。記録された障害回数が閾値Nを超えている場合に、キャッシュ・クライアントは、障害が発生したとしてキャッシュ・ノードAの状態にタグを付ける。
【0055】
ステップ709において、キャッシュ・クライアントは、アプリケーションにより送信された要求を受信し、利用可能なバックアップ・キャッシュサービス・ノードを確認する。
【0056】
障害の発生したキャッシュサービス・ノードに関連付けられた障害タグは、キャッシュ・クライアントにより保持されるか、あるいはネットワーク上に保存される。キャッシュ・クライアントは、ネットワーク内で障害タグが付けられていない利用可能なキャッシュサービス・ノードを探す。キャッシュ・クライアントが利用可能なキャッシュサービス・ノードを見つけられなかった場合、キャッシュ・クライアントは、アプリケーションにエラー情報を送信する。そうではなくて、利用可能なキャッシュサービス・ノードを見つけた場合、ステップ710において、キャッシュ・クライアントは、動的負荷分散法、ハッシュ法、またはコンシステント・ハッシュ法などの適当な方法を用いて、利用可能なキャッシュサービス・ノードから1つのキャッシュサービス・ノードをバックアップ・キャッシュサービス・ノードとして選択する。
【0057】
ステップ715において、マスタ・キャッシュサービス・ノードからの応答は、オペレーションが成功したことを示しており、キャッシュ・クライアントは、オペレーションおよびその結果をクラスタ・タスク・キューに保存する。そのオペレーションが取得オペレーションであって、新しいデータをキャッシュする必要がある場合には、そのデータがキャッシュされ、データに有効期間が関連付けられる。
【0058】
ステップ716において、キャッシュ・クライアントは、そのオペレーションの結果をアプリケーションにリターンする。
【0059】
キャッシュ・クライアントがオペレーションおよびオペレーション結果をクラスタ・オペレーション・タスク・キューに保存するステップ715の後で、非同期データリカバリおよび非同期データコピーを含む非同期処理を、タスク・キューとスレッド・プールの併用によって実現することができる。
【0060】
図8は、非同期処理プロセスの一実施形態を示すフローチャートである。図示の例では、クラスタ・オペレーション・タスク・キュー、タスク・コンシューマ、およびタスク実行スレッド・プールを含むデータ構造を用いることで、キャッシュ・クライアントによる要求の処理を非同期的に進めやすくしている。
【0061】
ステップ801において、キャッシュ・クライアントは、キャッシュサービス・ノードにより実行されるべきオペレーションをクラスタ・オペレーション・タスク・キューに記録する。そのオペレーションは、マスタとしてのキャッシュサービス・ノードを更新するための更新オペレーション、あるいはキャッシュデータの取得が必要である取得オペレーションとすることができる。
【0062】
ステップ802において、タスク・コンシューマが、クラスタ・オペレーション・タスク・キューにメッセージを送信して、キューに新しいタスクがあるかどうか問い合わせする。もしある場合は、ステップ803において、タスク・コンシューマは、そのタスクをタスク実行スレッド・プールに送信する。タスクが送信されると、ステップ804において、クラスタ・オペレーション・タスク・キューは、そのタスクを削除する。
【0063】
ステップ805において、タスク実行スレッド・プールは、タスクの順序、タスクの宛先、およびタスクの内容に基づきタスクを分析して、そのタスクを非同期的に処理するためのタスク実行スレッドを設定する。
【0064】
ステップ806において、タスク実行スレッド・プールは、そのタスク実行スレッドを用いて非同期処理を実行する。そのオペレーションがキャッシュコンテンツを取得するための取得オペレーションである場合は、そのオペレーションおよび関連するデータがクラスタに送信される。そのオペレーションを指示されたキャッシュサービス・ノードのみがオペレーションを実行することができ、他のキャッシュサービス・ノードがオペレーションを実行することはできない。
【0065】
そのオペレーションがキャッシュサービス・ノードの障害状態を更新するための更新オペレーションである場合、そのオペレーションおよび関連するデータがクラスタにコピーされる。そのオペレーションを指示されたキャッシュサービス・ノードのみがオペレーションを実行することができ、他のキャッシュサービス・ノードがオペレーションを実行することはできない。
【0066】
ステップ807において、クラスタ・キャッシュサービス・ノードは、オペレーションの結果をタスク実行スレッド・プールに送る。
【0067】
ステップ808において、タスク実行スレッド・プールは、オペレーション結果に基づいて、タスクが正常に実行されたか否か判断し、その判定結果に対処する。特に、タスクが失敗した場合には、その失敗に対処するため、いくつかの方法を実施することができる。例えば、そのタスクを単に破棄することができ、有限回の再試行をすることができ、あるいは、そのタスクを一時的に記憶して後に再試行することができる。
【0068】
一部の実施形態では、データセキュリティ要件が低く、かつ信頼性の高いシステムにおいて、スタンバイ・クラスタ構成モードが適用される。このシステムは、アプリケーション、キャッシュ・クライアント、キャッシュ・ノードA、Bなどを含んでいる。マスタ・キャッシュサービス・ノードであるキャッシュ・ノードAがオペレーションの実行に失敗すると、キャッシュ・クライアントは、バックアップ・キャッシュサービス・ノードであるキャッシュ・ノードBに要求を送り、このノードがキャッシュデータ処理を実行し、それ自身でデータ同期を実行する。図9は、アクティブ構成モードでのキャッシュデータ処理プロセスの一実施形態において用いられるメッセージおよびステップを示すフローチャートである。
【0069】
ステップ901において、アプリケーションが、キャッシュデータ読み出しまたはキャッシュデータ処理の要求をキャッシュ・クライアントに送信する。
【0070】
ステップ902において、キャッシュ・クライアントが、アプリケーションにより送信された要求を受信して、マスタ・キャッシュサービス・ノードであるキャッシュ・ノードAの状態をローカルキャッシュで調べる。障害状態が、有効期間制限を過ぎている場合は、障害タグが取り除かれる。
【0071】
マスタ・キャッシュサービス・ノードに障害が発生していない場合は903が実行され、それ以外の場合はステップ904が実行される。ステップ903では、キャッシュ・クライアントが、キャッシュデータ処理要求をキャッシュ・ノードAに送信する。ステップ904において、キャッシュ・ノードAが、キャッシュ・クライアントにより送信されたキャッシュデータ処理要求を受信し、キャッシュ・ノードAはキャッシュデータ処理を実行する。
【0072】
キャッシュ・ノードAがキャッシュデータ処理を実行した後に、ステップ905において、そのオペレーション結果がキャッシュ・クライアントに返される。ステップ906において、キャッシュ・クライアントは、返されたオペレーション結果に基づき、オペレーションが成功したかどうか判断する。ステップ907で、キャッシュ・クライアントは、オペレーションの成功または失敗に対処する。例えば、そのキャッシュ・ノードに関連付けられた障害カウンタにおいて、障害回数をインクリメントして、閾値Nと比較する。カウンタの障害回数が閾値Nを超えている場合は、キャッシュ・クライアントは、キャッシュ・ノードAの状態に障害タグを付けて、その障害の有効期間を設定する。ステップ908において、キャッシュ・クライアントは、利用可能なキャッシュサービス・ノードから1つのバックアップ・キャッシュサービス・ノードを選択する。
【0073】
クラスタ内のキャッシュサービス・ノードに障害が発生した場合、そのキャッシュサービス・ノードが自身の障害タグを保持する。キャッシュ・クライアントは、障害状態タグが付いていない利用可能なキャッシュサービス・ノードを識別し、1つの利用可能キャッシュサービス・ノードをバックアップ・キャッシュサービス・ノードとして選択する。キャッシュ・クライアントが、利用可能なキャッシュサービス・ノードを見つけられなかった場合、キャッシュ・クライアントは、アプリケーションにエラー情報を送信する。
【0074】
この例では、Aに障害が発生した場合に、マスタキャッシュ・ノードAの代わりとしてバックアップ・キャッシュ・ノードBが選択される状況についても、図に示している。その場合、ステップ909〜914が然るべく実行される。
【0075】
以前のマスタ・キャッシュサービス・ノードAが回復すると、それは、現在のマスタ・キャッシュサービス・ノードBのバックアップ・キャッシュサービス・ノードとなる。このように、キャッシュ・ノードAは、現在のバックアップ・キャッシュサービス・ノードとして機能して、非同期的データ同期処理のためのデータセット要求を現在のマスタ・キャッシュサービス・ノードBへ送信する。具体的には、ステップ914(a)において、キャッシュ・ノードAがキャッシュ・ノードBにデータセット要求を送信し、ステップ914(b)において、キャッシュ・ノードBがキャッシュ・ノードAにデータセット結果を返し、これによって、キャッシュ・ノードAとキャッシュ・ノードBの間のデータ同期化を実現することができる。
【0076】
一部の実施形態では、スタンバイ・クラスタ構成モードにおいて、キャッシュ・クライアントが、クラスタ内のキャッシュサービス・ノードについて、定期的なハートビート検出を実行し、ハートビート検出の結果に基づいて、定期的にキャッシュサービス・ノードの状態を障害タグ付きまたは障害タグ無しに更新する。
【0077】
キャッシュサービス・ノードに障害タグが付けられている場合、キャッシュ・クライアントは、そのキャッシュサービス・ノードについてハートビート検出を実行し、応答数が閾値を超えている場合、キャッシュ・クライアントは、そのキャッシュサービス・ノードの障害タグを取り除く。図10は、障害タグが付けられたキャッシュサービス・ノードについてハートビート検出を実行するプロセスの一実施形態を示すフローチャートである。この例では、先の障害によって、キャッシュ・ノードCに障害タグが付けられている。ステップ1002において、キャッシュ・クライアントが、ハートビート検出データをキャッシュ・ノードCに定期的に送信する。ステップ1004において、キャッシュ、クライアントは、キャッシュ・ノードCからの応答を待つ。ステップ1006において、キャッシュ・クライアントは、キャッシュ・ノードCがハートビート・データに正常に応答したかどうか判断する。不正確な応答コード、不正確なチェックサム、あるいは応答のタイムアウトは、失敗と解釈される。ステップ1008において、キャッシュ・ノードCがハートビート・データに正常に応答すると、キャッシュ・ノードCに付けられている障害タグが取り除かれる。
【0078】
キャッシュ・クライアントは、さらに、障害タグが付けられていないキャッシュサービス・ノードについてもハートビート検出を実行し、障害回数を追跡する。図11は、障害タグが付けられていないキャッシュサービス・ノードについてハートビート検出を実行するプロセスの一実施形態を示すフローチャートである。この例では、キャッシュ・ノードDには、現在のところ、障害タグが付けられてはいない。ステップ1102において、キャッシュ・クライアントは、ハートビート検出データをキャッシュ・ノードDに定期的に送信する。ステップ1104において、キャッシュ、クライアントは、キャッシュ・ノードDからの応答を待つ。ステップ1106において、キャッシュ・クライアントは、キャッシュ・ノードDがハートビート・データに正常に応答したかどうか判断する。不正確な応答コード、不正確なチェックサム、あるいは応答のタイムアウトは、失敗と解釈される。応答が失敗であった場合は、ステップ1108において、キャッシュ・ノードDに関連付けられた障害カウンタがインクリメントされる。ステップ1110において、障害カウンタの値が閾値Nを超えたかどうか判断される。もしそうである場合は、キャッシュ・ノードDに障害タグが付けられる。
【0079】
一部の実施形態では、1つの障害カウンタが、キャッシュサービス・ノードがハートビート検出への応答に失敗したときと、キャッシュサービス・ノードがキャッシュ要求の処理に失敗したときと、その両方に用いられる。
【0080】
図13は、キャッシュ・クライアントの一実施形態を示すブロック図である。この例では、キャッシュ・クライアントは、キャッシュデータの処理が必要であるときにオペレーション要求をマスタ・キャッシュサービス・ノードに送信するために用いられる要求送信ユニット1301を含んでいる。さらに、結果受信ユニット1302を含み、これは、マスタ・キャッシュサービス・ノードにより要求送信ユニット1301に送信されるオペレーション要求のオペレーション結果を受信するために用いられるものである。さらに、キャッシュサービス・ノード選択ユニット1303を含んでいる。上記の結果受信ユニットにより受信したオペレーション結果に基づいて、上記マスタ・キャッシュサービス・ノードがキャッシュデータ処理の実行に失敗したと判断されたら、キャッシュサービス・ノード選択ユニットが、1つのバックアップ・キャッシュサービス・ノードを選択し、要求送信ユニットは、その選択されたバックアップ・キャッシュサービス・ノードにオペレーション要求を送信する。
【0081】
図14は、アクティブ・クラスタ構成モードにあるキャッシュ・クライアントを示すブロック図である。この例に示すキャッシュ・クライアント1400は、キャッシュデータの処理が必要であるときにオペレーション要求をマスタ・キャッシュサービス・ノードに送信するために用いられる要求送信ユニット1401と、さらに、結果受信ユニット1402を含み、これは、マスタ・キャッシュサービス・ノードにより要求送信ユニット1402に送信されるオペレーション要求のオペレーション結果を受信するために用いられる。
【0082】
キャッシュ・クライアントは、さらに、障害タグ付けユニット1403を含んでおり、これは、結果受信ユニット1402により受信したオペレーション結果に基づき、マスタ・キャッシュサービス・ノードがキャッシュデータ処理の実行に失敗したと判断される場合に、マスタ・キャッシュサービス・ノードに障害タグを付けるために用いられる。この障害タグ付けユニット1403は、マスタ・サービス・ノードがキャッシュデータ処理の実行に失敗したときにキャッシュ・クライアントの障害回数をインクリメントするために用いられるカウンタ・サブユニット14031と、カウンタ・サブユニット14031により積算された障害回数を閾値と比較して、障害回数が閾値を超えている場合にマスタ・キャッシュサービス・ノードに障害タグを付けるために用いられる障害タグ付けサブユニット14032と、障害タグ付けサブユニット14032によりマスタ・キャッシュサービス・ノードに障害タグが付けられた後にマスタ・キャッシュサービス・ノードの障害有効期間を設定するために用いられる障害有効期間設定サブユニット14033と、を含んでいる。
【0083】
キャッシュ・クライアントは、さらに、バックアップ・キャッシュサービス・ノードを選択しバックアップ・キャッシュサービス・ノードにオペレーション要求を送信するために用いられるキャッシュサービス・ノード選択ユニット1404を含んでいる。キャッシュサービス・ノード選択ユニット1404は、障害タグ付けサブユニットにより障害タグが付けられたキャッシュサービス・ノードに基づきネットワークにおいて利用可能なキャッシュサービス・ノードを取得するために用いられる利用可能キャッシュサービス・ノード取得サブユニット14041と、利用可能キャッシュサービス・ノード取得サブユニット14041により取得された利用可能キャッシュサービス・ノードから、適当な方法により1つのキャッシュサービス・ノードをバックアップ・キャッシュサービス・ノードとして選択するために用いられるキャッシュサービス・ノード選択サブユニット14042とを含んでいる。キャッシュサービス・ノード選択ユニット1404は、さらに、マスタ・キャッシュサービス・ノードを選択するためにも用いられ、その選択されたマスタ・キャッシュサービス・ノードに、要求送信ユニット1401がオペレーション要求を送信する。
【0084】
要求送信ユニット1401は、また、キャッシュデータの処理が必要であるときにバックアップ・キャッシュサービス・ノードに対してオペレーション要求を送信するためにも用いられる。
【0085】
結果受信ユニット1402は、さらに、要求送信ユニット1401によりバックアップ・キャッシュサービス・ノードに送信されるオペレーション要求のオペレーション結果を受信するためにも用いられる。
【0086】
障害タグ付けユニット1403は、さらに、結果受信ユニット1402により受信されたオペレーション結果に基づきオペレーションが失敗したと判断される場合に、バックアップ・キャッシュサービス・ノードに障害タグを付けるためにも用いられる。
【0087】
キャッシュ・クライアント1400は、さらに、結果受信ユニット1402により受信したバックアップ・キャッシュサービス・ノードからのオペレーション要求のオペレーション結果に応じて処理を行うために用いられるオペレーション結果処理ユニット1405を含んでいる。オペレーション結果処理ユニット1405は、キャッシュ・クライアントの結果受信ユニット1402により受信したオペレーション結果に基づきオペレーションに成功したと判断される場合に、マスタ・キャッシュサービス・ノードについて非同期処理を実行するために用いられる非同期処理サブユニット14051を含んでいる。この非同期処理サブユニット14051は、オペレーションが成功し、そのオペレーションが取得オペレーションである場合に用いられ、オペレーション結果をキャッシュ・クライアントにキャッシュし、オペレーションおよびオペレーション結果をクラスタ・オペレーション・タスク・キューに保存する。タスク実行スレッド・プールが、オペレーションおよびオペレーション内容をクラスタに返して、そのオペレーションが他のキャッシュサービス・ノードにより実行されないようにする。さらに、非同期処理サブユニットは、オペレーションが成功し、そのオペレーションが更新オペレーションである場合に用いられ、オペレーションおよびオペレーション結果をクラスタ・オペレーション・タスク・キューに保存する。タスク実行スレッド・プールは、オペレーションおよびオペレーション内容をクラスタにコピーして、そのオペレーションが他のキャッシュサービス・ノードにより実行されないようにする。
【0088】
図15は、スタンバイ・クラスタ構成モードにあるキャッシュ・クライアントを示すブロック図である。この例に示すキャッシュ・クライアント1500は、キャッシュデータの処理が必要であるときにオペレーション要求をマスタ・キャッシュサービス・ノードに送信するために用いられる要求送信ユニット1501と、さらに、結果受信ユニット1502を含み、これは、要求送信ユニット1502により送信されるマスタ・キャッシュサービス・ノードからのオペレーション要求のオペレーション結果を受信するために用いられる。
【0089】
キャッシュ・クライアントは、さらに、障害タグ付けユニット1503を含んでおり、これは、結果受信ユニット1502により受信したオペレーション結果に基づき、マスタ・キャッシュサービス・ノードがキャッシュデータ処理の実行に失敗したと判断される場合に、マスタ・キャッシュサービス・ノードに障害タグを付けるために用いられる。この障害タグ付けユニット1503は、マスタ・サービス・ノードがキャッシュデータ処理の実行に失敗したときにキャッシュ・クライアントの障害回数を積算するために用いられるカウンタ・サブユニット15031と、カウンタ・サブユニット15031により積算された障害回数を閾値と比較して、障害回数が閾値を超えている場合にマスタ・キャッシュサービス・ノードに障害タグを付けるために用いられる障害タグ付けサブユニット15032と、障害タグ付けサブユニット15032によりマスタ・キャッシュサービス・ノードに障害タグが付けられた後にマスタ・キャッシュサービス・ノードの障害有効期間を設定するために用いられる障害有効期間設定サブユニット15033と、を含んでいる。
【0090】
キャッシュ・クライアントは、さらに、バックアップ・キャッシュサービス・ノードを選択するために用いられるキャッシュサービス・ノード選択ユニット1504と、その選択されたバックアップ・キャッシュサービス・ノードに対してオペレーション要求を送信する要求送信ユニット1501とを含む。
【0091】
要求送信ユニット1501は、また、キャッシュデータの処理が必要であるときにバックアップ・キャッシュサービス・ノードに対してオペレーション要求を送信するためにも用いられる。
【0092】
結果受信ユニット1502は、さらに、バックアップ・キャッシュサービス・ノードにより要求送信ユニット1501に送信されるオペレーション要求のオペレーション結果を受信するためにも用いられる。
【0093】
障害タグ付けユニット1503は、さらに、結果受信ユニット1502により受信されたオペレーション結果に基づきオペレーションが失敗したと判断される場合に、バックアップ・キャッシュサービス・ノードに障害タグを付けるためにも用いられる。
【0094】
キャッシュ・クライアント1500は、さらに、結果受信ユニット1502により受信したバックアップ・キャッシュサービス・ノードからのオペレーション要求のオペレーション結果に応じて処理を行うために用いられるオペレーション結果処理ユニット1505を含んでいる。オペレーション結果処理ユニット1505は、バックアップ・キャッシュサービス・ノードについてデータ同期化を実行するために用いられるデータ同期化サブユニット15051を含んでいる。
【0095】
キャッシュ・クライアント1500は、さらに、マスタ・キャッシュサービス・ノードおよびバックアップ・キャッシュサービス・ノードについてハートビート検出を実行するために用いられるハートビート検出ユニット1506を含んでおり、ハートビート検出の結果に基づいて、マスタ・キャッシュサービス・ノードおよび/またはバックアップ・キャッシュサービス・ノードの障害状態が更新される。
【0096】
上記のユニットは、1つまたは複数の汎用プロセッサ上で実行されるソフトウェア・コンポーネントとして、プログラマブル・ロジック・デバイスおよび/または特定の機能を実行するように設計された特定用途向け集積回路などのハードウェアとして、あるいはそれらの組み合わせにより、実現することができる。一部の実施形態では、ユニットは、ソフトウェア・プロダクトの形態で実現することができ、これらは不揮発性記憶媒体(光ディスク、フラッシュ記憶装置、モバイル・ハードディスクなど)に記憶することが可能であって、本発明の実施形態に記載した方法をコンピュータ機器(パーソナルコンピュータ、サーバ、ネットワーク装置など)に実行させるための多くの命令を含むものである。ユニットは、単一の機器で、あるいは複数の機器に分散させて、実現することができる。ユニットの機能は、相互に融合させることができ、あるいは、さらに複数のサブユニットに分割することができる。
【0097】
一部の実施形態では、クラスタ内のキャッシュサービス・ノードの容量が不足しているときに、ノードの容量拡張を動的に実施することができる。集中キャッシュにおいて、容量拡張を実現するため、キャッシュ・ノードは複数のキャッシュ・インスタンスからなる仮想キャッシュサービス・ノードとして構成されている。図16は、容量拡張が可能なキャッシュ・ノードを示す図である。図示の例では、クラスタAは、キャッシュ・ノードAとキャッシュ・ノードBを含んでいる。キャッシュ・ノードAは、キャッシュ・インスタンス1、キャッシュ・インスタンス2、およびキャッシュ・インスタンス3を含んでおり、キャッシュ・ノードBは、キャッシュ・インスタンス4、キャッシュ・インスタンス5、およびキャッシュ・インスタンス6を含んでいる。これらのキャッシュ・インスタンスは、1つのサーバに含むことができ、あるいはいくつかの異なるサーバに分散させることができる。キャッシュサービス・ノードの容量が不足しているときには、追加のキャッシュ・インスタンスを仮想サービスノードに加えることができ、これによって、処理能力が向上し、キャッシュ・クライアントの使用に支障をきたすことがない。
【0098】
しかしながら、キャッシュ・インスタンスの数が変わると、キャッシュのヒット率に影響することがある。例えば、最初にキャッシュサービス・ノードが3つのみであるとして、ハッシュ法をキーによって実行し、ハッシュ結果を得る。ハッシュ結果に基づいてキャッシュサービス・ノード・モジュールの番号を取得し、そして最後的に、コンテンツを保存または取得するインスタンスを決定する。キャッシュ・インスタンスの数が変わると、最初に保存されたデータが正常に取得できないことがある。クラスタ構成において、データ転送は、いくつかの方法で実現することができる。一部の実施形態では、データ転送インタフェースがキャッシュ・クライアントにより提供され、クラスタ内のキャッシュサービス・ノードのデータが他のキャッシュサービス・ノードに転送される。例えば、キャッシュ・ノードAに対して容量拡張を実施した後に、データをキャッシュ・ノードBからキャッシュ・ノードAに直ぐに転送することができる。具体的には、キャッシュ・クライアントが、キャッシュ・ノードB内のすべてのデータを取得し、そして、そのデータをキャッシュ・ノードAに保存する。一部の実施形態では、自動で段階的データ転送が行われる。アクティブ・クラスタ構成では、キャッシュ・ノードAに対して容量拡張を実施した後に、キャッシュ・クライアントがデータをもっていなければ、他のキャッシュサービス・ノードから直ちにデータを取得する。キャッシュ・クライアントは、取得したデータを、新しい方法に従ってキャッシュ・ノードAに保存する。このようにして、キャッシュ・クライアントは、保存されたすべてのデータを段階的にキャッシュ・ノードAにコピーする。
【0099】
クラスタ構成モードを導入することで、マスタ・キャッシュサービス・ノードに障害が発生した場合には、バックアップ・キャッシュサービス・ノードが、キャッシュデータ処理の実行のために選択される。こうして、キャッシュサービス・ノードの障害の結果としてキャッシュサービス・ノードが利用不可能になるという問題およびデータ損失の問題が解決され、システムの信頼性および可用性が向上する。当然のことながら、本願を実現するプロダクトは、上記の利点をすべて同時に備えている必要はない。
【0100】
上記の実施形態は、明確な理解を目的として、ある程度詳細に記載したが、本発明は、提示した詳細に限定されるものではない。本発明を実施する多くの代替の方法がある。開示された実施形態は、例示であって、限定するものではない。
適用例1:キャッシュデータを処理する方法であって、複数のキャッシュサービス・ノードを含むキャッシュクラスタ内のマスタ・キャッシュサービス・ノードに対してキャッシュ処理要求を送信し、前記キャッシュクラスタは、前記複数のキャッシュサービス・ノードのすべてが稼働状態にあって、マスタ・キャッシュサービス・ノードが前記複数のキャッシュサービス・ノードの中から選択されるアクティブ・クラスタ構成モード、あるいは、前記複数のキャッシュサービス・ノードの中で唯一稼働状態にあるノードがマスタ・キャッシュサービス・ノードであるスタンバイ・クラスタ構成モードのいずれかに構成可能であり、前記マスタ・キャッシュサービス・ノードからの応答を待機し、前記マスタ・キャッシュサービス・ノードに障害が発生したか否かを判断し、前記マスタ・キャッシュサービス・ノードに障害が発生した場合に、バックアップ・キャッシュサービス・ノードを選択すること、を備える方法。
適用例2:前記マスタ・キャッシュサービス・ノードに障害が発生したか否かの判断は、障害回数を閾値と比較することを含む、適用例1に記載の方法。
適用例3:前記マスタ・キャッシュサービス・ノードに障害が発生した場合に、前記マスタ・キャッシュサービス・ノードに障害タグを関連付けることをさらに備える、適用例1に記載の方法。
適用例4:前記マスタ・キャッシュサービス・ノードに障害が発生した場合に、前記マスタ・キャッシュサービス・ノードに障害タグを関連付け、前記マスタ・キャッシュサービス・ノードの障害有効期間を設定すること、をさらに備える、適用例1に記載の方法。
適用例5:前記バックアップ・キャッシュサービス・ノードの選択は、前記クラスタ内の障害タグが付けられていない利用可能なキャッシュサービス・ノードを識別し、前記利用可能なキャッシュサービス・ノードの中から前記バックアップ・キャッシュサービス・ノードを選択すること、を含む、適用例1に記載の方法。
適用例6:前記バックアップ・キャッシュサービス・ノードからの応答を待つことをさらに備える、適用例1に記載の方法。
適用例7:前記マスタ・キャッシュサービス・ノードにキャッシュ処理要求を送信に先立って、前記方法は、障害タグが付けられていない利用可能なキャッシュサービス・ノードを識別し、前記利用可能なキャッシュサービス・ノードの中から前記マスタ・キャッシュサービス・ノードを選択すること、をさらに備える適用例1に記載の方法。
適用例8:前記キャッシュ処理要求の送信、および前記応答の待機は、非同期的に実行される、適用例1に記載の方法。
適用例9:前記マスタ・キャッシュサービス・ノードについてハートビート検出を実行し、前記マスタ・キャッシュサービス・ノードに継続して障害が発生している場合に、前記マスタ・キャッシュサービス・ノードの障害状態を更新すること、をさらに備える、適用例1に記載の方法。
適用例10:キャッシング・システムであって、複数のキャッシュサービス・ノードを含むキャッシュクラスタであって、前記キャッシュクラスタは、前記複数のキャッシュサービス・ノードのすべてが稼働状態にあって、マスタ・キャッシュサービス・ノードが前記複数のキャッシュサービス・ノードの中から選択されるアクティブ・クラスタ構成モード、あるいは、前記複数のキャッシュサービス・ノードの中で唯一稼働状態にあるノードがマスタ・キャッシュサービス・ノードであるスタンバイ・クラスタ構成モードのいずれかに構成可能であり、キャッシュ・クライアントであって、前記マスタ・キャッシュサービス・ノードにキャッシュ処理要求を送信し、前記マスタ・キャッシュサービス・ノードからの応答を待機し、前記マスタ・キャッシュサービス・ノードに障害が発生したか否かを判断し、前記マスタ・キャッシュサービス・ノードに障害が発生した場合に、バックアップ・キャッシュサービス・ノードを選択する、ように構成されているキャッシュ・クライアントと、を備えるシステム。
適用例11:前記マスタ・キャッシュサービス・ノードに障害が発生したか否かの判断は、障害回数を閾値と比較することを含む、適用例10に記載のシステム。
適用例12:前記マスタ・キャッシュサービス・ノードに障害が発生した場合に、前記キャッシュ・クライアントは、さらに、前記マスタ・キャッシュサービス・ノードに障害タグを関連付けるように構成されている、適用例10に記載のシステム。
適用例13:前記マスタ・キャッシュサービス・ノードに障害が発生した場合に、前記キャッシュ・クライアントは、さらに、前記マスタ・キャッシュサービス・ノードに障害タグおよび障害有効期間を関連付けるように構成されている、適用例10に記載のシステム。
適用例14:前記バックアップ・キャッシュサービス・ノードは、前記クラスタ内の障害タグが付けられていない利用可能なキャッシュサービス・ノードを識別し、前記利用可能なキャッシュサービス・ノードの中から前記バックアップ・キャッシュサービス・ノードを選択すること、を含む、適用例10に記載のシステム。
適用例15:前記キャッシュ・クライアントは、さらに、前記バックアップ・キャッシュサービス・ノードからの応答を待つように構成されている、適用例10に記載のシステム。
適用例16:前記マスタ・キャッシュサービス・ノードにキャッシュ処理要求の送信に先立って、前記キャッシュ・クライアントは、さらに、障害タグが付けられていない利用可能なキャッシュサービス・ノードを識別し、前記利用可能なキャッシュサービス・ノードの中から前記マスタ・キャッシュサービス・ノードを選択するように構成されている、適用例10に記載のシステム。
適用例17:前記キャッシュ処理要求の送信、および前記応答の待機は、非同期的に実行される、適用例10に記載のシステム。
適用例18:前記キャッシュ・クライアントは、さらに、前記マスタ・キャッシュサービス・ノードについてハートビート検出を実行し、前記マスタ・キャッシュサービス・ノードに継続して障害が発生している場合に、前記マスタ・キャッシュサービス・ノードの障害状態を更新するように構成されている、適用例10に記載のシステム。
図1
図2
図3
図4
図5
図6
図7
図8
図9
図10
図11
図12
図13
図14
図15
図16