Los conceptos clave del lenguaje de programación , tal como se aplican a objetos distribuidos en vivo, se definen de la siguiente manera:
Identidad . La identidad de un objeto distribuido en vivo está determinada por los mismos factores que diferencian entre instancias del mismo protocolo distribuido. El objeto consiste en un grupo de componentes de software que se ejecutan físicamente en algún conjunto de máquinas físicas y que participan en una comunicación mutua, cada uno ejecutando el código de protocolo distribuido con el mismo conjunto de parámetros esenciales, como el nombre de un grupo de multidifusión, el identificador de un tema de publicación-suscripción, la identidad de un servicio de membresía, etc. Así, por ejemplo, los canales de publicación-suscripción y los grupos de multidifusión son ejemplos de objetos distribuidos en vivo: para cada canal o grupo, existe una única instancia de un protocolo distribuido que se ejecuta entre todas las computadoras que envían, reenvían o reciben los datos publicados en el canal o la multidifusión dentro del grupo. En este caso, la identidad del objeto está determinada por el identificador del canal o grupo, calificado con la identidad del sistema distribuido que proporciona, controla y administra el canal o grupo dado. En el caso de la multidifusión, la identidad del sistema podría estar determinada, por ejemplo, por la dirección del servicio de membresía (la entidad que administra la membresía del grupo de multidifusión).
Proxies ( réplicas ). El proxy o una réplica de un objeto activo es una de las instancias de componentes de software involucradas en la ejecución del protocolo distribuido del objeto activo. El objeto puede definirse alternativamente como un grupo de proxies que participan en la comunicación, que mantienen conjuntamente un estado distribuido y coordinan sus operaciones. El término proxy enfatiza el hecho de que un solo componente de software no constituye en sí mismo un objeto; más bien, sirve como una puerta de enlace a través de la cual una aplicación puede obtener acceso a una cierta funcionalidad o comportamiento que se extiende a través de un conjunto de computadoras. En este sentido, el concepto de un proxy de objeto distribuido activo generaliza la noción de un stub de proxy del lado del cliente de RPC , RMI o .NET remoting .
Comportamiento . El comportamiento de un objeto distribuido activo se caracteriza por el conjunto de posibles patrones de interacciones externas que sus servidores proxy pueden llevar a cabo con sus entornos de ejecución locales. Estas interacciones se modelan como intercambios de eventos explícitos (mensajes).
Estado . El estado de un objeto distribuido vivo se define como la suma de todos los estados internos locales de sus proxies. Por definición, está distribuido y replicado. Las diferentes réplicas del estado del objeto pueden ser fuertemente o débilmente consistentes, dependiendo de la semántica del protocolo: una instancia de un protocolo de consenso tendrá el estado de sus réplicas fuertemente consistente, mientras que una instancia de un protocolo de elección de líder tendrá un estado débilmente consistente. En este sentido, el término objeto distribuido vivo generaliza el concepto de un objeto replicado ; este último es un tipo específico de objeto distribuido vivo que usa un protocolo como Paxos, sincronía virtual o replicación de máquina de estados para lograr una fuerte consistencia entre los estados internos de sus réplicas. El estado de un objeto distribuido vivo debe entenderse como una noción dinámica: como un punto (o corte consistente ) en una secuencia de valores, en lugar de como un valor particular ubicado en un lugar determinado en un momento determinado. Por ejemplo, el estado visible externamente de un objeto de elección de líder se definiría como la identidad del líder actualmente elegido. La identidad no se almacena en ninguna ubicación particular; más bien, se materializa como un flujo de mensajes de la forma elegida(x) producidos simultáneamente por los servidores proxy involucrados en la ejecución de este protocolo, y consumidos simultáneamente por instancias de la aplicación que utilizan este protocolo, en diferentes máquinas distribuidas a través de la red.
Interfaces ( puntos finales ). La interfaz de un objeto distribuido en vivo se define por los tipos de interfaces expuestas por sus proxies; estos pueden incluir canales de eventos y varios tipos de interfaces gráficas de usuario. Las interfaces expuestas por los proxies se conocen como puntos finales del objeto distribuido en vivo . El término instancia de punto final se refiere a un único canal de eventos específico o interfaz de usuario expuesta por un único proxy específico. Decir que un objeto en vivo expone un determinado punto final significa que cada uno de sus proxies expone una instancia de este punto final a su entorno local, y cada una de las instancias de punto final lleva eventos de los mismos tipos (o se vincula al mismo tipo de una pantalla gráfica).
Referencias . La referencia a un objeto vivo es un conjunto completo de instrucciones serializadas y portables para construir su proxy. Desreferenciar una referencia significa analizar localmente y seguir estas instrucciones en una computadora en particular, para producir un proxy en ejecución del objeto vivo. Definida de esta manera, una referencia a un objeto vivo juega el mismo papel que una referencia Java, un puntero C/C++ o la descripción WSDL de un servicio web ; contiene una información completa suficiente para localizar el objeto dado e interactuar con él. Dado que los objetos distribuidos vivos pueden no residir en ningún lugar en particular (sino que se extienden a lo largo de un conjunto de computadoras que cambian dinámicamente), la información contenida en la referencia de un objeto distribuido vivo no puede limitarse solo a una dirección. Si el objeto se identifica por algún tipo de identificador único global (como podría ser el caso de los temas de publicación-suscripción o grupos de multidifusión), la referencia debe especificar cómo se resuelve este identificador, incrustando recursivamente una referencia al objeto de resolución de nombres apropiado .
Tipos . El tipo de un objeto distribuido en vivo determina los patrones de interacciones externas con el objeto; está determinado por los tipos de puntos finales e interfaces gráficas de usuario expuestas por los proxies del objeto, y los patrones de eventos que pueden ocurrir en los puntos finales. Las restricciones que el tipo del objeto impone a los patrones de eventos pueden extenderse a lo largo de la red. Por ejemplo, el tipo multidifusión atómica puede especificar que si un proxy genera un evento de la forma deliver(x) , todos los proxies que no fallan deben generar un evento similar (proxies que se ejecutan en computadoras que nunca fallan, y que nunca dejan de ejecutarse o están excluidos del protocolo; la definición precisa puede variar). Tal como sucede con los tipos en lenguajes similares a Java , pueden existir muchas implementaciones muy diferentes del mismo tipo. Así, por ejemplo, el comportamiento característico de la multidifusión atómica puede exhibirse en instancias de protocolos distribuidos como virtual synchrony o Paxos.
La semántica y el comportamiento de los objetos distribuidos en vivo se pueden caracterizar en términos de flujos de datos distribuidos ; el conjunto de mensajes o eventos que aparecen en las instancias del punto final de un objeto en vivo forma un flujo de datos distribuido [1]
. [2]
Historia
Las primeras ideas que sustentan el concepto de un objeto distribuido vivo han sido influenciadas por un amplio conjunto de investigaciones sobre entornos orientados a objetos, integraciones de lenguajes de programación y marcos de composición de protocolos, que se remontan al menos al modelo de actor desarrollado a principios de los años 1970; se puede encontrar una discusión exhaustiva del trabajo previo relevante en la tesis doctoral de Krzysztof Ostrowski. [3]
El término objeto distribuido en vivo se utilizó por primera vez de manera informal en una serie de presentaciones realizadas en el otoño de 2006 en una conferencia ICWS , [4] conferencia STC, [5] y en los laboratorios MSR en Redmond, WA, [6] y luego se definió formalmente en 2007, en un artículo de IEEE Internet Computing. [7] Originalmente, el término se usaba para referirse a los tipos de contenido web interactivo y dinámico que no está alojado en servidores en centros de datos , sino que se almacena en las computadoras cliente del usuario final y se alimenta internamente mediante instancias de protocolos de multidifusión confiables . La palabra vivo expresaba el hecho de que la información mostrada es dinámica, interactiva y representa contenido actual, fresco y en vivo que refleja actualizaciones recientes realizadas por los usuarios (a diferencia del contenido estático, de solo lectura y de archivo que ha sido preensamblado). La palabra distribuida expresa el hecho de que la información no está alojada, almacenada en un servidor en un centro de datos, sino que se replica entre las computadoras de los usuarios finales y se actualiza de igual a igual a través de un flujo de mensajes de multidifusión que pueden ser producidos directamente por los usuarios finales que consumen el contenido; una discusión más completa del concepto de objeto vivo en el contexto del desarrollo web se puede encontrar en la tesis doctoral de Krzysztof Ostrowski. [3]
La definición más general presentada anteriormente se propuso por primera vez en 2008, en un artículo publicado en la conferencia ECOOP . [8] La extensión del término ha sido motivada por la necesidad de modelar objetos vivos como composiciones de otros objetos; en este sentido, el concepto se ha inspirado en Smalltalk , que fue pionero en la perspectiva uniforme de que todo es un objeto , y Jini , que fue pionero en la idea de que los servicios son objetos . Cuando se aplica a objetos distribuidos vivos, la perspectiva dicta que sus partes constituyentes, que incluyen instancias de protocolos multipartidistas distribuidos utilizados internamente para replicar el estado, también deben modelarse como objetos distribuidos vivos. La necesidad de uniformidad implica que la definición de un objeto distribuido vivo debe unificar conceptos como contenido web en vivo, flujos de mensajes e instancias de protocolos multipartidistas distribuidos.
La primera implementación del concepto de objeto distribuido en vivo, tal como se define en el documento ECOOP, [8] fue la plataforma Live Distributed Objects [9] desarrollada por Krzysztof Ostrowski en la Universidad de Cornell. La plataforma proporcionaba un conjunto de herramientas visuales de arrastrar y soltar para componer documentos jerárquicos que se asemejaban a páginas web y que contenían referencias a objetos vivos serializados en XML . El contenido visual, como ventanas de chat, escritorios compartidos y varios tipos de mashups, se podía componer arrastrando y soltando componentes que representaban interfaces de usuario e instancias de protocolo en un formulario de diseño y conectándolos entre sí. Desde el momento de su creación, se han desarrollado varias extensiones para integrar objetos distribuidos en vivo en documentos de Microsoft Office , [10] y para admitir varios tipos de contenido alojado, como Google Maps. [11] A marzo de 2009, la plataforma estaba siendo desarrollada activamente por sus creadores. [12] [13] [14] [15] [16] [17] [18] [19]
^ Ostrowski, K., Birman, K., Dolev, D. y Sakoda, C. (2009). "Implementación de flujos de eventos confiables en sistemas grandes a través de flujos de datos distribuidos y delegación recursiva", 3.ª Conferencia internacional de la ACM sobre sistemas distribuidos basados en eventos (DEBS 2009) , Nashville, Tennessee, EE. UU., del 6 al 9 de julio de 2009, http://www.cs.cornell.edu/~krzys/krzys_debs2009.pdf
^ Ostrowski, K., Birman, K., Dolev, D. (2009). "Programación de objetos distribuidos en vivo con flujos de datos distribuidos", enviado a la Conferencia internacional sobre programación orientada a objetos, sistemas, lenguajes y aplicaciones (OOPSLA 2009) , http://www.cs.cornell.edu/~krzys/krzys_oopsla2009.pdf
^ ab Ostrowski, K. (2008). "Objetos distribuidos en vivo", tesis doctoral, Universidad de Cornell, http://hdl.handle.net/1813/10881.
^ Ostrowski, K., y Birman, K., 'Arquitectura de servicios web extensible para notificación en sistemas a gran escala', Conferencia internacional IEEE sobre servicios web (ICWS 2006), Chicago, IL, septiembre de 2006, https://ieeexplore.ieee.org/xpls/abs_all.jsp?arnumber=4032049.
^ Ostrowski, K., y Birman, K., 'Sistema de comunicación grupal escalable para confianza escalable', Primer taller ACM sobre computación confiable escalable (ACM STC 2006), Fairfax, VA, noviembre de 2006, http://portal.acm.org/citation.cfm?id=1179477.
^ Ostrowski, K., (2006). QuickSilver Scalable Multicast . Microsoft Research, Redmond, WA, noviembre de 2006. http://www.researchchannel.org/prog/displayevent.aspx?rID=7870&fID=2276.
^ Ostrowski, K., Birman, K. y Dolev, D. (2007). "Objetos distribuidos en vivo: habilitación de la Web activa", IEEE Internet Computing , noviembre-diciembre de 2007, 11(6):72-78, https://ieeexplore.ieee.org/document/4376231/;jsessionid=EF449367E7DB4958663B9131214CEAAD?isnumber=4376216&arnumber=4376231.
^ ab Ostrowski, K., Birman, K., Dolev, D. y Ahnn, J. (2008). "Programación con objetos distribuidos en vivo", Actas de la 22.ª Conferencia Europea sobre Programación Orientada a Objetos , Paphos, Chipre, 7-11 de julio de 2008, J. Vitek, Ed., Lecture Notes in Computer Science , vol. 5142, Springer-Verlag, Berlín, Heidelberg, 463-489, http://portal.acm.org/citation.cfm?id=1428508.1428536.
^ "Inicio". liveobjects.cs.cornell.edu .
^ Ahnn, J., Birman, K., Ostrowski, K. y van Renesse, R. (2008). "Uso de objetos distribuidos en vivo para la automatización de oficinas", Actas de la conferencia ACM/IFIP/USENIX Middleware '08 Companion , Lovaina, Bélgica, 1-5 de diciembre de 2008, Companion '08 , ACM, Nueva York, NY, 30-35, http://portal.acm.org/citation.cfm?id=1462735.1462743.
^ Ostrowski, K. y Birman, K. (2009). "Almacenamiento y acceso a contenido de mashup en vivo en la nube", 3.er taller internacional ACM SIGOPS sobre sistemas distribuidos a gran escala y middleware (LADIS 2009) , Big Sky, MT, EE. UU., 11 de octubre de 2009, http://www.cs.cornell.edu/~krzys/krzys_ladis2009.pdf
^ Akdogan, A., y Polepalli, S. (2008). "Mapas en vivo", http://liveobjects.cs.cornell.edu/community/1/index.html
^ Kashyap, R. y Nagarajappa, D. (2008). "Objetos en vivo de Yahoo! de Cornell", http://liveobjects.cs.cornell.edu/community/2/index.html
^ Dong, X. y Zhang, Z. (2008). "Integración de objetos activos con el servicio web Flickr", http://liveobjects.cs.cornell.edu/community/3/index.html
^ Prateek, U. (2008). "Objeto vivo de Goole Earth", http://liveobjects.cs.cornell.edu/community/4/index.html
^ Gupta, S. y Vora, H. (2008). "ALGE (Un Google Earth en vivo)", http://liveobjects.cs.cornell.edu/community/5/index.html
^ Mahajan, R. y Wakankar, S. (2008). "Google Earth distribuido", http://liveobjects.cs.cornell.edu/community/6/index.html
^ Wadhwa, A., Sankar, H. y Subramaniyan, S. (2008). "Interfaz de usuario de Google Earth en vivo", http://liveobjects.cs.cornell.edu/community/7/index.html