2

先介绍一下我们的用例:

实时数据分析平台

每1s一个外部系统产品时序数据。时序数据由[id,time,value]字段组成。支持REST API搜索这些时序数据。

我们有很多(超过 100 个)独立的 CPP 程序来分析时间序列数据,这些程序会将 KPI 生成到数据库中。程序是实时计算,每个CPP程序每秒读取数据,按次进行处理,并将KPI结果发送到数据库。

我们使用的系统架构非常简单: 在此处输入图像描述

但系统存在问题:

  1. 每一秒,外部系统都会收到一个巨大的http请求,这会导致外部系统的性能下降。

  2. DB的情况与1相同

  3. 我们没有合适的工具来管理 CPP 程序,我们不知道它们何时以及为什么会崩溃。我们希望在它们有任何问题时收到警报。

  4. 并且缺乏合适的工具,只能一一部署启动CPP

  5. 许多程序会请求相同的时间序列数据,例如程序 A 请求 [ID1, ID2, ID3, ID4],程序 B 可能请求 [ID2, ID4, ID6, ID7],程序 C 可能请求 [ID3, ID5,ID5 ,ID7],所以在不同的请求中会出现大量的重复数据。

经过一番调查,我们认为 WSO2 产品是解决我们问题的最佳选择,我们改变了架构:

在此处输入图像描述

我们使用DAS搜索TS数据,调度数据,收集KPI结果。GREG 用于管理 CPP 程序的生命周期。

格雷格

  1. 定义新的工件类型,该类型包含 CPP 程序(.exe 或脚本)。我们想使用发布者控制台 web 发布新的 CPP 程序,管理程序生命周期(启动/停止/暂停/重置),但仍在开发中,无法完全确认可以存档

  2. 我们要将 CPP 程序文件上传到 Enterprise Store,用户可以从 GREG 发布者那里订阅它

  3. 监控每个 CPP 计划。

DAS

  1. 创建自定义接收器,每 30 秒从 GREG 获取 id 列表,并从外部系统获取时间序列数据

  2. 创建流,它持久化事件数据

  3. 创建执行计划,它使用 siddhi 重新组织每个 CPP 的时间序列数据

  4. 创建 HTTP 接收器以接收来自 CPP 的 KPI 结果

  5. 创建发布者以将 KPI 发送到外部数据库存储

那么我们的架构有什么问题吗?它是使用 DAS 和 GREG 的最佳方式吗?

感谢您的任何建议。

4

0 回答 0