V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
S4msara
V2EX  ›  程序员

系统设计方案求解

  •  
  •   S4msara · 2023-01-31 18:04:07 +08:00 · 1819 次点击
    这是一个创建于 688 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

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

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

    第 1 条附言  ·  2023-01-31 19:10:31 +08:00
    举一个不太恰当的例子:
    电费计算:采集设备采集到用户用电数据,包含用电量、设备 SN 、所在区域等信息,但采集设备会因为型号的不同,数据元素有多有少,在计算服务获取到这些数据之后,根据数据元素的不同采用不同的计算逻辑,但最终都是为了得出电费。而电费的计算规则是可变的,用电设备所在行政区划的不同、用电季度不同,都将影响计价公式的选择(单一电价、阶梯电价、峰平谷电价),因此只有在预备计算阶段才能确定应用哪种电费计价规则
    7 条回复    2023-02-02 11:01:50 +08:00
    kop1989smurf
        1
    kop1989smurf  
       2023-01-31 18:11:28 +08:00
    楼主这个问题的信息量太少。

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

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

    再要扩展性就设计个 dsl 。
    k9990009
        5
    k9990009  
       2023-02-01 10:37:44 +08:00   ❤️ 1
    模板+工厂+策略+责任链
    以 JAVA 来说下我的实现思路吧
    以设备不同分父子类,抽象出计算的接口,抽象模板实现公共的计算接口,增加计算前,计算后的方法。
    这里计算前方法主要是用来预处理数据,在计算接口实现时专注于计算逻辑。
    不同设备实现不同的模板方法,规则固定的话,计算中配置规则就好。规则动态的话,引入规则引擎,一个链路去执行这些规则。要是有用户在可视化页面去管理规则的话,也可以考虑自己实现一套支持变量运算的简易语法。规则引擎可以看看 QLExpress ,我没用过,我自己根据产品的设计实现带变量的四则运算、文本计算就够用了。
    同步、异步看你的场景了。
    litchinn
        6
    litchinn  
       2023-02-01 16:40:10 +08:00   ❤️ 1
    根据实际情况,从简单到复杂的设计 ifelse->策略模式+责任链-> 规则引擎(easyrules ,drools, LiteFlow 等)-> DSL,AST ,再往下抽象就变成编程语言本身了,你在附言中的场景,自己写个规则路由就行了
    但是如果需要动态变更规则,序列化规则,提供操作页面给用户等,那么规则引擎是不错的选择
    S4msara
        7
    S4msara  
    OP
       2023-02-02 11:01:50 +08:00
    @learningman
    @k9990009
    @litchinn
    感谢各位很有建设性的意见作为参考!
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   4342 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 04:05 · PVG 12:05 · LAX 20:05 · JFK 23:05
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.