jueves, 23 de junio de 2016

Arquitectura Cliente-Servidor

Arquitectura de las aplicaciones Web.

Una aplicación Web es proporcionada por un servidor Web y utilizada por usuarios que se Conectan desde cualquier punto vía clientes Web (browsers o navegadores). La arquitectura de un Sitio Web tiene tres componentes principales:
  • Un servidor Web
  • Una conexión de red
  • Uno o más clientes

Las aplicaciones Web están basadas en el modelo Cliente/Servidor que gestionan servidores web, y que utilizan como interfaz páginas web. Las páginas Web son el componente principal de una aplicación o sitio Web. Los browsers piden páginas (almacenadas o creadas dinámicamente) con información a los servidores Web.
  • Los Servidores de Aplicaciones actúan como enlace entre los servidores Web y los Servidores de Bases de datos.
  •   Se fomenta la escalabilidad del sistema, la seguridad y la reutilización de código.Partes que componen el sistema

Cliente: Programa ejecutable que participa activamente en el establecimiento de las conexiones. Envía una petición al servidor y se queda esperando por una respuesta. Su tiempo de vida es finito una vez que son servidas sus solicitudes, termina el trabajo.

Servidor: Es un programa que ofrece un servicio que se puede obtener en una red. Acepta la petición desde la red, realiza el servicio y devuelve el resultado al solicitante. Al ser posible implantarlo como aplicaciones de programas, puede ejecutarse en cualquier sistema donde exista TCP/IP y junto con otros programas de aplicación. El servidor comienza su ejecución antes de comenzar la interacción con el cliente. Su tiempo de vida o de interacción es “interminable”.

Arquitectura Cliente-Servidor

En el mundo de TCP/IP las comunicaciones entre computadoras se rigen básicamente por lo que se llama modelo Cliente-Servidor, éste es un modelo que intenta proveer usabilidad, flexibilidad, interoperabilidad y escalabilidad en las comunicaciones. El término Cliente/Servidor fue usado por primera vez en 1980 para referirse a PC’s en red.

Su funcionamiento es sencillo: se tiene una máquina cliente, que requiere un servicio de una máquina servidor, y éste realiza la función para la que está programado (nótese que no tienen que tratarse de máquinas diferentes; es decir, una computadora por sí sola puede ser ambos cliente y servidor dependiendo del software de configuración).

Definición Funcional: se puede definir la computación Cliente/Servidor como una arquitectura distribuida que permite a los usuarios finales obtener acceso a la información en forma transparente aún en entornos multiplataforma. En el modelo cliente servidor, el cliente envía un mensaje solicitando un determinado servicio a un servidor (hace una petición), y este envía uno o varios mensajes con la respuesta (provee el servicio).

Los clientes y los servidores pueden estar conectados a una red local o una red amplia, como la que se puede implementar en una empresa o a una red mundial como lo es la Internet. Bajo este modelo cada usuario tiene la libertad de obtener la información que requiera en un momento dado proveniente de una o varias fuentes locales o distantes y de procesarla como según le convenga. Los distintos servidores también pueden intercambiar información dentro de esta arquitectura.

La separación entre cliente y servidor es una separación de tipo lógico, donde el servidor no se ejecuta necesariamente sobre una sola máquina ni es necesariamente un sólo programa. Los tipos específicos de servidores incluyen los servidores web, los servidores de archivo, los servidores del correo, etc. Mientras que sus propósitos varían de unos servicios a otros, la arquitectura básica seguirá siendo la misma.

Cuando implantar Cliente servidor

1. Cambios estructurales y organizativos.

2. Cambios en organigramas.

3. Respuesta dinámica de mercado.

4. Cambio en procesos de negocio.

Tareas del programa maestro
  • Abrir un puerto local bien conocido al cual pueda acceder los clientes.

  •  Esperar las peticiones de los clientes.
  • Elegir un puerto local para las peticiones que llegan en informar al cliente del nuevo puerto, (innecesario en la mayoría de los casos).

  •  Iniciar un programa esclavo o proceso hijo que atienda la petición en el puerto local, (el esclavo cuando termina de manejar una petición no se queda esperando por otras).

  • Volver a la espera de peticiones mientras los esclavos, en forma concurrente, se ocupan de las anteriores peticiones.

Clasificación de los servidores

Cliente Servidor

1. Servidores con estado.

2. Servidores sin estado.

3. Servidores concurrentes

Características de la arquitectura Cliente-Servidor
  • Las tareas del cliente y del servidor tienen diferentes requerimientos en cuanto a recursos de cómputo como velocidad del procesador, memoria, velocidad y capacidades del disco e input-output devices.

  • Se establece una relación entre procesos distintos, los cuales pueden ser ejecutados en la misma máquina o en máquinas diferentes distribuidas a lo largo de la red.

  • Existe una clara distinción de funciones basadas en el concepto de”servicio”, que se establece entre clientes y servidores.

  • La relación establecida puede ser de muchos a uno, en la que un servidor puede dar servicio a muchos clientes, regulando su acceso a los recursos compartidos.

  • Los clientes corresponden a procesos activos en cuanto a que son estos los que hacen peticiones de servicios. Estos últimos tienen un carácter pasivo, ya que esperan peticiones de los clientes.

  • No existe otra relación entre clientes y servidores que no sea la que se establece a través del intercambio de mensajes entre ambos. El mensaje es el mecanismo para la petición y entrega de solicitudes de servicios.

  • El ambiente es heterogéneo. La plataforma de hardware y el sistema operativo del cliente y del servidor no son siempre los mismos. Precisamente una de las principales ventajas de esta arquitectura es la posibilidad de conectar clientes y servidores independientemente de sus plataformas.

  • El concepto de escalabilidad tanto horizontal como vertical es aplicable a cualquier sistema Cliente-Servidor. La escalabilidad horizontal permite agregar más estaciones de trabajo activas sin afectar significativamente el rendimiento. La escalabilidad vertical permite mejorar las características del servidor o agregar múltiples servidores.

Ventajas del esquema Cliente-Servidor

Existencia de plataformas de hardware cada vez más baratas. Esta constituye a su vez una de las más palpables ventajas de este esquema, la posibilidad de utilizar máquinas mucho más baratas que las requeridas por una solución centralizada, basada en sistemas grandes (mainframes). Además, se pueden utilizar componentes, tanto de hardware como de software, de varios fabricantes, lo cual contribuye considerablemente a la reducción de costos y favorece la flexibilidad en la implantación y actualización de soluciones.
  •  Facilita la integración entre sistemas diferentes y comparte información, permitiendo por ejemplo que las máquinas ya existentes puedan ser utilizadas pero utilizando interfaces más amigables el usuario. De esta manera, se puede integrar PCs con sistemas medianos y grandes, sin necesidad de que todos tengan que utilizar el mismo sistema operativo.
  • Al favorecer el uso de interfaces gráficas interactivas, los sistemas construidos bajo este esquema tienen una mayor y más intuitiva con el usuario. En el uso de interfaces gráficas para el usuario, presenta la ventaja, con respecto a uno centralizado, de que no siempre es necesario transmitir información gráfica por la red pues esta puede residir en el cliente, lo cual permite aprovechar mejor el ancho de banda de la red.
  •  La estructura inherentemente modular facilita además la integración de nuevas tecnologías y el crecimiento de la infraestructura computacional, favoreciendo así la escalabilidad de las soluciones.
  •  Contribuye además a proporcionar a los diferentes departamentos de una organización, soluciones locales, pero permitiendo la integración de la información.
Desventajas
  •  El mantenimiento de los sistemas es más difícil pues implica la interacción de diferentes partes de hardware y de software, distribuidas por distintos proveedores, lo cual dificulta el diagnóstico de fallas.
  •  Cuenta con muy escasas herramientas para la administración y ajuste del desempeño de los sistemas.
  •  Es importante que los clientes y los servidores utilicen el mismo mecanismo (por ejemplo sockets o RPC), lo cual implica que se deben tener mecanismos generales que existan en diferentes plataformas.
  •  Hay que tener estrategias para el manejo de errores y para mantener la consistencia de los datos.
  •  El desempeño (performance), problemas de este estilo pueden presentarse por congestión en la red, dificultad de tráfico de datos, etc.
Los componentes de una aplicación web son:

1. Lógica de negocio.

 Parte más importante de la aplicación.
  • Define los procesos que involucran a la aplicación.
  •  Conjunto de operaciones requeridas para proveer el servicio.
2. Administración de los datos.
  •  Manipulación de BD y archivos.
3. Interfaz
  • Los usuarios acceden a través de navegadores, móviles, PDAs, etc.
  •  Funcionalidad accesible a través del navegador
Las aplicaciones web se modelan mediante lo que se conoce como modelo de capas, Una capa representa un elemento que procesa o trata información. Los tipos son:
  •  Modelo de dos capas: La información atraviesa dos capas entre la interfaz y la administración de los datos.
  •  Modelo de n-capas: La información atraviesa varias capas, el más habitual es el modelo de tres capas.
Modelo de dos Capas.

Gran parte de la aplicación corre en el lado del cliente (fat client). Las capas son:
  •  Cliente (fat client): La lógica de negocio está inmersa dentro de la aplicación que realiza el interfaz de usuario, en el lado del cliente.
  •  Servidor: Administra los datos.
Las limitaciones de este modelo son.
  •  Es difícilmente escalable
  •  Número de conexiones reducida
  •  Alta carga de la red.
  •  La flexibilidad es restringida
  •  La funcionalidad es limitada.
Arquitectura de 3 capas

Definición: Es un estilo de programación, su objetivo primordial es la separación de la capa de presentación, capa de negocio y la capa de datos. La ventaja principal: Es el desarrollo se puede llevar a cabo en varios niveles y, en caso de que sobrevenga algún cambio. En el diseño de sistemas informáticos actuales se suele usar las arquitecturas multilineal o Programación por capas.

Además, permite distribuir el trabajo de creación de una aplicación por niveles; cada grupo de trabajo está totalmente abstraído del resto de niveles, de forma que basta con conocer la API que existe entre niveles.

 API (Application Programming Interface) 
  • Es el conjunto de funciones y procedimientos o métodos que ofrece cierta biblioteca para ser utilizado por otro software como una capa de abstracción.
Ejemplos:  
  • Microsoft Framework .NET 
  • OpenGL
  •  API for SCSI device interfacing
  • Javascript-C de Mozilla 
  • Symfony para PHP.
Las capas de este modelo son:

Capa de presentación. (Parte en el cliente y en el servidor)- Esta capa es la que ve el usuario, presenta el sistema al usuario, le comunica la información y captura la información del usuario en un mínimo de proceso. Esta capa se comunica únicamente con la capa de negocio. También es conocida como interfaz gráfica y debe tener la característica de ser quot;amigablequot; para el usuario generalmente se presentan como formularios. Recoge la información del usuario y la envía al servidor (cliente)
  •  Manda información a la capa de proceso para su procesado
  •  Recibe los resultados de la capa de proceso
  • Generan la presentación
  • Visualiza la presentación al usuario (cliente)
Capa de negocio (servidor web)  Aquí es donde, se reciben las peticiones del usuario y se envían las respuestas tras el proceso. S e denomina capa de negocio (e incluso de lógica del negocio) porque es aquí donde se establecen todas las reglas que deben cumplirse. Esta capa se comunica con la capa de presentación, para recibir las solicitudes y presentar los resultados, y con la capa de datos, para solicitar al gestor de base de datos para almacenar o recuperar datos de él.
  •  Toda aplicación tiene código para implementar reglas de negocios.
  • Se puede seleccionar almacenar la lógica de negocios sobre cada estación de cliente, u optar por ejecutar la lógica de negocios sobre un servidor de aplicaciones.
  •  No toda la lógica de negocio es la misma algunas no requieren un frecuente acceso a los datos, pero una interface de usuario robusta necesitara de la lógica de negocios para la validación en la entrada de campos, cálculos en tiempo real u otras interacciones de usuarios.
  •  Recibe la entrada de datos de la capa de presentación
  •  Interactúa con la capa de datos para realizar operaciones
  •  Manda los resultados procesados a la capa de presentación
ADO.NET. El ADO.NET es un conjunto de componentes del software que pueden ser usados por los programadores para acceder a datos y a servicios de datos. 
  • Data provider.- Estas clases proporcionan el acceso a una fuente de datos, como Microsoft SQL Server y Oracle.
  • DataSets
Los objetos DataSets, un grupo de clases que describen una simple base de datos relacional en memoria. Representa una base de datos entera puede contener las tablas y relaciones
  • Objeto DataTable representa una sola tabla en la base de datos.
  • DataSet es llenado desde una base de datos por un DataAdapter cuyas propiedades
Connection y Command Conjunto común de clases de utilidad:
  •  Connection: Conexión con la fuente de datos.
  •  Command: Acción en la fuente de datos
  •  Parameter: Parámetro para un procedimiento almacenado.
  • DataAdapter: Puente fuente de datos y dataSet
  • DataReader: Procesar lista de resultados un registro a la vez.
CAPA DE DATOS (Servidor de datos) Es donde residen los datos y es la encargada de acceder a los mismos. Está formada por uno o más gestores de bases de datos que realizan todo el almacenamiento de datos, reciben solicitudes de almacenamiento o recuperación de información desde la capa de negocio.
  •  Almacena los datos
  •  Recupera datos
  •  Mantiene los datos
  •  Segura la integridad de los datos