Un espacio de tuplas es una implementación del paradigma de memoria asociativa para computación paralela/distribuida. Proporciona un repositorio de tuplas a las que se puede acceder de forma concurrente. Como ejemplo ilustrativo, considere que hay un grupo de procesadores que producen fragmentos de datos y un grupo de procesadores que utilizan los datos. Los productores publican sus datos como tuplas en el espacio y los consumidores luego recuperan datos del espacio que coinciden con un patrón determinado. Esto también se conoce como la metáfora de la pizarra . El espacio de tuplas puede considerarse como una forma de memoria compartida distribuida .
Los espacios de tuplas fueron la base teórica del lenguaje Linda desarrollado por David Gelernter y Nicholas Carriero en la Universidad de Yale en 1986.
También se han desarrollado implementaciones de espacios de tuplas para Java ( JavaSpaces ), Lisp , Lua , Prolog , Python , Ruby , Smalltalk , Tcl y .NET Framework .
Espacios de objetos
Los espacios de objetos son un paradigma para el desarrollo de aplicaciones informáticas distribuidas . Se caracterizan por la existencia de entidades lógicas, llamadas espacios de objetos . Todos los participantes de la aplicación distribuida comparten un espacio de objetos . Un proveedor de un servicio encapsula el servicio como un objeto y lo coloca en el espacio de objetos . Los clientes de un servicio acceden entonces al espacio de objetos , averiguan qué objeto proporciona el servicio necesario y hacen que el objeto atienda la solicitud.
Los espacios de objetos , como paradigma informático, fueron propuestos en la década de 1980 por David Gelernter en la Universidad de Yale . Gelernter desarrolló un lenguaje llamado Linda para respaldar el concepto de coordinación global de objetos.
El espacio de objetos puede considerarse como un repositorio virtual, compartido entre proveedores y usuarios de servicios de red, que a su vez se abstraen como objetos. Los procesos se comunican entre sí utilizando estos objetos compartidos, actualizando el estado de los objetos cuando es necesario.
Un objeto, cuando se deposita en un espacio, debe registrarse en un Directorio de objetos en el Espacio de objetos . Cualquier proceso puede entonces identificar el objeto en el Directorio de objetos , utilizando la búsqueda de propiedades, donde la propiedad que especifica los criterios para la búsqueda del objeto es su nombre o alguna otra propiedad que lo identifique de forma única. Un proceso puede optar por esperar a que se coloque un objeto en el Espacio de objetos , si el objeto necesario aún no está presente.
Los objetos, cuando se depositan en un espacio de objetos , son pasivos, es decir, sus métodos no se pueden invocar mientras los objetos se encuentren en el espacio de objetos . En cambio, el proceso que accede a ellos debe recuperarlos del espacio de objetos y colocarlos en su memoria local, utilizar el servicio proporcionado por el objeto, actualizar el estado del objeto y volver a colocarlo en el espacio de objetos .
Este paradigma proporciona de manera inherente la exclusión mutua , ya que una vez que se accede a un objeto, debe eliminarse del espacio de objetos y se lo vuelve a colocar solo después de que se lo haya liberado. Esto significa que ningún otro proceso puede acceder a un objeto mientras lo esté utilizando un proceso, lo que garantiza la exclusión mutua.
Espacios Java
JavaSpaces es una especificación de servicio que proporciona un mecanismo de intercambio y coordinación de objetos distribuidos (que puede ser persistente o no) para objetos Java . Se utiliza para almacenar el estado del sistema distribuido e implementar algoritmos distribuidos . En un JavaSpace, todos los socios de comunicación (pares) se comunican y coordinan compartiendo el estado.
Los JavaSpaces se pueden utilizar para lograr escalabilidad a través del procesamiento paralelo, también se pueden utilizar para proporcionar almacenamiento confiable de objetos a través de la replicación distribuida, aunque esto no sobrevivirá a un corte total de energía como un disco; muchos lo consideran confiable siempre que la energía sea confiable. La distribución también se puede realizar a ubicaciones remotas; sin embargo, esto es poco común ya que los JavaSpaces generalmente se utilizan para aplicaciones de alto rendimiento y baja latencia en lugar de almacenamiento en caché de objetos confiable.
El patrón de software más común utilizado en JavaSpaces es el patrón Master-Worker. El Master distribuye unidades de trabajo al "espacio", y los trabajadores las leen, procesan y vuelven a escribir en el espacio. En un entorno típico hay varios "espacios", varios masters y muchos trabajadores; los trabajadores suelen estar diseñados para ser genéricos, es decir, pueden tomar cualquier unidad de trabajo del espacio y procesar la tarea.
JavaSpaces es parte de la tecnología Java Jini , que por sí sola no ha sido un éxito comercial. [1] La tecnología ha encontrado y conservado nuevos usuarios a lo largo de los años y algunos proveedores están ofreciendo productos basados en JavaSpaces. JavaSpaces sigue siendo una tecnología de nicho utilizada principalmente en los sectores de servicios financieros y telecomunicaciones, donde sigue manteniendo un público fiel. El anuncio de Jini/JavaSpaces generó bastante revuelo, aunque el cofundador de Sun y arquitecto jefe de Jini, Bill Joy, lo dejó claro al afirmar que este sueño de sistemas distribuidos supondrá " un salto cuántico en el pensamiento ". [2]
Ejemplo de uso
El siguiente ejemplo muestra una aplicación creada con JavaSpaces. Primero, se crea un objeto que se compartirá en el Object Space . Este tipo de objeto se denomina Entry en la terminología de JavaSpace. Aquí, Entry se utiliza para encapsular un servicio que devuelve una cadena Hello World! y lleva un registro de cuántas veces se utilizó. El servidor que proporciona este servicio creará un Object Space o JavaSpace . Luego, Entry se escribe en JavaSpace . El cliente lee la entrada desde JavaSpace e invoca su método para acceder al servicio, actualizando así su recuento de uso. La Entry actualizada se vuelve a escribir en JavaSpace .
// Una clase Entry
public class SpaceEntry implementa Entry { public final String message = "Hola mundo!" ; public Integer count = 0 ; public String service () { ++ count ; return message ; } public String toString () { return "Count: " + count ; } }
// ¡Hola mundo!
servidor clase pública Servidor { public static void main ( String [] args ) lanza Exception { SpaceEntry entry = new SpaceEntry (); // Crea el objeto Entry JavaSpace space = ( JavaSpace ) space (); // Crea un objeto Space // Registra y escribe la entrada en el espacio space . write ( entry , null , Lease . FOREVER ); // Haz una pausa de 10 segundos y luego recupera la entrada y verifica su estado. Thread . sleep ( 10 * 1000 ); SpaceEntry e = space . read ( entry , null , Long . MAX_VALUE ); System . out . println ( e ); } }
//
Cliente clase pública Cliente { public static void main ( String [ ] args ) lanza Excepción { JavaSpace espacio = ( JavaSpace ) espacio ( ) ; SpaceEntry e = espacio.take ( new SpaceEntry ( ) , null , Long.MAX_VALUE ) ; System.out.println ( e.service ( ) ) ; espacio.write ( e , null , Lease.FOREVER ) ; } }
Libros
- Eric Freeman , Susanne Hupfer, Ken Arnold : Principios, patrones y práctica de JavaSpaces. Addison-Wesley Professional, 1 de junio de 1999, ISBN 0-201-30955-6
- Phil Bishop, Nigel Warren: JavaSpaces en la práctica. Addison Wesley, 2002, ISBN 0-321-11231-8
- Max K. Goff: Computación distribuida en red: panoramas y falacias , 2004, Prentice Hall, ISBN 0-13-100152-3
- Sing Li, et al.: Programación profesional de servidores Java , 1999, Wrox Press, ISBN 1-86100-277-7
- Steven Halter: JavaSpaces ejemplo por ejemplo , 2002, Prentice Hall PTR, ISBN 0-13-061916-7
Entrevistas
- Gelernter, David (2009). "El señor de las nubes". John Brockman, editor y editor Russell Weinberger, editor asociado, Edge Foundation, Inc.
- Heiss, Janice J. (2003). "Visiones por computadora: una conversación con David Gelernter". Red de desarrolladores Sun (SDN).
- Venners, Bill (2003). "Diseñar como si los programadores fueran personas (Entrevista con Ken Arnold)". java.net.
Artículos
- Brogden, William (2007). "Cómo los servicios web pueden utilizar JavaSpaces". SearchWebServices.com . Consultado el 18 de abril de 2007 .
- Brogden, William (2007). "Computación en red y servicios web (Beowulf, BOINC, Javaspaces)". SearchWebServices.com . Consultado el 20 de marzo de 2007 .
- White, Tom (2005). "Cómo construir una granja de computación". java.net . Consultado el 21 de mayo de 2005 .
- Ottinger, Joseph (2007). "Understanding JavaSpaces". theserverside . Consultado el 31 de enero de 2007 .
- Angerer, Bernhard; Erlacher, Andreas (2005). "Comunicación y coordinación débilmente acopladas en middleware Java de próxima generación". java.net . Consultado el 3 de junio de 2006 .
- Angerer, Bernhard (2003). "Programación basada en el espacio". onjava.com . Consultado el 19 de marzo de 2003 .
- Sing, Li (2003). "Agrupamiento de alto impacto en niveles web, parte 2: creación de soluciones adaptables y escalables con JavaSpaces". IBM developerworks.
- Mamoud, Qusay H. (2005). "Introducción a la tecnología JavaSpaces: más allá de los paradigmas de programación distribuida convencionales". Sun Developer Network (SDN).
- Freeman, Eric; Hupfer, Susanne (20 de noviembre de 1999). "Make room for Javaspaces, Part 1 (from 5)" (Haga lugar para Javaspaces, parte 1 (de 5)). JavaWorld . Consultado el 17 de julio de 2020 .
- Löffler, Dr. Gerald (2004). "JavaSpaces und ihr Platz im Enterprise Java Universum, Das Modell zum Objektaustausch: JavaSpaces vorgestellt". Entwickler.com . Consultado el 1 de febrero de 2004 .
- Arango, Mauricio (2009). "Coordinación en sistemas paralelos basados en eventos". blogs.sun.com.
- Nemlekar, Milind (2001). "Espacios de tuplas distribuidos escalables". NCSU, Departamento de Educación y Ciencia.
Véase también
- Arquitectura basada en el espacio
- Linda (lenguaje de coordinación)
- Ken Arnold , ingeniero jefe de JavaSpaces en Sun Microsystems
- Rinda , un análogo de JavaSpaces para Ruby
Referencias
- ^ Lee Gomes: "Las predicciones de Sun Microsystems para el sistema JXTA suenan familiares". The Wall Street Journal , 4 de junio de 2001
- ^ Rob Guth: "Más que un nombre bonito: Jini de Sun abre un nuevo mundo de sistemas informáticos distribuidos". SunWorld , agosto de 1998 [15 de enero de 2006]
Fuentes
- Gelernter, David . "Comunicación generativa en Linda". ACM Transactions on Programming Languages and Systems , volumen 7, número 1, enero de 1985
- Computación distribuida (primera reimpresión india, 2004), ML Liu
Enlaces externos
- "TupleSpace" en c2.com
- "Especificación de JavaSpace" en jini.org