Muchas aplicaciones necesitan realizar procesamientos en segundo plano fuera del contexto de una solicitud web. En este caso, la aplicación de muestra de Bookshelf le envía tareas a un servicio de trabajador separado para que las ejecute. El trabajador recibe información desde la API de Google Libros y actualiza la información de los libros en la base de datos. En esta muestra se indica cómo configurar servicios independientes en Google App Engine, cómo usar Cloud Pub/Sub para distribuir mensajes y cómo solucionar eventos del ciclo de vida.
Esta página forma parte de un instructivo de varias páginas. Ve a la aplicación Bookshelf en Node.js para comenzar desde el principio y leer las instrucciones de configuración.
Configuraciones
Primero, crea un tema nuevo en Cloud Pub/Sub:
- Ve a la página de Temas de Pub/Sub de Cloud Console.
- Haz clic en Crear tema.
- Escribe un nombre para tu tema de Pub/Sub, como
sample-topic
.
Luego, crea una suscripción nueva al tema que acabas de crear:
- Haz clic en el nombre que acabas de crear en la página de Temas de Pub/Sub de Cloud Console.
- Haz clic en Crear suscripción.
- Escribe un nombre para tu suscripción a Pub/Sub, como
sample-subscription
. Elige Enviar a una URL de extremo como tipo de envío. Usa
https://worker-dot-[YOUR-PROJECT-ID].appspot.com/endpoint
para la URL de extremo. Reemplaza
[YOUR-PROJECT-ID]
con tu valor.
Finalmente, copia tu archivo config.json
desde la sección Autenticar usuarios de este instructivo hasta el directorio nodejs-getting-started/6-pubsub
. Agrega las líneas siguientes al archivo copiado:
"TOPIC_NAME": "[YOUR_TOPIC_NAME]",
Reemplaza [YOUR_TOPIC_NAME]
con el nombre del tema que acabas de crear.
Instalar dependencias
Usa npm
para instalar las dependencias en el directorio nodejs-getting-started/6-pubsub
:
npm install
Ejecutar la aplicación en la máquina local
Usa
npm
para iniciar un servidor web local:npm start
Configura la variable de entorno
PORT
y usanpm
para iniciar el trabajador:SCRIPT=worker.js PORT=8081 npm start
En el navegador web, ingresa la siguiente dirección:
http://localhost:8081
. La página web del worker muestra en su estado la cantidad de libros que ha procesado. Ten en cuenta que el servicio de trabajador solo comienza a procesar los mensajes después de la implementación.
Implementar la aplicación en el entorno estándar de App Engine
Implementa el trabajador desde el directorio
nodejs-getting-started/6-pubsub
:gcloud app deploy worker.yaml
Implementa la aplicación de muestra desde el directorio
nodejs-getting-started/6-pubsub
:gcloud app deploy
En el navegador web, ingresa la siguiente dirección. Reemplaza
[YOUR_PROJECT_ID]
por el ID del proyecto:https://[YOUR_PROJECT_ID].appspot.com
Si actualizas tu app, podrás implementar la versión actualizada mediante el mismo comando que usaste para implementar la app por primera vez. La implementación nueva crea una versión nueva de la app y la convierte a la versión predeterminada. Se conservan las versiones anteriores de la aplicación. De forma predeterminada, el entorno estándar de App Engine escala a 0 instancias cuando no hay tráfico entrante a una versión, por lo que las versiones sin usar no deben tener costo. Sin embargo, todas estas versiones de la aplicación son recursos facturables.
Consulta la sección Limpiar en el paso final de este instructivo para obtener más información sobre la limpieza de recursos facturables, incluidas las versiones de la aplicación no predeterminadas.
Estructura de la aplicación
El siguiente diagrama muestra los componentes de la aplicación y la manera en que se conectan entre sí.
La aplicación publica eventos en Cloud Pub/Sub cada vez que se actualiza un libro en la base de datos. El worker, que se ejecuta de manera independiente, escuchará estos eventos. Cuando se recibe el evento, el worker le solicita a la API de Google Libros la información del libro y actualiza el registro del libro en la base de datos. Una vez que se actualice el registro, deberías poder actualizar la página de información del libro para ver la información nueva.
Comprensión del código
En esta sección se explica el código de la aplicación y su funcionamiento.
Publicación de eventos en Cloud Pub/Sub
Los eventos se publican en temas en Cloud Pub/Sub.
La aplicación enviará un evento al tema que contiene el ID del libro que se actualizó. Esto le informará al worker qué libro debe procesar.
Cada vez que un libro se crea o actualiza, se llama a la función queueBook
desde el modelo. La implementación depende del backend de base de datos que elijas:
Datastore
Cloud SQL
La aplicación worker
La aplicación worker es independiente y escucha a los eventos de Pub/Sub en vez de atender a una aplicación web orientada al usuario. Esto divide a la aplicación en dos servicios independientes que se comunican a través de Pub/Sub en lugar de directamente entre sí. Separar los servicios te permite configurar y escalar la cantidad de instancias de trabajador y de frontend de manera independiente.
Escuchar eventos
El servicio de trabajador acepta mensajes de Cloud Pub/Sub en /endpoint
:
App Engine distribuye solicitudes (mensajes de Pub/Sub) entre todas las instancias disponibles en el servicio de trabajador con base en su carga de trabajo actual y escala el servicio de forma predeterminada si se produce un aumento en la cantidad de mensajes.
Procesar libros
Para procesar el libro, el worker encuentra el libro según su ID, busca información adicional y luego guarda la información actualizada en la base de datos:
La función findBookInfo
controla el procesamiento de la nueva información del libro:
La función findBookInfo
llama a queryBooksApi
para que obtenga más información desde Google Libros:
La función findBookInfo
también intenta descargar cualquier foto de portada disponible y luego la sube a Cloud Storage:
Ejecución en Google Cloud Platform
Si bien el worker no atiende ninguna solicitud web de usuarios, se recomienda proporcionar verificaciones de estado para todas las aplicaciones que se ejecutan en Google App Engine.
Las verificaciones de estado envían una solicitud HTTP GET
periódica a /_ah/health
para asegurarse de que la instancia de tu aplicación funcione correctamente. Según la configuración predeterminada, cualquier respuesta de estado diferente de HTTP 500
, incluida HTTP 404
, indica una instancia en buen estado. No fue necesario que definieras explícitamente una verificación de estado en la aplicación de frontend porque respondió a /_ah/health
con un código de estado 404
.
Para controlar las verificaciones de estado del worker de backend, puedes crear un servidor web simple:
Ahora, el worker escuchará tanto solicitudes de verificación de estado como eventos de Cloud Pub/Sub.
Además, el worker necesita su propia configuración de módulos.
Esta configuración es muy similar al archivo app.yaml
que se usa para el
frontend, pero la diferencia clave es la cláusula service: worker
. Las aplicaciones en App Engine pueden tener varios servicios independientes.
Significa que puedes implementar, configurar, escalar y actualizar fácilmente partes de tu aplicación de manera independiente.
Limpieza
Sigue estos pasos para evitar que se apliquen cargos a tu cuenta de Google Cloud Platform por los recursos que usaste en este instructivo:
Borra el proyecto
La manera más fácil de eliminar la facturación es borrar el proyecto que creaste para el instructivo.
Para borrar el proyecto, haz lo siguiente:
- En la GCP Console, dirígete a la página Proyectos.
- En la lista de proyectos, selecciona el proyecto que deseas borrar y haz clic en Borrar.
- En el cuadro de diálogo, escribe el ID del proyecto y, luego, haz clic en Cerrar para borrar el proyecto.
Borra las versiones no predeterminadas de tu app
Si no quieres borrar tu proyecto, puedes borrar las versiones no predeterminadas de tu app para reducir los costos.
Para borrar una versión de una app, haz lo siguiente:
- En GCP Console, dirígete a la página Versiones de App Engine.
- Haz clic en la casilla de verificación junto a la versión de app no predeterminada que deseas borrar.
- Haz clic en el botón Borrar en la parte superior de la página para borrar la versión de la app.
Borra tu instancia de Cloud SQL
Para borrar una instancia de Cloud SQL, haz lo siguiente:
- En GCP Console, ve a la página SQL Instances.
- Selecciona el nombre de la instancia de SQL que quieres borrar.
- Haz clic en el botón Borrar en la parte superior de la página para borrar la instancia.
Borra tu depósito de Cloud Storage
Para borrar un depósito de Cloud Storage, haz lo siguiente:
- En la GCP Console, dirígete al navegador de Cloud Storage.
- Haz clic en la casilla de verificación junto al depósito que deseas borrar.
- Haz clic en el botón Borrar en la parte superior del depósito.
¿Qué sigue?
Aprende a ejecutar la app de muestra Bookshelf en Node.js en Compute Engine.
Prueba otras características de Google Cloud Platform tú mismo. Revisa nuestros instructivos.