你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
事件网格和可靠性
通过 Azure 事件网格,可使用基于事件的体系结构轻松生成应用程序。 此解决方案包含对来自 Azure 服务的事件的内置支持,如存储 BLOB 和资源组。 事件网格还使用自定义主题支持自己的事件。
有关如何使用事件网格的详细信息,请参阅使用 Azure 事件网格创建和路由自定义事件。
要了解如何使用事件网格创建更可靠的工作负荷,请参阅《Azure 事件网格中的服务器端异地灾难恢复》。
以下部分专门介绍 Azure 事件网格和可靠性:
- 设计注意事项
- 配置清单
- 推荐配置选项
- 源项目
设计注意事项
Azure 事件网格提供运行时间服务级别协议。 有关详细信息,请参阅《事件网格 SLA》。
清单
配置 Azure 事件网格时是否考虑了可靠性?
- 如果有多区域 Azure 解决方案,则为每个区域部署一个事件网格实例。
- 监视事件网格查找失败的事件传送。
- 使用批处理事件。
- 事件批大小不能超过
1MB
。 - 在负载测试期间配置和优化批大小选择。
- 仅当传送到包含自定义代码的终结点时,才会接受事件网格消息和
HTTP
200-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']