El objeto distribuido en vivo (también abreviado como objeto en vivo ) se refiere a una instancia en ejecución de un protocolo distribuido de múltiples partes (o de igual a igual ) , visto desde la perspectiva orientada a objetos , como una entidad que tiene una identidad distinta , puede encapsular estado interno e hilos de ejecución , y que exhibe un comportamiento visible externamente bien definido.
Conceptos clave
Los conceptos clave del lenguaje de programación , aplicados a los 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 participan en la 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 todos los equipos 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 administra el canal o grupo dado. En el caso de 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 del componente de software involucrado en la ejecución del protocolo distribuido del objeto en vivo. Por lo tanto, el objeto puede definirse alternativamente como un grupo de representantes comprometidos en la comunicación, manteniendo conjuntamente algún estado distribuido y coordinando 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 determinada 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 en vivo generaliza la noción de un stub de proxy del lado del cliente remoto RPC , RMI o .NET .
- Comportamiento . El comportamiento de un objeto distribuido en vivo se caracteriza por el conjunto de posibles patrones de interacciones externas en las que pueden participar sus proxies 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 proxies. Por definición, se distribuye y se replica. Las diferentes réplicas del estado del objeto pueden ser fuerte 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á una débil consistencia Expresar. 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 usa un protocolo como Paxos, sincronía virtual o replicación de máquina de estado para lograr una fuerte consistencia entre los estados internos de sus réplicas. El estado de un objeto distribuido en vivo debe entenderse como una noción dinámica: como un punto (o corte consistente ) en un flujo de valores, más que como un valor particular ubicado en un lugar dado en un momento dado. 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 ningún lugar en particular; más bien, se materializa como un flujo de mensajes de la forma elegida (x) producidos simultáneamente por los proxies 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 expuestos 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 denominan puntos finales del objeto distribuido en vivo . El término instancia de punto final se refiere a un solo canal de eventos específico o interfaz de usuario expuesta por un solo 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 visualización gráfica ).
- Referencias . La referencia a un objeto en vivo es un conjunto completo de instrucciones portátiles serializadas para construir su proxy. Para eliminar la referencia de un medio de referencia para analizar a nivel local y seguir estas instrucciones en un equipo determinado, para producir un proxy funcionamiento del objeto directo. Definido de esta manera, una referencia a un objeto vivo juega el mismo papel que una aplicación Java de referencia , un C / C ++ puntero o un servicio web 's WSDL descripción; contiene una información completa suficiente para localizar el objeto dado e interactuar con él. Dado que los objetos distribuidos en vivo pueden no residir en un lugar en particular (sino más bien abarcar 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 de forma recursiva una referencia al objeto de resolución de nombres apropiado. .
- Tipos . El tipo de objeto distribuido en vivo determina los patrones de interacciones externas con el objeto; está determinada 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 de objeto impone a los patrones de eventos pueden extenderse a través de la red. Por ejemplo, el tipo de multidifusión atómica podría especificar que si un evento de la forma entregar (x) es generado por un proxy, todos los proxies no defectuosos deben generar eventualmente un evento similar (proxies que se ejecutan en computadoras que nunca fallan, y que nunca dejan de ejecutarse o se excluyen del protocolo; la definición precisa puede variar). Por mucho que sea el caso de 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 ser exhibido por instancias de protocolos distribuidos como sincronía virtual 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 activo forma un flujo de datos distribuidos [1] . [2]
Historia
Las primeras ideas que subyacen al concepto de un objeto distribuido en vivo han sido influenciadas por un rico cuerpo de investigación sobre entornos orientados a objetos, incrustaciones de lenguaje de programación y marcos de composición de protocolos, que se remontan al menos al modelo de actor desarrollado a principios de la década de 1970; En el Ph.D. de Krzysztof Ostrowski se puede encontrar una discusión exhaustiva del trabajo previo relevante. 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 de ICWS , [4] conferencia STC , [5] y en los laboratorios de 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 utiliza para referirse a los tipos de dinámica e interactiva Web de contenido que no se alojan en servidores en centros de datos , sino que se almacena en el usuario final 's cliente ordenadores, e internamente alimentado por las instancias de fiable protocolos de multidifusión . La palabra live expresó 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 distribuida expresó 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 manera peer-to-peer a través de un flujo de multidifusión. mensajes que pueden ser producidos directamente por los usuarios finales que consumen el contenido; En el Ph.D. de Krzysztof Ostrowski se puede encontrar una discusión más completa del concepto de objeto vivo en el contexto del desarrollo web . disertación. [3]
La definición más general presentada anteriormente se propuso por primera vez en 2008, en un documento 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 en vivo, la perspectiva dicta que sus partes constituyentes, que incluyen instancias de protocolos distribuidos de múltiples partes 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 tales como contenido web en vivo, flujos de mensajes e instancias de protocolos distribuidos de múltiples partes.
La primera implementación del concepto de objetos distribuidos en vivo, como se define en el documento ECOOP, [8] fue la plataforma de objetos distribuidos en vivo [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 en vivo serializadas en XML . El contenido visual, como ventanas de chat, escritorios compartidos y varios tipos de mashups, se puede 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]
Ver también
- Objeto activo
Referencias
- ^ 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", 3ra Conferencia internacional de ACM sobre sistemas basados en eventos distribuidos (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
- ↑ a b 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, http: // 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 de 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). 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). "Live Distributed Objects: Enabling the Active Web", IEEE Internet Computing , noviembre-diciembre de 2007, 11 (6): 72-78, http://ieeexplore.ieee.org/xpl/freeabs_all.jsp?isnumber=4376216&arnumber=4376231 .
- ↑ a b 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, 07-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 .
- ^ http://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 ACM / IFIP / USENIX Middleware '08 Conference Companion , Lovaina, Bélgica, 01–05 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
- ^ Ostrowski, K. y Birman, K. (2009). "Almacenamiento y acceso a contenido de mashup en vivo en la nube", 3er Taller internacional de 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). "Cornell Yahoo! Live Objects", http://liveobjects.cs.cornell.edu/community/2/index.html
- ^ Dong, X. y Zhang, Z. (2008). "Integrar Live Objects con Flickr Web Service", http://liveobjects.cs.cornell.edu/community/3/index.html
- ^ Prateek, U. (2008). "Goole Earth Live Object", http://liveobjects.cs.cornell.edu/community/4/index.html
- ^ Gupta, S. y Vora, H. (2008). "ALGE (A Live Google Earth)", 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