您可以使用 Google Cloud Platform Functions 和Google Cloud Platform Run 与Atlas集群交互。
最佳实践
使用以下最佳实践正确管理 Google Cloud 函数和 Atlas 之间的连接:
使用全局范围的数据库连接而不是函数范围的数据库连接,以创建 Cloud Function。
请勿在每次调用函数时都定义新的客户端对象。这样做会导致驱动程序在每次函数调用时创建一个新的数据库连接。这可能会产生高昂的成本,并可能导致应用程序超出数据库连接限制。为获得最佳性能,请遵循以下准则:
创建一次客户端对象。
存储该对象,以便函数可以跨函数调用重复使用客户端。
连接示例会重复使用现有数据库连接来加快与数据库的通信,并将与数据库的连接数保持在与应用程序流量相当的合理水平。
如果您有一个函数连接到具有许多分片的分片集群,则可能会遇到性能问题。示例,对于有 10 个分片的Atlas 集群,驱动程序默认连接到所有 30 个
mongos实例。您可以在连接字符串中使用srvMaxHosts选项来设立驱动程序连接到的主机的最大数量。要提高驱动程序性能,设立srvMaxHosts=3。示例:mongodb+srv://<db_username>:<db_password>@<clusterName>.mongodb.net/?retryWrites=true&w=majority&srvMaxHosts=3 要了解详细信息,请参阅连接选项。
限制对 Atlas 集群的网络访问。
AtlasAtlas使用 集群和GCP 函数之间的 网络对等互连连接 ,或者使用 私有端点 通过私有网络 连接到 集群,这样您就可以只允许IP IP访问权限列表中 的私有 地址。
如果您不使用私有网络,请考虑通过NAT 网关连接到您的Atlas 集群。否则,您必须允许所有IP地址 (0.0.0.0/0)访问权限您的Atlas 集群。
警告
添加 CIDR
0.0.0.0/0允许从任何地方访问权限。这种配置可能会使您的部署面临未经授权的访问权限、数据泄露和其他恶意活动。尽可能限制对可信IP地址或 CIDR 范围的访问权限,并在允许从公共互联网访问权限时为所有数据库用户使用强凭证。注意
如果您将
0.0.0.0/0CIDR 添加到项目访问列表,Atlas 会向所有直接被授予项目角色或通过团队成员间接被授予项目角色(如果团队被授予项目角色)的所有用户发送警报电子邮件。
将 maxIdleTimeMS 设置为
60000可在空闲时间达到 1 分钟后自动关闭连接。调整maxIdleTimeMS有助于减少无服务器函数发生超时错误的概率。
配置并发。创建新 Google Cloud 函数时:
选择 2nd gen环境,它可以处理多个并发请求。 第 2 代还允许函数与许多并发调用共享单个
MongoClient,从而减少了服务器上的连接负载。增加并发设置,尽量减少冷启动并改善延迟。
注意
如果增加并发设置,您可能需要增加 CPU 以获得最佳性能。如要了解更多信息,请参阅并发。
Google Cloud 连接示例
以下示例将 Node.js Google Cloud 函数连接到 Atlas 部署。请将 <YOUR-ATLAS-CONNECTION-STRING> 替换为您的 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; }