Estructura servicios web en App Engine

Lee este documento para comprender cómo estructurar los servicios y recursos relacionados de tu aplicación en App Engine.

Estructura del directorio

Cada versión de tu servicio de App Engine está definida en un archivo de configuración app.yaml. El requisito mínimo para implementar una aplicación simple es definir el archivo app.yaml. Este archivo app.yaml funciona como un descriptor de implementación y define el tipo de escalamiento, los controladores del entorno de ejecución y el resto de la configuración de los recursos de una versión específica de un servicio. Si estás implementando distintas versiones de un servicio, puedes crear varios archivos YAML en el mismo directorio a fin de representar la configuración para cada versión.

Puedes crear directorios separados para cada servicio en el directorio raíz de la aplicación cuando desarrolles de forma local. Si alojas la aplicación fuera del sistema de control de versión (VCS), p. ej., GitHub, también puedes estructurarla para usar directorios separados en un repositorio o usar repositorios separados en cada servicio. Cada directorio o repositorio debería representar un solo servicio y contener el archivo app.yaml de ese servicio, además del código fuente asociado.

Puedes especificar un nombre único para cada archivo app.yaml de tu servicio. Por ejemplo, puedes nombrar un archivo de configuración con el nombre de tu servicio o utilizar nombres únicos que representen cada versión de ese servicio específico, como service1.yaml o app.standard.yaml.

Los otros archivos de configuración opcionales deben encontrarse en el directorio raíz o repositorio del servicio default de tu aplicación. Estos archivos de configuración opcionales aplican ajustes en toda la aplicación que no son específicos de un servicio en particular, incluidos los archivos dispatch.yaml, index.yaml y cron.yaml.

Ejemplos

En el siguiente ejemplo, se muestra cómo podría ser una aplicación con tres servicios si la estás desarrollando de manera local. El archivo opcional dispatch.yaml se agregó a la aplicación en el directorio raíz. Además, en la raíz, hay tres directorios para cada servicio de la aplicación. El subdirectorio de service1 incluye los archivos fuente y de configuración de ese servicio. Igualmente, service2 y service3 están en directorios separados, que contienen los archivos de cada servicio, aunque service3 incluye dos versiones del archivo de configuración YAML.

Gráfico de jerarquías de los servicios YAML

En el caso de Node.js en el entorno estándar, una aplicación simple solo necesita que se agregue el archivo app.yaml en la misma ubicación que los archivos de origen de la aplicación. En el caso de una aplicación con un solo servicio, esta incluirá únicamente el servicio default, y todos los archivos pueden estar en el mismo directorio, por ejemplo, en la raíz de esa aplicación.

Gráfico de jerarquías de un único servicio YAML

Consideraciones de diseño para el tiempo de actividad de las instancias

Las fallas de hardware o software que causan que la aplicación finalice antes de tiempo o las instancias se reinicien frecuentemente pueden ocurrir de improvisto, y su resolución puede llevar mucho tiempo. Tu aplicación debe manejar estas fallas.

A continuación, se detallan algunas estrategias para evitar el tiempo de inactividad por reinicios de las instancias.

  • Disminuye la cantidad de tiempo que lleva reiniciar las instancias o iniciar las nuevas.
  • Crea puntos de control de forma periódica para los cálculos de larga duración, a fin de que permitirte reanudar el proceso desde ese estado.
  • La app debe ser "sin estado" para que no se almacene nada en la instancia.
  • Usa colas para ejecutar tareas asíncronas.
  • Si configuras tus instancias para escalamiento manual, haz lo siguiente:
    • Usa el balanceo de cargas en varias instancias.
    • Configura más instancias de las necesarias para controlar un tráfico normal.
    • Escribe una lógica de resguardo que use resultados almacenados en caché cuando no esté disponible una instancia de escalamiento manual.

Obtén más información sobre las instancias en Cómo se administran las instancias.

El servicio default

Cada aplicación de App Engine incluye un servicio default. Debes implementar una versión inicial de tu aplicación para el servicio default antes de poder crear servicios adicionales y así implementarlos en tu app.

El servicio predeterminado se puede especificar de manera opcional en el archivo app.yaml con la configuración service: default.

Las solicitudes enviadas a tu app con el proyecto de GCP se envían al servicio default, por ejemplo, https://[PROJECT_ID].appspot.com. Para obtener más información sobre cómo orientar otros servicios, consulta Comunicación entre servicios.

Archivos de configuración opcionales

Los siguientes archivos de configuración controlan las funciones opcionales que se aplican a todos los servicios en una aplicación individual. Consulta los siguientes temas para obtener más detalles sobre cada función opcional.

Consideraciones sobre el almacenamiento de archivos y datos

Desde App Engine, puedes acceder fácilmente a otros servicios de GCP como Cloud Datastore, Cloud SQL y Cloud Storage.

También puedes usar una base de datos externa o de terceros si es compatible con tu lenguaje y accesible desde tu instancia de App Engine.

Para obtener más información sobre cómo almacenar archivos en GCP o de manera externa, consulta Información sobre el almacenamiento de archivos y datos.

Además, puedes seleccionar la forma en que deseas entregar el contenido estático. Puedes entregarlo desde tu app de App Engine directamente, alojarlo en una de las opciones de GCP, como Cloud Storage, o usar una red de entrega de contenido (CDN) de terceros. Para obtener más información sobre la entrega de contenido estático, consulta Entrega archivos estáticos.

¿Te ha resultado útil esta página? Enviar comentarios:

Enviar comentarios sobre...

Documentación del entorno estándar de App Engine para Node.js