Microsoft Power Platform 提供了一种缩放业务应用程序的方法,同时与企业级云服务集成,实现大容量运营。 可缩放的通知系统使用此功能为存储在 Microsoft Dataverse 中的约会发送短信和电子邮件提醒。 主要功能包括:
- 通知在约会前一周、一天和一小时自动触发。
- 当修改或取消约会时,能够更新或取消通知。
- Power Apps 用作用户高效管理约会的界面。
- 支持每天发送数千条通知,同时保持可靠且高性能。
系统使用 Azure 服务总线进行大容量计划,使用 Azure Functions 进行处理和传递,使用 Dataverse 持续跟踪约会和通知。 通知通过 SendGrid 发送用于电子邮件,通过 Twilio 或 Azure 通信服务用于短信。
此体系结构可确保可伸缩性、可靠性和可维护性,克服仅依赖 Power Automate 来协调大量通知的限制。
小窍门
本文提供了一个示例方案和通用示例体系结构,演示如何为 Dataverse 中存储的约会发送短信和电子邮件提醒。 可以针对许多不同的场景和行业修改体系结构示例。
体系结构图
Workflow
系统工作流在正确的时间可靠地发送通知,并支持更新和取消:
约会创建:用户通过 Power Apps 画布应用程序创建约会。 应用程序将约会数据直接写入 Dataverse,确保只有经过授权的用户才能基于安全角色访问数据。
事件触发:创建、更新或取消约会时,Dataverse 会触发服务器端进程,例如插件、Webhook 或轻型 Power Automate 流。 此事件启动计划逻辑。
通知计划:计划程序 Azure 函数计算约会前一周、一天和一小时的通知时间。 然后,它会在 Dataverse 中创建相应的通知记录,并在 Azure 服务总线中计划消息,存储用于将来更新或取消的序列号。
约会更新:如果修改约会,计划程序函数将使用服务总线序列号取消以前计划的通知。 它会更新 Dataverse 中的通知记录,并根据新的约会详细信息重新安排通知。
约会取消:取消约会后,计划程序函数将从 Azure 服务总线中删除所有挂起的消息,并将 Dataverse 中的相应通知记录更新为已取消。
通知传递:Delivery Azure 函数处理来自 Azure 服务总线的计划消息。 它通过 SendGrid 发送电子邮件通知,并通过 Twilio 或 Azure 通讯服务发送短信。 发送后,函数会更新通知记录,其中包含状态、重试和任何错误信息。
监视和可观测性:Application Insights 和 Azure Monitor 跟踪函数执行、队列运行状况、传递成功和失败。 服务总线中的死信队列捕获无法传递的消息以供以后分析。
Components
Power Apps (Canvas 应用):Power Apps 画布应用程序充当管理约会的主要用户界面。 它允许用户在直观的低代码界面中创建、更新或取消约会。 画布应用直接与 Dataverse 交互,以读取和写入约会和通知记录。 它还向用户提供有关成功创建、更新或取消约会的实时反馈。 UI 旨在验证数据输入、处理冲突(如重叠约会),并提供通知的本地化时区。
-
约会表:Dataverse 充当所有约会信息的记录系统。 每个约会条目包括详细信息,例如患者或用户、约会时间、服务类型和状态。 任命表旨在在创建、更新或删除操作时触发事件。 计划程序 Azure 函数侦听这些事件来计算和计划通知。 Dataverse 通过基于角色的访问控制、字段级权限和审核提供内置安全性,确保只有正确的用户才能访问敏感的约会信息。 此外,它与 Power Platform 的集成可确保低延迟访问,并与其他组件无缝交互。
通知表:通知表存储每个计划通知的元数据、跟踪通道(短信或电子邮件)、计划传递时间、状态(计划、已发送、失败或已取消)、尝试次数以及关联的服务总线序列号。 系统通过在 Dataverse 中维护此数据,为所有通知提供实时跟踪、报告和错误处理。 该表使管理员能够审核传递历史记录、监视失败的尝试,并在必要时采取纠正措施。 它还支持由约会更改触发的自动更新,确保通知保持准确。
-
计划程序:计划程序函数根据约会详细信息计算通知时间。 它确定约会前一周、一天和一小时的提醒,并在 Dataverse 中创建相应的记录。 它还在 Azure 服务总线中计划消息,存储序列号以允许将来取消或重新安排。 此函数可以处理大量约会,而不会降低性能,并确保幂等性,这样它就不会计划重复的通知。 其无服务器设计允许它根据事件负载自动缩放,并确保作效率。
交付:交付功能会在消息预定交付时间到达时处理来自 Azure Service Bus 的消息。 它确定每个通知的正确通道,例如通过 SendGrid 发送电子邮件或通过 Twilio/Azure 通信服务发送短信,并相应地发送消息。 传递后,它会在 Dataverse 中更新通知记录的状态,如果出现故障,还会更新重试数据。 该函数还实现错误处理、日志记录和重试机制,确保在出现暂时性故障或提供程序速率限制时可靠地传递消息。 它会根据 Service Bus 中的消息数量自动缩放,以处理通知量的峰值。
Azure 服务总线:Azure 服务总线是通知计划系统的主干。 它提供持久、高吞吐量和特定于时间的消息队列,确保它在需要时准确传递消息。 序列号允许系统在约会更改时取消或重新安排消息,从而保持一致性。 Service Bus 还支持死信队列,用于捕获多次重试后仍无法投递的消息,使管理员能够调查并修复错误。 它将调度与交付解耦的能力确保了系统的响应迅速和可扩展性。
电子邮件和短信提供商:外部通信服务处理通知的实际传递。 SendGrid 用于发送电子邮件通知,提供可靠的跟踪、分析和重试机制。 Twilio 和 Azure 通信服务 提供短信通知,支持可靠性较高的消息传送。 传递函数通过使用存储在 Azure Key Vault 中的安全 API 密钥与这些提供程序交互,并实施重试策略来处理暂时性错误或速率限制问题。 通过将交付外包给专业提供商,系统可确保可靠性高,并降低运营开销。
Azure Key Vault:可以在 Azure Key Vault 中安全地存储所有敏感凭据和 API 密钥。 Azure Functions 通过托管标识访问机密,无需在代码或配置文件中存储敏感数据。 Key Vault 可确保它加密静态凭据、审核访问权限,并自动应用轮换策略以维护安全合规性。
监视和可观测性工具:系统使用 Application Insights 和 Azure Monitor 来全面了解解决方案的运行状况和性能。 Application Insights 跟踪函数执行、队列长度、传递状态和失败,而 Azure Monitor 则提供异常行为、消息积压或服务故障警报。 可以使用日志和遥测进行故障排除、作分析和容量规划,确保管理员拥有维护高作可靠性和性能所需的信息。
方案详细信息
此解决方案专为需要及时发送计划预约提醒的组织而设计,例如医疗保健诊所、疫苗接种中心或基于服务的企业。 用户通过 Power Apps 进行交互以输入约会详细信息,这些详细信息存储在 Dataverse 中,并立即处理以计划通知。 系统自动计算提醒时间,例如约会前一周、一天和一小时,并确保它通过适当的渠道提供这些提醒。
系统可以处理数千条每日通知,而不会降低性能,这可以通过约会管理、计划和邮件传递之间的分离来实现。 即使通过动态重新安排或删除服务总线消息导致预约被调整或取消,它也能确保提醒功能持续准确运行。 记录并跟踪该过程的每个步骤。 此方法可确保管理员和支持人员都能了解系统行为以及发送的每个通知的状态。
注意事项
这些注意事项实现了架构良好的 Power Platform 支柱,这是一组可提高工作负荷质量的指导原则。 在架构良好的 Microsoft Power Platform 中了解详细信息。
安全性
系统通过使用 Microsoft Entra ID 进行身份验证,并使用 Dataverse 角色来限制对约会和通知的访问,从而在整个过程中集成安全性。 Power Apps 用户使用 Microsoft Entra ID 进行身份验证,确保与 Dataverse 的所有交互都获得授权和记录。 Azure Functions 使用托管标识安全地与 Dataverse、服务总线和 Key Vault 交互,而无需在代码或配置文件中存储凭据。
仅将敏感凭据(例如 SendGrid 和 Twilio 密钥)存储在 Azure Key Vault 中,并通过托管标识访问它们。 可以使用专用终结点和虚拟网络进一步保护 Azure 服务之间的通信,从而减少对公共 Internet 的暴露。 系统组件之间的所有消息交换都遵循加密的通信标准,以保护静态数据和传输中的数据。
卓越运营
可以通过持续监视、可观测性和自动警报实现卓越运营。 Application Insights 从 Azure Functions 收集详细的遥测数据,包括执行时间、失败、重试和性能指标。 Azure Monitor 跟踪 Azure 服务总线队列的运行状况,确定潜在的瓶颈或积压工作。 死信队列提供了一种机制,用于捕获和排查多次尝试后无法处理的消息。
管理员可以配置警报,以通知他们与消息处理、提供程序中断或异常队列增长相关的故障。 Dataverse 维护通知表中的审核线索,使管理员能够跟踪每个通知的生命周期。 由于 Azure Functions 无状态且自动缩放,因此系统无需手动干预即可响应消息量突然增加,确保一致的性能和运行时间。
性能效率
该体系结构针对高性能和可伸缩性进行优化。 Azure Service Bus 能够高效处理定时通知,避免基于 Power Automate 的延迟机制带来的额外开销。 将调度和交付分离到单独的功能中,这样每个组件都可以根据需求独立扩展。 交付函数受益于自动扩展功能,可在处理外发消息高峰时避免影响用户端系统。
此外,使用托管标识和缓存策略进行提供程序身份验证可降低消息传递期间的延迟。 系统仅保留 Dataverse 中的基本元数据并支持旧通知的存档策略,从而最大程度地减少不必要的存储开销。 通过将 Power Platform 功能与 Azure 的可缩放消息传送基础结构相结合,系统可确保企业规模的快速、高效且经济高效的通知传送。
贡献者
Microsoft维护本文。 以下参与者撰写了本文。
主要作者:
- 解决方案架构师 Summit Bajracharya