Figura: NCS("Network Computing System")
El NCS de APOLLO es una implementación de la NCA ("Network Computing Architecture") desarrollada con el fin de proporcionar herramientas para diseñar, implementar y dar soporte para aplicaciones que requieran datos y computación distribuidos. Esto se consigue mediante implementaciones de NCS sobre la interfaz de RPC, que es diferente del RPC de Sun.
El NCS está orientado a objetos. Esto permite a los programas acceder a los objetos a través de interfaces con independientemente de las máquinas con las que se comunican. Estos tipos de programas tienen un diseño más simple y son menos susceptibles frente a cambios en el hardware o en la red.
Un objeto es una entidad gestionada por operaciones definidas que tienen un tipo especificador de la clase. Por ejemplo, un fichero de disco es un objeto y puede ser de tipo ASCII.
Una interfaz es un conjunto de operaciones que manipulan los objetos.
El NCA emplea un concepto expandido llamado objetos replicados que son copias de un objeto que tienen el mismo identificador. Puede ser débilmente consistente o fuertemente consistente. Los objetos replicados débilmente consistentes pueden ser accedidos aunque no sean idénticos. Los objetos replicados fuertemente consistentes sólo pueden ser accedidos cuando son idénticos. El uso de un tipo u otro de objetos depende de los requerimientos de rendimiento, disponibilidad y consistencia.
Los datos y el procesamiento distribuidos se obtienen gracias al uso de los siguientes componentes:
El NCK("Network Computing Kernel") consiste en el Location Broker y la librería "runtime" de RPC, que suministra apoyo en tiempo de ejecución a la computación distribuida. Este kernel(NCK) y el compilador son la base para el desarrollo e implementación de aplicaciones distribuidas.
El NCS RPC puede utilizar los protocolos de comunicaciones de dominios de red("Domain network communications protocols(S)") y los protocolos de Internet de DARPA(UDP/IP). La selección se hace en función de la dirección de destino de tal forma que un programa puede acceder o no a un dominio.
El NCS RPC maneja el concepto de zócalo de Berkeley. Puede atender a más de un zócalo identificado por un dirección de zócalo dividida en familia de direcciones (que define la estructura de la dirección), dirección de red(dirección del host) y número de puerto(dirección de destino final).
Figura: componentes de NCS
El procedimiento cliente usa convenios estándar de llamada a procedimientos, pero es ejecutado remotamente por el servidor. El programa que realiza llamadas remotas a procedimientos es el cliente RPC. No tiene idea de cómo se implementa la interfaz y puede que no conozca la dirección del servidor.
El proceso que recibe el paquete de solicitud de la operación de la librería "runtime" de RPC es el servidor RPC. Es responsable de enviar la respuesta con los resultados de la operación. Un servidor puede exportar una interfaz para más de un objeto.
El proceso cliente tiene tres componentes: el procedimiento cliente que hace llamadas, el "stub" del cliente y la librería "runtime" de RPC. El "stub" del cliente es el encargado de usar la librería "runtime" de RPC para hacer que se ejecuten las llamadas del cliente.
El proceso servidor tiene tres componentes: los procedimientos de gestión correspondientes a la aplicación cliente, el "stub" del servidor correspondiente al del cliente y la librería "runtime" de RPC. El servidor puede denominarse gestor o manager.
Cuando el cliente solicita una operación en un objeto concreto a través de RPC, debe indicar el objeto sobre el que se va a efectuar, así como el servidor que exporta la interfaz que contiene esa operación. Esta información se pasa mediante un manejador o "handle", creado y gestionado por varias llamadas que proporciona NCS. La representación del servidor en el manejador se denomina liga o enlace("binding"). El cliente puede crear o no una liga en el manejador solicitando un RPC con los siguientes estados:
Los "stubs" son responsables de que la llamada remota sea lo más transparente posible. Hacen de intermediarios entre el cliente y los procedimientos de gestión, convirtiendo datos para el uso de las rutinas de la librería "runtime" de RPC.
Esta librería transmite paquetes RPC que contienen rutinas, tablas y datos para apoyar la comunicación entre el cliente y el "stub" del servidor. Hay tres tipos de llamadas:
El NIDL es un lenguaje de desarrollo que define por completo la interfaz y los parámetros de cada RPC. Se usan dos sintaxis, una más cómoda para programadores en C, y otra para programadores en PASCAL.
El compilador NIDL traduce los comandos NIDL a "subs" ejecutables que serán enlazados con clientes y servidores. Estos "stubs" se generan en código fuente de C pero son totalmente compatibles con los programas de PASCAL.
Figura: compilador NIDLr - Ficheros generados.
El compilador NIDL genera dos ficheros "stub" para el cliente: name_cstub.c y name_cswtch.c. El segundo es un fichero que hace de conmutador; se emplea para crear servidores replicados que den acceso a objetos replicados y aseguren consistencia. Las llamadas del cliente se envían al conmutador que contiene los procedimientos públicos, dejando en el "stub" del cliente sólo los privados.
El "stub" generado puede tener dos responsabilidades principales:
El Location Broker es usado por el cliente para solicitar información sobre objetos e interfaces. Los servidores registran esta información en el Location Broker.
El Location Broker se componen de tres elementos:
El GLB puede tener varias réplicas ejecutándose para asegurar la disponibilidad de la información. Para garantizar la consistencia de los datos de las réplicas, el DRM("Data Replication Manager") se encarga de toda la manipulación, propagando cualquier cambio en la base de datos. El DRM maneja una lista de réplicas que contiene la localización de cada réplica. A los clientes se les permite bloquear el acceso a los objetos y actualizarlos, lo que debilita la consistencia, pero mejora la disponibilidad.
La base de datos del Location Broker tiene los siguientes campos:
Aquí hay algunas definiciones: