Skip to main content
InicioBlogGuíasEscalabilidad de la API de seguimiento: cómo gestionar el volumen de la temporada alta, los límites de frecuencia y el registro masivo

Escalabilidad de la API de seguimiento: cómo gestionar el volumen de la temporada alta, los límites de frecuencia y el registro masivo

17TRACK

Para escalar una API de seguimiento durante la temporada alta, coloca el registro de envíos detrás de una cola duradera, aplica los límites del proveedor entre todos los trabajadores, agrupa solo dentro de los límites documentados y procesa las actualizaciones de seguimiento de forma asíncrona. Trata el rendimiento del registro, el tráfico de reintentos y el procesamiento de webhooks como problemas de capacidad independientes. Añadir más trabajadores sin controlar las solicitudes salientes puede aumentar la limitación en lugar de reducir la acumulación.

Escalabilidad de la API de seguimiento: cómo gestionar el volumen de la temporada alta

Para los equipos de ingeniería que conectan un sistema de gestión de pedidos, una plataforma de almacén o un backend de comercio electrónico con un servicio de seguimiento, el objetivo no es simplemente enviar más solicitudes. Es registrar los envíos dentro de un intervalo de tiempo definido, conservar las actualizaciones durante los picos de tráfico y recuperarse de los fallos sin crear trabajo duplicado.

Dimensiona la carga en torno a los envíos, las solicitudes y las actualizaciones

El volumen diario de envíos no es suficiente para dimensionar una integración. Un almacén puede liberar la mayoría de sus números de seguimiento en un breve intervalo de despacho, mientras que las actualizaciones de estado llegan durante todo el día. Modela esas cargas por separado.

  • Llegadas de registros: Nuevos registros de envíos que entran en tu sistema por segundo o minuto, incluidas las importaciones y las ráfagas de liberación del almacén.
  • Tráfico de API saliente: Solicitudes de registro, consultas, correcciones, llamadas de conciliación y reintentos.
  • Tráfico de actualizaciones entrante: Entregas y reentregas de webhooks, cuando el proveedor las admite.
  • Trabajo posterior: Escrituras en la base de datos, notificaciones a clientes, eventos de analítica y cambios de estado de pedidos activados por cada actualización.

Establece un objetivo interno de registro, como el tiempo máximo aceptable entre la recepción de un número de seguimiento y la confirmación de su registro. Mantenlo separado de la actualización del seguimiento: un registro correcto no significa que ya esté disponible un escaneo del transportista.

Calcula la capacidad efectiva de registro

Para un endpoint de registro limitado por solicitudes, una relación útil para la planificación es:

Capacidad de registro = solicitudes permitidas por segundo × promedio de registros por solicitud × fracción de registros correctos

Esta es una estimación de planificación, no una garantía del proveedor. Supone que los límites de solicitudes son la restricción determinante. Las cuotas basadas en registros, el tamaño de la carga útil, la latencia y los límites compartidos de la cuenta pueden imponer un techo inferior.

Solo a modo ilustrativo, supón que una integración tiene permitidas dos solicitudes de registro por segundo y envía un promedio de 30 registros en cada solicitud. Su capacidad nominal es de 60 registros por segundo antes de considerar fallos y otras restricciones. Si los registros entrantes promedian 80 registros por segundo durante una ráfaga sostenida, la cola crece aproximadamente en 20 registros por segundo. Estas cifras son hipotéticas y no representan los límites de 17TRACK.

Calcula también la capacidad de recuperación. Si las nuevas llegadas continúan a una tasa λ y la capacidad efectiva de procesamiento es μ, una acumulación existente de B registros tarda aproximadamente B / (μ − λ) segundos en vaciarse cuando μ > λ. Si la capacidad de procesamiento no supera las llegadas, la acumulación no se vaciará en esas condiciones.

Confirma qué limita realmente el proveedor

Un límite de tasa y una asignación de uso resuelven problemas diferentes. Un límite de tasa controla la rapidez con la que pueden enviarse solicitudes o registros. Una asignación de uso puede controlar cuánta actividad de seguimiento puede consumir una cuenta durante un periodo de facturación o de derechos. Mantenerse por debajo de uno no demuestra el cumplimiento del otro.

Antes de establecer la cantidad de trabajadores, confirma lo siguiente con la documentación del proveedor y las condiciones de tu cuenta:

  • Si los límites se aplican por cuenta, clave de API, endpoint, dirección IP u otro ámbito.
  • Si la unidad contabilizada es una solicitud, un registro de seguimiento u otra operación.
  • Si los endpoints comparten un límite o tienen asignaciones independientes.
  • El máximo de registros y el tamaño de carga útil permitidos en una solicitud.
  • Cómo afectan al uso los envíos duplicados, los registros no válidos y los reintentos.
  • Si las respuestas exponen información sobre limitación o indicaciones de reintento.
  • En qué se diferencia el agotamiento de la cuota de una limitación temporal.

Para una integración con 17TRACK, utiliza la página oficial de Tracking API y la documentación de la API como puntos de partida para esta configuración. Confirma el comportamiento aplicable del endpoint y los límites de la cuenta antes del despliegue. Las capacidades de ejemplo de esta guía son ilustraciones de arquitectura, no afirmaciones sobre los derechos de 17TRACK, los tamaños de lote o las garantías del servicio.

Coloca una cola duradera entre el procesamiento de pedidos y el registro

No hagas que el checkout o la finalización del trabajo del almacén esperen a que un proveedor de seguimiento acepte un registro. Persiste el envío localmente, registra de forma duradera la tarea de registro y permite que los trabajadores en segundo plano gestionen el envío.

Un flujo práctico es:

  1. Guarda el envío y su intención de registro. Utiliza un outbox transaccional o un diseño equivalente para evitar guardar el pedido mientras se pierde la tarea en segundo plano.
  2. Valida y normaliza las entradas. Conserva los números de seguimiento como cadenas, incluidos los ceros iniciales. Aplica la normalización específica del transportista solo cuando esté justificada.
  3. Comprueba si ya existe un registro. Utiliza una identidad estable adecuada para el proveedor y tu modelo de datos.
  4. Coloca en la cola los registros aptos. Almacena el número de intentos, la próxima hora de reintento apta y suficiente contexto para el diagnóstico.
  5. Envía mediante un limitador compartido. Adquiere capacidad inmediatamente antes de la solicitud saliente.
  6. Persiste los resultados a nivel de registro. Separa el éxito confirmado, el fallo reintentable, el rechazo permanente y los resultados ambiguos.

Una cola absorbe una ráfaga; no crea capacidad del proveedor. Si el registro apto más antiguo sigue envejeciendo, investiga la diferencia entre la tasa de llegada y la capacidad de procesamiento en lugar de aumentar simplemente la cantidad de trabajadores.

Coordina los límites entre los trabajadores

Los trabajadores independientes no deben asumir que cada uno puede consumir toda la asignación de la cuenta. Utiliza un limitador de tasa coordinado o un despachador que asigne un presupuesto compartido de solicitudes. Incluye las importaciones programadas, los scripts operativos y los trabajos de conciliación en ese presupuesto.

La tasa y la concurrencia son controles diferentes. El limitador controla la frecuencia con la que se inician las solicitudes; un límite de concurrencia controla cuántas permanecen en curso. Ambos son útiles cuando aumenta la latencia del proveedor. Aumentar la concurrencia puede ayudar a una carga limitada por la latencia, pero no puede superar un límite de tasa saliente.

Utiliza el registro masivo sin perder el control a nivel de registro

Cuando un endpoint admite varios registros por solicitud, agruparlos puede reducir la sobrecarga de solicitudes. No necesariamente reduce el uso basado en registros, y el lote máximo permitido no siempre es la mejor opción operativa.

Construye los lotes utilizando dos activadores: un número máximo de registros y un tiempo máximo de espera. Envía el lote cuando se alcance cualquiera de los dos. Esto permite que los periodos de mucha actividad llenen los lotes de forma eficiente sin obligar al tráfico de bajo volumen a esperar indefinidamente.

  • Respeta los límites de carga útil además del número de registros. Los metadatos opcionales pueden hacer que lotes del mismo tamaño sean muy diferentes en bytes.
  • Mantén un manifiesto interno de lotes. Registra qué identidades de envíos locales se enviaron y asocia correctamente cada resultado devuelto.
  • Inspecciona los resultados a nivel de aplicación. Una respuesta HTTP exitosa no demuestra por sí sola que todos los registros hayan sido aceptados.
  • Reintenta solo los registros que necesiten reintento. Repetir los registros correctos crea tráfico innecesario y puede tener consecuencias sobre el uso.
  • Envía los fallos de validación permanentes a corrección. Una carga útil no válida sin cambios no debe circular por la cola de reintentos.

Un tiempo de espera es especialmente importante: el proveedor puede haber aceptado la solicitud aunque tu cliente no haya recibido la respuesta. Marca ese resultado como ambiguo. Resuélvelo mediante un mecanismo de idempotencia compatible, una regla documentada de registro duplicado o una consulta de conciliación cuando esté disponible. No supongas que una escritura que agotó el tiempo de espera ha fallado.

Separa el tráfico en tiempo real de las importaciones históricas

Una recuperación histórica no debe consumir toda la capacidad necesaria para los envíos recién despachados. Utiliza colas separadas con programación ponderada o reservas de capacidad explícitas. Permite que las importaciones utilicen la capacidad disponible, conservando una asignación mínima para los registros en tiempo real. Aplica envejecimiento u otra regla de equidad para que los registros de menor prioridad se procesen finalmente.

Haz que los reintentos sean controlados, retrasados y limitados

HTTP 429 significa “Too Many Requests”. RFC 6585 especifica que una respuesta 429 puede incluir una cabecera Retry-After. RFC 9110 define el valor de esa cabecera como una fecha HTTP o un retraso en segundos. Un cliente debe analizar ambos formatos en lugar de asumir que siempre se devuelve un entero.

Cuando se proporcione un retraso de reintento válido, no reintentes antes de que expire. Cuando no haya indicaciones de reintento, utiliza un backoff exponencial limitado con jitter: aumenta progresivamente el retraso entre intentos y añade aleatoriedad para que los trabajadores no reintenten todos al mismo tiempo. Los reintentos deben pasar por el mismo limitador saliente que los primeros intentos.

Clasifica los fallos antes de reintentar:

  • Limitación: Retrasa el trabajo afectado y reduce la presión de despacho dentro del ámbito de límite correspondiente.
  • Fallos transitorios de red o del servidor: Reintenta dentro de una política limitada, teniendo en cuenta los resultados ambiguos de escritura.
  • Fallos de autenticación o autorización: Alerta y pausa el trabajo afectado hasta corregir las credenciales o los permisos.
  • Fallos de validación: Corrige o aísla el registro en lugar de reenviarlo sin cambios.
  • Asignación agotada: Sigue la solución documentada para la cuenta en lugar de tratarlo como un breve pico de tráfico.

Establece tanto un límite de intentos como una edad máxima de reintento. Mueve los elementos agotados a una cola de mensajes no entregables con un motivo, un responsable y un procedimiento de repetición. De lo contrario, los fallos antiguos pueden consumir silenciosamente la capacidad destinada a nuevos envíos.

Escala la recepción de webhooks de forma independiente

Cuando el proveedor ofrece webhooks adecuados, pueden reducir las consultas repetidas de estado. También crean una carga de trabajo entrante independiente que debe permanecer disponible durante las ráfagas de actualizaciones.

Mantén el endpoint receptor enfocado: valida la solicitud utilizando el mecanismo documentado por el proveedor, almacena el evento de forma duradera y devuelve la confirmación requerida. Procesa los cambios de pedidos, la analítica y los mensajes a clientes de forma asíncrona. No confirmes la recepción antes de la aceptación duradera si hacerlo pudiera provocar la pérdida del evento.

Diseña los consumidores para tolerar entregas duplicadas, salvo que el contrato del proveedor establezca explícitamente lo contrario. Prefiere un identificador de evento estable y documentado para la deduplicación. Si no existe, diseña y prueba cuidadosamente una identidad compuesta: utilizar solo una etiqueta de estado podría fusionar eventos distintos en uno.

Protégente también contra las actualizaciones fuera de orden. Almacena el historial de eventos separado del estado actual derivado del envío. Aplica las marcas de tiempo de eventos y las reglas de transición documentadas cuando estén disponibles; no supongas que el orden de llegada es el orden de los eventos ni que los estados de los envíos forman una secuencia universalmente creciente.

Mantén la conciliación enfocada y limitada por tasa. Puede investigar supuestas lagunas de entrega o registros ambiguos, pero consultar agresivamente cada envío puede recrear la carga saliente que los webhooks pretendían evitar.

Prueba la recuperación, no solo el rendimiento máximo

Realiza pruebas de carga sobre tus propios componentes utilizando un simulador del proveedor. Coordina las pruebas que envíen un tráfico significativo a un proveedor real y mantente dentro de los límites autorizados. Una prueba exitosa debe demostrar que el sistema vuelve a la normalidad después de una interrupción, no solo que acepta una gran ráfaga.

  • Reproduce una ráfaga propia de un almacén seguida de tráfico normal continuo.
  • Inyecta respuestas de limitación, latencia elevada y fallos temporales del servidor.
  • Simula el rechazo parcial de un lote y un tiempo de espera después de la aceptación en el servidor.
  • Entrega eventos de webhook duplicados y fuera de orden.
  • Interrumpe el acceso a la base de datos y verifica que los eventos no aceptados no se confirmen falsamente.
  • Ejecuta una recuperación histórica junto con registros en tiempo real y comprueba la equidad.
  • Reproduce elementos de la cola de mensajes no entregables sin omitir los controles de tasa.

Supervisa la antigüedad del registro apto más antiguo, la latencia de aceptación, la tasa de éxito a nivel de registro, la frecuencia de limitación, el volumen de reintentos, el retraso del procesamiento de webhooks y el crecimiento de la cola de mensajes no entregables. La profundidad de la cola por sí sola no es suficiente: una cola grande puede vaciarse rápidamente, mientras que una cola pequeña puede contener algunos envíos críticos para el negocio que fallan repetidamente.

Antes de la temporada alta, asigna la responsabilidad operativa. Ingeniería debe ser responsable de los controles de despacho y las herramientas de recuperación; el responsable de la integración debe confirmar los derechos del proveedor; operaciones debe definir qué envíos reciben prioridad. Documenta cuándo pausar las importaciones, solicitar capacidad adicional o investigar actualizaciones faltantes. El diseño más sólido es el que sigue siendo predecible cuando el tráfico supera su capacidad de procesamiento inmediata.

Preguntas frecuentes

¿Añadir claves de API aumentará el rendimiento?

No necesariamente. Varias claves pueden compartir una asignación de nivel de cuenta. Confirma con el proveedor el ámbito del límite y el método de escalado permitido. No utilices la rotación de claves para eludir las restricciones.

¿Cada registro debe utilizar el lote más grande posible?

No. Los lotes más grandes pueden mejorar la eficiencia de las solicitudes, pero esperar a llenarlos aumenta la latencia con un volumen bajo. Utiliza un límite de tamaño documentado junto con un temporizador de vaciado y ajústalos según la latencia de aceptación y el comportamiento de los fallos medidos.

¿Cómo pueden evitarse los registros duplicados después de un tiempo de espera?

Utiliza una identidad local duradera del envío y el comportamiento documentado del proveedor respecto a la idempotencia o la gestión de duplicados. Si el resultado sigue siendo incierto, concílialo cuando sea compatible antes de repetirlo. La deduplicación local por sí sola no puede demostrar si una solicitud remota tuvo éxito.

¿Un registro correcto significa que la información de seguimiento está actualizada?

No. La aceptación del registro, la disponibilidad del evento del transportista, el procesamiento del proveedor y tu propio procesamiento de actualizaciones son etapas separadas. Mídelas por separado para que un escaneo retrasado del transportista no se confunda con una acumulación de registros.

¿Cuándo debe un equipo solicitar más capacidad al proveedor?

Solicítala cuando las llegadas previstas y el tiempo de recuperación requerido superen la capacidad utilizable verificada después de eliminar los reintentos evitables, los envíos duplicados y los lotes ineficientes. Una asignación mayor no solucionará un consumidor bloqueado ni un cuello de botella de la base de datos, así que identifica primero la restricción determinante.

Fuentes

Loading