Guías

Define tiempos de espera razonables para trabajos por lotes de gran volumen

Un tiempo de espera que funciona bien para la consulta de una sola dirección cortará una solicitud masiva con unos pocos miles de elementos mucho antes de que el servidor haya terminado de procesarlos todos, lo que parece un fallo aunque la solicitud se habría completado con tiempo suficiente.

Por qué las solicitudes masivas necesitan más tiempo

Cada elemento de una matriz masiva es una consulta en sí misma, así que una solicitud con 2.000 elementos implica aproximadamente 2.000 veces el procesamiento de una sola consulta, aunque desde tu lado sea una única llamada HTTP. Un tiempo de espera de uno o dos segundos, razonable para una sola dirección, no se acerca ni de lejos a lo necesario para una solicitud de ese tamaño.

Ajustar el tiempo de espera al lote

Configura el tiempo de espera de tu cliente en proporción al tamaño de la matriz que envías, con cierto margen para la variación habitual, en lugar de usar un único valor fijo para todas las solicitudes que hace tu código, pequeñas o grandes.

timeout_seconds = max(5, item_count * 0.05)

Es un punto de partida que debes ajustar según el comportamiento que observes, no una cifra fija que tratar como definitiva, ya que el tiempo real de procesamiento por elemento no es una garantía publicada.

Mejor fragmentos pequeños que una solicitud gigante

En lugar de subir cada vez más los tiempos de espera para dar cabida a una única solicitud cada vez más grande, divide un trabajo muy grande en fragmentos de entre unos cientos y unos pocos miles de elementos cada uno. Los fragmentos pequeños necesitan tiempos de espera más cortos y predecibles, y un fallo a mitad de camino solo te cuesta el fragmento actual y no el trabajo entero.

Qué hacer cuando se agota el tiempo de espera

Si una solicitud agota el tiempo de espera en tu lado, es posible que no sepas si el servidor terminó de procesarla o no. En lugar de volver a enviar a ciegas el mismo fragmento, lo que podría contar dos veces contra tu cuota si la solicitud original sí se completó, revisa las cabeceras de cuota de tu última llamada correcta para estimar si el fragmento que agotó el tiempo probablemente se procesó, y vuelve a enviarlo con cautela.

La configuración del tiempo de espera no afecta al coste

Un tiempo de espera es solo una configuración del lado del cliente sobre cuánto estás dispuesto a esperar. No tiene ningún efecto en lo que cuesta una solicitud, que sigue siendo una solicitud por cada elemento procesado, tanto si tu cliente esperó todo el tiempo como si se rindió antes.

Ajustar el tiempo de espera al tamaño del lote, y preferir varios fragmentos pequeños a una solicitud muy grande, hace que los trabajos grandes sean fiables y fáciles de reanudar si algo sale mal. La estrategia de fragmentación y de cuota para trabajos grandes se trata con más detalle en la documentación sobre límites de frecuencia.