En computación distribuida , los objetos distribuidos [ cita requerida ] son objetos (en el sentido de programación orientada a objetos ) que se distribuyen en diferentes espacios de direcciones , ya sea en diferentes procesos en la misma computadora, o incluso en múltiples computadoras conectadas a través de una red , pero que trabajan juntos compartiendo datos e invocando métodos. Esto a menudo implica transparencia de ubicación , donde los objetos remotos aparecen iguales que los objetos locales. El método principal de comunicación de objetos distribuidos es con invocación de método remoto , generalmente mediante paso de mensajes: un objeto envía un mensaje a otro objeto en una máquina o proceso remoto para realizar alguna tarea. Los resultados se envían de vuelta al objeto que realiza la llamada.
Los objetos distribuidos fueron populares a finales de la década de 1990 y principios de la década de 2000, pero desde entonces han caído en desuso. [1]
El término también puede referirse en general a una de las extensiones del concepto de objeto básico utilizado en el contexto de la computación distribuida, como objetos replicados u objetos distribuidos en vivo .
Los objetos replicados son grupos de componentes de software ( réplicas ) que ejecutan un protocolo distribuido de múltiples partes para lograr un alto grado de coherencia entre sus estados internos y que responden a las solicitudes de manera coordinada. Hacer referencia al grupo de réplicas en conjunto como un objeto refleja el hecho de que la interacción con cualquiera de ellas expone el mismo estado y comportamiento visibles externamente.
Los objetos distribuidos vivos (o simplemente objetos vivos ) [2] generalizan el concepto de objeto replicado a grupos de réplicas que podrían usar internamente cualquier protocolo distribuido, lo que tal vez dé como resultado solo una consistencia débil entre sus estados locales. Los objetos distribuidos vivos también pueden definirse como instancias en ejecución de protocolos distribuidos de múltiples partes, vistos desde la perspectiva orientada a objetos como entidades que tienen una identidad distinta y que pueden encapsular el estado y el comportamiento distribuidos.
Los objetos locales y distribuidos difieren en muchos aspectos. [3] [4] A continuación se muestran algunos de ellos:
Ciclo de vida: la creación, migración y eliminación de objetos distribuidos es diferente a la de los objetos locales
Referencia: Las referencias remotas a objetos distribuidos son más complejas que los simples punteros a direcciones de memoria.
Latencia de solicitud: una solicitud de objeto distribuido es órdenes de magnitud más lenta que la invocación de un método local.
Activación de objetos: es posible que los objetos distribuidos no siempre estén disponibles para atender una solicitud de objeto en cualquier momento.
Paralelismo: Los objetos distribuidos pueden ejecutarse en paralelo.
Comunicación: Hay diferentes primitivas de comunicación disponibles para solicitudes de objetos distribuidos.
Error: los objetos distribuidos tienen muchos más puntos de error que los objetos locales típicos.
Seguridad: La distribución los hace vulnerables a ataques.
Ejemplos
Las facilidades RPC del protocolo de serialización multiplataforma, Cap'n Proto, equivalen a un protocolo de objetos distribuidos. Las llamadas a métodos de objetos distribuidos se pueden ejecutar (encadenadas, en una única solicitud de red, si es necesario) a través de referencias/ capacidades de interfaz . [5]
Los objetos distribuidos se implementan en Objective-C utilizando la API de Cocoa con la clase NSConnection y los objetos de soporte.
^ Microservicios y la primera ley de los objetos distribuidos, Martin Fowler, 13 de agosto de 2014
^ 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.
^ W. Emmerich (2000) Ingeniería de objetos distribuidos, John Wiley & Sons Ltd.
^ Samuel C. Kendall, Jim Waldo , Ann Wollrath y Geoff Wyant. 1994. Una nota sobre computación distribuida. Informe técnico. Sun Microsystems, Inc., Mountain View, CA, EE. UU.