Tupel utrymme
Ett tupelutrymme är en implementering av det associativa minnesparadigmet för parallell/distribuerad beräkning. Det tillhandahåller ett arkiv med tupler som kan nås samtidigt. Som ett illustrativt exempel, tänk på att det finns en grupp processorer som producerar bitar av data och en grupp processorer som använder datan. Producenterna lägger ut sin data som tuplar i utrymmet, och konsumenterna hämtar sedan data från utrymmet som matchar ett visst mönster. Detta är också känt som svarta tavlans metafor . Tupelutrymme kan ses som en form av distribuerat delat minne .
Tuple spaces var den teoretiska grunden för Linda -språket som utvecklades av David Gelernter och Nicholas Carriero vid Yale University 1986.
Implementeringar av tupelutrymmen har också utvecklats för Java ( JavaSpaces ), Lisp , Lua , Prolog , Python , Ruby , Smalltalk , Tcl och .NET Framework .
Objektutrymmen
Object Spaces är ett paradigm för utveckling av distribuerade datorapplikationer . Det kännetecknas av att det finns logiska enheter, kallade Object Spaces . Alla deltagare i den distribuerade applikationen delar ett objektutrymme . En leverantör av en tjänst kapslar in tjänsten som ett objekt och placerar den i objektutrymmet . Klienter till en tjänst kommer sedan åt objektutrymmet , tar reda på vilket objekt som tillhandahåller den nödvändiga tjänsten och får förfrågan betjänad av objektet.
Object Spaces , som ett datorparadigm, lades fram på 1980-talet av David Gelernter vid Yale University . Gelernter utvecklade ett språk som heter Linda för att stödja konceptet global objektkoordination.
Object Space kan ses som ett virtuellt arkiv, delat mellan leverantörer och accessorer av nätverkstjänster, som i sig abstraheras som objekt. Processer kommunicerar med varandra med hjälp av dessa delade objekt – genom att uppdatera objektens tillstånd när och när det behövs.
När ett objekt placeras i ett utrymme måste det registreras i en objektkatalog i objektutrymmet . Alla processer kan sedan identifiera objektet från objektkatalogen , med hjälp av egenskapssökning, där egenskapen som anger kriterierna för sökningen av objektet är dess namn eller någon annan egenskap som unikt identifierar det. En process kan välja att vänta på att ett objekt ska placeras i objektutrymmet , om det nödvändiga objektet inte redan finns.
Objekt, när de deponeras i ett objektutrymme, är passiva, dvs. deras metoder kan inte anropas medan objekten är i objektutrymmet . Istället måste åtkomstprocessen hämta den från objektutrymmet till dess lokala minne, använda tjänsten som tillhandahålls av objektet, uppdatera objektets tillstånd och placera tillbaka det i objektutrymmet .
Detta paradigm ger till sin natur ömsesidig uteslutning . För när ett objekt väl har nåtts måste det tas bort från objektutrymmet och placeras tillbaka först efter att det har släppts. Detta innebär att ingen annan process kan komma åt ett objekt medan det används av en process, vilket säkerställer ömsesidig uteslutning.
JavaSpaces
JavaSpaces är en tjänstespecifikation som tillhandahåller en distribuerad objektutbyte och koordineringsmekanism (som kan vara bestående eller inte) för Java -objekt. Den används för att lagra det distribuerade systemets tillstånd och implementera distribuerade algoritmer . I ett JavaSpace kommunicerar och koordinerar alla kommunikationspartners (kamrater) genom att dela tillstånd.
JavaSpaces kan användas för att uppnå skalbarhet genom parallell bearbetning, det kan också användas för att tillhandahålla tillförlitlig lagring av objekt genom distribuerad replikering, även om detta inte kommer att överleva ett totalt strömavbrott som en disk; den anses av många vara pålitlig så länge kraften är pålitlig. Distribution kan också ske till avlägsna platser; detta är dock sällsynt eftersom JavaSpaces vanligtvis används för låg latens , högpresterande applikationer snarare än tillförlitlig objektcache.
Det vanligaste mjukvarumönstret som används i JavaSpaces är Master-Worker-mönstret. Mästaren delar ut arbetsenheter till "utrymmet", och dessa läses, bearbetas och skrivs tillbaka till rummet av arbetarna. I en typisk miljö finns flera "utrymmen", flera mästare och många arbetare; arbetarna är vanligtvis utformade för att vara generiska, dvs de kan ta vilken enhet som helst från rummet och bearbeta uppgiften.
JavaSpaces är en del av Java Jini -tekniken, som i sig inte har varit någon kommersiell framgång. Tekniken har hittat och behållit nya användare genom åren och vissa leverantörer erbjuder JavaSpaces-baserade produkter. JavaSpaces förblir en nischteknik som mestadels används inom de finansiella tjänsterna och telekomindustrin där den fortsätter att behålla en trogen följare. Tillkännagivandet av Jini/JavaSpaces skapade en hel del hype även om Suns medgrundare och chef Jini-arkitekt Bill Joy uttryckte det rakt ut att denna dröm om distribuerade system kommer att ta " ett kvantsprång i tänkandet" .
Exempel användning
Följande exempel visar en applikation gjord med JavaSpaces. Först skapas ett objekt som ska delas i objektutrymmet . Ett sådant objekt kallas en Entry i JavaSpace-terminologi. Här används posten för att kapsla in en tjänst som returnerar en Hello World! sträng och håller reda på hur många gånger den användes. Servern som tillhandahåller denna tjänst kommer att skapa ett objektutrymme eller JavaSpace . Posten skrivs sedan in i JavaSpace . Klienten läser posten från JavaSpace och anropar sin metod för att komma åt tjänsten, och uppdaterar dess användningsantal genom att göra det. Den uppdaterade posten skrivs tillbaka till JavaSpace .
0
// En Entry class public class SpaceEntry implementerar Entry { public final String message = "Hello World!" ; offentligt heltalsantal = ; _ public String service () { ++ count ; returnera meddelande ; } public String toString () { return "Count: " + count ; } }
// Hej världen! server public class Server { public static void main ( String [] args ) kastar Exception { SpaceEntry entry = new SpaceEntry (); // Skapa Entry-objektet JavaSpace space = ( JavaSpace ) space (); // Skapa ett objektutrymme // Registrera och skriv inträdet i utrymmet . skriv ( entry , null , Lease . FOREVER ); // Pausa i 10 sekunder och hämta sedan posten och kontrollera dess tillstånd. Tråd . sömn ( 10 * 1000 ); SpaceEntry e = blanksteg . read ( entry , null , Long . MAX_VALUE ); System . ut . println ( e ); } }
// Client public class Client { public static void main ( String [] args ) throws Exception { JavaSpace space = ( JavaSpace ) space (); SpaceEntry e = blanksteg . take ( ny SpaceEntry (), null , Long . MAX_VALUE ); System . ut . println ( e . service ()); utrymme . skriv ( e , null , Lease . FÖR EVIGT ); } }
Böcker
- Eric Freeman , Susanne Hupfer, Ken Arnold : JavaSpaces principer, mönster och 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: Network Distributed Computing: Fitscapes and Fallacies , 2004, Prentice Hall, ISBN 0-13-100152-3
- Sing Li, et al.: Professional Java Server Programming , 1999, Wrox Press, ISBN 1-86100-277-7
- Steven Halter: JavaSpaces Exempel genom Exempel , 2002, Prentice Hall PTR, ISBN 0-13-061916-7
Intervjuer
- Gelernter, David (2009). "Molnets Herre" . John Brockman, redaktör och utgivare Russell Weinberger, Associate Publisher, Edge Foundation, Inc.
- Heiss, Janice J. (2003). "Computer Visions: A Conversation with David Gelernter" . Sun Developer Network (SDN).
- Venners, Bill (2003). "Designa som om programmerare är människor (intervju med Ken Arnold)" . java.net.
Artiklar
- Brogden, William (2007). "Hur webbtjänster kan använda JavaSpaces" . SearchWebServices.com . Hämtad 2007-04-18 .
- Brogden, William (2007). "Griddatorer och webbtjänster (Beowulf, BOINC, Javaspaces)" . SearchWebServices.com . Hämtad 2007-03-20 .
- White, Tom (2005). "Hur man bygger en ComputeFarm" . java.net . Hämtad 2005-05-21 .
- Ottinger, Joseph (2007). "Förstå JavaSpaces" . serversidan . Hämtad 2007-01-31 .
- Angerer, Bernhard; Erlacher, Andreas (2005). "Löst kopplad kommunikation och koordinering i nästa generations Java Middleware" . java.net . Hämtad 2006-06-03 .
- Angerer, Bernhard (2003). "Rymdbaserad programmering" . onjava.com . Hämtad 2003-03-19 .
- Sing, Li (2003). "High-impact Web Tier Clustering, Del 2: Bygga adaptiva, skalbara lösningar med JavaSpaces" . IBMs utvecklarverk.
- Mamoud, Qusay H. (2005). "Komma igång med JavaSpaces Technology: Beyond Conventional Distributed Programming Paradigms" . Sun Developer Network (SDN).
- Freeman, Eric; Hupfer, Susanne (20 november 1999). "Gör plats för Javaspaces, del 1 (från 5)" . JavaWorld . Hämtad 2020-07-17 .
- Löffler, Dr Gerald (2004). "JavaSpaces och ihr Platz im Enterprise Java Universum, Das Modell zum Objektaustausch: JavaSpaces vorgestellt" . Entwickler.com . Hämtad 2004-02-01 .
- Arango, Mauricio (2009). "Samordning i parallella händelsebaserade system" . blogs.sun.com.
- Nemlekar, Milind (2001). "Scalable Distributed Tuplespaces" . NCSU, avdelningen för ECE.
Se även
- Rymdbaserad arkitektur
- Linda (koordinationsspråk)
- Ken Arnold , ledande ingenjör på JavaSpaces på Sun Microsystems
- Rinda , en JavaSpaces-analog för Ruby
- ^ Lee Gomes: " Sun Microsystems förutsägelser för Jxta-systemet låter bekant ". The Wall Street Journal , 4 juni 2001
- ^ Rob Guth: " Mer än bara ett annat vackert namn: Sun's Jini öppnar upp en ny värld av distribuerade datorsystem" . SunWorld , augusti 1998 [15 januari 2006]
Källor
- Gelernter, David . "Generativ kommunikation i Linda" . ACM Transactions on Programming Languages and Systems , volym 7, nummer 1, januari 1985
- Distributed Computing (Första indiska reprint, 2004), ML Liu
externa länkar
- "TupleSpace" på c2.com
- "JavaSpace Specification" på jini.org