タプルスペース

Concept in computing

タプルスペースは、並列/分散コンピューティングのための連想記憶パラダイムの実装です 。同時にアクセスできるタプルのリポジトリを提供します。例として、データを生成するプロセッサ群と、そのデータを使用するプロセッサ群があるとします。生成側はデータをタプルとしてタプルスペースに投稿し、消費側は特定のパターンに一致するデータをタプルスペースから取得します。これは黒板メタファーとも呼ばれます。タプルスペースは、分散共有メモリの一種と考えることができます

タプル スペースは、1986 年にイェール大学のDavid Gelernterと Nicholas Carrieroによって開発されたLinda言語の理論的基礎でした

タプル スペースの実装は、 Java ( JavaSpaces )、LispLuaPrologPythonRubySmalltalkTcl.NET Framework向けにも開発されています

オブジェクト空間

オブジェクト空間は、分散コンピューティングアプリケーション開発のパラダイムです。オブジェクト空間と呼ばれる論理エンティティの存在を特徴とします。分散アプリケーションのすべての参加者は、オブジェクト空間を共有します。サービスのプロバイダーは、サービスをオブジェクトとしてカプセル化し、オブジェクト空間に配置します。サービスのクライアントは、オブジェクト空間にアクセスし、必要なサービスを提供するオブジェクトを見つけ、そのオブジェクトによってリクエストを処理します。

オブジェクト空間は、コンピューティングパラダイムとして、1980年代にイェール大学デイビッド・ゲランターによって提唱されました。ゲランターは、グローバルオブジェクトコーディネーションの概念をサポートするために、 Lindaと呼ばれる言語を開発しました。

オブジェクト空間は、ネットワークサービスのプロバイダーとアクセサーの間で共有される仮想リポジトリと考えることができます。これらのサービス自体もオブジェクトとして抽象化されています。プロセスは、これらの共有オブジェクトを使用して相互に通信し、必要に応じてオブジェクトの状態を更新します。

オブジェクトは、スペースに配置されると、オブジェクトスペース内のオブジェクトディレクトリに登録される必要があります。その後、すべてのプロセスは、プロパティ検索を使用してオブジェクトディレクトリからオブジェクトを識別できます。ここで、オブジェクトの検索基準を指定するプロパティは、オブジェクトの名前、またはオブジェクトを一意に識別するその他のプロパティです。必要なオブジェクトがまだ存在しない場合、プロセスはオブジェクトがオブジェクトスペースに配置されるまで待機することもできます

オブジェクトは、オブジェクト空間に配置された時点では受動的です。つまり、オブジェクトがオブジェクト空間内にある間は、そのメソッドを呼び出すことはできません。アクセスプロセスは、オブジェクト空間からオブジェクトをローカルメモリに取得し、オブジェクトが提供するサービスを使用し、オブジェクトの状態を更新して、オブジェクト空間に再配置する必要があります

このパラダイムは本質的に相互排他性を提供します。オブジェクトは一度アクセスされると、 オブジェクト空間から削除され、解放された後にのみ再び配置されるためです。つまり、あるプロセスがオブジェクトを使用している間は、他のプロセスはそのオブジェクトにアクセスできないため、相互排他性が確保されます。

Javaスペース

JavaSpacesは、 Javaオブジェクトのための分散オブジェクト交換および調整メカニズム(永続的である場合とそうでない場合の両方)を提供するサービス仕様です。これは、分散システムの状態を保存し、分散アルゴリズムを実装するために使用されます。JavaSpaceでは、すべての通信相手(ピア)が状態を共有することで通信と調整を行います。

JavaSpacesは並列処理によるスケーラビリティの実現に使用できます。また、分散レプリケーションによる信頼性の高いオブジェクトストレージの提供にも使用できます。ただし、ディスクのように電源障害には耐えられません。しかし、電源が安定している限りは信頼性が高いと多くの人に考えられています。分散は遠隔地にも可能ですが、JavaSpacesは通常、信頼性の高いオブジェクトキャッシュではなく、低レイテンシで高性能なアプリケーションに使用されるため、これはまれです。

JavaSpacesで最も一般的に使用されるソフトウェアパターンは、マスター・ワーカーパターンです。マスターは「スペース」に作業単位を渡し、ワーカーはそれを読み取り、処理し、スペースに書き戻します。典型的な環境では、複数の「スペース」、複数のマスター、そして多数のワーカーが存在します。ワーカーは通常、汎用的に設計されており、つまり、スペースから任意の作業単位を取得してタスクを処理できます。

JavaSpacesはJava Jiniテクノロジの一部ですが、単体では商業的に成功していません。[1] このテクノロジは長年にわたり新規ユーザーを獲得し、維持しており、一部のベンダーはJavaSpacesベースの製品を提供しています。JavaSpacesは依然としてニッチなテクノロジであり、主に金融サービス業界と通信業界で使用され、忠実な支持を得ています。Jini/JavaSpacesの発表は大きな話題を呼びましたが、Sunの共同創設者でありチーフJiniアーキテクトのビル・ジョイは、この分散システムの夢は「思考の飛躍的進歩」を遂げるだろうと明言しました[2]

使用例

以下の例は、JavaSpacesを使用して作成されたアプリケーションを示しています。まず、オブジェクトスペースで共有されるオブジェクトが作成されます。このようなオブジェクトは、JavaSpace用語ではエントリと呼ばれます。ここでは、エントリはHello World!文字列を返すサービスをカプセル化し、その使用回数を追跡するために使用されます。このサービスを提供するサーバーは、オブジェクトスペース、つまりJavaSpaceを作成します。エントリJavaSpace書き込まれます。クライアントはJavaSpaceからエントリを読み取り、サービスにアクセスするためのメソッドを呼び出し、その使用回数を更新します。更新されたエントリはJavaSpaceに書き戻されます

// Entry クラス
public class SpaceEntry implements Entry { public final String message = "Hello World!" ; public Integer count = 0 ; public String service () { ++ count ; return message ; } public String toString () { return "Count: " + count ; } }     
          
         
 
        
         
          
     
 
        
            
     

// Hello World! server 
public class Server { public static void main ( String [] args ) throws Exception { SpaceEntry entry = new SpaceEntry (); // Entry オブジェクトを作成します。JavaSpace space = ( JavaSpace ) space ( ); // オブジェクト スペースを作成します。 // Entry を登録し、スペースに書き込みますspace.write ( entry , null , Lease.FOREVER ) ; // 10秒間一時停止してからEntry を取得してその状態確認ますThread.sleep ( 10 * 1000 ) ; SpaceEntry e = space.read ( entry , null , Long.MAX_VALUE ) ; System.out.println ( e ) ; } }   
            
                         
                       
         
                   
         
           
              
         
     

//
クライアントpublic class Client { public static void main ( String [ ] args ) throws Exception { JavaSpace space = ( JavaSpace ) space ( ) ; SpaceEntry e = space.take ( new SpaceEntry ( ) , null , Long.MAX_VALUE ) ; System.out.println ( e.service ( ) ) ; space.write ( e , null , Lease.FOREVER ) ; } }   
            
             
               
         
           
     

  • Eric Freeman、Susanne Hupfer、Ken Arnold著JavaSpacesの原則、パターン、実践。Addison -Wesley Professional、1999年6月1日、ISBN 0-201-30955-6
  • Phil Bishop, Nigel Warren: JavaSpaces in Practice. Addison Wesley, 2002, ISBN 0-321-11231-8
  • マックス・K・ゴフ著『ネットワーク分散コンピューティング:フィットスケープと誤謬』、2004年、プレンティス・ホール、ISBN 0-13-100152-3
  • Sing Li他著:プロフェッショナルJavaサーバープログラミング、1999年、Wrox Press、ISBN 1-86100-277-7
  • Steven Halter: JavaSpaces Example by Example、2002年、Prentice Hall PTR、ISBN 0-13-061916-7

インタビュー

  • ゲレンター、デイヴィッド (2009). 「クラウドの王」 ジョン・ブロックマン(編集者兼発行人)、ラッセル・ワインバーガー(Edge Foundation, Inc. 共同発行人)
  • ハイス、ジャニス J. (2003)。 「コンピューターのビジョン: デビッド・ゲランターとの対話」。サン開発者ネットワーク (SDN)。
  • ビル・ヴェナーズ (2003). 「プログラマーを人間として設計する(ケン・アーノルド氏へのインタビュー)」. java.net.

記事

  • Brogden, William (2007). 「WebサービスにおけるJavaSpacesの活用方法」SearchWebServices.com . 2007年4月18日閲覧
  • Brogden, William (2007). 「グリッドコンピューティングとWebサービス(Beowulf、BOINC、Javaspaces)」. SearchWebServices.com . 2007年3月20日閲覧。
  • White, Tom (2005). 「ComputeFarmの構築方法」. java.net . 2005年5月21日閲覧
  • Ottinger, Joseph (2007). 「JavaSpacesを理解する」 theserverside . 2007年1月31日閲覧
  • Angerer, Bernhard; Erlacher, Andreas (2005). 「次世代Javaミドルウェアにおける疎結合通信と調整」. java.net . 2006年6月3日閲覧。
  • Angerer, Bernhard (2003). 「宇宙ベースプログラミング」. onjava.com . 2003年3月19日閲覧
  • Sing, Li (2003). 「高効果Web層クラスタリング、パート2:JavaSpacesによる適応型でスケーラブルなソリューションの構築」IBM DeveloperWorks.
  • Mamoud, Qusay H. (2005). 「JavaSpacesテクノロジー入門:従来の分散プログラミングパラダイムを超えて」. Sun Developer Network (SDN).
  • Freeman, Eric; Hupfer, Susanne (1999年11月20日). 「Javaspacesのためのスペース確保、パート1(パート5より)」. JavaWorld . 2020年7月17日閲覧
  • ロフラー、ジェラルド博士 (2004)。 「Enterprise Java Universum における JavaSpaces および ihr Platz、Das Modell zum Objektaustausch: JavaSpaces vorgestellt」。 Entwickler.com 2004 年 2 月 1 日に取得
  • Arango, Mauricio (2009). 「並列イベントベースシステムにおける調整」blogs.sun.com.
  • Nemlekar, Milind (2001). 「スケーラブルな分散タプルスペース」NCSU, ECE学部.

参照

参考文献

  1. ^ リー・ゴメス「サン・マイクロシステムズのJxtaシステムに関する予測はお馴染みのようだ」ウォール・ストリート・ジャーナル、2001年6月4日
  2. ^ ロブ・ガス:「単なる美しい名前以上のもの:SunのJiniは分散コンピュータシステムの新しい世界を切り開きます」SunWorld、1998年8月[2006年1月15日]

出典

  • ゲレンター、デイヴィッド. 「Lindaにおける生成的コミュニケーション」. ACM Transactions on Programming Languages and Systems , 第7巻第1号, 1985年1月
  • 分散コンピューティング(インド初版、2004年)、ML Liu
  • c2.comの「TupleSpace」
  • jini.orgの「JavaSpace 仕様」
Retrieved from "https://en.wikipedia.org/w/index.php?title=Tuple_space&oldid=1298477502"