2.1 Productos modernos
Ya nadie llama a los productos modernos programas. Un producto moderno puede incluir docenas de programas, cientos de servicios de Internet y muchos API, proporcionados por un centro de datos en la nube (también llamados centros de procesamiento de datos), donde está desplegado.
Muchos productos modernos (si no todos) funcionan bajo la paradigma Cliente-Servidor. Es cuando en tu dispositivo (teléfono, portátil, computadora) hay un programa que se encarga de la comunicación con el usuario (tú), y la funcionalidad crítica está 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. Así, se forma una red global de clientes y servidores, y todos trabajan juntos.
Por eso la mejor descripción para el modelo de aplicaciones moderno sería paradigma Cliente-Internet-Servidor. Hay tanta comunicación compleja diferente ahora. 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.2 Clientes
Los programas cliente se pueden dividir en 4 categorías:
- Cliente de escritorio — programa que funciona en una computadora.
- Cliente móvil — aplicación para iOS o Android.
- Cliente Web — sitio/aplicación web que funciona en un navegador.
- Cliente Servidor — aplicación que está ejecutándose en otro servidor.
Y cada uno de ellos se puede subdividir en partes. Por ejemplo, un cliente web es un sitio o una aplicación web, por lo que consiste en Navegador y Sitio, que se carga en él. Los navegadores también no son todos iguales y pueden funcionar de diferentes maneras.
Pero incluso si tomamos el navegador más común, aún queda el sitio que se carga en él. Un sitio generalmente consiste en tres cosas:
- HTML
- CSS
- JavaScript
"No hay nada más simple," dirás. Pero hoy en día nadie escribe sitios solo en HTML y JavaScript. Para desarrollar sitios se utilizan no solo bibliotecas, sino frameworks completos como React, Angular o Vue. Y ya no son solo sitios, sino aplicaciones web completas con sus compilaciones, pruebas y paradigmas.
Ahora nadie usa CSS puro. Ya existen preprocesadores CSS que ayudan a generarlo, y frameworks CSS completos. Incluso hay frameworks CSS especiales para correos electrónicos para que tu correo se vea bonito tanto en el navegador como en la mayoría de los clientes de correo.
Tampoco se escribe mucho en JavaScript puro — todas las aplicaciones web grandes se crean en TypeScript, que luego se compila a JavaScript. Bueno, tú entiendes...
2.3 Internet e infraestructura
La comunicación entre cliente y servidor — ¿qué puede ser más simple? Pero incluso en sus relaciones ya todo ha cambiado.
Tu producto probablemente se hospedará en uno de los centros de datos modernos. Muchas empresas en todo el mundo ofrecen diversos servicios de hosting para tus productos, ya sea en sus servidores o en tus propios servidores físicos. Cualquier capricho por tu dinero.
El 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 computadora virtual, y un servidor físico puede tener docenas de ellos. Pero es conveniente en términos de actualización del servidor. Si necesitas más memoria, puedes agregarla a tu servidor virtual en unos minutos.
Pero este enfoque ya está quedando obsoleto, ahora está de moda mudarse a la nube — es cuando tu producto no solo está desplegado en un servidor virtual en un centro de datos, sino que utiliza activamente un gran conjunto de infraestructuras y servicios de esos centros de datos.
¿Necesitas un servidor para almacenar copias de seguridad? — hay una infraestructura lista y conveniente en la nube para eso. ¿Necesitas una base de datos con una confiabilidad del 99.9999999%? Eso también existe. Kafka, RabbitMQ, NoSQL? Todo ya está ahí y se configura fácilmente. Solo paga.
Y estos centros de datos y nubes comienzan a convertirse en parte de tu producto. Por ejemplo, Amazon tiene un montón de centros de datos en todo el mundo, por lo que ofrecen un servicio de CDN: tu contenido público se almacenará en caché en todos los centros de datos de Amazon, y tus usuarios en todo el mundo lo obtendrán más rápido.
O podrías pasar el acceso a la API de tu aplicación a través del servicio Amazon Gateway API, que te permite configurar muy flexiblemente cómo trabajas con tus servicios. Puedes distribuir la carga en diferentes servicios, mitigar ataques DDoS, automatizar la carga de archivos, configurar un cacheo inteligente, y mucho más.
De esta manera, entre la aplicación cliente y tus servicios, surgen muchas "comunicaciones inteligentes" que se pueden y deben configurar. Incluso si nunca lo haces tú personalmente, debes saber que existen y pueden influir significativamente en el funcionamiento de tu programa.
Y eso que ni siquiera hemos tocado temas como routers, torres 5G, satélites y cables de internet a través del fondo del océano. Estás enviando una transmisión de video desde tu servidor a tu cliente, y falla, porque el cliente tiene una mala conexión y la conexión se cae constantemente. Adivina quién resolverá ese problema?
2.4 Servidor
Bajo la palabra "servidor" pueden esconderse conceptos completamente diferentes. Te será útil conocer los más comunes de ellos.
Servidor físicoUn servidor físico es un hardware que representa una computadora separada con recursos (procesador, memoria, almacenamiento), que se utiliza para procesar datos y proporcionar el funcionamiento de varias aplicaciones de software. Estos servidores se instalan en centros de procesamiento de datos, donde proporcionan potencia para alojar sitios web, aplicaciones, bases de datos y otros servicios.
Servidor virtualUn servidor virtual es un servidor emulado por software que funciona en un entorno de servidor físico. Con la tecnología de virtualización, un servidor físico puede dividirse en varios servidores virtuales aislados, cada uno de los cuales tiene su propio sistema operativo y 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 gestionar solicitudes a recursos web. Nginx es ampliamente conocido como servidor web, pero también puede funcionar como servidor proxy de correo y servidor proxy inverso en arquitecturas de microservicios, así como balanceador de carga.
Servidor de base de datosUn servidor de base de datos es un servidor especializado utilizado para gestionar bases de datos y procesar solicitudes a ellas. Proporciona un almacenamiento centralizado de datos y su procesamiento, proporcionando acceso a los datos a través de la red. Los servidores de bases de datos soportan el procesamiento de transacciones, búsqueda y modificación de datos, garantizando al mismo tiempo la fiabilidad y seguridad del almacenamiento de 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 estará corriendo tu proyecto en Python y Django. Estará trabajando con una base de datos, recibiendo peticiones de NginX, y enviando registros de sus acciones a Splank.
Pero gracias a tu código millones de usuarios de tu producto serán felices. Usarán el producto, pagarán por él, y en ese caso el propietario del producto también será feliz. Las acciones de la empresa crecerán, recibirás bonificaciones en acciones y también serás feliz. Un verdadero ciclo de felicidad en la naturaleza :)
GO TO FULL VERSION