无服务器计算完全依赖于可重复和无状态的单个逻辑片段。 这些模块无需进行基础设施管理,并且只在运行的秒数或毫秒数内消耗资源。 无服务器计算运动的核心是由 Azure Functions 在 Azure 生态系统中提供的函数。 若要了解 Azure 中的其他无服务器执行环境,请参阅 Azure 页中的无服务器 。
通过 Azure Cosmos DB 与 Azure 函数之间的本地集成,您可以直接从 Azure Cosmos DB 帐户创建数据库触发器、输入绑定和输出绑定。 使用 Azure Functions 和 Azure Cosmos DB,可以创建和部署事件驱动的无服务器应用,并低延迟地访问多区域用户群的丰富数据。
如果数据库客户端未正确管理,则 Azure Functions 可以为每个调用创建独立的数据库连接,这可能会影响高并发性下的连接性能,尤其是在消耗计划中。 但是,在使用 Cosmos DB 绑定或触发器时,Azure Functions 会在内部复用共享的 Cosmos DB SDK 客户端,以确保在多次调用中实现高效的连接池管理。 Azure Cosmos DB 支持基于 HTTP 的连接模式和基于 TCP 的连接模式。 此体系结构支持需要动态数据访问的可缩放高性能工作负荷。
概述
通过 Azure Cosmos DB 和 Azure Functions,可以通过以下方式集成数据库和无服务器应用:
- 为 Azure Cosmos DB 创建事件驱动的 Azure Functions 触发器。 此触发器依靠 更改馈送 流来监视 Azure Cosmos DB 容器的更改。 对容器进行任何更改时,更改源流将发送到触发器,该触发器调用 Azure 函数。
- 或者,使用 输入绑定将 Azure 函数绑定到 Azure Cosmos DB 容器。 执行函数时,输入绑定从容器读取数据。
- 使用 输出绑定将函数绑定到 Azure Cosmos DB 容器。 输出绑定在函数完成时将数据写入容器。
注释
目前,仅支持将 Azure Cosmos DB 的 Azure Functions 触发器、输入绑定和输出绑定与 NoSQL API 配合使用。 对于所有其他 Azure Cosmos DB API,应使用 API 的静态客户端从函数访问数据库。
下图说明了这三个集成中的每一个:
Azure Cosmos DB 的 Azure Functions 触发器、输入绑定和输出绑定可用于以下组合:
- 适用于 Azure Cosmos DB 的 Azure Functions 触发器可与输出绑定到不同的 Azure Cosmos DB 容器一起使用。 当函数对更改源中的项执行动作后,您可以将其写入另一个容器(如果将其写入到其来源的同一容器,则会有效地创建一个递归循环)。 或者,可以使用 Azure Cosmos DB 的 Azure Functions 触发器,通过输出绑定有效地将所有已更改的项从一个容器迁移到其他容器。
- 可以在同一 Azure 函数中使用 Azure Cosmos DB 的输入绑定和输出绑定。 在您想要查找某个具有输入绑定的数据,并在Azure函数中进行修改之后,再将其保存到同一容器或不同容器时,这种方法效果很好。
- 对 Azure Cosmos DB 容器的输入绑定,可以在与 Azure Cosmos DB 的 Azure Functions 触发器相同的函数中使用,也可以选择性地同时使用输出绑定或不使用输出绑定。 可以使用此组合将从交换容器通过输入绑定提取的最新汇率信息应用于购物车服务中新订单的更改通知流。 已更新的购物车总计(应用当前货币换算)可以使用输出绑定写入第三个容器。
用例
以下用例演示了通过将数据连接到事件驱动的 Azure Functions 来充分利用 Azure Cosmos DB 数据的几种方法。
IoT 用例 - 为 Azure Cosmos DB 配置的 Azure Functions 触发器和输出绑定
在 IoT 实现中,当连接的汽车显示检查引擎灯时,可以调用一个函数。
实现: 对 Azure Cosmos DB 使用 Azure Functions 触发器和输出绑定
- 用于 Azure Cosmos DB 的 Azure Functions 触发器用于触发与汽车警报相关的事件,例如连接汽车中发动机故障灯亮起。
- 发动机故障灯亮起时,传感器数据将发送到 Azure Cosmos DB。
- Azure Cosmos DB 创建或更新新的传感器数据文档,然后将这些更改流式传输到 Azure Cosmos DB 的 Azure Functions 触发器。
- 触发器在传感器数据收集中每次数据更改时触发,因为所有更改都通过变更馈送流式传输。
- 函数中使用阈值条件将传感器数据发送到保修部门。
- 如果温度也超过特定值,则还会向所有者发送警报。
- 函数上的 输出绑定 更新另一个 Azure Cosmos DB 容器中的汽车记录,以存储有关检查引擎事件的信息。
下图显示了为此触发器在 Azure 门户中编写的代码。
财务用例 - 计时器触发器和输入绑定
在财务实现中,当银行帐户余额低于特定金额时,可以调用函数。
实现: 具有 Azure Cosmos DB 输入绑定的计时器触发器
- 使用 计时器触发器,可以使用 输入绑定按时间间隔检索存储在 Azure Cosmos DB 容器中的银行帐户余额信息。
- 如果余额低于用户设置的低余额阈值,则通过 Azure Function 采取后续步骤。
- 输出绑定可以是通过 SendGrid 集成,将电子邮件从服务帐户发送到每个余额不足帐户的指定电子邮件地址。
下图显示了此方案的 Azure 门户中的代码。
游戏用例 - Azure Functions 的触发器和输出绑定,适用于 Azure Cosmos DB
在游戏中,创建新用户时,可以使用 Azure Cosmos DB for Gremlin 搜索可能认识他们的其他用户。 然后,可以将结果写入 Azure Cosmos DB 或 SQL 数据库,以便于检索。
实现: 对 Azure Cosmos DB 使用 Azure Functions 触发器和输出绑定
- 使用 Azure Cosmos DB 图形数据库 存储所有用户,可以使用 Azure Cosmos DB 的 Azure Functions 触发器创建新函数。
- 每当插入新用户时,就会调用该函数,然后使用 输出绑定存储结果。
- 该函数查询图形数据库以搜索与新用户直接相关的所有用户,并将该数据集返回到该函数。
- 然后,此数据存储在 Azure Cosmos DB 中,然后可由任何显示其已连接好友的新用户的前端应用程序轻松检索这些数据。
零售用例 - 多个函数
在零售实现中,当用户将项添加到其篮子时,现在可以灵活地为可选业务管道组件创建和调用函数。
实现: 用于侦听一个容器的 Azure Cosmos DB 的多个 Azure Functions 触发器
- 可以通过为每个 Azure Cosmos DB 添加 Azure Functions 触发器来创建多个 Azure Functions-所有这些触发器都侦听购物车数据的相同更改源。 当多个函数侦听同一个更改源时,每个函数都需要新的租约集合。 有关租用集合的详细信息,请参阅 了解更改源处理器库。
- 每当将新项添加到用户购物车时,每个函数都会由购物车容器中的更改源独立调用。
一个函数可以使用当前篮的内容来更改用户可能感兴趣的其他项目的显示。
另一个函数可能会更新清单总计。
另一个功能可能会向营销部门发送某些产品的客户信息,后者向他们发送促销邮件。
任何部门都可以通过侦听更改馈送来为 Azure Cosmos DB 创建 Azure Functions,并确保它们不会延迟关键订单处理过程。
在所有这些用例中,由于函数已分离应用本身,因此无需一直启动新的应用实例。 相反,Azure Functions 会启动单个函数,根据需要完成离散进程。
工具
Azure Cosmos DB 与 Azure Functions 之间的原生集成可在 Azure 门户和 Visual Studio 中使用。
在 Azure Functions 门户中,可以创建触发器。 有关快速入门说明,请参阅 在 Azure 门户中为 Azure Cosmos DB 创建 Azure Functions 触发器。
在 Azure Cosmos DB 门户中,可以将 Azure Cosmos DB 的 Azure Functions 触发器添加到同一资源组中的现有 Azure 函数应用。
在 Visual Studio 中,可以使用 Azure Functions 工具创建触发器:
为什么选择用于无服务器计算的 Azure Functions 集成?
Azure Functions 提供创建可缩放的工作单元或简洁的逻辑片段的功能,这些逻辑可以按需运行,而无需预配或管理基础结构。 通过使用 Azure Functions,无需创建完整应用即可响应 Azure Cosmos DB 数据库中的更改,可以为特定任务创建小型可重用函数。 此外,还可以使用 Azure Cosmos DB 数据作为 Azure 函数的输入或输出,以响应 HTTP 请求或计时触发器等事件。
Azure Cosmos DB 是无服务器计算体系结构的建议数据库,原因如下:
即时访问所有数据:可以精细访问存储的每个值,因为 Azure Cosmos DB 默认 自动为 所有数据编制索引,并使这些索引立即可用。 这意味着你可以不断查询、更新和添加新项到数据库,并通过 Azure Functions 即时访问。
无架构。 Azure Cosmos DB 是无架构的 , 因此它能够唯一地处理 Azure 函数的任何数据输出。 这种“处理任何内容”的方法,使创建各种输出到 Azure Cosmos DB 的函数变得非常简单。
可缩放的吞吐量。 可以在 Azure Cosmos DB 中立即纵向扩展和缩减吞吐量。 如果有数百或数千个函数查询并写入同一容器,则可以纵向扩展 RU/s 来处理负载。 所有函数都可以使用分配的 RU/s 并行工作,并且数据的一致性得到保证。
多区域复制。 可以复制 中国各地的 Azure Cosmos DB 数据,以减少延迟,将数据定位到最靠近用户所在的位置。 与所有 Azure Cosmos DB 查询一样,事件驱动触发器会从离用户最近的 Azure Cosmos DB 读取数据。
如果要与 Azure Functions 集成以存储数据,并且不需要深度索引,或者需要存储附件和媒体文件, Azure Blob 存储触发器 可能是更好的选择。
Azure Functions 的优点:
事件驱动。 Azure Functions 是事件驱动的,可以侦听 Azure Cosmos DB 的更改提要。 这意味着你不需要创建监听逻辑,只需留意你在监听的变化。
无限制。 函数并行执行,服务可以根据需求启动任意数量的实例。 您设置参数。
适用于快速任务。 每当事件触发时,服务就会启动函数的新实例,并在函数完成后立即关闭。 只有在函数运行时才需要付费。
后续步骤
现在,让我们真正连接 Azure Cosmos DB 和 Azure Functions。