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