Como posso superar problemas de dimensionamento com serverless e MongoDB?

Nov 29 2020

Estou familiarizado com serverless e MongoDB e gostaria de saber se há alguma maneira escalonável de conectar os dois mundos. Até onde eu sei, você não pode interagir com o MongoDB de maneira RESTful. Em vez disso, abrir uma conexão que deve ser reutilizada.

Digamos que estou usando o AWS Lambda como parte de uma API sem servidor. Quando o lambda está frio, você precisa abrir uma nova conexão com o MongoDB e enquanto o lambda ainda está quente, a conexão permanece aberta. Esta solução é boa, mas quando houver um pico de tráfego na API, você atingirá um limite de conexão imposto pelo MongoDB.

Existe uma maneira de superar esse limite de conexão em um mundo sem estado como lambda?

Respostas

AtulSharma Nov 29 2020 at 15:13

As funções lambda são sem estado e assíncronas e, ao usar o pool de conexão do banco de dados, você estará adicionando um estado a ele e derrotando o propósito.

Se você deseja pool de conexão, executar seu servidor sobre EC2 é a opção mais adequada na AWS.

No entanto, se você ainda deseja pool de conexão com lambda, pode criar um pool normalmente usando MongoClient.connect(uri, { poolSize: 10 })e manter seu lambda aquecido usando eventos de observação em nuvem criando um gatilho fictício.

Você certamente verá alguma melhora no desempenho.

ServerlessChamp Nov 29 2020 at 15:15

A ideia para pensar: Você pode usar Kinesis para acionar seu Lambda. Isso limitará o número de execuções simultâneas à contagem de fragmentos, por exemplo, 8 fragmentos para 8 simultaneamente.

Desta forma, você pode manter sua conexão aberta e ganhar um limite de sua conexão aberta para evitar problemas de escala.

Este tipo de coisa (para uma única invocação, seja a conexão nova ou reutilizada) você pode monitorar por algumas ferramentas de monitoramento que irão ajudá-lo a manter seu status de escalonamento ao longo do tempo, isso ajudará a gerenciar a idade do iterador MongoDB e Kinesis. Tal como:

  • AWS X-Ray
  • Métricas AWS Cloudwatch
  • Datadog
  • Lumigo

Como divulgação, trabalho para uma empresa chamada Lumigo, temos uma ferramenta de monitoramento distribuída que pode ajudá-lo a rastrear seus problemas de escala de produção