Azure 流分析太慢——时间值也不相关
Azure Stream Analytics is too slow - also time values are irrelavant
我们希望将我们的专用服务器迁移到 Azure 平台以便轻松扩展,并调查了很多 Azure 服务以满足我们的需求。因此,我们要使用的 Azure 服务之一是 Azure 流分析 (ASA)。
我们根据执行某些测试的需要添加了一些 Azure 平台(目前它们的用途并不重要)。这是结构:
SimpleApp(发送请求,不在 Azure 中)-> 事件中心 1 (EH1) -> ASA -> 事件中心 2 (EH2) -> 函数应用程序 (FA)
- SimpleApp 向经典专用服务器发送一个简单的 HTTP GET 请求
名为 TESTSERVER。它最多需要 100-150 毫秒,它代表
我们的开始时间。之后它将消息发送到 EH1。
- ASA 的 查询很简单,如下所示:SELECT * INTO [Output] FROM [Input]
- Function App 发送一个简单的 HTTP GET 请求到 TESTSERVER
确定完成时间。
当我们从 TESTSERVER 日志中看到结果时,我们感到震惊。耗时4000-5000ms!
然后我们开始调查这个问题。检查 EventEnqueuedUtcTime 和 EventProcessedUtcTime 等值以确定是哪个块导致了这种缓慢。但是这些时间值是完全无关紧要的。例如; EventEnqueuedUtcTime 应该小于 EventProcessedUtcTime 但不是!所以这向我们展示了即使在不同的 Azure 块中时间服务器也可能不同,我们无法使用它们来测量。我错了吗?
无论如何,在此之后我们怀疑可能是最后一个 Azure Function App 导致了这种缓慢。我们认为可能是 Function App 的 Event Hub Trigger 不太好用。所以我们设计了一个新的测试环境:
SimpleApp(发送请求,不在 Azure 中)-> 事件中心 1 (EH1) -> 函数应用程序 (FA1) -> 事件中心 2 (EH2) -> 函数应用程序 2 (FA2)
第二次冲击...总共只用了~400ms!
然后,我们对包含 ASA 的不同架构进行了大量测试,但所有测试对我们来说都太慢了。
您是否遇到过 ASA 的任何性能问题?能否请您分享您的经验和流程的总耗时?
此致。
从事件中心按时间顺序合并所有事件时存在延迟。
ASA 将访问 EH 中的所有分区,获取数据并将事件按时间顺序组织。这意味着数据必须到达 EH 中的所有分区。我认为这也可以解释您在 EventProcessedUtcTime 中看到的奇怪行为,可能是因为事件是有序的,逻辑 处理时间早于实际到达时间。虽然我对此不确定,因为我不知道 ASA 的内部工作原理。
这种延迟会随着使用的分区数量的增加而增加,尤其是当数据流很慢时。
您可以通过在 EH 的 partitionid
字段上进行分区来避免合并。
确保您也将数据发送到 EH 中的正确分区。
可以在 Stream Analytics blog 上找到更多信息。
我们希望将我们的专用服务器迁移到 Azure 平台以便轻松扩展,并调查了很多 Azure 服务以满足我们的需求。因此,我们要使用的 Azure 服务之一是 Azure 流分析 (ASA)。
我们根据执行某些测试的需要添加了一些 Azure 平台(目前它们的用途并不重要)。这是结构:
SimpleApp(发送请求,不在 Azure 中)-> 事件中心 1 (EH1) -> ASA -> 事件中心 2 (EH2) -> 函数应用程序 (FA)
- SimpleApp 向经典专用服务器发送一个简单的 HTTP GET 请求 名为 TESTSERVER。它最多需要 100-150 毫秒,它代表 我们的开始时间。之后它将消息发送到 EH1。
- ASA 的 查询很简单,如下所示:SELECT * INTO [Output] FROM [Input]
- Function App 发送一个简单的 HTTP GET 请求到 TESTSERVER 确定完成时间。
当我们从 TESTSERVER 日志中看到结果时,我们感到震惊。耗时4000-5000ms!
然后我们开始调查这个问题。检查 EventEnqueuedUtcTime 和 EventProcessedUtcTime 等值以确定是哪个块导致了这种缓慢。但是这些时间值是完全无关紧要的。例如; EventEnqueuedUtcTime 应该小于 EventProcessedUtcTime 但不是!所以这向我们展示了即使在不同的 Azure 块中时间服务器也可能不同,我们无法使用它们来测量。我错了吗?
无论如何,在此之后我们怀疑可能是最后一个 Azure Function App 导致了这种缓慢。我们认为可能是 Function App 的 Event Hub Trigger 不太好用。所以我们设计了一个新的测试环境:
SimpleApp(发送请求,不在 Azure 中)-> 事件中心 1 (EH1) -> 函数应用程序 (FA1) -> 事件中心 2 (EH2) -> 函数应用程序 2 (FA2)
第二次冲击...总共只用了~400ms!
然后,我们对包含 ASA 的不同架构进行了大量测试,但所有测试对我们来说都太慢了。
您是否遇到过 ASA 的任何性能问题?能否请您分享您的经验和流程的总耗时?
此致。
从事件中心按时间顺序合并所有事件时存在延迟。
ASA 将访问 EH 中的所有分区,获取数据并将事件按时间顺序组织。这意味着数据必须到达 EH 中的所有分区。我认为这也可以解释您在 EventProcessedUtcTime 中看到的奇怪行为,可能是因为事件是有序的,逻辑 处理时间早于实际到达时间。虽然我对此不确定,因为我不知道 ASA 的内部工作原理。
这种延迟会随着使用的分区数量的增加而增加,尤其是当数据流很慢时。
您可以通过在 EH 的 partitionid
字段上进行分区来避免合并。
确保您也将数据发送到 EH 中的正确分区。
可以在 Stream Analytics blog 上找到更多信息。