Websocket API duración de la función inconsistente

Tengo una API de websocket usando AWS APIGW. Sólo el problema es, es muy inconsistente con si se da o no tiempo fuera. Leyendo a través de los registros, no estoy viendo ningún error, sólo que la misma función con las mismas entradas toma significativamente más tiempo para funcionar entonces hizo 2 segundos antes. Aquí está mi código.

def lambda_handler(event, context):

    connectionId=connectionId

    body = json.loads(event['body'])
    message = body['message']
    
    apigatewaymanagementapi = boto3.client('apigatewaymanagementapi', endpoint_url = endpoint)
    
    apigatewaymanagementapi.post_to_connection(Data=message, ConnectionId=connectionId)

    return {
        'statusCode': 200
    }

Aquí están mis registros:

2020-12-18T02:33:47.178-05:00   {"action": "onMessage", "message": "hello"}
2020-12-18T02:33:47.765-05:00   END RequestId: 5ce356a0-dc4a-40da-956a-ff754acf70c2
2020-12-18T02:33:47.765-05:00   REPORT RequestId: 5ce356a0-dc4a-40da-956a-ff754acf70c2  Duration: 628.00 ms Billed Duration: 629 ms Memory Size: 128 MB Max Memory Used: 26 MB  
2020-12-18T02:33:49.232-05:00   START RequestId: 608a007b-50c1-4052-b70e-2843a69c7d72 Version: $LATEST
2020-12-18T02:33:49.237-05:00   {"action": "onMessage", "message": "hello"}
2020-12-18T02:33:52.238-05:00   END RequestId: 608a007b-50c1-4052-b70e-2843a69c7d72
2020-12-18T02:33:52.238-05:00   REPORT RequestId: 608a007b-50c1-4052-b70e-2843a69c7d72  Duration: 3003.36 ms    Billed Duration: 3000 ms    Memory Size: 128 MB Max Memory Used: 27 MB  
2020-12-18T02:33:52.238-05:00   2020-12-18T19:33:52.238Z 608a007b-50c1-4052-b70e-2843a69c7d72 Task timed out after 3.00 seconds

Usted puede ver la duración del primer evento es significativamente más corto entonces la duración del segundo evento, a pesar de que son idénticos

¿Alguien sabe por qué está pasando esto y qué puedo hacer para evitarlo?

Pregunta hecha hace 3 años, 4 meses, 27 días - Por binarybrainiac


3 Respuestas:

  • Actualización Todo lo que tenía que hacer era aumentar el tiempo en la función de lambda!

    Respondida el Dec 18, 2020 a las 19:53 - por daniel1

    Votos positivos: 0 | Votos negativos: 0

  • El problema que estás experimentando con la duración inconsistente de tu función lambda puede ser causado por varias razones, pero aquí hay algunas posibles soluciones que podrían ayudar a resolver el problema:

    • Optimización del código: Revisa tu función lambda para asegurarte de que esté optimizada. Asegúrate de que estás utilizando las mejores prácticas de programación y de AWS Lambda para garantizar un rendimiento eficiente.
    • Gestión de recursos: Asegúrate de que estás asignando suficientes recursos a tu función lambda, como memoria y tiempo de ejecución. Si la función no tiene suficientes recursos asignados, puede verse afectada por tiempos de espera y rendimiento inconsistentes.
    • Manejo de excepciones: Asegúrate de que tu función lambda maneje adecuadamente las excepciones y errores. Si hay errores no manejados en la función, esto podría provocar tiempos de espera inesperados.
    • Monitoreo y registro: Sigue monitoreando los registros de tu función lambda para identificar cualquier patrón o anomalía en el rendimiento. Esto te ayudará a detectar y solucionar problemas de manera oportuna.
    • Revisión de configuración de API Gateway: Verifica la configuración de tu API Gateway para asegurarte de que está correctamente integrada con tu función lambda y que no hay configuraciones que puedan estar causando tiempos de espera o retrasos.
    • Control de límites de AWS: Revisa los límites de AWS Lambda y API Gateway para asegurarte de que no estés excediendo los límites permitidos, lo que podría causar tiempos de espera inesperados.

    Implementando estas sugerencias y realizando un seguimiento detallado de tu función lambda, deberías poder mejorar la consistencia en la duración de tu función y evitar tiempos de espera inesperados.

    Respondida el Dec 19, 2020 a las 19:53 - por Gpt

    Votos positivos: 0 | Votos negativos: 0

  • Existen varias razones potenciales por las que la duración de la función de la API de WebSocket es inconsistente:

    Retrasos de red:

    La latencia de la red entre el cliente y AWS puede variar, lo que afecta el tiempo que tarda la función en recibir y procesar los mensajes. Los problemas de conectividad intermitentes o la congestión de la red también pueden provocar retrasos.

    Carga del servidor:

    Si varias funciones se ejecutan simultáneamente en el mismo servidor, pueden competir por recursos, lo que provoca un aumento del tiempo de respuesta. Los picos repentinos de tráfico o las cargas de trabajo pesadas pueden sobrecargar los servidores, lo que lleva a tiempos de ejecución más largos.

    Problemas de código:

    El código de la función puede contener bucles infinitos, código de bloqueo o llamadas a servicios externos lentos, lo que puede prolongar la ejecución de la función. Las excepciones no controladas o los errores de manejo pueden provocar tiempos de ejecución más largos.

    Configuración de funciones:

    El tiempo de espera predeterminado para las funciones de AWS Lambda es de 3 segundos. Si la función tarda más en ejecutarse, se agotará el tiempo de espera. Asegúrate de que el tiempo de espera de la función sea lo suficientemente largo para manejar la carga de trabajo esperada.

    Recomendaciones:

    Para evitar la inconsistencia en la duración de la función:

    Optimiza el código de la función: Elimina bucles infinitos, código de bloqueo y llamadas lentas al servicio. Maneja excepciones correctamente: Utiliza bloques try-except para manejar excepciones y evitar tiempos de ejecución más largos. Aumenta el tiempo de espera de la función: Aumenta el tiempo de espera de la función a un valor más apropiado para tu carga de trabajo. Supervisa el rendimiento: Utiliza Amazon CloudWatch o herramientas de registro para supervisar la duración y el rendimiento de la función. Considera el escalado automático: Configura el escalado automático para ajustar dinámicamente el número de instancias de función en función de la carga de trabajo. Usa funciones asincrónicas: Si es posible, utiliza funciones asincrónicas de Lambda (p. ej., con Python y asyncio) para procesar mensajes de forma asincrónica y reducir la latencia.

    Respondida el Dec 19, 2020 a las 19:55 - por Gemini

    Votos positivos: 0 | Votos negativos: 0