使用 Azure Data Explorer 实现高并发性优化

在具有大型用户群的情况下,需要高度并发的应用程序,应用程序同时处理许多低延迟和高吞吐量的请求。

用例包括大规模监视和警报仪表板。 示例包括Microsoft产品和服务,例如 Azure MonitorPlayfab。 所有这些服务都使用Azure Data Explorer来提供高并发工作负荷。 Azure Data Explorer是一项快速、完全托管的大数据分析服务,用于实时分析来自应用程序、网站、IoT 设备等的大量数据流。

注意事项

可以在群集上并发运行的实际查询数取决于各种因素(例如群集 SKU、数据卷、查询复杂性和使用模式)。

若要设置高并发应用程序,请按如下所示设计后端体系结构:

本文提供了上述每个主题的建议,你可以实施这些建议,以最佳、经济高效的方式实现高并发性。 单独或组合使用这些功能。

优化数据

为了实现高并发性,查询应使用尽可能少的 CPU 资源。 使用以下任一或全部方法:

使用表架构设计最佳做法

使用以下表架构设计建议来最大限度地减少已使用的 CPU 资源:

  • 将 ID 列定义为字符串数据类型,即使值为数值也是如此。 字符串列的索引比数字列的更复杂,但提供更好的筛选性能。
  • 最好将列数据类型与这些列中存储的实际数据匹配。 例如,不要将日期时间值存储在字符串列中。
  • 避免使用包含许多列的大型稀疏表,并使用动态列来存储稀疏属性。
  • 使用非动力学数据类型将常用属性存储在其自己的列中。
  • 将数据去规范化以避免需要消耗相对较大 CPU 资源的联接。

将数据分区

数据以盘区(数据分片)的形式存储,并在默认情况下按引入时间进行分区。 可以使用分区策略根据单个字符串列或单个日期/时间列,在后台进程中重新分区。 当大多数查询使用分区键进行筛选和/或聚合时,分区可以显著地改进性能。

注意事项

分区进程本身使用 CPU 资源。 但是,查询时的 CPU 缩减应超过用于分区的 CPU 消耗。

使用物化视图来预聚合数据

预聚合数据,以在查询期间显著减少 CPU 资源。 示例方案包括:通过减少时间箱数来汇总数据点,保留给定记录的最新记录,或删除重复数据集。 使用 物化视图以便轻松实现对源表的聚合视图。 此功能简化了创建和维护这些聚合视图的工作。

注意事项

后台聚合进程使用 CPU 资源。 但是,查询时的 CPU 缩减应超过用于聚合的 CPU 消耗。

配置缓存策略

配置缓存策略,以便在热存储(也称为磁盘缓存)中存储的数据上执行查询。 仅在冷存储或外部表上运行有限且精心设计的场景。

设置领导者-从属者体系结构模式

关注者数据库是一项用于跟随数据库或数据库中一组表的功能,这些数据库或表位于同一区域的另一个群集中。 可以通过 Azure Resource Manager API 和一组 cluster 命令来access此功能。

使用主从模式为不同的工作负载配置计算资源。 例如,设置引入的群集,用于查询或提供仪表板或应用程序的群集,以及用于提供数据科学工作负载的群集。 在这种情况下,每个工作负荷都有可以独立缩放的专用计算资源,以及不同的缓存和安全配置。 所有群集均使用相同的数据,由领导者写入数据,并由关注者在只读模式下使用该数据。

注意事项

关注者数据库与领导者数据库之间通常存在几秒钟的延迟。 如果解决方案需要没有延迟的最新数据,则此解决方案可能没有用处。 使用关注者群集上的视图,该视图联合来自领导者和关注者的数据,并从领导者中查询最新数据,从关注者中查询剩余数据。

若要提高从属集群上的查询性能,可以启用 预取区块配置。 请小心使用此配置,因为它可能会影响关注者数据库中数据的时效性。

优化查询

使用以下方法来优化查询以实现高并发性。

遵循 query 最佳做法,使查询尽可能高效。

使用查询结果缓存

当多个用户同时加载同一个仪表板时,第二个及之后用户的仪表板可以从缓存提供。 此设置提供高性能,几乎不会占用 CPU。 使用 query 结果缓存功能,并使用 set 语句通过查询发送查询结果缓存配置。

Grafana 包含数据源级别的查询结果缓存的配置设置,因此所有仪表板默认使用此设置,而无需修改查询。

配置查询一致性

默认查询一致性模式为 strong。 在此模式下,管理节点管理群集的元数据和引入,并且规划查询和将执行委托给其他节点。

在高并发应用程序中,管理查询可能会导致 管理 节点的 CPU 使用率较高,而其他节点则不太忙。 这种情况可能会导致并发查询数无法增长的瓶颈。 但是,在群集的 CPU 报告中(Azure portal > {your_cluster} > 指标 > CPU 指标),这个瓶颈可能不会很明显,该报告显示了群集的平均 CPU 使用率。

对于此方案,请使用 一致性模式。 在此模式下,更多的节点管理查询,这使得可以 水平缩放 并发查询的数量。 此模式下的节点会定期刷新其元数据和新引入的数据的副本,这使得同步数据时延迟通常小于 1 分钟。 但是,对于使用强一致性模式时可能出现的瓶颈情况,这种短延迟更有利。

workload 组查询一致性策略client 请求属性或 Grafana 数据源配置中设置一致性模式。

设置群集策略

Request 速率限制策略默认限制并发请求数,以便群集不会重载。 可以为高并发情况调整此策略。 仅在经过严格测试后才调整此策略,最好是在类似于生产环境的使用模式和数据集上进行。 通过测试可确保群集可以保持已修改的值。 根据应用程序需求配置此限制。

监视Azure Data Explorer群集

通过监视群集资源的运行状况,可帮助你使用前面部分中建议的功能生成优化计划。 Azure Monitor for Azure Data Explorer 提供有关群集性能、操作、使用情况和故障的综合视图。 通过在Azure portal中Azure Data Explorer群集的 Monitoring1 部分下选择 Insights (预览版) 选项卡,获取有关查询的性能、并发查询、限制查询和其他各种指标的见解。

有关监视群集的信息,请参阅 Azure Monitor for Azure Data Explorer