Programando sobre la Red.
La gran mayoría de veces que utilizamos un PC o algún dispositivo que esté conectado a internet, lo hacemos con el fin de obtener algún tipo información que se encuentra disponible para nosotros, realizar algún tipo de cálculo o procesamiento de datos, etc..
Todo este proceso lo realizamos por lo general sin saber o ponernos a pensar cómo funciona todo esto, es decir, de qué forma se realiza la comunicación ente dos o más computadoras e intercambian información entre sí.
Los sistemas distribuidos hacen posible realizar comunicación entre diversos dispositivos de cómputo, aumentado vertiginosamente las aplicaciones que le podemos dar a las redes de cómputo.
Un sistema distribuido es un conjunto integrado de tecnológicas informáticas, compuestas por software y hardware asociado a las redes de computo, los cuales se encuentran ubicados de forma estratégica en diferentes sitos de una red (PAN, LAN, MAN o WAM) trabajando de forma colaborativa, sincronizada y precisa, comportándose como un único gran sistema permitiendo el fluido de información de forma controlada entre dos o más equipo de informáticos.
Todo sistema distribuido debe ser diseñado y construido bajo los siguiente aspectos de calidad:
- Heterogeneidad: mesclar e integrar todos sus componentes (hardware y Software) como un todo, debe poderse ver como un gran sistemas, sin importar el numero y ubicación de los elementos que lo conforman.
- Extensibilidad: poseer la facultad de poder integrar sin mayores riesgos nuevos elementos, esto no debería afectar significativamente el desempeño, la seguridad y objetividad del sistema.
- Seguridad: tener en cuenta aspectos como la Convivialidad, Integridad y Acceso o disponibilidad (Modelo C.I.A) a la información.
- Escalabilidad: permanecer estable en la medida que aumenten o disminuyan los recursos que utiliza y los elementos (Hardware y Software) que lo conforman.
- Tratamiento de fallos: Tener control absoluto de posibles fallos, evitando el colapso total del sistema cuando fallen algunos de sus elementos.
- Concurrencia: poseer la capacidad y habilidad de poder realizar múltiples tareas (conexión, desconexiones, peticiones, procesamiento de peticiones, generación de respuestas, análisis y control de recurso) de forma simultánea.
- Transparencia: abstraer y esconder al usuario su funcionamiento interno y su estructura.
Históricamente el diseño y la arquitectura de los sistemas distribuidos se ha basado en dos componentes clave llamados Cliente y Servidor, los cuales progresivamente han dado origen a otras arquitecturas como por ejemplo los Servicios con múltiples servidores (clousters), Servidores Proxy/Caches, WebServices, Procesos de Igual a igual (per to per)
Todo sistema distribuido sin importar su diseño o arquitectura, siempre estará formado por las siguientes capas:

La capa de aplicación y de servicios hace referencia directamente a los Clientes y Servidores respectivamente, estos representan procesos de software que poseen toda la funcionalidad necesaria para que el sistema distribuido ofrezca de forma transparente una utilidad específica para los usuarios el mismo.
La capa de Midleware son las reglas de comunicación, transmisión y control de información entre uno o un grupo de sistemas que actúan como Clientes o Servidores o ambos roles en igual o diferente tiempo, esta capa es imprescindible en el desarrollo de un buen sistema distribuido, esta materializada instrucciones de software que hacen ejecutables dichas reglas, a esta capa se le conoce comúnmente como protocolo de conexión, comunicación e integración de sistemas distribuidos.
Existen muchos estándares de middleware que estructuran casi todos los servicios que conforman y se ofrecen en una red, según su objetivo podemos encontrar middleware de MOM (Middleware Orientado a la Mensajería), ORB (Emisor y Solicitador de Objetos), ORB (Emisor y Solicitador de Objetos), Publish/subscribe (Publicación y Subscrición), MDAO (Middleware Orientado a Acceso a Datos SQL), MSA (Middleware Servidor de Aplicaciones), RPC o RMI (Llamada a Procedimientos Remotos o Interfaz de Métodos Remotos), IRC o ESB (Mensajería Instantánea y bus de Mensajería Comparativa), entro muchos más.
Todo middleware está enfocado a comunicar aplicaciones y servicios para uno o varios de los más importantes protocolos como lo son tal es el caso de TCP, UDP, WAP y GRPS al igual que todos sus protocolos derivados (http, telnet, ssh, dhcp, dns, new, soa, ftp, rmi, rpc, entro otros).
El Sistema Operativo es el responsable de administrar los recursos que consumen, comparten y generan los sistemas distribuidos, gran parte de la seguridad, estabilidad y eficiencia del sistema distribuidos depende de Sistema operativos sobre el cual operan.
La capa inferior corresponde a los elementos físicos (electrónicos) que soportan toda la infraestructura de las capas superiores de un sistema distribuido, en esta capa se encentran elementos de procesamiento compuestos por circuitería y software de muy bajo nivel de los equipos de computo en los cuales residen los componentes de software que forman al sistema distribuido, junto a estos circuitos se encuentran los dispositivos de red que establecen conexión entre Host (equipos de computo conectado a una red) transmisión y control de paquetes (unidades de envió de datos en una red informática).
Como podernos ver un sistema distribuido no se puede definir sin que se tenga en cuenta todos sus elementos, integrados como uno solo.
Arquitectura Cliente y Servidor
Es la arquitectura tradicional sobre la cual están construidos la mayoría de sistemas distribuidos que han existido y de una u otra forma es tomado como referente para el diseño de nuevas arquitecturas y por ende de nuevos sistemas distribuidos.
El Cliente
Software y Hardware que se encuentra instalado y en ejecución dentro de uno o varios hosts o (puntos conectados a la red), desde los cuales inicia conexiones a otros software y hardware igualmente instalados y en ejecución dentro una o varios host de la red, una vez obtiene respuesta positiva de la conexión, el cliente solicita a su complemento conectado la ejecución de un servicio de propósitos específicos, entonces ambas partes utilizan la capa de middleware o protocolo para realizar transmisión y recepción de información.
Durante el proceso de conexión el cliente entrega información importante para el sistema que ofrecer los servicios de interés, esta información contiene datos del cliente, como la dirección IP y puerto de red que se utilizaron para realizar la conexión, un mecanismo que le permita preparar un canal para enviar y otro para recibir datos, y métodos de desconexión.
El Servidor
Software y Hardware que se encuentra instalado y en ejecución dentro de uno o varios hosts o (puntos conectados a la red), es el complemento del Cliente, se encuentra en el otro extremo de la conexión, su principal función es mantenerse a la expectativa de posibles conexiones solicitadas por uno o cualquier cantidad de Clientes, aceptarlas conexiones y atender las solicitudes de servicio que realiza el Cliente, iniciando la transferencia de datos entre hasta que uno de los dos decida cuando terminar con la comunicación.
El es casi un necesidad que el Servidor posea la capacidad de poder atender múltiples Clientes de forma concurrente (simultanea), de lo contrario los Clientes que deseen establecer conexión con él, tendrán que esperar en cola mientras el Servidor atiende la cola uno por uno, algo que retrasarían mucho el servicio.
El servidor inicia su labor solicitando al SO que le permita utilizar un numero de puerto de red, este puerto será la puerta de entrada por la que deben entrar y salir todos los clientes que deseen conectarse al Servidor, estos puertos van desde el numero 0 al 65535, y cada puerto puede ser utilizado por uno y solo un proceso Servidor al mismo tiempo, por el contrario, un proceso Servidor puede utilizar más de un puerto al mismo tiempo.
Los puertos de red son gestionados por la capa de transporte TCP y UDP de los protocolo de red TCP/IP y UDP/IP respectivamente, estos puertos son controlados de forma estándar por la IANA (Internet Assigned Numbers Authority), cuya función es registrar puertos por defecto para los protocolos servicios estándares de internet, además de definir cuáles son de uso dinámico o arbitrario, esta entidad ha registrado los puertos del 0 al 1024 para que sean utilizados de forma predeterminada por algunos de los servicios de red más comunes, entre los que se encuentran:
Servicio
|
Puerto
|
FTP
|
20 y 21
|
Telnet
|
23
|
SMTP
|
25
|
DNS
|
53
|
Whois
|
63
|
Gopher
|
70
|
Finger
|
79
|
HTTP
|
80
|
POP3
|
110
|
NNTP
|
119
|
| … |
|
Se puede visitar el sitio de internet de la IANA http://www.iana.org/assignments/port-numbers, donde podremos encontrar una lista completa de los puertos ya registrados por defecto y los que aun se pueden utilizar de forma dinámica.
Otra manera de verificar el puerto y sus respectivos servicios asignados, consiste en leer el contenido de un archivo llamado services que se encuentra de forma estándar en los sistemas operativos basados en Unix y Linux, también en se encentra los sistemas operativos de Windows de Microsoft.
En sistemas Unix y Linux la ruta es /etc/services
En sistemas Microsoft Windows C:\Windows\System32\drivers\etc
Cada servicio contiene unas reglas de comunicación y operación entre Cliente y Servidor, a estas reglas se les conoce como Protocolo de Red, existe un documento RFC (Request for Comment o Solicitud de Cometario) por cada Protocolo estándar de Red, su contenido especifica de forma estandarizada a un único protocolo, las versiones y ubicación de cada documento se codifica RFC-###, donde ### es el numero que identifica inequívocamente a cada protocolo, para poder leer estos documentos en castellano se puede visitar el sitio de internet http://www.rfc-es.org/, dedicado exclusivamente a traducir al idioma español cada nueva especificación.
La siguiente grafica muestra la organización lógica en forma de capas algunos de los protocolos más utilizados en una red.

En la primera capa se encuentran los protocolos de servicio y aplicación, encargados de ofrecer alguna utilidad a al usuario de la red o a la red misma.
En la segunda capa se encuentran dos protocolos que transportan por la red la información entre cada host (Cliente o Servidor), trasmitida los protocolo de la capa superior.
En la tercera capa podemos ver el protocolo de red IP (Internet Protocol), encargado de realizar la ubicación y la conexión y entre host, ofreciendo a los protocolos de transporte vía libre para entregar y recibir información entre Hosts.
En la última capa se encuentran las redes de comunicación como tal, que son las que soportan todo el andamiaje que realizan las capas superiores.
Clasificación de Clientes/Servidor
La tradicional y sobreviniente arquitectura de sistemas distribuidos Cliente/Servidor, ha evolucionado conforme se desarrolla la tecnología que utilizan sus dos elementos principales, el Cliente y el Servidor. Hoy según el nivel de procesamiento que posean sus partes podemos clasificarla en tres sub-arquitecturas conocidas como Interacción con el usuario, Lógica de Aplicación y Repositorio de datos.
Representación distribuida:
Esta arquitectura se desarrolló inicialmente, en este modelo el servidor soporta toda la carga de datos, lógica y la interfaz con la que los usuarios interactúan con el sistema.
El Cliente solo juega el papel de puente de conexión, pasarela acceso a los datos, a la lógica y las interfaces del sistema, su nivel de procesamiento y almacenamiento es casi nulo, por este motivo se les conoces como terminales tontas, porque solo se utilizan como elementos de entra y presentación de datos generado por el servidor, un ejemplo de este tipo de arquitecturas se puede ver claramente cuando se utiliza el servicio de Telnet.

Representación remota.
Esta arquitectura desplaza una porción del procesamiento del sistema hacia la parte del Cliente, siendo este capaz de procesar e interpretar los datos que se le entregan sin ningún tipo de formato, utiliza un poco de la interfaz básica de usuario del sistema que le ha sido entregada para que pueda aplicar formato y presentar la información de forma legible para el usuario.
El servidor pose el procesamiento de la interfaz de usuario más pesada y compleja del sistema, sique conservando la lógica de la aplicación y la gestión de los datos, pero está un poco mas descargado en cuento la cantidad e procesos que debe realizar. Un ejemplo de esta arquitectura se puede ver en los primeros servidores y navegadores web, donde el Cliente recibe

Lógica distribuida:
En este modelo los Clientes aumentan su protagonismo dentro del sistema distribuido, continúan absorbiendo un poco el nivel de procesamiento, gracias a que son cuentan con software y hardware más robusto y su desarrollo tecnológico es superior al de los Clientes de anteriores arquitecturas, de esta manera se pueden equilibrar aun más las tareas del sistema ejecutadas por las dos partes, algo es muy importante y benéfico para el servidor, puesto que el Cliente ahora pose capacidad para procesar toda la interfaz de usuario del sistema, pero además, también posee un fracción de la lógica de la aplicación (lógica de negocio), un ejemplo se puede ver en los navegadores y servidores web actuales, los cuales comparten gran parte de la lógica de aplicación gracias a los instrucción y uso de nuevas lenguajes de programación para realizar software que se ejecuta en los clientes web (Navegadores), tal es el caso de los lenguajes JavaScript, JScript, VBScript, ActionScript y Java entre otros, permitiendo descargar aun mas al servidor de responsabilidades de procesamiento y generación de información, conservando sus recursos, para aumentar las capacidades de atención y conexión de clientes.

Gestión remota de datos
Esta arquitectura es un poco mas contemporánea que las anteriores, algunos sistemas Clientes hoy día tienen la responsabilidad de almacenar y procesar toda la interfaz de usuario y la lógica de aplicación (también conocida como negocio), gracias a la acelerada evolución tecnológica que poseen los de hardware y software, además de la importante disminución de presiones en la que se encuentra el hardware y su elevada producción.
Este modelo arquitectónico ha hecho posible que otros dispositivos de procesamiento no convencionales, como los teléfonos celulares, agendas electrónicas y dispositivos embebidos en electrodomésticos y de uso cotidiano, puedan ser utilizados como sistemas Clientes o sistemas Servidores, proliferando para beneficio nuestro el número de opciones par host que se pueden integrar a unos sistemas distribuido.
El servidor por su parte se centra en garantizar la Consistencia, Integridad y Disponibilidad de los datos pertinentes del sistema distribuido y sus usuarios, mejorando los tiempos de respuesta a las solicitudes hechos por los Clientes de forma segura y confiable.

Gestión remota de datos
Esta ultima arquitectura del tradicional modelo para sistemas distribuidos Cliente/Servidor, ofrece la capacidad de encapsular los servidores en múltiples capas de acceso, las cuales permiten tener un mayor control de fallos parciales, seguridad del sistema y aumentan notablemente el rendimiento y estabilidad del sistema como tal.
Se trata de colocar cada servicio en un host diferente, conformando una estructura jerárquica de acceso y seguridad.

Como ya había comentado antes, existen otros arquitecturas para para diseñar e implementar Sistemas distribuidos, pero todas ha tomado como referente el enfoque simple que pose la arquitectura Cliente/Servidor, por ejemplo, la arquitectura orientada Punto a Punto, también conocida como Per to Per o Cara a Cara, que no es mas que un sistema distribuidos donde cada host juega el papel de Cliente y Servidor al mismo tiempo, es decir, en algún momento realiza una conexion a un servidor para solicitarle un servicio especifico, entonces en este caso el host actúa como Cliente y el otro como Servidor, pero es muy probable que mientras actua como Cliente, este host tambien se encuentre atendiendo conexiones entrantes provenientes de otros host, que igualmente solicitan que les ofrezca algún servicio especifico, estos sistemas tienen a crecer exponencialmente a medida que mas host Agente (Clientes y Servidores) se unen a la red, solicitando u ofreciendo servicios al resto de host que hacen parte de dicho sistema distribuido. Algunos ejemplos de estos sistemas son la red de usuarios Torrens y GNUTella, entre otros.

En el próximo Articulo explicare los principios básicos de construcción de un Cliente y un Servidor.
Que descancen y hasta la próxima…
389 Visitas hoy