CodeGym /Cursos /JAVA 25 SELF /Modelo de producto de TI

Modelo de producto de TI

JAVA 25 SELF
Nivel 9, Lección 6
Disponible

1. Productos modernos

A los productos modernos ya nadie los llama «programas». Un producto moderno puede incluir decenas de programas, cientos de servicios de Internet y multitud de API, proporcionados por un centro de datos en la nube (también llamados centros de procesamiento de datos) en el que está desplegado.

Muchos productos modernos (si no todos) funcionan según la paradigma Cliente-Servidor. Es cuando en tu dispositivo (teléfono, portátil, ordenador) hay un programa que se encarga de la comunicación con el usuario (tú), y la funcionalidad crítica reside en un servidor remoto, donde ocurre todo lo importante ➡️🖥️

A veces tu cliente puede comunicarse con varios servidores independientes, o el servidor de un producto puede dirigirse al servidor de otro producto. Al final se forma una especie de red global de clientes y servidores, y todos trabajan entre sí.

Por eso, quizás la paradigma Cliente-Internet-Servidor describa mejor el modelo de las aplicaciones modernas. La comunicación se ha vuelto demasiado compleja y variada. Incluso han aparecido los llamados «canales de comunicación inteligentes», que deciden por sí mismos a quién y cuándo enviar tu solicitud.🛰️📡

2. Clientes

Los programas cliente se pueden dividir, de forma aproximada, en 4 categorías:

  • 🖥️ Cliente de escritorio — programa que se ejecuta en un ordenador.
  • 📲 Cliente móvil — aplicación para iOS o Android.
  • 🌐 Cliente web — sitio/aplicación web que funciona en el navegador.
  • 🌍 Cliente de servidor — aplicación que se ejecuta en otro servidor.

Y cada una de ellas, a su vez, se puede subdividir otra vez en partes. Por ejemplo, un cliente web es un sitio o una aplicación web, lo que significa que consta del navegador y el sitio que se carga en él. Los navegadores tampoco son iguales y pueden comportarse de forma diferente.

Pero incluso si tomamos el navegador más extendido, aún queda el sitio que se carga en él. Un sitio normalmente consta de tres cosas:

  • 📄 HTML
  • 🎨 CSS
  • ⚡ JavaScript

«No hay nada más sencillo», dirás. Solo que hoy ya nadie escribe sitios simplemente en HTML y JavaScript. Para el desarrollo de sitios ahora se utilizan no solo bibliotecas, sino frameworks completos, como React, Angular o Vue ⚛️. Y ya ni siquiera son sitios, sino aplicaciones web completas con sus propias compilaciones, pruebas y paradigmas.

El CSS puro tampoco lo usa casi nadie ya. Existen preprocesadores de CSS que ayudan a generarlo y frameworks de CSS completos. Es más, incluso para los correos electrónicos hay frameworks específicos de CSS para que tu correo se vea bonito tanto en el navegador como en la mayoría de los clientes de correo 💌.

En JavaScript puro también escribe ya poca gente — todas las aplicaciones web grandes se crean en TypeScript, que luego se compila a JavaScript. Ya me entiendes...

3. Internet e infraestructura

La comunicación entre cliente y servidor — ¿qué puede ser más sencillo? Pero incluso ahí las cosas ya han cambiado.

Tu producto, muy probablemente, se alojará en uno de los centros de datos modernos. Muchas empresas en todo el mundo ofrecen diversos servicios de alojamiento para tus productos, ya sea en sus servidores o en tus propios servidores físicos. Cualquier cosa, mientras pagues.

Centro de datos

Un servidor físico ya no es físico. Todos los centros de datos modernos ofrecen alquiler de servidores virtuales. Un servidor virtual es una especie de ordenador virtual, y en un solo servidor físico puede haber decenas de ellos. A cambio, esto es cómodo a la hora de actualizar el servidor. Si necesitas más memoria, puedes añadirla a tu servidor virtual en cuestión de minutos ⏱️.

Pero incluso este enfoque se está quedando obsoleto; ahora está de moda migrar a la nube — cuando tu producto no solo está desplegado en un servidor virtual en un centro de datos, sino que utiliza activamente un amplio conjunto de infraestructura y servicios de esos centros de datos.

¿Necesitas un servicio para almacenar copias de seguridad? Hay una infraestructura lista y cómoda en la nube para ello. ¿Necesitas una base de datos con una fiabilidad del 99,9999999 %? También la hay. Kafka, RabbitMQ, NoSQL? Todo eso ya existe y se configura fácilmente. Solo hay que pagar.

Y esos centros de datos y las nubes empiezan a formar parte de tu producto. Por ejemplo, Amazon tiene montones de centros de datos por todo el mundo, por lo que ofrecen el servicio CDN: tu contenido público se almacenará en caché en todos los centros de datos de Amazon, y tus usuarios de todo el mundo lo recibirán más rápido 🛰️.

O el tráfico hacia el API de tu aplicación se puede hacer pasar por el servicio Amazon Gateway API, que permite configurar de forma muy flexible el trabajo con tus servicios. Se puede distribuir la carga entre distintos servicios, mitigar ataques DDoS, automatizar la carga de archivos, configurar un caché inteligente, y mucho más 🛡️.

Así, entre la aplicación cliente y tus servicios surgen múltiples «comunicaciones inteligentes», que se pueden y se deben configurar. Incluso si nunca lo haces personalmente, debes saber que existen y pueden influir significativamente en el funcionamiento de tu programa.

Y eso sin entrar aún en temas como routers, antenas 5G, satélites y los cables de Internet que discurren por el fondo del océano. Envías un flujo de vídeo desde tu servidor a tu cliente, y falla, porque el cliente tiene mala conexión y el enlace se corta constantemente. ¿Adivina quién tendrá que solucionar ese problema? Tú 😅

4. Servidor

Bajo la palabra «servidor» pueden ocultarse conceptos muy distintos. Te será útil conocer los más habituales.

  • 🖥️ Servidor físico
    Un servidor físico es un equipo que representa un ordenador independiente con recursos (procesador, memoria, almacenamiento) que se utiliza para procesar datos y asegurar el funcionamiento de diversas aplicaciones de software. Estos servidores se instalan en centros de datos, donde proporcionan capacidad para alojar sitios web, aplicaciones, bases de datos y otros servicios.
  • 🪐 Servidor virtual
    Un servidor virtual es un servidor emulado por software que funciona en el entorno de un servidor físico. Con tecnologías de virtualización, un servidor físico puede dividirse en varios servidores virtuales aislados, cada uno con su propio sistema operativo y que puede reiniciarse y configurarse de forma independiente.
  • 🕹️ Programa-servidor (por ejemplo, Nginx)
    Un programa-servidor, como Nginx, es un software del lado del servidor utilizado para procesar solicitudes a recursos web. Nginx es ampliamente conocido como servidor web, y también puede desempeñar funciones de proxy de correo y proxy inverso en arquitecturas de microservicios, así como de equilibrador de carga.
  • 💾 Servidor de bases de datos
    Un servidor de bases de datos es un servidor especializado que se utiliza para gestionar bases de datos y procesar sus consultas. Proporciona almacenamiento centralizado de datos y su procesamiento, ofreciendo acceso a los datos a través de la red. Los servidores de bases de datos admiten el procesamiento de transacciones, la búsqueda y la modificación de datos, garantizando al mismo tiempo la fiabilidad y la seguridad del almacenamiento de la información. Ejemplos de servidores de bases de datos incluyen MySQL, PostgreSQL, Oracle Database y Microsoft SQL Server.

Y en algún lugar de un centro de datos, en uno de los servidores virtuales, se ejecutará tu proyecto en C# y ASP.NET Core. Trabajará con una base de datos, recibirá solicitudes a través de Nginx o Azure Application Gateway, y enviará los registros (logs) de sus acciones a sistemas de monitorización como Azure Monitor o Splunk 📈.

Pero precisamente gracias a tu código, millones de usuarios de tu producto estarán satisfechos. Usarán el servicio, pagarán por él, y al final también estará contento el propietario del producto. Las acciones de la empresa subirán, recibirás bonus en acciones — y serás feliz 💸. El auténtico círculo de la felicidad en la industria :)

Comentarios
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION