先介绍一下我们的用例:
实时数据分析平台。
每1s一个外部系统产品时序数据。时序数据由[id,time,value]字段组成。支持REST API搜索这些时序数据。
我们有很多(超过 100 个)独立的 CPP 程序来分析时间序列数据,这些程序会将 KPI 生成到数据库中。程序是实时计算,每个CPP程序每秒读取数据,按次进行处理,并将KPI结果发送到数据库。
但系统存在问题:
每一秒,外部系统都会收到一个巨大的http请求,这会导致外部系统的性能下降。
DB的情况与1相同
我们没有合适的工具来管理 CPP 程序,我们不知道它们何时以及为什么会崩溃。我们希望在它们有任何问题时收到警报。
并且缺乏合适的工具,只能一一部署启动CPP
许多程序会请求相同的时间序列数据,例如程序 A 请求 [ID1, ID2, ID3, ID4],程序 B 可能请求 [ID2, ID4, ID6, ID7],程序 C 可能请求 [ID3, ID5,ID5 ,ID7],所以在不同的请求中会出现大量的重复数据。
经过一番调查,我们认为 WSO2 产品是解决我们问题的最佳选择,我们改变了架构:
我们使用DAS搜索TS数据,调度数据,收集KPI结果。GREG 用于管理 CPP 程序的生命周期。
在格雷格
定义新的工件类型,该类型包含 CPP 程序(.exe 或脚本)。我们想使用发布者控制台 web 发布新的 CPP 程序,管理程序生命周期(启动/停止/暂停/重置),但仍在开发中,无法完全确认可以存档
我们要将 CPP 程序文件上传到 Enterprise Store,用户可以从 GREG 发布者那里订阅它
监控每个 CPP 计划。
在DAS
创建自定义接收器,每 30 秒从 GREG 获取 id 列表,并从外部系统获取时间序列数据
创建流,它持久化事件数据
创建执行计划,它使用 siddhi 重新组织每个 CPP 的时间序列数据
创建 HTTP 接收器以接收来自 CPP 的 KPI 结果
创建发布者以将 KPI 发送到外部数据库存储
那么我们的架构有什么问题吗?它是使用 DAS 和 GREG 的最佳方式吗?
感谢您的任何建议。