Te damos la bienvenida al primer instructivo de una serie que te muestra cómo tomar una aplicación monolítica, separarla en módulos, alojar los módulos en contenedores y, luego, implementar las imágenes de contenedor en un clúster de Google Kubernetes Engine (GKE). No te preocupes si no entiendes alguno de estos términos. A medida que avances en la serie, aprenderás lo que significan.
La ruta de aprendizaje consta de los siguientes instructivos:
- Descripción general
- Comprende la aplicación monolítica (este instructivo)
- Modulariza la aplicación monolítica
- Prepara la app modular para el alojamiento en contenedores
- Aloja la app modular en contenedores
- Implementa la app en un clúster de GKE
En este instructivo, aprenderás sobre la aplicación monolítica realizando los siguientes pasos:
- Configura la app en tu máquina local.
- Explora sus funciones en tu navegador.
- Revisa el código.
¿Qué es una aplicación monolítica?
Antes de poner en funcionamiento la aplicación monolítica de muestra de Cymbal Books, es importante comprender qué es una aplicación monolítica.
Una aplicación monolítica es una app en la que todos los componentes están interconectados y no se pueden escalar de forma independiente. Por ejemplo, si una cantidad de usuarios visita de repente la página de acceso de la app, no puedes escalar solo el componente de acceso de forma independiente. En cambio, debes escalar toda la aplicación, incluidos los componentes no relacionados, como el catálogo de productos o el sistema de procesamiento de pedidos.
Por el contrario, cuando una aplicación se divide en módulos independientes, cada módulo se puede escalar por separado según sus necesidades de recursos. Si alojas la app modular en un clúster de GKE, GKE puede incluso automatizar el escalamiento por ti.
El término monolítico no significa código mal organizado. Una aplicación monolítica puede estar bien estructurada y sus componentes se pueden implementar en áreas distintas del código. Lo que distingue a una aplicación monolítica es que estos componentes no se pueden ejecutar ni escalar de forma independiente.
Costos
Puedes completar este instructivo sin incurrir en cargos. Sin embargo, seguir los pasos del instructivo final de esta serie genera cargos en tu Google Cloud cuenta. Los costos comienzan cuando habilitas GKE y, luego, implementas la app de Cymbal Books en un clúster de GKE. Estos costos incluyen cargos por clúster para GKE, como se describe en la página de precios, y cargos por ejecutar VMs de Compute Engine.
Para evitar cargos innecesarios, asegúrate de inhabilitar GKE o borrar el proyecto una vez que hayas completado este instructivo.
Antes de comenzar
Este instructivo requiere la versión 3.13 de Python en tu máquina local. Para verificar qué versión de Python está en tu máquina, ejecuta este comando:
python3 --version
Si tu versión de Python es anterior a la 3.13, descarga e instala la versión más reciente desde el sitio web oficial de Python.
Configura tu entorno
En esta serie de instructivos, ejecutarás diferentes versiones de la aplicación en diferentes lugares:
- La versión monolítica en tu máquina local
- La versión modular en tu máquina local
- La versión alojada en contenedores en Cloud Shell y, luego, en un clúster de GKE
En esta sección, configurarás un entorno virtual en tu máquina local donde se pueda ejecutar la aplicación monolítica.
Descarga el código
Abre una terminal en tu máquina local.
Clona el repositorio de GitHub del instructivo en tu máquina local:
git clone https://github.com/GoogleCloudPlatform/kubernetes-engine-samples.gitLa carpeta
kubernetes-engine-samples/quickstarts/monolith-to-microservicescontiene las siguientes tres carpetas:monolith/,modular/ycontainerized/. En este instructivo, te enfocarás exclusivamente en los archivos de la carpetamonolith/.
Crea y activa un entorno virtual
Un entorno virtual proporciona un espacio aislado para ejecutar la app. Evita que las bibliotecas de Python que necesitas instalar para la app interfieran con otros proyectos de Python en tu sistema.
Sigue estos pasos para crear y activar un entorno virtual:
En la terminal que abriste en la sección anterior, navega a la siguiente carpeta en el repositorio que clonaste en tu máquina anteriormente:
cd kubernetes-engine-samples/quickstarts/monolith-to-microservicesCrea un entorno virtual llamado
book-review-env:python3 -m venv book-review-envCrear un entorno virtual es una buena idea porque es un área en la que puedes ejecutar la app de forma aislada. Esto ayuda a garantizar que las dependencias y configuraciones de la app no entren en conflicto con otro software o bibliotecas en tu sistema.
Para activar el entorno virtual, usa el comando de tu sistema operativo:
macOS y Linux
source book-review-env/bin/activateWindows
book-review-env\Scripts\activateInstala las dependencias de Python para la aplicación monolítica. Las dependencias son bibliotecas externas de Python en las que se basa la app para funcionar correctamente. Estas bibliotecas se enumeran en el archivo
requirements.txt, y el siguiente comando las instala todas en tu entorno virtual:pip install -r monolith/requirements.txt
Ejecuta y explora Cymbal Books en el navegador
La app de Cymbal Books es intencionalmente sencilla y tiene las siguientes funciones:
- Una página principal que muestra todos los libros de la biblioteca
- Una página que muestra detalles sobre un libro
- Un botón en la página de detalles que, cuando se hace clic en él, muestra las opiniones de los libros
- La capacidad de mostrar imágenes de portadas de libros
En la página principal, se muestran tres libros y aparece un botón Ver detalles con cada uno:

Ahora que el entorno virtual está activo y las dependencias de la app están instaladas en ese entorno, ejecuta la app siguiendo estos pasos:
En tu máquina local, navega al directorio de la aplicación monolítica:
cd monolith/Inicia la app:
python3 mono.pyAbre tu navegador web y ve a la página principal de la app:
http://127.0.0.1:8080.Para ir a la página de detalles de un libro, haz clic en Ver detalles. La página de detalles proporciona más información sobre un libro, como su autor y año de publicación.
Para mostrar una lista de opiniones del libro, en una página de detalles, haz clic en Mostrar opiniones. En la siguiente imagen, se muestra la página de detalles del libro para el libro Zephyr's Timepiece y la primera opinión del libro:

Explora los archivos de la carpeta /monolith
Dedica un momento a examinar los archivos de la carpeta /monolith:
monolith/
├── mono.py
├── data/
│ ├── book-1.json
│ ├── book-2.json
│ ├── book-3.json
│ ├── reviews-1.json
│ ├── reviews-2.json
│ └── reviews-3.json
├── images/
│ ├── fungi_frontier.jpg
│ ├── melodic_mechanics.jpg
│ └── zephyrs_timepiece.jpg
├── static/
│ ├── styles_for_details.css
│ └── styles_for_home.css
└── templates/
├── book_details.html
└── home.html
Las carpetas y los archivos clave son los siguientes:
La carpeta
images/contiene las siguientes imágenes de portadas de libros, que se muestran en la app:fungi_frontier.jpgmelodic_mechanics.jpgzephyrs_timepiece.jpg
La carpeta
data/contiene los siguientes archivos JSON. Estos archivos contienen opiniones de los tres libros de la biblioteca de Cymbal Books y detalles sobre cada libro:reviews-1.json,reviews-2.json,reviews-3.jsonbook-1.json,book-2.json,book-3.json
Aunque las apps del mundo real suelen usar bases de datos, almacenar los datos de la app en archivos JSON simplifica su implementación. La app de ejemplo de Cymbal Book usa archivos JSON para que no necesites controlar código complejo. En cambio, puedes enfocarte en el objetivo principal de esta serie de instructivos, que es aprender a modularizar y alojar en contenedores la aplicación monolítica.
Puedes ignorar las siguientes carpetas porque los archivos que contienen son importantes para el diseño y el diseño de la app, pero no son directamente relevantes para la lógica de la app:
static/: Contiene archivos CSS que definen el estilo de la app.templates/: Contiene archivos HTML que definen el diseño y el contenido de la app.
Comprende la aplicación monolítica como una aplicación de Flask
La aplicación monolítica de este instructivo se compila con Flask, que es una biblioteca de Python para compilar aplicaciones web. Sin embargo, Flask no se suele usar en entornos de producción porque no admite la simultaneidad, lo que puede generar cuellos de botella de rendimiento con una carga pesada. Una aplicación de Flask tampoco tiene funciones sólidas de manejo de errores y escalabilidad.
La app de Cymbal Books usa Flask porque su simplicidad y configuración mínima facilitan la comprensión de los conceptos de modularización y alojamiento en contenedores. Para las aplicaciones de nivel de producción que usan Python, considera alternativas a Flask, como FastAPI o Django. También puedes usar frameworks diseñados para otros lenguajes, como Spring Boot para Java o Express.js para Node.js. Estos frameworks pueden ofrecer una mejor simultaneidad, escalabilidad y capacidades listas para producción para satisfacer las demandas de las aplicaciones del mundo real.
Examina mono.py
Toda la lógica de la aplicación monolítica se encuentra en un solo archivo llamado mono.py. Este archivo crea una aplicación de Flask. Una aplicación de Flask se ejecuta dentro de un servidor web, escucha URLs específicas, que se denominan extremos, y responde a las solicitudes que se realizan a esas URLs. Cuando alguien solicita una de estas URLs, ya sea visitándola en un navegador web o realizando la solicitud de forma programática, Flask ejecuta la parte de código correspondiente para controlar esa solicitud.
En la siguiente captura de pantalla, se muestra el archivo mono.py. Los cuadros resaltan los controladores de ruta de la app. Si bien un controlador entrega la página principal orientada al usuario, los demás se usan principalmente para la comunicación entre módulos, ya que entregan datos en formato JSON o archivos de imagen estáticos. En las siguientes secciones, se proporcionan más detalles sobre estos extremos.

En la captura de pantalla, los cuadros resaltan los controladores de ruta de la app. Un controlador de ruta consta de dos partes:
- La línea
@app.route()que define un patrón de URL (como/book/<id>/reviews) - La función que se ejecuta cuando se llama al extremo
Un extremo es una URL que coincide con el patrón definido en la línea @app.route().
Por ejemplo, cuando un usuario hace clic en Mostrar opiniones en una página de detalles del libro, la app realiza una solicitud a http://localhost:8080/book/1/reviews. El controlador de ruta de opiniones del libro responde a esta solicitud realizando los siguientes pasos:
- Reconoce que esta URL coincide con su patrón
/book/<id>/reviews. - Obtiene las opiniones del libro 1 de un archivo JSON.
- Envía esas opiniones al frontend en formato JSON.
Luego, el componente de detalles del libro muestra estas opiniones en un formato legible en la página web. La aplicación monolítica de Cymbal Books usa una biblioteca de Python llamada Flask para simplificar la implementación de controladores de ruta. En el siguiente instructivo, verás que Flask y los controladores de ruta desempeñan un papel fundamental cuando aprendes cómo se convierte la aplicación monolítica en una app modular.
Por qué los extremos de la aplicación monolítica son importantes para la modularización
Los extremos desempeñan un papel fundamental en las aplicaciones de Flask, incluida la app de Cymbal Books. Sin embargo, su importancia se extiende más allá del diseño monolítico, ya que comprender los extremos es esencial para dividir la app en módulos independientes. Esto se debe a los siguientes motivos:
- Funciones principales: Los extremos implementan las funciones principales de la app, como mostrar páginas o recuperar datos. Cada función está vinculada a un extremo específico.
- Modularización: Los extremos actúan como límites naturales o líneas de falla, para dividir la app en módulos más pequeños. Como verás en el siguiente instructivo, cada módulo de la versión modular de la app corresponde a una función con sus propios extremos.
- Comunicación: En un diseño modular, los extremos permiten que los módulos autónomos
se comuniquen entre sí. Comprender cómo se implementan los extremos en
mono.pysienta las bases para modularizar la app de Cymbal Books en módulos independientes en el siguiente instructivo.
Prueba los controladores de ruta de la aplicación monolítica
Para ver qué tipo de datos muestra cada controlador de ruta, visita los siguientes endpoints en tu navegador:
- Controlador de ruta de la página principal: Visita
http://localhost:8080/para ver una página HTML completa que muestra el catálogo de libros. - Controlador de ruta de detalles del libro: Visita
http://localhost:8080/book/1para ver una página HTML que muestra detalles sobre un libro en particular. La página recupera datos JSON sobre un libro del servidor y los presenta en un formato legible por humanos con una plantilla HTML. Para ver los detalles de otros libros, cambia el número de ID (1, 2 o 3) en la URL. - Controlador de ruta de opiniones del libro: Visita
http://localhost:8080/book/3/reviewspara ver los datos JSON de las opiniones del libro. Estos datos se procesan en un formato legible cuando haces clic enShow Reviewsen la página de detalles del libro para Melodic Mechanics. - Controlador de ruta de imágenes: Visita
http://localhost:8080/images/fungi_frontier.jpgpara ver un archivo de imagen. La página principal y las páginas de detalles del libro llaman a este extremo para mostrar las imágenes de portada de los libros.
Resumen
En este instructivo, configuraste y ejecutaste la app monolítica de Cymbal Books. Luego, aprendiste que la aplicación monolítica se implementa como una aplicación de Flask, que escucha URLs específicas, llamadas extremos, y responde a las solicitudes que se realizan a esas URLs.
¿Qué sigue?
En el siguiente instructivo, Modulariza la aplicación monolítica, verás cómo dividir la aplicación monolítica en módulos independientes.