Para realizar el despliegue de una aplicación Web necesitamos emplear diferentes tecnologías con las que trabajaremos a lo largo de curso. En este bloque vamos a hacer una introducción a ellas y mostraremos su relación.
Antes de comenzar vamos a echar un vistazo general a los fundamentos de la web. A la hora de deplegar una aplicación web debemos atender a una serie de conceptos: direcciones IP, puertos, certificados SSL, nombres de dominio, etc. Para situar gran parte de las tecnologías y servicios debemos conocer cómo funcionan estas aplicaciones.
Una aplicación web se basa en una arquitectura cliente-servidor que funciona en Internet. Un cliente hace una petición y un servidor le responde a través de una red de datos.
Internet es una red unida de muchas redes interconectadas. A la hora de interconectar redes nos encontramos con el problema de tener diferentes tipos de red, diferentes dispositivos de red, diferentes equipos, etc. Para simplificar el problema, las redes se divididen en un conjunto de capas, de modo que cada capa tiene unas funciones más o menos delimitadas. Así se reduce la complejidad del diseño y de las aplicaciones que se utilicen.
Flujo de datos entre dos hosts
Para estudiar la arquitectura de una red podemos dividirla en diferentes capas separando las funcionalidades implicadas entre unas y otras: los protocolos definidos en cada capa que hacen posible que los diferentes dispositivos se comuniquen entre si. Tenemos dos modelos principales que nos facilitan el estudio de la arquitectura de una red. El modelo OSI y el modelo TCP/IP.
Modelos OSI y TCP/IP
Internet funciona mediante el protocolo TCP/IP efectuando conexiones desde clientes hacia servidores. Cada host en Internet se identifica mediante una dirección IP y para conectar con las aplicación que deseamos dentro de ese host utilizamos los puertos que vienen definidos en los procolos de transporte:
Pila de protocolos TCP/IP
Además, cada vez que realizamos una conexión con un host remoto, nuestra petición se enviará en un paquete de datos a través de un sistema de redes intrerconectadas mediante enrutadores y otros dispositivos de red.
Encapsulación de datos a través de las diferentes capas
A la hora de configurar las herramientas necesarias para desplegar una aplicación en este curso, necesitamos conocer y trabajar con algunos protocolos:
Podemos estudiar la información transmitida por una red con un analizador de paquetes (p.e. Wireshark)
Podemos entender un nombre de dominio como el nombre con el que identificamos a un host dentro de Internet. Comohemos visto en el punto anterior, todos los hosts en internet se referencian mediante una dirección definida por el protocolo IP. (p.e. 217.43.134.76)
El Sistema de Nombres de Dominio es a Internet lo que la guía telefónica es a la red de teléfonos. Es un servicio al cual cada cliente web le puede preguntar por la dirección IP que está vinculada a un nombre de dominio.
Existen dos formas de resolver el nombre de dominio:
/etc/hosts/
en los sistemas Linux o C:Windows/System32/drivers/etc/hosts
en los sistemas Windows.El proceso de resolución siempre es el mismo:
La desventaja de almacenar las parejas nombre-direccion IP en un fichero local es obvia: al ser un fichero estático en el momento en que la cantidad de nombres crece se hace más difícil mantenerla. Se puede plantear su uso para los nombres de dominio de una pequeña red local.
Es la dirección de un hosts escrita en lenguaje conocido: palabras.
Si introducimos en un navegador web la direccion: https://www.debian.com
estamos indicando lo siguiente:
Otro ejemplo: https://en.wikipedia.org
Al nombre completo terminado en .
se le conoce como FQDN (fully qualified domain name).
Entre los dominios de primer nivel o TLD (Top Level Domain) se encuentran: .com
, .org
, .net
, .es
, .edu
, .gov
, etc. Podemos consultar una lista aquí. Estos dominios se almacenan en la zona raíz del DNS.
Podríamos decir que los diferentes tipos de servidores DNS se clasifican en privados y públicos.
Algunos de los servicios DNS públicos son Open DNS, gestionado actualmente por Cisco y Google Public DNS.
Por otro lado podemos encontrar 4 tipos de sercicios dentro del sistema:
.com
del que debian.com
forma parte. Estos servidores dirigen al solucionador hacia el servidor DNS autoritativo necesario ya que no conocen las direcciones IP. En nuestro caso hacia el servidor autoritatido que conoce debian.com
.'www.debian.com
o blog.debian.com
, se añade un servidor autoritativo más a la cadena, encargado de conocer las direcciones IP de los subdominios.El Sistema de Nombres de Dominio al igual que otras tecnologías tiene su propio formato de mensajes. Este formato es definido mediante el protocolo DNS.
El paquete DNS viaja normalmente en el protocolo UDP de transporte, debido a que la información de DNS es bastante ligera y UDP es más rápido que TCP.
Cuando queremos acceder a una página web desde el navegador indicando su nombre (www.google.com), se envía un paquete DNS que preguntará por la dirección IP correspondiente a ese nombre. El servidor DNS que tengamos asignado, nos responderá con la dirección IP, y acto seguido podremos conectarnos a esa dirección.
Campos de la cabecera del paquete DNS
La cabecera de un paquete DNS ocupa 12 bytes:
Las aplicaciones web siguen lo que se conoce como una arquitectura cliente-servidor. Siguiendo esta misma filosofía, existe la programación por capas, que consiste en una arquitectura en la que el principal objetivo es la separación de las diferentes capas lógicas de una aplicación (presentación, negocio y datos). Por ello, la arquitectura más conocida es la arquitectura de 3 capas, en la que la estructura de la aplicación se separa en tres niveles. Aunque no siempre las 3 capas están separadas físicamente, es conveniente que lo estén lógicamente. La separación física vendrá dada por la propia naturaleza de la aplicación (aplicación web) o bien por las propias necesidades en cuanto a rendimiento de la misma (uno o más equipos para dar soporte a la capa de negocio o datos).
En aplicaciones de tamaño medio es bastante habitual encontrar un modelo lógico basado en 3 capas pero físicamente distribuido solamente en 2. En estos casos lo habitual será que el usuario cargue la capa de presentación en su propio equipo (ya sea ejecutando la aplicación o cargando la web en su navegador) y que las capas de negocio y datos se encuentren en otro equipo remoto (el servidor). A medida que la aplicación se haga más exigente las capas de negocio y datos pueden separarse en diferentes equipos (normalmente físicamente más cerca) y según se exige un mayor rendimiento se pueden añadir equipos a cualquiera de estas dos capas.
Existen dos arquitecturas muy utilizadas conocidas por sus acrónimos:
LAMP:
WISA:
Un cliente es un programa (p.e. navegador Web) que se ejecuta en el ordenador, teléfono u otro dispositivo local del usuario, y se conecta a un servidor cuando lo necesita. Necesita acceso a información o funcionalidades que están disponibles en el cliente y no en el servidor: introducción o selección de datos, tareas que no requieren transmisión de datos, etc.
En el desarrollo web, el “lado del cliente” hace referencia a todo lo que en una aplicación web se muestra o tiene lugar en el cliente (dispositivo del usuario final). Esto incluye lo que ve el usuario, como texto, imágenes y el resto de la interfaz de usuario, junto con cualquier acción que una aplicación lleve a cabo en el navegador del usuario.
El lado del cliente también se conoce como frontend, aunque estos dos términos no son lo mismo. El lado del cliente hace referencia únicamente al lugar en el que se ejecutan los procesos, mientras que el frontend hace referencia a los tipos de procesos que se ejecutan en el lado del cliente.
Un servidor es una aplicaicón informática (p.e. servidor Web) que se ejecuta habitualmente en un ordenador remoto (ordenador servidor), accesible desde un ordenador o dispositivo movil local de un usuario. Hay operaciones que se deben ejecutar en el servidor ya que requieren acceso a información o funcionalidades que no están disponibles en el cliente, o porque la ejecución de esas tareas serían lentas o inseguras en el cliente. Por ejemplo: representación de páginas web dinámicas, la interacción con las bases de datos, la autenticación de identidades, etc.
Al igual que “frontend” y “lado del cliente”, backend también es un término para los procesos que tienen lugar en el servidor, aunque backend solo hace referencia a los tipos de procesos y lado del servidor hace referencia a la ubicación en la que se ejecutan los procesos.
El Protocolo de transferencia de archivos (en inglés File Transfer Protocol o FTP) es un protocolo de red para la transferencia de archivos entre sistemas conectados a una red TCP (Transmission Control Protocol), basado en la arquitectura cliente-servidor.
Un servidor FTP es un programa que ofrece acceso a ficheros y permite enviarlos ante la solicitud de un cliente FTP.
Algunos ejemplos de aplicaciones:
Un servidor Web es una aplicación informática que acepta peticiones a través del protocolo HTTP, o su variante segura HTTPS. Esta comunicación se inicia desde una aplicación cliente (un navegador web) el cual solicita acceso a una página web u otros recursos usando HTTP, y el servidor le responde con dicha información.
Algunos ejemplos de aplicaciones:
Un servidor de bases de datos, al igual que el resto de servidores, es una aplicación informátia que ofrece acceso a bases de datos a otros programas u ordenadores basandose en un modelo cliente-servidor. Los SGBD normalmente ofrecen funciones de servidor, incluso siendo la única forma de acceso para algunos tipos de SGBD, como es el caso de MySQL.
Ejemplos de aplicaciones:
Un servidores de aplicaciones es un tipo de servidor que se encarga de ejecutar ciertas aplicaciones más complejas que las que puede ejecutar un servidor web. Normalmente se apoyan en los servidores web, pero se encarga principalmente de la capa de negocio y del acceso a las bases de datos.
Ejemplos de aplicaciones:
Los contenedores proporcionan una manera estándar de ejecutar código. Automatizan el despliegue de aplicaciones dentro de contenedores de software. Docker es un sistema operativo para contenedores. De manera similar a cómo una máquina virtual virtualiza (elimina la necesidad de administrar directamente) el hardware del servidor, los contenedores virtualizan el sistema operativo de un servidor.
Incluyen todo lo necesario para que el software se ejecute, incluidas bibliotecas, herramientas de sistema, código y tiempo de ejecución.
Ejemplos de aplicaciones:
© 2024 Fernando Valdeón