Gestionar picos transitorios con el control del flujo

A veces, las canalizaciones de datos experimentan picos en el tráfico publicado. Los picos de tráfico pueden abrumar a los suscriptores si no estás preparado. Una solución sencilla para evitar picos de tráfico es aumentar dinámicamente los recursos de los suscriptores de Pub/Sub para procesar más mensajes. Sin embargo, esta solución puede aumentar los costes o no funcionar al instante. Por ejemplo, puede que necesites muchas máquinas virtuales.

El control de flujo del lado del suscriptor permite a este regular la velocidad a la que se ingieren los mensajes. Por lo tanto, el control de flujo gestiona los picos de tráfico sin aumentar los costes o hasta que se amplía la capacidad del suscriptor.

El control de flujo es una función disponible en la biblioteca de cliente de alto nivel de Pub/Sub. También puedes implementar tu propia programación de control de flujo cuando uses una biblioteca de cliente de nivel bajo.

La necesidad de controlar el flujo indica que los mensajes se publican a un ritmo superior al que se consumen. Si este escenario es un estado persistente, en lugar de un pico transitorio en el volumen de mensajes, considera la posibilidad de aumentar el número de instancias de cliente de suscriptor.

Configuración del control de flujo

El control de flujo te permite configurar el número máximo de bytes asignados a las solicitudes pendientes y el número máximo de mensajes pendientes permitidos. Define estos límites según la capacidad de procesamiento de tus máquinas cliente.

Los valores predeterminados de las variables de control de flujo y los nombres de las variables pueden variar entre las bibliotecas de cliente. Por ejemplo, en la biblioteca de cliente de Java, las siguientes variables configuran el control de flujo:

  • setMaxOutstandingElementCount(): define el número máximo de mensajes de los que Pub/Sub no ha recibido confirmaciones o confirmaciones negativas.

  • setMaxOutstandingRequestBytes(): define el tamaño máximo de los mensajes de los que Pub/Sub no ha recibido confirmaciones ni confirmaciones negativas.

Si se supera el límite de setMaxOutstandingElementCount() o setMaxOutstandingRequestBytes(), el cliente suscriptor no extraerá más mensajes. Este comportamiento continúa hasta que se confirman o se rechazan los mensajes que ya se han extraído. De esta forma, podemos alinear el rendimiento con el coste asociado a la ejecución de más suscriptores.

Ejemplos de código para el control de flujo

Para controlar la velocidad a la que el cliente suscriptor recibe mensajes, usa las funciones de control de flujo del suscriptor. Estas funciones de control de flujo se ilustran en los siguientes ejemplos:

C++

Antes de probar este ejemplo, sigue las instrucciones de configuración de C++ que se indican en la guía de inicio rápido sobre cómo usar bibliotecas de cliente. Para obtener más información, consulta la documentación de referencia de la API de C++ de Pub/Sub.

namespace pubsub = ::google::cloud::pubsub;
using ::google::cloud::future;
using ::google::cloud::Options;
using ::