Espaço tupla - Tuple space

Um espaço de tupla é uma implementação do paradigma de memória associativa para computação paralela / distribuída. Ele fornece um repositório de tuplas que podem ser acessadas simultaneamente. Como um exemplo ilustrativo, considere que há um grupo de processadores que produzem pedaços de dados e um grupo de processadores que usam os dados. Os produtores postam seus dados como tuplas no espaço e os consumidores, então, recuperam os dados do espaço que correspondem a um determinado padrão. Isso também é conhecido como metáfora do quadro - negro . O espaço tupla pode ser pensado como uma forma de memória compartilhada distribuída .

Os espaços tuplas foram a base teórica da linguagem Linda desenvolvida por David Gelernter e Nicholas Carriero na Universidade de Yale em 1986.

Implementações de espaços de tupla também foram desenvolvidas para Java ( JavaSpaces ), Lisp , Lua , Prolog , Python , Ruby , Smalltalk , Tcl e .NET Framework .

Espaços de Objeto

Object Spaces é um paradigma para o desenvolvimento de aplicativos de computação distribuída . É caracterizado pela existência de entidades lógicas, denominadas Espaços de Objetos . Todos os participantes do aplicativo distribuído compartilham um Espaço de Objeto . Um provedor de um serviço encapsula o serviço como um Objeto e o coloca no Espaço de Objeto . Os clientes de um serviço acessam o Object Space , descobrem qual objeto fornece o serviço necessário e têm a solicitação atendida pelo objeto.

Object Spaces , como paradigma da computação, foi proposto na década de 1980 por David Gelernter na Universidade de Yale . Gelernter desenvolveu uma linguagem chamada Linda para apoiar o conceito de coordenação global de objetos.

O Object Space pode ser pensado como um repositório virtual, compartilhado entre provedores e acessadores de serviços de rede, que são eles próprios abstraídos como objetos. Os processos se comunicam entre si usando esses objetos compartilhados - atualizando o estado dos objetos como e quando necessário.

Um objeto, quando depositado em um espaço, precisa ser registrado em um Diretório de Objetos no Espaço de Objetos . Qualquer processo pode então identificar o objeto no Diretório de Objetos , usando a pesquisa de propriedades, onde a propriedade que especifica os critérios para a pesquisa do objeto é seu nome ou alguma outra propriedade que o identifique exclusivamente. Um processo pode escolher esperar que um objeto seja colocado no Espaço de Objetos , se o objeto necessário ainda não estiver presente.

Os objetos, quando depositados em um Object Space são passivos, ou seja, seus métodos não podem ser invocados enquanto os objetos estão no Object Space . Em vez disso, o processo de acesso deve recuperá- lo do Object Space em sua memória local, usar o serviço fornecido pelo objeto, atualizar o estado do objeto e colocá-lo de volta no Object Space .

Este paradigma inerentemente fornece exclusão mútua . Porque uma vez que um objeto é acessado, ele deve ser removido do Object Space e colocado de volta somente após ter sido liberado. Isso significa que nenhum outro processo pode acessar um objeto enquanto ele está sendo usado por um processo, garantindo assim a exclusão mútua.

JavaSpaces

JavaSpaces é uma especificação de serviço que fornece um mecanismo de troca e coordenação de objeto distribuído (que pode ou não ser persistente) para objetos Java . É usado para armazenar o estado do sistema distribuído e implementar algoritmos distribuídos . Em um JavaSpace, todos os parceiros de comunicação (pares) se comunicam e se coordenam compartilhando o estado.

JavaSpaces pode ser usado para alcançar escalabilidade por meio de processamento paralelo, ele também pode ser usado para fornecer armazenamento confiável de objetos por meio de replicação distribuída, embora isso não sobreviva a uma falha total de energia como um disco; é considerado por muitos como confiável, desde que a energia seja confiável. A distribuição também pode ser para locais remotos; no entanto, isso é raro, pois JavaSpaces geralmente são usados ​​para aplicativos de baixa latência e alto desempenho, em vez de armazenamento em cache de objeto confiável.

O padrão de software mais comum usado em JavaSpaces é o padrão Master-Worker. O Mestre distribui unidades de trabalho para o "espaço", e estas são lidas, processadas e escritas de volta no espaço pelos trabalhadores. Num ambiente típico existem vários "espaços", vários mestres e muitos trabalhadores; os trabalhadores são geralmente projetados para serem genéricos, ou seja, eles podem pegar qualquer unidade de trabalho do espaço e processar a tarefa.

JavaSpaces é parte da tecnologia Java Jini , que por si só não tem sido um sucesso comercial. A tecnologia encontrou e manteve novos usuários ao longo dos anos e alguns fornecedores estão oferecendo produtos baseados em JavaSpaces. JavaSpaces continua sendo uma tecnologia de nicho usada principalmente nos setores de serviços financeiros e telecomunicações, onde continua a manter seguidores fiéis. O anúncio do Jini / JavaSpaces criou um certo exagero, embora o co-fundador da Sun e arquiteto-chefe da Jini, Bill Joy, tenha afirmado que esse sonho de sistemas distribuídos dará " um salto quântico no pensamento ".

GigaSpaces , um desenvolvedor de fabric de dados In-Memory-Computing, implementa JavaSpaces como parte de sua grade de dados In-Memory.

Exemplo de uso

O exemplo a seguir mostra um aplicativo feito usando JavaSpaces. Primeiro, um objeto a ser compartilhado no Object Space é feito. Esse objeto é chamado de Entrada na terminologia JavaSpace. Aqui, a entrada é usada para encapsular um serviço que retorna um Hello World! string e mantém o controle de quantas vezes ela foi usada. O servidor que fornece este serviço criará um Object Space , ou JavaSpace . A entrada é então gravada no JavaSpace . O cliente a entrada do JavaSpace e invoca seu método para acessar o serviço, atualizando sua contagem de uso ao fazer isso. A entrada atualizada é gravada de volta no JavaSpace .

// An Entry class
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();            // Create the Entry object
         JavaSpace space = (JavaSpace)space();           // Create an Object Space
         // Register and write the Entry into the Space
         space.write(entry, null, Lease.FOREVER);        
         // Pause for 10 seconds and then retrieve the Entry and check its state.
         Thread.sleep(10 * 1000);
         SpaceEntry e = space.read(entry, null, Long.MAX_VALUE);
         System.out.println(e);
     }
}
// Client
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);
     }
}

Livros

  • Eric Freeman , Susanne Hupfer , Ken Arnold : JavaSpaces Principles, Patterns and Practice. Addison-Wesley Professional, 1. Junho de 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 Example by Example , 2002, Prentice Hall PTR, ISBN  0-13-061916-7

Entrevistas

Artigos

Veja também

Referências

  1. ^ Lee Gomes: " Sun Microsystems 'Predictions For Jxta System Sound Familiar ". The Wall Street Journal , 4 de junho de 2001
  2. ^ Rob Guth: " Mais do que apenas outro nome bonito: Jini da Sun abre um novo mundo de sistemas de computador distribuídos ". SunWorld , agosto de 1998 [15 de janeiro de 2006]

Fontes

links externos