Un espacio de tuplas es una implementación del paradigma de memoria asociativa para la computación paralela/distribuida. Proporciona un repositorio de tuplas al que se puede acceder simultáneamente. Como ejemplo ilustrativo, consideremos un grupo de procesadores que generan datos y otro grupo que los utiliza. Los productores publican sus datos como tuplas en el espacio, y los consumidores recuperan los datos 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 una forma de memoria compartida distribuida .
Los espacios de tuplas fueron el fundamento teórico 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
El modelo de Espacios de Objetos es un paradigma para el desarrollo de aplicaciones de computación distribuida . Se caracteriza por la existencia de entidades lógicas, denominadas Espacios de Objetos . Todos los participantes de la aplicación distribuida comparten un Espacio de Objetos . Un proveedor de un servicio encapsula dicho servicio como un Objeto y lo ubica en el Espacio de Objetos . Los clientes del servicio acceden al Espacio de Objetos , identifican qué objeto proporciona el servicio requerido y solicitan que dicho objeto atienda su solicitud.
El concepto de Espacios de Objetos , como paradigma informático, fue propuesto en la década de 1980 por David Gelernter en la Universidad de Yale . Gelernter desarrolló un lenguaje llamado Linda para dar soporte al concepto de coordinación global de objetos.
El espacio de objetos puede concebirse como un repositorio virtual, compartido entre proveedores y usuarios de servicios de red, los cuales se abstraen como objetos. Los procesos se comunican entre sí utilizando estos objetos compartidos , actualizando su estado según sea necesario.
Cuando un objeto se deposita en un espacio, debe registrarse en un Directorio de Objetos dentro del Espacio de Objetos . Cualquier proceso puede identificar el objeto desde el Directorio de Objetos mediante la búsqueda de propiedades, donde la propiedad que especifica los criterios para la búsqueda del objeto es su nombre u otra propiedad que lo identifique de forma única. Un proceso puede optar por esperar a que un objeto se coloque en el Espacio de Objetos si el objeto necesario no está presente.
Cuando los objetos se depositan en un espacio de objetos , son pasivos; es decir, no se pueden invocar sus métodos mientras se encuentran en dicho espacio . En su lugar, el proceso que accede a ellos debe recuperarlos del espacio de objetos y colocarlos en su memoria local, utilizar el servicio que proporciona el objeto, actualizar su estado y volver a colocarlo en el espacio de objetos .
Este paradigma proporciona inherentemente exclusión mutua . Una vez que se accede a un objeto, este debe eliminarse del espacio de objetos y solo se vuelve a colocar después de haber sido liberado. Esto significa que ningún otro proceso puede acceder a un objeto mientras está siendo utilizado por 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 participantes (pares) se comunican y coordinan compartiendo su estado.
JavaSpaces permite lograr escalabilidad mediante procesamiento paralelo y proporciona almacenamiento fiable de objetos a través de replicación distribuida. Si bien no resiste un fallo eléctrico total como un disco duro, muchos lo consideran fiable siempre que el suministro eléctrico sea estable. La distribución también puede realizarse a ubicaciones remotas; sin embargo, esto es poco común, ya que JavaSpaces se suele utilizar para aplicaciones de baja latencia y alto rendimiento, en lugar de para el almacenamiento en caché fiable de objetos.
El patrón de software más común en JavaSpaces es el patrón Maestro-Trabajador. El Maestro asigna unidades de trabajo al "espacio", y los trabajadores las leen, procesan y devuelven al espacio. En un entorno típico, existen varios "espacios", varios maestros y muchos trabajadores; estos últimos suelen diseñarse para ser genéricos, es decir, pueden tomar cualquier unidad de trabajo del espacio y procesar la tarea.
JavaSpaces forma parte de la tecnología Java Jini , que por sí sola no ha tenido éxito comercial. [ 1 ] La tecnología ha encontrado y mantenido nuevos usuarios a lo largo de los años y algunos proveedores ofrecen productos basados en JavaSpaces. JavaSpaces sigue siendo una tecnología de nicho, utilizada principalmente en los sectores de servicios financieros y telecomunicaciones, donde continúa manteniendo una base de seguidores fieles. El anuncio de Jini/JavaSpaces generó bastante expectación, aunque el cofundador de Sun y arquitecto jefe de Jini, Bill Joy, afirmó sin rodeos que este sueño de sistemas distribuidos dará " un salto cuántico en la forma de pensar ". [ 2 ]
Ejemplo de uso
El siguiente ejemplo muestra una aplicación creada con JavaSpaces. Primero, se crea un objeto que se compartirá en el Espacio de Objetos . Dicho objeto se denomina Entrada en la terminología de JavaSpace. Aquí, la Entrada se utiliza para encapsular un servicio que devuelve la cadena " ¡Hola Mundo!" y registra cuántas veces se ha utilizado. El servidor que proporciona este servicio creará un Espacio de Objetos o JavaSpace . A continuación, la Entrada se escribe en el JavaSpace . El cliente lee la Entrada del JavaSpace e invoca su método para acceder al servicio, actualizando así su contador de uso. La Entrada actualizada se vuelve a escribir en el JavaSpace .
// Una clase Entry public class SpaceEntry implements 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! public class Server { public static void main ( String [] args ) throws Exception { SpaceEntry entry = new SpaceEntry (); // Crea el objeto Entry JavaSpace space = ( JavaSpace ) space (); // Crea un objeto Space // Registra y escribe el Entry en el Space space . write ( entry , null , Lease . FOREVER ); // Haz una pausa de 10 segundos y luego recupera el Entry y comprueba su estado. Thread . sleep ( 10 * 1000 ); SpaceEntry e = space . read ( entry , null , Long . MAX_VALUE ); System . out . println ( e ); } }// Cliente 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 ); } }Libros
- Eric Freeman , Susanne Hupfer , Ken Arnold : JavaSpaces: Principios, patrones y práctica. 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: escenarios 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 la Nube" . 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 usar JavaSpaces" . SearchWebServices.com . Recuperado el 18 de abril de 2007 .
- Brogden, William (2007). "Computación en malla y servicios web (Beowulf, BOINC, Javaspaces)" . SearchWebServices.com . Recuperado el 20 de marzo de 2007 .
- White, Tom (2005). "Cómo construir una granja de computación" . java.net . Recuperado el 21 de mayo de 2005 .
- Ottinger, Joseph (2007). "Understanding JavaSpaces" . theserverside . Recuperado el 31 de enero de 2007 .
- Angerer, Bernhard; Erlacher, Andreas (2005). "Comunicación y coordinación débilmente acopladas en el middleware Java de próxima generación" . java.net . Recuperado 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). "Agrupación de alto impacto en la capa web, Parte 2: Creación de soluciones adaptativas y escalables con JavaSpaces" . IBM developerworks.
- Mamoud, Qusay H. (2005). "Introducción a la tecnología JavaSpaces: más allá de los paradigmas convencionales de programación distribuida" . Sun Developer Network (SDN).
- Freeman, Eric; Hupfer, Susanne (20 de noviembre de 1999). "Hagamos espacio para los Javaspaces, Parte 1 (de 5)" . JavaWorld . Recuperado 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 ECE.
Véase también
- Arquitectura basada en el espacio
- Linda (idioma de coordinación)
- Ken Arnold , ingeniero jefe de JavaSpaces en Sun Microsystems.
Referencias
- ↑ Lee Gomes: " Las predicciones de Sun Microsystems sobre 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
- Computación paralela
- Arquitectura de computación distribuida
- Lenguajes de programación
- Java (plataforma de software)