Atlas Triggers
Atlas Triggers 执行应用程序和数据库逻辑。触发器可以响应事件或使用预定义的计划。
触发器侦听已配置类型的事件。每个触发器都链接到特定的 Atlas 函数。当触发器观察到与配置匹配的事件时,它就会“触发”。触发器将此事件对象作为参数传递给其链接的函数。
触发器可能在以下情况下触发:
给定集合中的特定操作类型 。
一种身份验证事件,例如用户创建或删除。
预定的时间。
App Services 跟踪每个触发器的最新执行时间,并保证每个事件至少被处理一次。
触发器类型
App Services 支持三种类型的 Triggers:
限制
应用 Atlas 函数约束
触发器调用 Atlas Function。这意味着它们与所有 Atlas Function 具有相同的约束条件。
事件处理吞吐量
当容量可用时,触发器处理事件。触发器的容量由其事件排序配置决定:
有序触发器按顺序一次处理一个来自变更流的事件。只有在上一个事件完成处理后,下一个事件才开始处理。
无序触发器可同时处理多个事件,默认情况下最多可同时处理 10,000 个事件。如果触发器数据源是 M10+ Atlas 集群,则可以独立配置各个无序触发器,使其超过 10,000 并发事件阈值。要了解详情,请参阅最大吞吐量触发器。
触发器容量并不能直接衡量吞吐量或保证执行率。相反,它是触发器一次可以处理的最大事件数量的阈值。实际上,触发器处理事件的速度取决于触发器函数的运行时逻辑及其在给定时间内接收的事件数量。
要提高触发器的吞吐量,可尝试:
优化 Trigger 函数的运行时行为。例如,您可以减少所进行的网络调用次数。
使用触发器的投影筛选器来减小每个事件对象的大小。为实现最佳性能,请将每个更改事件的大小限制在 2 KB 或以下。
使用匹配筛选器,可减少触发器处理的事件数量。例如,您可能只想在特定字段更改时执行某些操作。您可以使用触发器的匹配筛选器,以便仅在该字段包含在此事件的
updateDescription.updatedFields
对象中时才触发,而不是匹配每个更新事件并检查该字段在函数代码中是否发生更改。
触发器数量不能超过可用的变更流
App Services 限制数据库触发器的总数。Atlas 集群的大小决定了这一限制。
每个 Atlas 集群层都有支持的变更流的最大数量。数据库触发器需要自己的变更流。其他 App Services 也使用变更流,例如 Atlas Device Sync。数据库触发器不得超过可用变更流的数量。
诊断重复事件
在正常的触发器操作期间,触发器不会发送重复事件。不过,当出现某些故障或错误条件时,触发器可能会发送重复事件。在以下情况下,您可能会看到重复的触发器事件:
负责处理和跟踪事件的服务器遇到故障。这种故障阻止服务器在持久或长期存储系统中记录其进度,使其“忘记”其已经处理了一些最新事件。
使用无序处理,其中事件 1 至 10 同时发送。如果事件 9 失败并导致触发器挂起,则当系统从事件 9 恢复时,可能会再次处理事件 10 等事件。这可能会产生重复项,因为系统不会严格遵循事件的顺序,可能会重新处理已经处理过的事件。
如果发现重复的触发器事件,请检查应用日志中是否有触发器暂停或服务器故障。