Ein  Tuple Space  ist eine Implementierung des assoziativen Speicherparadigmas für paralleles / verteiltes Rechnen. Es bietet ein Repository von Tupeln, auf die gleichzeitig zugegriffen werden kann. Angenommen, es gibt eine Gruppe von Prozessoren, die Daten produzieren, und eine Gruppe von Prozessoren, die die Daten verwenden. Die Produzenten buchen ihre Daten als Tupel im Weltraum, und die Verbraucher rufen dann Daten aus dem Weltraum ab, die einem bestimmten Muster entsprechen. Dies wird auch als Tafelmetapher bezeichnet. Tuple-Space kann als eine Form von verteiltem gemeinsamem Speicher betrachtet werden.
 Tuple Spaces waren die theoretische Grundlage der von David Gelernter und Nicholas Carriero 1986 an der Yale University entwickelten Linda-Sprache.
 Implementierungen von Tupelräumen wurden auch für Java (JavaSpaces), Lisp, Lua, Prolog, Python, Ruby, Smalltalk, Tcl und das .NET-Framework entwickelt.
Object Spaces [ edit ]
 Object Spaces  ist ein Paradigma für die Entwicklung verteilter Computeranwendungen. Es ist durch das Vorhandensein logischer Entitäten gekennzeichnet, die als  Object Spaces  bezeichnet werden. Alle Teilnehmer der verteilten Anwendung teilen sich einen Objektraum  . Ein Anbieter eines Dienstes kapselt den Dienst als  -Objekt  und stellt es in den  -Objektraum . Clients eines Dienstes greifen dann auf den Objektraum   zu, um herauszufinden, welches Objekt den benötigten Dienst bereitstellt, und die Anforderung wird durch das Objekt bearbeitet.
  Object Spaces  als Rechenparadigma wurde in den 1980er Jahren von David Gelernter an der Yale University vorgeschlagen. Gelernter entwickelte eine Sprache namens Linda, um das Konzept der globalen Objektkoordination zu unterstützen.
  Der Objektraum  kann als virtuelles Repository betrachtet werden, das von Anbietern und Accessoren von Netzwerkdiensten gemeinsam genutzt wird, die selbst als Objekte abstrahiert werden. Prozesse kommunizieren mithilfe dieser gemeinsam genutzten Objekte miteinander - indem sie den Status der Objekte bei Bedarf aktualisieren.
 Ein Objekt, das in einem Feld abgelegt wird, muss bei einem Objektverzeichnis   im Objektraum   registriert werden. Jeder Prozess kann dann das Objekt anhand des  Object Directory  unter Verwendung der Eigenschaftensuche identifizieren, wobei die Eigenschaft, die die Kriterien für die Suche des Objekts angibt, der Name des Objekts oder eine andere Eigenschaft ist, die es eindeutig identifiziert. Ein Prozess kann wählen, zu warten, bis ein Objekt in den Objektraum   platziert wird, wenn das benötigte Objekt nicht bereits vorhanden ist.
 Objekte, wenn sie in einem  Object Space  abgelegt werden, sind passiv, d. H. Ihre Methoden können nicht aufgerufen werden, während sich die Objekte im  Object Space  befinden. Stattdessen muss der Zugriffsprozess  ihn aus dem  Object Space  in seinem lokalen Speicher abrufen, den vom Objekt bereitgestellten Dienst verwenden, den Status des Objekts aktualisieren und ihn wieder in den  Objektraum .
 Dieses Paradigma bietet inhärent gegenseitigen Ausschluss. Nachdem ein Objekt einmal aufgerufen wurde, muss es aus dem Objektraum   entfernt werden und wird erst nach seiner Freigabe wieder abgelegt. Dies bedeutet, dass kein anderer Prozess auf ein Objekt zugreifen kann, während es von einem Prozess verwendet wird, wodurch ein gegenseitiger Ausschluss sichergestellt wird.
JavaSpaces [ edit ]
 JavaSpaces ist eine Dienstspezifikation, die einen verteilten Objektaustausch- und Koordinationsmechanismus (der möglicherweise persistent ist) für Java-Objekte bereitstellt. Es wird verwendet, um den Status des verteilten Systems zu speichern und verteilte Algorithmen zu implementieren. In einem JavaSpace kommunizieren und koordinieren alle Kommunikationspartner (Peers) durch das Teilen des Status.
 JavaSpaces können verwendet werden, um Skalierbarkeit durch parallele Verarbeitung zu erreichen, und es kann auch verwendet werden, um Objekte durch verteilte Replikation zuverlässig zu speichern, obwohl dies einen Totalausfall wie bei einer Festplatte nicht übersteht. Es wird von vielen als zuverlässig angesehen, solange die Leistung zuverlässig ist. Die Verteilung kann auch an entfernte Standorte erfolgen. Dies ist jedoch selten, da JavaSpaces normalerweise für Anwendungen mit geringer Latenz und hoher Leistung verwendet werden, anstatt für das zuverlässige Zwischenspeichern von Objekten.
 Das in JavaSpaces am häufigsten verwendete Softwaremuster ist das Master-Worker-Muster. Der Meister übergibt Arbeitseinheiten an den "Raum", die von den Arbeitern gelesen, verarbeitet und in den Raum zurückgeschrieben werden. In einer typischen Umgebung gibt es mehrere "Räume", mehrere Meister und viele Arbeiter. Die Arbeiter sind normalerweise so konzipiert, dass sie generisch sind, d. h. sie können jede Arbeitseinheit aus dem Weltraum nehmen und die Aufgabe bearbeiten.
JavaSpaces ist Teil der Java-Jini-Technologie, die allein keinen kommerziellen Erfolg darstellt. [1] Die Technologie hat im Laufe der Jahre neue Benutzer gefunden und gehalten, und einige Anbieter bieten JavaSpaces-basierte Produkte an. JavaSpaces ist nach wie vor eine Nischentechnologie, die vor allem in der Finanzdienstleistungsbranche und in der Telekommunikationsbranche eingesetzt wird, wo sie weiterhin treue Anhänger hält. Die Ankündigung von Jini / JavaSpaces sorgte für einen gewissen Hype, obwohl Sun-Mitbegründer und Chef-Jini-Architekt Bill Joy klar darlegte, dass dieser verteilte Systemtraum " einen Quantensprung im Denken " machen wird. [2]
Beispielgebrauch [ edit ]
 Das folgende Beispiel zeigt eine Anwendung, die mit JavaSpaces erstellt wurde. Zunächst wird ein Objekt erstellt, das im Objektraum   gemeinsam genutzt werden soll. Ein solches Objekt wird in der JavaSpace-Terminologie als  -Eintrag  bezeichnet. Hier wird der Eintrag   verwendet, um einen Dienst einzukapseln, der eine  Hello World!  -Saite zurückgibt, und verfolgt, wie oft er verwendet wurde. Der Server, der diesen Dienst bereitstellt, erstellt einen  Object Space  oder  JavaSpace . Der Eintrag   wird dann  in den  JavaSpace  geschrieben. Der Client  liest  den Eintrag aus dem  JavaSpace  und ruft seine Methode auf, um auf den Dienst zuzugreifen, und aktualisiert dabei seine Verwendungszählung. Der aktualisierte Eintrag   wird in den JavaSpace   zurückgeschrieben.
 // Eine Entry-Klasse 
 public   class   SpaceEntry   implementiert   Entry   {
      public   final   string   Zeichenfolge   ] =   "Hallo Welt!" ; 
      public   Integer   count   =   0 ; öffentliche 
 
      öffentliche   -Service  ()   {
          ++  count ; 
          return   message ; 
     ] 
 
      public   to String  ()   {
          return   "Count:"   +   count ; 
      
} 
} 
 // Hallo Welt! Server 
 public   Klasse   Server   {
      public   static   void   main  ( Zeichenfolge    args )   wirft   Ausnahme   {
          SpaceEntry   Eintrag   =   neu   SpaceEntry  (19659035] //) Eintragsobjekt 
          JavaSpace   space   =   ( JavaSpace )  space  ();             // Erstellen eines Objektbereichs 
          // Registrieren und Schreiben des Eintrags in den Weltraum 
          Weltraum .  Schreiben  ( Eintrag   null   Leasing  ] FOREVER );         
          // Pause für 10 Sekunden und Abrufen des Eintrags und Überprüfen des Zustands. 
          Thread .  Sleep  ( 10   *   1000 ); 
          SpaceEntry   e   =   Space .  gelesen [19659035] ( Eintrag   null   Long .  MAX_VALUE ) 
          System   println  ( e ); 
     } 
} 
 // Client 
 public   client     [19659029] public   static   void   main  ( Zeichenfolge  []   args )   wirft   19659082] JavaSpace   space   =   ( JavaSpace )   space  (); 
          spaceEntry   e   space [19659035].  take  ( neu   SpaceEntry  (),   null   Long . . 
          System  out print  ( e service  ()), 
         .  wr ite  ( e   null   Leasing .  FOREVER ] 
     ] 
] 
]  [ edit ] 
- Eric Freeman, Susanne Hupfer, Ken Arnold: JavaSpaces-Prinzipien, -Muster und -Praxis. Addison-Wesley Professional, 1. Juni 1999, ISBN 0-201-30955-6
 - Phil Bishop, Nigel Warren: JavaSpaces in Practice. Addison Wesley, 2002, ISBN 0-321-11231-8
 - Max K. Goff: Netzwerkverteiltes Computing: Fitscapes und Fallacies 2004, Prentice Hall, ISBN 0-13 -100152-3
 - Sing Li, et al .: Professionelle Java-Server-Programmierung 1999, Wrox Press, ISBN 1-86100-277-7
 - Steven Halter: JavaSpaces Example by Example 2002, Prentice Hall PTR, ISBN 0-13-061916-7
 
Interviews [ edit ]
Artikel edit ]
- Brogden, William (2007). "Wie Web Services JavaSpaces verwenden können". SearchWebServices.com . 2007-04-18
 - Brogden, William (2007). "Grid Computing und Webservices (Beowulf, BOINC, Javaspaces)". SearchWebServices.com . 2007-03-20 .
 - White, Tom (2005). Msgstr "So erstellen Sie eine ComputeFarm". java.net . 2005-05-21 .
 - Ottinger, Joseph (2007). Msgstr "JavaSpaces verstehen". die Serverseite . 2007-01-31 .
 - Angerer, Bernhard; Erlacher, Andreas (2005). "Locker gekoppelte Kommunikation und Koordination in Java Middleware der nächsten Generation". java.net . 2006-06-03 .
 - Angerer, Bernhard (2003). "Weltraumgestützte Programmierung". onjava.com . 2003-03-19
 - Sing, Li (2003) abgerufen. "Effektives Web-Tier-Clustering, Teil 2: Erstellen adaptiver, skalierbarer Lösungen mit JavaSpaces". IBM developerworks
 - Mamoud, Qusay H. (2005). "Erste Schritte mit der JavaSpaces-Technologie: Jenseits herkömmlicher Paradigmen für verteilte Programmierung". Sun Developer Network (SDN)
 - Freeman, Eric; Hupfer, Susanne (1999). "Platz für Javaspaces schaffen, Teil 1 (von 5)". Java World
 - Löffler, Dr. Gerald (2004). "JavaSpaces und ihr Platz im Enterprise Java Universum, Das Modell zum Objektaustausch: JavaSpaces vorgestellt". Entwickler.com . 2004-02-01 .
 - Shalom, Nati (2006). "Weltraumbasierte Architektur und das Ende des Tier-based Computing". GigaSpaces Technologies
 - Arango, Mauricio (2009). "Koordination in parallelen ereignisbasierten Systemen". blogs.sun.com
 - Nemlekar, Milind (2001). "Skalierbare verteilte Tuplespaces". NCSU, Abt. ECE.
 
Tuple Space Implementations [ edit ]
| Projekt | Unterstützte Sprachen | Verwendete Lizenz |  Bemerkenswerte Funktionen | 
|---|---|---|---|
| Apache River | Java | Apache-Lizenz |  Basierend auf dem Jini-Projekt, das Sun zu Apache beigetragen hat. Siehe Seite. | 
| Das Blitz-Projekt | Java | BSD-Lizenz |  Einzelstandortserver. | 
| The Fly Object Space | Java, Ruby, Scala |  Werbung.  Erlaubt die nicht kommerzielle Nutzung.  | |
| GigaSpaces | Java, .Net, C ++ | .  Bietet kostenlose "Community-Lizenz" mit einer Teilmenge von Funktionen.  |  Clustered, fehlertolerant. | 
| Heterocera | Ruby | BSD-Lizenz |  Webserver-basiert. | 
|  jRESP |  Java |  Eclipse Public License v1.0 |  Unterstützt Räume verschiedener Art (einschließlich Tupelräume), verteilte Tupelräume, Mobilität, Zugriffskontrolle und verschiedene Formen von Multicast. | 
| LIGHTS | Java | LGPL |  Leichtgewicht | 
| Linda in einer mobilen Umgebung (LIME) | Java | LGPL |  Für reine mobile Umgebungen geeignet. Es ist kein Server (Light House) für das Speichern von Tuple-Speicherplätzen erforderlich | 
| LinuxTuples | C, Python, Rust | BSD-Lizenz |  Clustered. | 
| MozartSpaces | Java | AGPL |  Bietet viele Funktionen und Erweiterungsoptionen. | 
| Polyester | Java | GPL |  Leichtgewicht, Erweiterung von LIGHTS | 
| pSpaces | Java, C #, Go, Swift, JavaScript | MIT-Lizenz |  Mehrere Sprachen werden unterstützt. | 
| PyLinda | Python | GPL |  Siehe Seite. | 
| Rinda | Ruby | Ruby-Lizenz |  Siehe Seite. | 
| einfache Räume | Java | GPL |  Leichtgewicht | 
| SemiSpace | Java | Apache-Lizenz | |
| TIBCO ActiveSpaces | Java, .Net, C / C ++ | Kommerziell |  Clustered, fehlertolerant. | 
| Tuple Spaces | Java | LGPL |  In-Prozess- und Remote-Optionen | 
|  Fabrix |  TypeScript |  MIT-Lizenz |  Geeignet für Node.js-Umgebungen und bietet viele Erweiterungsoptionen | 
Inaktive Projekte [ edit ]
- SlackSpaces, Open Source, Hauptwebsite unten, Projektquelle ist herunterladbar
 - SmallSpaces, Open Source-Implementierung des Programmiermodells Linda / Tuplespace [19659212] SQLSpaces, Projekt seit 2013 blockiert
 - TSpaces von IBM für Java, Projekt seit 2000 blockiert
 
No comments:
Post a Comment