El modelo cliente-servidor es una estructura de aplicación distribuida que divide tareas o cargas de trabajo entre los proveedores de un recurso o servicio, llamados servidores , y los solicitantes de servicios, llamados clientes . [1] A menudo, los clientes y los servidores se comunican a través de una red informática en hardware separado, pero tanto el cliente como el servidor pueden residir en el mismo sistema. Un servidor host ejecuta uno o más programas de servidor, que comparten sus recursos con los clientes. Un cliente normalmente no comparte ninguno de sus recursos, pero solicita contenido o servicio a un servidor. Por lo tanto, los clientes inician sesiones de comunicación con los servidores, que esperan las solicitudes entrantes. Ejemplos de aplicaciones informáticas que utilizan el modelo cliente-servidor son el correo electrónico , la impresión en red y la World Wide Web .
La característica "cliente-servidor" describe la relación de los programas que cooperan en una aplicación. El componente del servidor proporciona una función o servicio a uno o varios clientes, que inician solicitudes de dichos servicios. Los servidores se clasifican según los servicios que brindan. Por ejemplo, un servidor web sirve páginas web y un servidor de archivos sirve archivos informáticos . Un recurso compartido puede ser cualquiera de los componentes electrónicos y software de la computadora servidor, desde programas y datos hasta procesadores y dispositivos de almacenamiento . Compartir los recursos de un servidor constituye un servicio .
Si una computadora es un cliente, un servidor o ambos, está determinado por la naturaleza de la aplicación que requiere las funciones del servicio. Por ejemplo, una sola computadora puede ejecutar un servidor web y un software de servidor de archivos al mismo tiempo para entregar diferentes datos a los clientes que realizan diferentes tipos de solicitudes. El software del cliente también puede comunicarse con el software del servidor dentro de la misma computadora. [2] La comunicación entre servidores, como la sincronización de datos, a veces se denomina comunicación entre servidores o de servidor a servidor .
Generalmente, un servicio es una abstracción de recursos informáticos y un cliente no tiene que preocuparse por el rendimiento del servidor mientras cumple la solicitud y entrega la respuesta. El cliente sólo tiene que comprender la respuesta en función del protocolo de aplicación correspondiente , es decir, el contenido y el formato de los datos del servicio solicitado.
Los clientes y servidores intercambian mensajes siguiendo un patrón de mensajería de solicitud-respuesta . El cliente envía una solicitud y el servidor devuelve una respuesta. Este intercambio de mensajes es un ejemplo de comunicación entre procesos . Para comunicarse, las computadoras deben tener un lenguaje común y deben seguir reglas para que tanto el cliente como el servidor sepan qué esperar. El lenguaje y las reglas de comunicación se definen en un protocolo de comunicaciones . Todos los protocolos operan en la capa de aplicación . El protocolo de la capa de aplicación define los patrones básicos del diálogo. Para formalizar aún más el intercambio de datos, el servidor puede implementar una interfaz de programación de aplicaciones (API). [3] La API es una capa de abstracción para acceder a un servicio. Al restringir la comunicación a un formato de contenido específico , se facilita el análisis . Al abstraer el acceso, facilita el intercambio de datos entre plataformas. [4]
Un servidor puede recibir solicitudes de muchos clientes distintos en un período corto. Una computadora solo puede realizar una cantidad limitada de tareas en cualquier momento y depende de un sistema de programación para priorizar las solicitudes entrantes de los clientes para atenderlas. Para evitar abusos y maximizar la disponibilidad , el software del servidor puede limitar la disponibilidad para los clientes. Los ataques de denegación de servicio están diseñados para explotar la obligación de un servidor de procesar solicitudes sobrecargándolo con tasas de solicitudes excesivas. Se debe aplicar cifrado si se va a comunicar información confidencial entre el cliente y el servidor.
Cuando un cliente de un banco accede a los servicios bancarios en línea con un navegador web (el cliente), el cliente inicia una solicitud al servidor web del banco. Las credenciales de inicio de sesión del cliente pueden almacenarse en una base de datos y el servidor web accede al servidor de la base de datos como cliente. Un servidor de aplicaciones interpreta los datos devueltos aplicando la lógica empresarial del banco y proporciona el resultado al servidor web. Finalmente, el servidor web devuelve el resultado al navegador web del cliente para su visualización.
En cada paso de esta secuencia de intercambios de mensajes cliente-servidor, una computadora procesa una solicitud y devuelve datos. Este es el patrón de mensajería de solicitud-respuesta. Cuando se cumplen todas las solicitudes, la secuencia se completa y el navegador web presenta los datos al cliente.
Este ejemplo ilustra un patrón de diseño aplicable al modelo cliente-servidor: separación de preocupaciones .
El lado del servidor se refiere a programas y operaciones que se ejecutan en el servidor . Esto contrasta con los programas y operaciones del lado del cliente que se ejecutan en el cliente . [5] (Ver más abajo)
"Software del lado del servidor" se refiere a una aplicación informática , como un servidor web , que se ejecuta en un hardware de servidor remoto , accesible desde la computadora local , el teléfono inteligente u otro dispositivo del usuario . Las operaciones pueden realizarse en el lado del servidor porque requieren acceso a información o funcionalidad que no está disponible en el cliente , o porque realizar dichas operaciones en el lado del cliente sería lento, poco confiable o inseguro .
Los programas de cliente y servidor pueden estar comúnmente disponibles, como servidores web y navegadores web gratuitos o comerciales , que se comunican entre sí mediante protocolos estandarizados . O bien, los programadores pueden escribir su propio servidor, cliente y protocolo de comunicaciones que sólo pueden usarse entre sí.
Las operaciones del lado del servidor incluyen tanto aquellas que se llevan a cabo en respuesta a solicitudes de clientes como operaciones no orientadas al cliente, como las tareas de mantenimiento. [6] [7]
En un contexto de seguridad informática , las vulnerabilidades o ataques del lado del servidor se refieren a aquellos que ocurren en un sistema informático servidor, en lugar de en el lado del cliente, o entre ambos . Por ejemplo, un atacante podría aprovechar una vulnerabilidad de inyección SQL en una aplicación web para cambiar maliciosamente u obtener acceso no autorizado a los datos de la base de datos del servidor . Alternativamente, un atacante podría ingresar a un sistema de servidor utilizando vulnerabilidades en el sistema operativo subyacente y luego poder acceder a la base de datos y otros archivos de la misma manera que los administradores autorizados del servidor. [8] [9] [10]
En el caso de proyectos de computación distribuida como SETI@home y Great Internet Mersenne Prime Search , si bien el grueso de las operaciones ocurren del lado del cliente, los servidores se encargan de coordinar a los clientes, enviarles datos para analizarlos, recibirlos y almacenarlos. resultados, proporcionar funcionalidad de informes a los administradores de proyectos, etc. En el caso de una aplicación de usuario dependiente de Internet como Google Earth , mientras que la consulta y visualización de datos de mapas se realiza en el lado del cliente, el servidor es responsable del almacenamiento permanente de los datos de mapas. resolver consultas de usuarios sobre datos de mapas que se devolverán al cliente, etc.
En el contexto de la World Wide Web , los lenguajes informáticos del lado del servidor que se encuentran comúnmente incluyen: [5]
Sin embargo, las aplicaciones y servicios web se pueden implementar en casi cualquier idioma, siempre que puedan devolver datos a navegadores web basados en estándares (posiblemente a través de programas intermediarios) en formatos que puedan utilizar.
El lado del cliente se refiere a las operaciones que realiza el cliente en una red informática .
Normalmente, un cliente es una aplicación informática , como un navegador web , que se ejecuta en la computadora local , el teléfono inteligente u otro dispositivo del usuario y se conecta a un servidor según sea necesario. Las operaciones pueden realizarse en el lado del cliente porque requieren acceso a información o funcionalidad que está disponible en el cliente pero no en el servidor, porque el usuario necesita observar las operaciones o proporcionar información, o porque el servidor carece de la capacidad de procesamiento para realizar las operaciones. operaciones de manera oportuna para todos los clientes a los que sirve. Además, si el cliente puede realizar las operaciones sin enviar datos a través de la red, pueden tardar menos tiempo, utilizar menos ancho de banda e incurrir en un menor riesgo de seguridad .
Cuando el servidor proporciona datos de una manera comúnmente utilizada, por ejemplo, según protocolos estándar como HTTP o FTP , los usuarios pueden elegir entre varios programas cliente (por ejemplo, la mayoría de los navegadores web modernos pueden solicitar y recibir datos utilizando HTTP y FTP). ). En el caso de aplicaciones más especializadas, los programadores pueden escribir su propio servidor, cliente y protocolo de comunicaciones que sólo pueden utilizarse entre sí.
Los programas que se ejecutan en la computadora local de un usuario sin enviar ni recibir datos a través de una red no se consideran clientes y, por lo tanto, las operaciones de dichos programas no se denominarían operaciones del lado del cliente.
En un contexto de seguridad informática , las vulnerabilidades o ataques del lado del cliente se refieren a aquellos que ocurren en el sistema informático del cliente/usuario, en lugar del lado del servidor , o entre ambos . Por ejemplo, si un servidor contuviera un archivo o mensaje cifrado que sólo pudiera descifrarse utilizando una clave alojada en el sistema informático del usuario, un ataque del lado del cliente normalmente sería la única oportunidad del atacante para obtener acceso al contenido descifrado. Por ejemplo, el atacante podría provocar que se instale malware en el sistema cliente, lo que le permitiría ver la pantalla del usuario, registrar las pulsaciones de teclas del usuario y robar copias de las claves de cifrado del usuario, etc. Alternativamente, un atacante podría emplear software entre sitios. vulnerabilidades de scripting para ejecutar código malicioso en el sistema del cliente sin necesidad de instalar ningún malware residente permanente. [8] [9] [10]
Los proyectos de computación distribuida como SETI@home y Great Internet Mersenne Prime Search, así como aplicaciones dependientes de Internet como Google Earth , dependen principalmente de operaciones del lado del cliente. Inician una conexión con el servidor (ya sea en respuesta a una consulta del usuario, como en Google Earth, o de forma automatizada, como en SETI@home), y solicitan algunos datos. El servidor selecciona un conjunto de datos (una operación del lado del servidor ) y lo envía de vuelta al cliente. Luego, el cliente analiza los datos (una operación del lado del cliente) y, cuando se completa el análisis, los muestra al usuario (como con Google Earth) y/o transmite los resultados de los cálculos al servidor (como con SETI@ hogar).
En el contexto de la World Wide Web , los lenguajes informáticos más comunes que se evalúan o ejecutan en el lado del cliente incluyen: [5]
Una forma temprana de arquitectura cliente-servidor es la entrada remota de trabajos , que data al menos de OS/360 (anunciado en 1964), donde la solicitud era ejecutar un trabajo y la respuesta era la salida.
Al formular el modelo cliente-servidor en las décadas de 1960 y 1970, los científicos informáticos que crearon ARPANET (en el Instituto de Investigación de Stanford ) utilizaron los términos servidor-host (o servidor-host ) y usuario-host (o usando-host ), y estos aparecen en los primeros documentos RFC 5 [11] y RFC 4. [12] Este uso continuó en Xerox PARC a mediados de la década de 1970.
Un contexto en el que los investigadores utilizaron estos términos fue en el diseño de un lenguaje de programación de redes informáticas llamado Decode-Encode Language (DEL). [11] El propósito de este lenguaje era aceptar comandos de una computadora (el usuario-host), que devolvería informes de estado al usuario mientras codificaba los comandos en paquetes de red. Otra computadora con capacidad DEL, el servidor-host, recibió los paquetes, los decodificó y devolvió datos formateados al usuario-host. Un programa DEL en el host de usuario recibió los resultados para presentarlos al usuario. Esta es una transacción cliente-servidor. El desarrollo de DEL recién comenzaba en 1969, año en que el Departamento de Defensa de los Estados Unidos estableció ARPANET (predecesor de Internet ).
Cliente-host y servidor-host tienen significados sutilmente diferentes a cliente y servidor . Un host es cualquier computadora conectada a una red. Mientras que las palabras servidor y cliente pueden referirse a una computadora o a un programa informático, servidor-host y cliente-host siempre se refieren a computadoras. El host es una computadora versátil y multifunción; Los clientes y servidores son solo programas que se ejecutan en un host. En el modelo cliente-servidor, es más probable que un servidor se dedique a la tarea de servir.
Un uso temprano de la palabra cliente ocurre en "Separación de datos de la función en un sistema de archivos distribuido", un artículo de 1978 de los científicos informáticos de Xerox PARC Howard Sturgis, James Mitchell y Jay Israel. Los autores tienen cuidado al definir el término para los lectores y explican que lo utilizan para distinguir entre el usuario y el nodo de red del usuario (el cliente). [13] En 1992, la palabra servidor había entrado en el lenguaje general. [14] [15]
El modelo cliente-servidor no dicta que los servidores-hosts deban tener más recursos que los clientes-hosts. Más bien, permite que cualquier computadora de uso general amplíe sus capacidades utilizando los recursos compartidos de otros hosts. La informática centralizada , sin embargo, asigna específicamente una gran cantidad de recursos a una pequeña cantidad de computadoras. Cuanto más cálculo se descarga desde los hosts-clientes a las computadoras centrales, más simples pueden ser los hosts-clientes. [16] Depende en gran medida de los recursos de la red (servidores e infraestructura) para la computación y el almacenamiento. Un nodo sin disco carga incluso su sistema operativo desde la red, y un terminal de computadora no tiene ningún sistema operativo; es sólo una interfaz de entrada/salida para el servidor. Por el contrario, un cliente rico , como una computadora personal , tiene muchos recursos y no depende de un servidor para funciones esenciales.
A medida que las microcomputadoras bajaron de precio y aumentaron en potencia desde la década de 1980 hasta finales de la de 1990, muchas organizaciones hicieron la transición de la computación de servidores centralizados, como mainframes y minicomputadoras , a clientes ricos. [17] Esto permitió un dominio mayor y más individualizado sobre los recursos informáticos, pero complicó la gestión de la tecnología de la información . [16] [18] [19] Durante la década de 2000, las aplicaciones web maduraron lo suficiente como para rivalizar con el software de aplicación desarrollado para una microarquitectura específica . Esta maduración, un almacenamiento masivo más asequible y el advenimiento de la arquitectura orientada a servicios estuvieron entre los factores que dieron lugar a la tendencia de la computación en la nube de la década de 2010. [20] [ verificación fallida ]
Además del modelo cliente-servidor, las aplicaciones informáticas distribuidas suelen utilizar la arquitectura de aplicación peer-to-peer (P2P).
En el modelo cliente-servidor, el servidor suele estar diseñado para funcionar como un sistema centralizado que atiende a muchos clientes. Los requisitos de potencia informática, memoria y almacenamiento de un servidor deben adaptarse adecuadamente a la carga de trabajo esperada. A menudo se emplean sistemas de equilibrio de carga y conmutación por error para escalar el servidor más allá de una única máquina física. [21] [22]
El equilibrio de carga se define como la distribución metódica y eficiente del tráfico de red o de aplicaciones entre varios servidores de una granja de servidores. Cada equilibrador de carga se ubica entre los dispositivos cliente y los servidores backend, recibiendo y luego distribuyendo las solicitudes entrantes a cualquier servidor disponible capaz de cumplirlas.
En una red peer-to-peer , dos o más computadoras ( peers ) agrupan sus recursos y se comunican en un sistema descentralizado . Los pares son nodos iguales o equipotentes en una red no jerárquica. A diferencia de los clientes en una red cliente-servidor o cliente-cola-cliente , los pares se comunican entre sí directamente. [ cita necesaria ] En las redes de igual a igual, un algoritmo en el protocolo de comunicaciones de igual a igual equilibra la carga , e incluso los pares con recursos modestos pueden ayudar a compartir la carga. [ cita necesaria ] Si un nodo deja de estar disponible, sus recursos compartidos permanecen disponibles siempre que otros pares los ofrezcan. Idealmente, un par no necesita lograr alta disponibilidad porque otros pares redundantes compensan cualquier tiempo de inactividad de los recursos ; a medida que cambian la disponibilidad y la capacidad de carga de los pares, el protocolo redirige las solicitudes.
Tanto cliente-servidor como maestro-esclavo se consideran subcategorías de sistemas distribuidos punto a punto. [23]
Sistemas distribuidos punto a punto [...] Este es un estilo genérico cuyos estilos populares son los estilos cliente-servidor y maestro-esclavo.