Saltar al contenido principal

Resumen

La API de Twenty acepta 500 solicitudes por minuto por registro de aplicación para las solicitudes que una aplicación realiza en su propio nombre: ejecuciones sin ninguna persona detrás (cron, webhooks, hooks de instalación) y clientes creados con runAs: 'application'. El presupuesto se comparte entre todos los espacios de trabajo que instalaron la aplicación, y las solicitudes que lo superan se rechazan con un 429. Las solicitudes realizadas como la persona que activó una ejecución cuentan para los límites de esa persona en su lugar. Las prácticas siguientes mantienen una aplicación dentro de ese presupuesto a medida que aumenta su número de instalaciones, y dentro de los límites de los servicios a los que llama.
  • Distribuya las tareas cron de barrido con un retraso aleatorio. Se inicia un desencadenador cron en cada espacio de trabajo en el mismo minuto, por lo que cada instalación consume el presupuesto compartido a la vez. Limite el controlador cron a una puesta en cola, con un delayMs aleatorio en un intervalo amplio, como una hora. Las puestas en cola de trabajos también están limitadas a 2000 por minuto por registro de aplicación, y se omite una activación cron que supere ese límite en los espacios de trabajo restantes, así que mantenga un barrido idempotente y deje que la siguiente activación se ponga al día.
src/logic-functions/enqueue-nightly-sweep.ts
Con un retraso aleatorio en un intervalo de una hora, las mismas ejecuciones se distribuyen:
  • Agrupe en lotes los desencadenadores de eventos de base de datos. Una escritura masiva, como la sincronización de un buzón de correo, emite un evento por registro, miles en cuestión de segundos, y una ejecución por evento implica una solicitud por registro. Establezca batchMode: true, declare updatedFields y reduzca el lote a registros distintos antes de llamar a la API. Consulte Agrupación en lotes de eventos de base de datos.
  • Realice una solicitud por lote, no por registro. El límite cuenta solicitudes, no registros: un createMany con upsert: true que contiene 200 registros es una solicitud; 200 actualizaciones individuales son 200. Lea con filtros in y escriba con createMany o updateMany.
  • Consolide los picos en un único trabajo retrasado. Cuando los eventos revelan trabajo mayor que el propio evento, ponerlo en cola una vez por evento lo multiplica por el tamaño del pico. Ponga en cola un trabajo con delayMs y un jobId determinista que incluya un intervalo de tiempo; la cola ignora un id que ya contiene. Consulte Elija su propio id de trabajo.
  • Ritme las distribuciones con delayMs. Los trabajos puestos en cola sin retraso pasan a ser aptos todos a la vez y consumen el presupuesto en el mismo minuto. Agrúpelos en intervalos por minuto y retrase la página siguiente según los intervalos utilizados. Consulte Trabajos en segundo plano.
  • Reintente un 429 con espera progresiva o vuelva a ponerlo en cola con un retraso. El SDK de cliente genera una excepción ante cualquier respuesta que no sea 2xx, y una ejecución que espera internamente consume su propio tiempo de espera. Reintente con espera progresiva exponencial y un límite de intentos, o devuelva el trabajo a la cola con un retraso.
  • Almacene en caché lo que no cambia. Una búsqueda en cada evento cuesta una solicitud para un valor fijo en el momento de la conexión, como una identidad o un id de equipo. Almacénelo en el almacén de clave-valor cuando se registre la conexión.
  • Agrupe en lotes las solicitudes a API externas. Un servicio externo tiene su propio límite de tasa y una función de lógica tiene un tiempo de espera, por lo que n solicitudes por ejecución multiplican ambos. Cuando el proveedor ofrezca un punto de conexión por lotes, envíe una solicitud para todo el lote en lugar de una por registro y divida el lote según el máximo del proveedor.
  • Haga que el usuario pueda editar los parámetros predeterminados. Un valor codificado de forma fija en una función de lógica o un Workflow, como un umbral, un tamaño de lote o una opción predeterminada, se ajusta a un espacio de trabajo y obliga a realizar una nueva versión para todos los demás. Declárelo como una variable de aplicación con un valor predeterminado y léalo en tiempo de ejecución, para que los administradores del espacio de trabajo puedan ajustarlo desde la configuración de la aplicación. Consulte Configuración de la aplicación.