系统设计方案求解

2023-01-31 18:04:07 +08:00
 S4msara

目前需要开发一个数据计算服务。

大致业务:拿到业务数据及当前激活的算法之后,根据业务服务提供的不同数据集,执行计算,最终产生结构相同的结果数据。(单次计算数据量级百万至小千万)

特征:影响计算结果的因素可变、算法可变,输出结果数据结构一致。

最终目的:保证系统扩展能力、具备同步及异步计算。

由于本人对设计模式认识还有所欠缺,暂未思考出比较合适的方案,所以想借鉴一下各位前辈在遇到这类需求的设计思路。

1768 次点击
所在节点    程序员
7 条回复
kop1989smurf
2023-01-31 18:11:28 +08:00
楼主这个问题的信息量太少。

1 、function 的输出结果稳定是必然的,这是废话。
2 、同步、异步、扩展能力的设计是依照你的“计算”可能性边界而来的。

但楼主通篇没说到底是什么计算,以及需求边界在哪。
最起码要举个范例。
S4msara
2023-01-31 19:11:07 +08:00
@kop1989smurf 已经 append 一个例子,不知能否帮助理解
S4msara
2023-01-31 19:18:59 +08:00
@kop1989smurf 另外,结合例子单独补充一下关于“同步、异步、扩展能力”我的考虑:之所以需要具备这些能力是为了适应应用在未来版本迭代中的变化,例子对于这部分要求来说还是过于单一、片面,但如果延伸至 BI 系统这类业务更加复杂、交付群体需求更多样的场景,能够具备这些能力对产品的开发和交付能力都将是量级提升。
learningman
2023-01-31 19:32:42 +08:00
策略,你可以加 n 组 middleware 来处理数据,但是不改变数据本身的格式。

再要扩展性就设计个 dsl 。
k9990009
2023-02-01 10:37:44 +08:00
模板+工厂+策略+责任链
以 JAVA 来说下我的实现思路吧
以设备不同分父子类,抽象出计算的接口,抽象模板实现公共的计算接口,增加计算前,计算后的方法。
这里计算前方法主要是用来预处理数据,在计算接口实现时专注于计算逻辑。
不同设备实现不同的模板方法,规则固定的话,计算中配置规则就好。规则动态的话,引入规则引擎,一个链路去执行这些规则。要是有用户在可视化页面去管理规则的话,也可以考虑自己实现一套支持变量运算的简易语法。规则引擎可以看看 QLExpress ,我没用过,我自己根据产品的设计实现带变量的四则运算、文本计算就够用了。
同步、异步看你的场景了。
litchinn
2023-02-01 16:40:10 +08:00
根据实际情况,从简单到复杂的设计 ifelse->策略模式+责任链-> 规则引擎(easyrules ,drools, LiteFlow 等)-> DSL,AST ,再往下抽象就变成编程语言本身了,你在附言中的场景,自己写个规则路由就行了
但是如果需要动态变更规则,序列化规则,提供操作页面给用户等,那么规则引擎是不错的选择
S4msara
2023-02-02 11:01:50 +08:00
@learningman
@k9990009
@litchinn
感谢各位很有建设性的意见作为参考!

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/912010

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX