首先介绍我们的用例:
实时数据分析平台。
每1秒一个外部系统产品时间序列数据。时间序列数据由[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计划的生命周期。
在 GREG
中定义新工件类型,类型包含CPP程序(.exe或脚本)。我们希望使用发布者控制台网站发布新的CPP程序, 管理程序生命周期(开始/停止/暂停/重置),但仍处于开发阶段,无法完全确认可以存档
我们希望将CPP程序文件上传到Enterprise Store,用户可以从GREG发布者订阅
监控每个CPP计划。
在 DAS
中创建自定义接收器,它每30秒从GREG获取一个id列表,并从外部系统获取时间序列数据
创建流,它是持久性事件数据
创建执行计划,它使用siddhi按每个CPP重新组织时间序列数据
创建HTTP接收器以接收来自CPP
创建发布商以将KPI发送到外部数据库商店
我们的架构有什么问题吗?它是使用DAS和GREG的最佳方式吗?
感谢您的任何建议。