对于AI助手:文档索引位于 https://www.mongodb.com/zh-cn/docs/llms.txt — 通过将 .md 附加到任何URL路径,可以获得所有页面的降价版本。
Make the MongoDB docs better! We value your opinion. Share your feedback for a chance to win $100.
MongoDB Branding Shape
Click here >
Docs 菜单

使用 Google Cloud 管理连接

您可以使用Google Cloud Platform FunctionsGoogle Cloud Platform Run 与Atlas集群交互。

使用以下最佳实践正确管理 Google Cloud 函数和 Atlas 之间的连接:

  • 使用全局范围的数据库连接而不是函数范围的数据库连接,以创建 Cloud Function。

    请勿在每次调用函数时都定义新的客户端对象。这样做会导致驱动程序在每次函数调用时创建一个新的数据库连接。这可能会产生高昂的成本,并可能导致应用程序超出数据库连接限制。为获得最佳性能,请遵循以下准则:

    1. 创建一次客户端对象。

    2. 存储该对象,以便函数可以跨函数调用重复使用客户端。

    该连接示例重复使用现有数据库连接来加快与数据库的通信,并将数据库连接计数保持在相对于应用程序流量的合理水平。

    如果您有一个连接到具有许多分片的分片集群的函数,可能会遇到性能问题。例如,对于具有 10 个分片的 Atlas 集群,默认情况下,驱动程序会连接到所有 30 个 mongos 实例。您可以使用连接字符串中的 srvMaxHosts 选项来设置驱动程序连接到的主机的最大数量。要提高驱动程序性能,请设置 srvMaxHosts=3。例如:

    mongodb+srv://<db_username>:<db_password>@<clusterName>.mongodb.net/?retryWrites=true&w=majority&srvMaxHosts=3

    要了解详细信息,请参阅连接选项

  • 限制对 Atlas 集群的网络访问。

    在 Atlas 集群和 Google Cloud 函数之间使用网络对等连接私有端点,通过私有网络连接到 Atlas 集群,以便仅允许使用 IP 访问列表中的私有 IP 地址。

    如果您不使用私有网络,请考虑通过NAT 网关连接到您的Atlas 集群。否则,您必须允许所有IP地址 (0.0.0.0/0)访问权限您的Atlas 集群。

    警告

    添加 /0 CIDR(例如 0.0.0.0/0)会允许从任何位置进行访问。此配置可能使您的部署暴露于未授权访问、数据外泄以及其他恶意活动风险之中。请尽可能将访问限制在受信任的 IP 地址或 CIDR 范围内,并在允许通过公共互联网访问时,为所有数据库用户使用强凭证。

    注意

    如果您将任何 IPv4 /0 CIDR(例如 0.0.0.0/010.0.0.0/0)添加到项目访问列表中,Atlas 会向所有直接被授予该项目角色的用户发送告警邮件;对于通过团队成员身份间接获得项目角色的用户(前提是该团队已被授予项目角色),Atlas 也会发送告警邮件。

  • maxIdleTimeMS 设置为 60000 可在空闲时间达到 1 分钟后自动关闭连接。调整 maxIdleTimeMS 有助于减少无服务器函数发生超时错误的概率。
  • 配置并发。创建新 Google Cloud 函数时:

    • 选择可以处理多个并发请求的2nd gen环境。 2 nd gen 还允许函数与许多并发调用股票单个MongoClient ,从而减少服务器上的连接负载。

    • 增加并发设置,尽量减少冷启动并改善延迟。

    注意

    如果增加并发设置,您可能需要增加 CPU 以获得最佳性能。如要了解更多信息,请参阅并发。

以下示例将 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;
}