Tabla de Contenidos

Tecnologías y arquitecturas Web

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.

Arquitectura de Red

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

Modelo 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)

Sistema de nombres de Dominio (DNS)

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.

Componentes

Existen dos formas de resolver el nombre de dominio:

El proceso de resolución siempre es el mismo:

  1. Se consulta el fichero hosts en busca del nombre de dominio
  2. Si no está se realiza una petición al servidor DNS asignado

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.

Nombre de Dominio

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:

  1. Los puntos separan dominios y subdominios, empezando de derecha a izquierda tendrás dominios de primer nivel (TLDs) y dominios de segundo (SLD), tercer, etc. Cada nivel de dominio es un subdominio del nivel superior:
    • org es el dominio de primer nivel (TLD)
    • debian es un subdominio, en este caso dominio de segundo nivel bajo org, que identifica al nombre de la organización o al nombre de la empresa.
    • www es un subdominio, en este caso dominio de tercer nivel bajo debian, que identifica al servidor web donde está colgada la página web, esto es, identifica el host exacto que aloja la página web.
  2. http:// es el protocolo de hypertexto que permite la correcta visualización de la página web en el navegador. Es lo que el navegador autocomplementa en caso de no estipular uno propio en la barra de direcciones URL con en nombre de dominio.

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.

Servidores 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:

Resolución

  1. A través de tu navegador quieres consultar la página web oficial de Debian escribiendo en la barra de direcciones la URL https://www.debian.org/
  2. El navegador busca la información de las DNS del dominio debian.org.
  3. Se busca la dirección IP en la caché del sistema operativo (en caso de que se haya buscado recientemente). Si no se encuentra se lanza una petición a las direcciones IP de nuestros servidores DNS predeterminados. Son los que hemos configurado en nuestra interfaz de red.
  4. Estos servidores son los solucionadores recursivos. Revisan sus cachés y si no conocen la respuesta lanzan una petición a los servidores DNS raiz que son los servidores mas altos en la jerarquía DNS.
  5. Los servidores DNS raiz conocen la ubicación de los Servidores DNS TLD y redirigen al solucionador hacia el servidor encargado del TLD que que estamos buscando. (Servidores DNS para .com en nuestro caso).
  6. Los servidores DNS TLD gestionan los dominios TLD, en nuestro caso el dominio .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.
  7. En última instancia los servidores autoritativos son los que conocen toda la información referente al nombre de dominio completo, el cual se le indicará al solucionador que nos devolverá la IP requerida.

Protocolo DNS

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:

Arquitecturas Web

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.

 Arquitectura en 3 capas

 Arquitectura en 3 capas

 Arquitectura LAMP

Existen dos arquitecturas muy utilizadas conocidas por sus acrónimos:

LAMP:

WISA:

Tecnologías usadas

Cliente

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.

Servidor

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.

Tipos de Servidores

FTP

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:

Web

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:

Bases de Datos

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:

Servidores 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:

Contenedores

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