Los conceptos clave del lenguaje de programación , aplicados 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 consta de un grupo de componentes de software que se ejecutan físicamente en algún conjunto de máquinas físicas y participan en comunicación mutua, cada uno de los cuales ejecuta 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 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 gestiona el canal o grupo determinado. 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 gestiona la membresía del grupo de multidifusión).
Proxies ( réplicas ). El proxy o una réplica de un objeto en vivo es una de las instancias de componentes de software involucradas en la ejecución del protocolo distribuido del objeto en vivo. Por lo tanto, el objeto puede definirse alternativamente como un grupo de representantes involucrados en comunicación, manteniendo conjuntamente algún estado distribuido y coordinando sus operaciones. El término proxy enfatiza el hecho de que un único componente de software no constituye en sí mismo un objeto; más bien, sirve como puerta de enlace a través de la cual una aplicación puede obtener acceso a una determinada funcionalidad o comportamiento que se extiende a través de un conjunto de computadoras. En este sentido, el concepto de un proxy de objetos distribuidos en vivo generaliza la noción de un código auxiliar de proxy del lado del cliente de comunicación remota RPC , RMI o .NET .
Comportamiento . El comportamiento de un objeto distribuido en vivo se caracteriza por el conjunto de posibles patrones de interacciones externas que sus servidores proxy pueden realizar 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 en vivo se define como la suma de todos los estados locales internos de sus servidores proxy. Por definición, se distribuye y replica. 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. estado. En este sentido, el término objeto distribuido vivo generaliza el concepto de objeto replicado ; este último es un tipo específico de objeto distribuido en vivo que utiliza un protocolo como Paxos, sincronía virtual o replicación de máquina de estados para lograr una fuerte coherencia entre los estados internos de sus réplicas. El estado de un objeto vivo distribuido debe entenderse como una noción dinámica: como un punto (o corte consistente ) en una corriente de valores, más que 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 elegido actualmente. La identidad no se almacena en ningún lugar en particular; más bien, se materializa como un flujo de mensajes de la forma elegido(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 en la red.
Interfaces ( puntos finales ). La interfaz de un objeto distribuido en vivo se define por los tipos de interfaces expuestas por sus servidores proxy; estos pueden incluir canales de eventos y varios tipos de interfaces gráficas de usuario. Las interfaces expuestas por los servidores proxy se denominan 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 una 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 servidores proxy expone una instancia de este punto final a su entorno local, y cada una de las instancias del punto final transporta eventos del mismo tipo (o se vincula al mismo tipo de pantalla gráfica). ).
Referencias . La referencia a un objeto vivo es un conjunto completo de instrucciones portátiles serializadas para construir su proxy. Eliminar la referencia a una referencia significa analizar localmente y seguir estas instrucciones en una computadora en particular, para producir un proxy en ejecución del objeto en vivo. Definida de esta manera, una referencia a un objeto activo desempeña el mismo papel que una referencia Java , un puntero C/C++ o una descripción WSDL de un servicio web ; contiene información completa suficiente para localizar el objeto dado e interactuar con él. Dado que los objetos distribuidos en vivo pueden no residir en ningún lugar en particular (sino que abarcan un conjunto de computadoras que cambian dinámicamente), la información contenida en la referencia de un objeto distribuido en vivo no puede limitarse a solo una dirección. Si el objeto se identifica mediante algún tipo de identificador único global (como podría ser el caso de temas de publicación-suscripción o grupos de multidifusión), la referencia debe especificar cómo se resuelve este identificador, incorporando recursivamente una referencia al objeto de resolución de nombre apropiado. .
Tipos . El tipo de objeto vivo distribuido determina los patrones de interacciones externas con el objeto; está determinado por los tipos de puntos finales y las interfaces gráficas de usuario expuestas por los servidores proxy del objeto, y los patrones de eventos que pueden ocurrir en los puntos finales. Las restricciones que el tipo de objeto impone a los patrones de eventos pueden abarcar toda la red. Por ejemplo, el tipo multidifusión atómica podría especificar que si un proxy genera un evento del formato entrega(x) , todos los proxies no defectuosos (proxies que se ejecutan en computadoras que nunca fallan y que nunca fallan) eventualmente generarán un evento similar. nunca dejan de ejecutar o están excluidos del protocolo; la definición precisa puede variar). Al igual que ocurre 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 podría exhibirse en instancias de protocolos distribuidos como la sincronía virtual o Paxos.
La semántica y el comportamiento de los objetos distribuidos vivos 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 subyacentes al concepto de objeto distribuido en vivo han sido influenciadas por un rico cuerpo de investigación sobre entornos orientados a objetos, incrustaciones de lenguajes de programación y marcos de composición de protocolos, que se remonta al menos al modelo de actor desarrollado a principios de la década de 1970; Se puede encontrar una discusión exhaustiva del trabajo anterior relevante en el Ph.D. de Krzysztof Ostrowski. disertación. [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 formalmente definido 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 dinámico e interactivo 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 confiables . protocolos de multidifusión . La palabra en vivo expresa el hecho de que la información mostrada es dinámica, interactiva y representa contenido actual, fresco y en vivo que refleja las actualizaciones recientes realizadas por los usuarios (a diferencia del contenido estático, de solo lectura y de archivo que ha sido preensamblado). ). La palabra distribuido expresa el hecho de que la información no se aloja, se almacena 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 multidifusión. mensajes que pueden ser producidos directamente por los usuarios finales que consumen el contenido; Se puede encontrar una discusión más completa sobre el concepto de objeto vivo en el contexto del desarrollo web en el Ph.D. de Krzysztof Ostrowski. disertación. [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 ampliación del término ha estado 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 en Jini , que fue pionero en la idea de que los servicios son objetos . Cuando se aplica a objetos distribuidos en vivo, la perspectiva dicta que sus partes constituyentes, que incluyen instancias de protocolos distribuidos multipartitos utilizados internamente para replicar el estado, también deben modelarse como objetos distribuidos en vivo. La necesidad de uniformidad implica que la definición de un objeto distribuido en vivo debe unificar conceptos como contenido web en vivo, flujos de mensajes e instancias de protocolos multipartitos distribuidos.
La primera implementación del concepto de objetos distribuidos 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 proporcionó un conjunto de herramientas visuales, de arrastrar y soltar para componer documentos jerárquicos que se asemejan a páginas web y que contienen referencias de objetos vivos serializados en XML . El contenido visual, como ventanas de chat, escritorios compartidos y varios tipos de mashups, se podría componer arrastrando y soltando componentes que representan 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 incrustar objetos distribuidos en vivo en documentos de Microsoft Office [10] y para admitir varios tipos de contenido alojado, como Google Maps. [11] En marzo de 2009, sus creadores están desarrollando activamente la plataforma. [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 mediante flujos de datos distribuidos y delegación recursiva", 3.ª Conferencia internacional ACM sobre sistemas distribuidos basados en eventos (DEBS 2009) , Nashville, TN, EE. UU., 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", presentado a la Conferencia internacional sobre programación, sistemas, lenguajes y aplicaciones orientados a objetos (OOPSLA 2009) , http://www.cs.cornell.edu/~krzys/krzys_oopsla2009.pdf
^ ab Ostrowski, K. (2008). "Objetos distribuidos en vivo", Ph.D. Disertación, 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., 'Scalable Group Communication System for Scalable Trust', Primer taller de ACM sobre informática confiable escalable (ACM STC 2006), Fairfax, VA, noviembre de 2006, http://portal.acm. org/citation.cfm?id=1179477.
^ Ostrowski, K., (2006). Multidifusión escalable QuickSilver . 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 al 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 complementaria ACM/IFIP/USENIX Middleware '08 , Lovaina, Bélgica, 1 al 5 de diciembre de 2008, Companion '08 , ACM, Nueva York, NY, 30-35. http://portal.acm.org/citation.cfm?id=1462735.1462743.
^ http://liveobjects.cs.cornell.edu/community/index.html [ enlace muerto ]
^ Ostrowski, K. y Birman, K. (2009). "Almacenamiento y acceso a contenido mashup en vivo en la nube", 3er taller internacional ACM SIGOPS sobre middleware y sistemas distribuidos a gran escala (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 Cornell Yahoo! Live", http://liveobjects.cs.cornell.edu/community/2/index.html
^ Dong, X. y Zhang, Z. (2008). "Integrar objetos vivos con el servicio web de 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