你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
Azure 流分析 是一种高度弹性的服务,可同时处理和分析来自多个源的流数据。 流分析提供了可用于使用类似 SQL 的查询生成复杂事件处理管道的信息。
使用 Azure 时, 可靠性是共同的责任。 Microsoft提供了一系列功能来支持复原和恢复。 你负责了解这些功能如何在你使用的所有服务中工作,并选择满足业务目标和运行时间目标所需的功能。
本文介绍流分析如何应对暂时性故障和可用性区域中断等潜在问题。 它提供有关如何保护任务关键型作业免受区域中断和服务维护的指导。 它还重点介绍了有关流分析服务级别协议(SLA)的关键信息。
重要
如果其他组件不同样具有复原能力,则仅提高流分析的复原能力可能会受到限制。 考虑数据源的可靠性,包括输入和输出。 根据复原能力要求,可能需要跨多个区域进行配置更改。
生产部署建议
为了确保使用流分析的生产环境中的可靠性,建议执行以下作:
- 使用支持可用性区域的区域。 在支持可用性区域的区域中部署流作业和其他资源。
- 部署足够的容量。 根据预期的吞吐量和额外的容量设置流单元(SU),以处理峰值负载。 在基线要求上方添加缓冲区以处理突然增加。
- 监控健康状况。 使用 Azure Monitor 指标和诊断日志跟踪作业运行状况、输入和输出事件以及资源利用率来实现全面的监视。 为如水印延迟和运行时错误的关键指标设置警报,以便在问题影响数据处理之前检测到它们。 有关详细信息,请参阅 监视流分析。
- 为任务关键型工作负荷实现多区域冗余。 跨多个区域部署相同的流分析作业。 复制其配置并确保适当的数据路由以实现区域复原。 流分析不提供原生多区域复制,但该方法可以实现故障转移和连续性。 有关详细信息,请参阅 用于复原的自定义多区域解决方案。
可靠性体系结构概述
本部分介绍从可靠性的角度来看,服务工作原理最相关的一些重要方面。 本部分介绍逻辑体系结构,其中包括部署和使用的某些资源和功能。 它还讨论了物理架构,该架构提供了服务内部运作方式的详细信息。
逻辑体系结构
作业是 Stream Analytics 中的基本单元,可让你定义和运行流处理逻辑。 作业由以下主要组件组成:
- 从 Azure 事件中心、Azure IoT 中心或 Azure 存储等数据源读取流数据的输入。
- 处理和转换数据的 查询 。
- 持续将结果写入到不同目标的输出,例如 Azure SQL 数据库、Azure Data Lake Storage、Azure Cosmos DB 和 Power BI。
有关详细信息,请参阅 流分析资源模型。
物理体系结构
流分析通过应用多层复原功能来缓解底层基础结构和输入和输出数据源中的问题,从而实现较高的可靠性。 以下组件有助于确保作业可靠运行:
工作器节点: 流分析作业在 群集中运行。 群集中的虚拟机(VM)称为 工作节点。 使用标准或标准 V2 SKU 时,作业在共享群集上运行。 使用 专用 SKU 时,作业在自己的专用群集上运行。
平台会自动管理工作节点的创建、跨工作节点的作业调度、健康监控和替换不健康的工作节点,因此您不会直接查看或管理 VM。
SU: SU 表示运行作业的计算资源。 SU 数越高,为作业分配的计算资源越多。 平台管理工作器节点和跨工作器节点的作业分配,但你负责为作业分配 SU。 有关详细信息,请参阅 “了解和调整流分析 SU”。
检查点:Stream Analytics 通过定期对状态进行检查点来维护作业状态。 检查点可帮助失败的作业快速恢复,只需最少的数据重新处理,即使对于使用有状态查询逻辑的作业也是如此。
处理失败时,流分析会自动从最后一个检查点重启,并重新处理在处理过程中失败的事件。 此保证适用于作业中的所有内置函数和用户定义的函数。 但实现端到端、恰好一次的交付取决于输出目标的功能。 有关详细信息,请参阅 流分析作业中的检查点和重播概念。
注释
通过使用 IoT Edge 上的流分析,可以在自己的基础结构上运行作业。 在 IoT Edge 上使用流分析时,你负责进行设置以满足可靠性要求。 IoT Edge 上的流分析不在本文的范围之外。
暂时性故障的复原能力
暂时性故障是指组件发生短暂的间歇性故障。 这些故障经常出现在云之类的分布式环境中,在运营过程中比较常见。 暂时性故障在短时间内自行纠正。 应用程序通常可以通过重试受影响的请求来处理暂时性故障,这一点很重要。
与任何云托管的 API、数据库和其他组件通信时,所有云托管的应用程序都应遵循 Azure 暂时性故障处理指南。 有关详细信息,请参阅 处理暂时性故障的建议。
当流分析使用内置重试机制从输入引入数据并将数据写入输出时,流分析会自动处理许多暂时性故障。 工作器节点重启或作业重新分配后,作业会使用检查点重播所有未完全处理的事件,并继续处理直到到达当前输入流。
最好设置 输出错误策略。 但这些策略仅适用于数据转换错误,它们不会更改流分析处理暂时性故障的方式。
应对可用区故障的弹性
可用性区域 是 Azure 区域内物理上独立的数据中心组。 当某个区域发生故障时,服务可以切换到其他可用的区域。
在支持可用性区域的区域中,Stream Analytics 自动具备区域冗余性,这意味着作业会使用多个可用性区域。 区域冗余可确保作业能够灵活应对各种故障,包括灾难性的数据中心中断,而无需对应用程序逻辑进行任何更改。
在启用了区域的区域中创建流分析作业时,该服务会将作业的计算资源分布到多个可用性区域。
这种分区冗余部署模型确保您的流式处理作业能够继续处理数据,即使整个可用区变得不可用。 例如,下图显示了如果区域 3 遇到中断,作业如何继续运行。
区域冗余适用于所有流分析功能,包括查询处理、检查点和作业管理任务。 流分析可跨可用性区域自动复制作业的状态和检查点数据,从而防止数据丢失,并减少区域故障期间的停机时间。
要求
- 区域支持: 支持可用性区域的任何区域都支持流分析资源的区域冗余。 有关支持可用性区域的区域的完整列表,请参阅 Azure 区域列表。
- SKU 要求: 区域冗余在所有流分析 SKU 中都可用。
成本
流分析上的区域冗余不会产生额外的费用。 无论工作是在区域冗余配置中运行还是在非区域冗余配置中运行,您支付 SU 的费率相同。 有关详细信息,请参阅 流分析定价。
配置可用性区域支持
创建区域冗余流分析作业。 在受支持的区域中创建 Stream Analytics 作业时,作业会自动具备区域冗余性。 不需要任何配置。
有关部署说明,请参阅快速入门:使用 Azure 门户和快速入门创建流分析作业:使用 Azure 门户创建专用流分析群集。
启用区域冗余。 所有作业和专用群集在具有可用性区域的区域中均自动具备区域冗余性。 无需启用区域冗余。
关闭区域冗余。 无法关闭区域冗余。
所有区域正常时的行为
本部分介绍当 Stream Analytics 作业具备区域冗余性且所有可用性区域正常运行时的预期情况。
区域之间的流量路由: 流分析在工作器节点上运行每个作业。 任何区域中的工作人员都可能处理传入的流数据。 该服务使用内部负载均衡跨区域分配处理任务。
区域之间的数据复制: 流分析跨可用性区域同步复制作业状态和检查点数据。 作业处理事件并更新状态时,Stream Analytics 会在确认这些更改之前将其写入多个可用性区域。 即使整个区域不可用,此同步复制也可确保零数据丢失。 复制过程对应用程序是透明的,在正常情况下不会影响处理延迟。
区域故障期间的行为
本部分介绍当 Stream Analytics 作业具备区域冗余性且某个可用性区域中断时的预期情况。
- 检测和响应: 流分析平台负责检测可用性区域中的故障并对其进行响应。 流分析将故障区域中的工作单元标记为不健康,并自动将作业重新分发给剩余正常区域的工作单元。 无需执行任何操作即可启动区域故障转移。
- 通知:当区域关闭时,Microsoft不会自动通知你。 但是,可以使用 Azure 资源运行状况 监视单个资源的运行状况,并且可以设置 资源运行状况警报 来通知问题。 还可以使用 Azure 服务运行状况 来了解服务的总体运行状况,包括任何区域故障,还可以设置 服务运行状况警报 来通知问题。
活动请求:Stream Analytics 会将运行中的作业迁移到健康可用性区域中的另一个工作器。
流分析使用检查点来维护处理状态。 区域故障期间,健康区域中的工作器会自动从最后一个检查点重新处理在故障区域中运行的作业。
预期数据丢失: 作业检查点系统可确保不会丢失数据。
预期停机时间:正在进行的作业在平台将其迁移到健康工作器后会自动恢复。
流量重新路由: 该服务会自动将所有的新的输入数据重定向到健康区域中的工作节点。 来自输入源的现有连接会与运行中区域的工作器重新建立。 输出连接也会以类似方式重新建立,确保数据流持续通过流管道。
区域恢复
当失败的可用性区域恢复时,流分析会自动将其重新集成到活动处理池中。 作业会开始使用恢复后的基础结构。
区域恢复无需你执行任何操作。 平台处理所有区域恢复任务,包括状态复制和工作负荷重新分发。
针对局部区域故障进行测试
流分析平台管理流量路由、故障转移和区域恢复,因此无需启动或验证可用性区域故障过程。
对区域范围的故障的复原能力
流分析将资源部署到单个 Azure 区域。 如果区域不可用,您的作业以及专用群集(如果适用)也将不可用。
用于复原的自定义多区域解决方案
若要实现流式处理工作负荷的多区域复原能力,请考虑在多个区域中部署单独的作业。 采用此方法时,负责部署和管理作业,以及设置适当的数据路由和复制策略。 流分析作业是两个单独的实体。 应用程序负责将输入数据发送到区域输入以及协调区域输出。 有关详细信息,请参阅 实现流分析作业的异地冗余。
备份和恢复
流分析没有内置的备份和还原功能。
如果要移动、复制或备份作业的定义和配置,可以使用 Visual Studio Code 的流分析扩展将 Azure 云中的现有作业导出到本地计算机。 在本地保存流分析作业的整个配置后,可以将其部署到同一区域或其他 Azure 区域。 有关详细信息,请参阅 复制、备份和移动流分析作业。
服务维护期间的系统弹性能力
流分析执行自动平台维护以应用安全更新、部署新功能并提高服务可靠性。 它可能会每周或更频繁地部署服务更新。 流分析测试所有新更新,以确保高质量。
请考虑以下几点,确保作业能够抵御服务维护活动的影响:
将作业设置为可抵御重播。 流分析通常使用检查点在服务维护后还原数据。 但有时需要改用重播技术。 需要配置您的输入数据源,以防重播导致输出结果不正确或不完整。 有关详细信息,请参阅 服务升级后的作业恢复。
请考虑通过部署同样的任务来减少 bug 的风险。 该服务在部署到每个批次后主动查找信号,检查部署是否引入了故障。 但是,无论测试多少,当维护引入问题时,现有正在进行的作业可能会失败。 如果运行任务关键型作业,请执行以下步骤来缓解此风险。
通过将相同的作业部署到两个 Azure 区域,可以降低影响工作负荷的 bug 的风险。 监视这些作业 ,以在发生意外情况时接收通知。 如果其中一个作业在流分析服务更新后进入 失败状态 ,请执行以下作:
- 请联系 Azure 支持 人员,帮助确定原因并解决问题。
- 将所有下游消费者故障转移到健康作业的输出。
选择要用于辅助作业的 Azure 区域时,请考虑区域是否具有 配对区域。 Azure 区域列表包含关于哪些区域成对的最新信息。 流分析保证配对区域中的基础结构在不同时间更新。 流分析更新不会同时部署在一组配对区域中。 更新之间存在足够的时间差距,用于识别和修复潜在问题。
服务级别协议
Azure 服务的服务级别协议(SLA)描述了每个服务的预期可用性,以及解决方案为实现该可用性预期而必须满足的条件。 有关详细信息,请参阅 联机服务的 SLA。
Stream Analytics 为管理作业的 API 调用和作业操作提供单独的可用性 SLA。