Prácticas recomendadas para la API Compute Engine

En este documento se describen las prácticas recomendadas para usar la API de Compute Engine y está dirigido a usuarios que ya la conocen. Si eres principiante, consulta los requisitos previos y cómo usar la API de Compute Engine.

Si sigues estas prácticas recomendadas, podrás ahorrar tiempo, evitar errores y mitigar los efectos de las cuotas de frecuencia.

Usar bibliotecas de cliente

Las bibliotecas de cliente son la forma recomendada de acceder a la API de Compute Engine mediante programación. Las bibliotecas de cliente proporcionan código que te permite acceder a la API a través de lenguajes de programación comunes, lo que puede ahorrarte tiempo y mejorar el rendimiento de tu código.

Consulta más información sobre las bibliotecas de cliente de Compute Engine y las prácticas recomendadas para bibliotecas de cliente.

Generar solicitudes REST mediante la consola de Cloud

Cuando crees un recurso, genera la solicitud REST mediante las páginas de creación o de detalles de recursos de la consola Google Cloud . Usar una solicitud REST generada ahorra tiempo y ayuda a evitar errores de sintaxis.

Consulta cómo generar solicitudes REST.

Esperar a que se completen las operaciones

No supongas que una operación (cualquier solicitud a la API que cambie un recurso) se ha completado o se ha realizado correctamente. En su lugar, usa un método wait para el recurso Operation para verificar que la operación se ha completado. No es necesario verificar una solicitud que no modifique recursos (como una solicitud de lectura que utilice un verbo HTTP GET), ya que la respuesta de la API ya indica si la solicitud se ha completado correctamente. Por lo tanto, la API de Compute Engine no devuelve recursos Operation para estas solicitudes.

Cada vez que se inicia correctamente una solicitud a la API, se devuelve un código de estado HTTP 200. Aunque el código 200 indica que el servidor ha recibido correctamente tu solicitud de la API, este código de estado no indica si la operación solicitada se ha completado correctamente o no. Por ejemplo, puedes recibir un 200, pero es posible que la operación aún no se haya completado o que haya fallado.

Cualquier solicitud para crear, actualizar o eliminar una operación de larga duración devuelve un recurso Operation, que registra el estado de esa solicitud. Una operación se completa cuando el campo status del recurso Operation es DONE. Para comprobar el estado, usa el método wait que coincida con el ámbito del recurso Operation devuelto:

El método wait devuelve un valor cuando se completa la operación o cuando la solicitud se acerca al plazo de 2 minutos. Cuando uses el método wait, evita el sondeo corto, que se produce cuando tus clientes envían solicitudes continuamente al servidor sin esperar una respuesta. Usar el método wait en un bucle de reintentos con retroceso exponencial para comprobar el estado de tu solicitud, en lugar de usar el método get con sondeo corto para el recurso Operation, ayuda a conservar tus cuotas de frecuencia y reduce la latencia.

Para obtener más información y ejemplos sobre el uso del método wait, consulta Gestionar respuestas de la API.

Para comprobar el estado de una operación solicitada, consulta Comprobar el estado de las operaciones.

Mientras esperas a que se complete una operación, ten en cuenta el periodo de conservación mínimo de la operación, ya que las operaciones completadas se pueden eliminar de la base de datos después de este periodo.

Paginación de los resultados de la lista

Cuando uses un método de lista (como un método *.list, un método *.aggregatedList o cualquier otro método que devuelva una lista), pagina los resultados siempre que sea posible para asegurarte de que lees toda la respuesta. Si no paginas, solo podrás recibir los primeros 500 elementos, según lo determinado por el parámetro de consulta maxResults.

Para obtener más información sobre la paginación en Google Cloud, consulta Paginación de listas. Para obtener información y ejemplos específicos, consulta la documentación de referencia del método list que quieras usar, como instances.list.

También puedes usar las bibliotecas de cliente de Cloud para gestionar la paginación.

Usar filtros de listas del lado del cliente para evitar errores de cuota

Si usas filtros con los métodos *.list o *.aggregatedList, se te cobrará una cuota adicional si hay más de 10.000 recursos filtrados en las solicitudes. Para obtener más información, consulta filtered_list_cost_overhead en Cuotas de velocidad.

Si tu proyecto supera esta cuota de frecuencia, recibirás un error 403 con el motivo rateLimitExceeded. Para evitar este error, usa filtros del lado del cliente en las solicitudes de lista.

Usar códigos de error, no mensajes de error

Las APIs de Google deben usar los códigos de error canónicos definidos por google.rpc.Code, pero los mensajes de error pueden cambiar sin previo aviso. Los mensajes de error suelen estar dirigidos a los desarrolladores, no a los programas.

Más información sobre los errores de la API

Minimizar los reintentos del lado del cliente para conservar las cuotas de frecuencia

Minimiza el número de reintentos del lado del cliente de un proyecto para evitar errores rateLimitExceeded y maximizar el uso de tus cuotas de frecuencia. Las siguientes prácticas pueden ayudarte a mantener las cuotas de frecuencia de tus proyectos:

  • Evita las comprobaciones cortas.
  • Usa las ráfagas con moderación y de forma selectiva.
  • Haz siempre tus llamadas en un bucle de reintentos con un tiempo de espera exponencial.
  • Usa un limitador de frecuencia del lado del cliente.
  • Divide tus aplicaciones en varios proyectos.

Evitar el sondeo corto

Evita el sondeo corto, en el que tus clientes envían solicitudes continuamente al servidor sin esperar una respuesta. Si haces un sondeo breve, será más difícil detectar solicitudes incorrectas que se contabilicen en tu cuota, aunque no devuelvan datos útiles.

En lugar de usar el sondeo corto, debes esperar a que se completen las operaciones.

Usa la función de ráfaga con moderación y de forma selectiva

Usa las ráfagas con moderación y de forma selectiva. El bursting es la acción de permitir que un cliente específico haga muchas solicitudes a la API en poco tiempo. Por lo general, el bursting se realiza en respuesta a situaciones excepcionales, como cuando tu aplicación necesita gestionar más tráfico de lo habitual. El uso de ráfagas agota rápidamente tu cuota de velocidad, así que asegúrate de usarlo solo cuando sea necesario.

Cuando sea necesario hacer ráfagas, usa APIs por lotes específicas siempre que sea posible, como la API de instancias en bloque o los grupos de instancias gestionados.

Más información sobre las solicitudes por lotes

Siempre debes hacer las llamadas en un bucle de reintentos con un tiempo de espera exponencial

Usa un tiempo de espera exponencial para distribuir de forma progresiva las solicitudes cuando se agote el tiempo de espera o cuando alcances tu cuota de frecuencia.

Cualquier bucle de reintentos debe tener un retroceso exponencial que asegure que los reintentos frecuentes no sobrecarguen tu aplicación ni superen tus cuotas de frecuencia. De lo contrario, corres el riesgo de que se vean afectados negativamente todos los demás sistemas del mismo proyecto.

Si necesitas un bucle de reintentos para una operación que ha fallado porque has alcanzado la cuota de frecuencia, tu estrategia de retroceso exponencial debe permitir que transcurra el tiempo suficiente entre reintentos para que se vuelva a llenar el contenedor de cuota (normalmente, cada minuto).

Por otro lado, si necesitas un bucle de reintentos para cuando esperar una operación alcance el tiempo de espera, el intervalo máximo de tu estrategia de espera exponencial no debe superar el periodo de retención mínimo de la operación. De lo contrario, es posible que recibas un error Not Found de la operación.

Para ver un ejemplo de cómo implementar un tiempo de espera exponencial, consulta el algoritmo de tiempo de espera exponencial de la API Identity and Access Management.

Usar un limitador de frecuencia del lado del cliente

Usa un limitador de frecuencia del lado del cliente. Un limitador de frecuencia de cliente establece un límite artificial para que el cliente en cuestión solo pueda usar una cantidad determinada de cuota, lo que impide que un cliente consuma toda tu cuota.

Dividir las aplicaciones en varios proyectos

Dividir las aplicaciones en varios proyectos puede ayudar a minimizar el número de solicitudes de tus segmentos de cuota. Como las cuotas se aplican a nivel de proyecto, puedes dividir tus aplicaciones para que cada una tenga su propio contenedor de cuota.

Resumen de la lista de comprobación

En la siguiente lista de comprobación se resumen las prácticas recomendadas para usar la API de Compute Engine.

Siguientes pasos