Você pode interagir com seus Atlas clusters usando Google Cloud Platform Functions e Google Cloud Platform Run.
Melhores práticas
Use as seguintes melhores práticas para gerenciar adequadamente as conexões entre as funções do Google Cloud Platform e o Atlas:
Crie uma função de nuvem com conexão a um banco de dados com escopo global, não com conexão a um banco de dados com escopo de função.
Não defina um novo objeto de cliente sempre que invocar a sua função. Isso faz com que o driver crie uma nova conexão de banco de dados com cada chamada de função. Isso pode ser caro e resultar em um aplicativo que exceda os limites de conexão do banco de dados. Para obter o melhor desempenho, siga estas diretrizes:
Crie uma vez o objeto do cliente .
Armazene o objeto para que sua função possa reutilizar o cliente em invocações de função.
O exemplo de conexão reutiliza as conexões de banco de dados existentes para acelerar a comunicação com o banco de dados e manter as contagens de conexão com o banco de dados em um nível razoável em relação ao tráfego do aplicativo.
Se você tiver uma função que se conecta a um cluster fragmentado com muitos fragmentos, poderá enfrentar problemas de desempenho. Por exemplo, com um cluster do Atlas de dez fragmentos, o driver se conecta a todas as trinta instâncias
mongospor padrão. Você pode usar a opçãosrvMaxHostsem sua string de conexão para definir o número máximo de hosts aos quais o driver se conecta. Para melhorar o desempenho do driver, definasrvMaxHosts=3. Por exemplo:mongodb+srv://<db_username>:<db_password>@<clusterName>.mongodb.net/?retryWrites=true&w=majority&srvMaxHosts=3 Para saber mais, consulte Opções de conexão.
Restringir o acesso à rede ao seu Atlas cluster.
Conecte-se ao cluster do Atlas por meio de uma rede privada usando uma conexão de peering de rede entre o cluster do Atlas e a função do Google Cloud ou, alternativamente, um ponto de extremidade privado, para que você possa permitir apenas endereços IP privados de sua lista de acesso IP.
Se você não usa rede privada, considere conectar-se ao cluster do Atlas por meio de um gateway NAT. Caso contrário, você deve permitir que todos os IPs (0.0.0.0/0) acessem seu cluster do Atlas.
Aviso
Adicionar o
/0CIDR,0.0.0.0/0como, permite o acesso de qualquer lugar. Essa configuração pode expor seu sistema ao acesso não autorizado, exfiltração de dados e outras atividades maliciosas. Restrinja o acesso a endereços IP confiáveis ou faixas CIDR sempre que possível, e use credenciais fortes para todos os usuários do banco de dados ao permitir o acesso da Internet pública.Observação
Se você adicionar a uma lista de acesso ao projeto qualquer CIDR IPv4
/0, como0.0.0.0/0ou10.0.0.0/0, o Atlas enviará um e-mail de alerta a todos os usuários que receberam diretamente uma função no projeto ou indiretamente receberam uma função por meio de associação da equipe (se a equipe receber uma role no projeto).
- Defina maxIdleTimeMS como
60000para fechar automaticamente suas conexões após 1 minuto de tempo ocioso. Ajustar seumaxIdleTimeMSpode ajudar a reduzir a ocorrência de erros de tempo limite nas suas funções sem servidor.
Configure Simultaneidade. Quando você cria uma nova função do Google Cloud:
Selecione o ambiente 2nd gen , que pode lidar com várias solicitações simultâneas. A 2ª geração também reduz a carga de conexão no servidor ao permitir que a função compartilhe um único
MongoClientcom muitas invocações simultâneas.Aumentar a configuração de simultaneidade para minimizar inicializações a frio e melhorar a latência.
Observação
Se você aumentar a configuração de simultaneidade, talvez seja necessário aumentar a CPU para obter o melhor desempenho. Para saber mais, consulte Concorrência.
Exemplo de conexão com o Google Cloud
O exemplo a seguir conecta uma função Node.js Google Cloud a uma implantação do Atlas. Substitua <YOUR-ATLAS-CONNECTION-STRING> por sua string de conexão do Atlas.
const { MongoClient } = require('mongodb'); let client; async function getConnection() { if (!client) { const client = new MongoClient('<YOUR-ATLAS-CONNECTION-STRING>'); client.on('connectionCreated', () => { console.log('New connection created successfully.'); }); // Connect to the database in the global scope await client.connect(); } return client; }