Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

AWS Lambda - cache do MySQL


A primeira coisa seria entender como require funciona em NodeJS. Eu recomendo que você leia este artigo se você estiver interessado em saber mais sobre isso.

Agora, uma vez que você tenha exigido sua conexão, você a terá para sempre e não será necessária novamente. Isso corresponde ao que você está procurando, pois você não deseja sobrecarregar seu banco de dados criando uma nova conexão sempre.

Mas há um problema...

Iniciações a frio do Lambda

Sempre que você invocar uma função do Lambda pela primeira vez, ele ativará um contêiner com sua função dentro dele e o manterá ativo por aproximadamente 5 minutos. É muito provável (embora não garantido) que você atinja o mesmo contêiner todas as vezes, desde que esteja fazendo 1 solicitação por vez. Mas o que acontece se você tiver 2 solicitações ao mesmo tempo? Em seguida, outro recipiente será girado em paralelo com o recipiente anterior, já aquecido. Você acabou de criar outra conexão em seu banco de dados e agora tem 2 contêineres. Agora, adivinhe o que acontece se você tiver 3 solicitações simultâneas? Sim! Mais um contêiner, o que equivale a mais uma conexão de banco de dados.

Enquanto houver novas solicitações para suas funções do Lambda, por padrão, elas serão dimensionadas para atender à demanda (você pode configurá-lo no console para limitar a execução a quantas execuções simultâneas desejar - respeitando os limites da sua conta)

Você não pode garantir com segurança que tem uma quantidade fixa de conexões ao seu banco de dados simplesmente exigindo seu código na invocação de uma função. O bom é que isso não é culpa sua. É assim que as funções do Lambda se comportam.

...uma outra abordagem é

para armazenar em cache os dados que você deseja em um sistema de cache real, como ElasticCache , por exemplo. Você poderia então fazer com que uma função Lambda fosse acionada por um CloudWatch Event que funciona em uma determinada frequência de tempo. Essa função consultaria seu banco de dados e armazenaria os resultados em seu cache externo. Dessa forma, você garante que sua conexão de banco de dados seja aberta apenas por um Lambda por vez, pois respeitará o evento CloudWatch, que acaba sendo executado apenas uma vez por gatilho.

EDITAR :depois que o OP enviou um link nas seções de comentários, decidi adicionar mais algumas informações para esclarecer o que o artigo mencionado quer dizer

Do artigo:

E é exatamente isso que você está fazendo. E isso funciona! Mas o problema é se você tiver N conexões (Lambda Requests) ao mesmo tempo. Se você não definir nenhum limite, por padrão, até 1.000 funções do Lambda podem ser geradas simultaneamente. Agora, se você fizer mais 1000 solicitações simultaneamente nos próximos 5 minutos, é muito provável que você não abra novas conexões, porque elas já foram abertas em invocações anteriores e os contêineres ainda estão ativos.