Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

419
Vistas
¿Cómo evitar la fuga de memoria al usar pub sub para llamar a la función?

Me quedé con el problema de rendimiento al usar pubsub para activar la función.

 //this will call on index.ts export function downloadService() { // References an existing subscription const subscription = pubsub.subscription("DOWNLOAD-sub"); // Create an event handler to handle messages // let messageCount = 0; const messageHandler = async (message : any) => { console.log(`Received message ${message.id}:`); console.log(`\tData: ${message.data}`); console.log(`\tAttributes: ${message.attributes.type}`); // "Ack" (acknowledge receipt of) the message message.ack(); await exportExcel(message);//my function // messageCount += 1; }; // Listen for new messages until timeout is hit subscription.on("message", messageHandler); } async function exportExcel(message : any) { //get data from database const movies = await Sales.findAll({ attributes: [ "SALES_STORE", "SALES_CTRNO", "SALES_TRANSNO", "SALES_STATUS", ], raw: true, }); ... processing to excel// 800k rows ... bucket.upload to gcs }

La función anterior funciona bien si activé SOLO un mensaje pubsub. Sin embargo, la función tendrá un problema de fuga de memoria o un problema de tiempo de espera de conexión a la base de datos si activé muchos mensajes pubsub en un corto período de tiempo.

El problema que encontré es que el primer procesamiento aún no ha terminado, pero otras solicitudes de pubsub llamarán directamente a la función nuevamente y procesarán al mismo tiempo.

No tengo idea de cómo resolver esto, pero estaba pensando en implementar el trabajador de la cola o la tarea de la nube de Google resolverá el problema.

over 4 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

Como mencionó @chovy en los comentarios, es necesario poner en cola las llamadas a la función excelExport ya que la ejecución de la función no se mantiene al día con la tasa de invocación. Uno de los módulos que se pueden usar para poner en cola las llamadas a funciones es async .

Como alternativa, puede emplear funciones de control de flujo en el lado del suscriptor. Las canalizaciones de datos a menudo reciben picos esporádicos en el tráfico publicado que pueden abrumar a los suscriptores en un esfuerzo por ponerse al día. La respuesta habitual al alto rendimiento publicado en una suscripción sería escalar automáticamente de forma dinámica los recursos del suscriptor para consumir más mensajes. Sin embargo, esto puede generar costos no deseados, por ejemplo, es posible que deba usar más máquinas virtuales, lo que puede generar una planificación de capacidad adicional. Las funciones de control de flujo en el lado del suscriptor pueden ayudar a controlar el comportamiento no saludable de estas tareas en la tubería al permitir que el suscriptor regule la velocidad a la que se ingieren los mensajes. Consulte este blog para obtener más información sobre las funciones de control de flujo.

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda