0

J'ai une fonction lambda basée sur python qui se déclenche sur les opérations s3 put basées sur un flux kinesis firehose qui envoie des données à la vitesse d'environ 10k enregistrements par minute. À l'heure actuelle, la fonction lambda effectue simplement de petites corrections des données et les livre à une instance de logstash par lots de 100. Le temps d'exécution de lambda est de 5 à 12 secondes, ce qui est bien car il s'exécute toutes les minutes.Accès rapide aux données pour la fonction AWS Lambda

Nous cherchons à enrichir les données en streaming avec quelques informations supplémentaires avant de les envoyer à logstash. Chaque message entrant a un champ "id", et nous aimerions chercher cet identifiant sur un db de quelque sorte, récupérer quelques informations supplémentaires de la base de données et l'injecter dans l'objet avant de le transmettre.

Le problème est, je ne peux pas le faire aller assez vite. J'ai essayé de charger toutes les données (600k enregistrements) dans DynamoDB, et d'effectuer des recherches sur chaque boucle d'enregistrement dans la fonction lambda. Cela ralentit trop la procédure d'exécution. Puis je me suis dit que nous n'avions pas besoin de chercher deux fois le même identifiant, donc j'utilise une liste obj pour stocker des données déjà "recherchées", ce qui a légèrement retardé le temps d'exécution, mais pas encore proche de ce que nous avons d aimer. Puis j'ai pensé à précharger l'ensemble de la base de données DB. J'ai testé cela - simplement en vidant tous les 600 enregistrements de dynamodb dans un objet "liste de cache" avant de commencer à faire une boucle à travers chaque enregistrement de l'objet s3. Les données sont vidées en environ une minute, mais la liste de cache est maintenant si grande que chaque recherche sur elle prend 5 secondes (beaucoup plus lentement que la frappe sur la base de données). Je ne sais pas ce que je fais ici - je réalise totalement que lambda n'est peut-être pas la bonne plate-forme pour cela et nous allons probablement passer à un autre produit si nous ne pouvons pas le faire fonctionner, mais d'abord J'ai pensé que je verrais si la communauté avait des indications sur la façon d'accélérer cette chose.

Répondre

1

Précharge les données dans un serveur Redis. C'est exactement ce à quoi Redis est bon.

+0

Ouais, ça a marché. Déplacé notre fonction lambda à l'intérieur du vpc et couvrir un cache micro redis. Il a battu par 8k enregistrements et avec des recherches contre 670k enregistrements en redis en environ 12 secondes. Merci de m'avoir indiqué dans la bonne direction! – Trondh

+0

Content de pouvoir aider. –