你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

事件网格和可靠性

通过 Azure 事件网格,可使用基于事件的体系结构轻松生成应用程序。 此解决方案包含对来自 Azure 服务的事件的内置支持,如存储 BLOB 和资源组。 事件网格还使用自定义主题支持自己的事件。

要详细了解如何使用事件网格,请参阅《使用 Azure 事件网格创建和路由自定义事件》。

要了解如何使用事件网格创建更可靠的工作负荷,请参阅《Azure 事件网格中的服务器端异地灾难恢复》。

以下部分专门介绍 Azure 事件网格和可靠性:

  • 设计注意事项
  • 配置清单
  • 推荐配置选项
  • 源项目

设计注意事项

Azure 事件网格提供运行时间服务级别协议。 有关详细信息,请参阅《事件网格 SLA》。

清单

配置 Azure 事件网格时是否考虑了可靠性?

  • 如果有多区域 Azure 解决方案,则为每个区域部署一个事件网格实例。
  • 监视事件网格失败的事件传递。
  • 使用批处理事件。
  • 事件批大小不能超过 1MB
  • 在负载测试期间配置和优化批大小选择。
  • 确保仅在事件网格消息传送到保留自定义代码的终结点时,才以 HTTP200-204 响应接受这些消息。
  • 监视事件网格失败的事件发布。

配置建议

请考虑以下建议,在配置 Azure 事件网格时优化可靠性:

建议 说明
监视事件网格查找失败的事件传送。 每次消息无法传送到事件处理程序(超时或非 Delivery Failed 状态代码)时,200-204 HTTP 指标就会增加。 如果事件不可丢失,请设置死信队列 (DLQ) 存储帐户。 DLQ 帐户是在最大重试次数后无法传送的事件的存放位置。 (可选)在 DLQ 存储帐户上实现通知系统,例如通过事件网格处理“新建文件”事件。
在高吞吐量方案中,使用批处理事件。 该服务将包含多个事件的 json 数组(而不是包含一个事件的数组)传送给订阅服务器。 消费应用程序必须能够处理这些数组。
事件批大小不能超过 1MB 如果消息有效负载很大,事件批中将只能容纳一条或几条消息。 消费服务需要处理更多事件批。 如果事件的有效负载较大,请考虑将其存储在其他位置(例如 BLOB 存储中),并在事件中传递引用。 通过 CloudEvents 架构与第三方服务集成时,不建议超过 64KB 事件。
在负载测试期间配置和优化批大小选择。 批大小选择取决于有效负载大小和消息量。
监视事件网格失败的事件发布。 Unmatched 指标将显示已发布但与任何订阅都不匹配的消息数。 根据应用程序体系结构,后者可能是有意设计的。

源项目

要确定所有可用事件网格主题的“输入架构”类型,请使用以下查询:

Resources 
| where type == 'microsoft.eventgrid/topics'
| project name, resourceGroup, location, subscriptionId, properties['inputSchema']

要检索事件网格域现有专用终结点的“资源 ID”,请使用以下查询:

Resources 
| where type == 'microsoft.eventgrid/domains' and notnull(properties['privateEndpointConnections']) 
| mvexpand properties['privateEndpointConnections'] 
| project-rename privateEndpointConnections = properties_privateEndpointConnections 
| project name, resourceGroup, location, subscriptionId, privateEndpointConnections['properties']['privateEndpoint']['id']

要确定所有可用事件网格域的“公用网络访问”状态,请使用以下查询:

Resources 
| where type == 'microsoft.eventgrid/domains' 
| project name, resourceGroup, location, subscriptionId, properties['publicNetworkAccess']

要确定所有公用事件网格域的“防火墙规则”,请使用以下查询:

Resources 
| where type == 'microsoft.eventgrid/domains' and properties['publicNetworkAccess'] == 'Enabled'
| project name, resourceGroup, location, subscriptionId, properties['inboundIpRules']

要确定所有公用事件网格主题的“防火墙规则”,请使用以下查询:

Resources 
| where type == 'microsoft.eventgrid/topics' and properties['publicNetworkAccess'] == 'Enabled'
| project name, resourceGroup, location, subscriptionId, properties['inboundIpRules']

要检索事件网格主题现有专用终结点的“资源 ID”,请使用以下查询:

Resources 
| where type == 'microsoft.eventgrid/topics' and notnull(properties['privateEndpointConnections']) 
| mvexpand properties['privateEndpointConnections'] 
| project-rename privateEndpointConnections = properties_privateEndpointConnections 
| project name, resourceGroup, location, subscriptionId, privateEndpointConnections['properties']['privateEndpoint']['id']

要确定所有可用事件网格域的“输入架构”类型,请使用以下架构:

Resources 
| where type == 'microsoft.eventgrid/domains'
| project name, resourceGroup, location, subscriptionId, properties['inputSchema']

要确定所有可用事件网格主题的“公用网络访问”状态,请使用以下查询:

Resources 
| where type == 'microsoft.eventgrid/topics' 
| project name, resourceGroup, location, subscriptionId, properties['publicNetworkAccess']

后续步骤