V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
xuxonce
V2EX  ›  程序员

一个系统设计问题,请各位大佬帮助出出主意。

  •  
  •   xuxonce · 2020-01-09 09:41:13 +08:00 · 1741 次点击
    这是一个创建于 1780 天前的主题,其中的信息可能已经有所发展或是发生改变。

    近期遇到这样一个需求。

    就是,需要对多个业务系统的多个上下游的节点进行清结算,同时要把多个业务系统上下游节点单独拉出来进行统一管理。

    那这个需求,规划了三个部分: ( 1 )业务系统:包括多个业务项目的流程,业务数据(如订单数据等); ( 2 )上下游管理系统:包括上有供应商,下游分销商的信息,并且这些信息都是有层次的树结构信息。希望可以在这个系统中追溯和查看到上下游个节点,在本公司参与过的所有业务的详情; ( 3 )算账系统:记账,算账,希望算出的帐可以溯源到业务数据。

    如果这样来分的话,那么数据存储要如何处理呢?

    最简单的办法就是,各存各的,用的时候通过接口互相调用。但是系统之间的数据不但需要调用,还需要进行修改,如对业务数据打标签等。这样做耦合有点儿太严重了,相当于把所有的数据都放到一个库里了。

    另一个方法,就是中间一个数据仓,数据 T+1 同步到数据仓,系统之间不直接连接,通过数据仓交互数据。这样设计的话工作量有点儿大,而且 T+1 的延迟,可能对部分业务不太友好,系统之间一些直连可能使不可避免的。

    还想了些其它的方式,但是似乎都有各种的不太合适的地方。只能说自己还是水平太 low 了。

    请问各位见多识广的大佬,像这样的情况,应该怎么处理比较好呢?

    5 条回复    2020-01-09 11:45:42 +08:00
    lhx2008
        1
    lhx2008  
       2020-01-09 09:48:41 +08:00 via Android
    没有接触过这类的业务,瞎想的
    如果是集中存的话,只要存最重要的部分就行,相当于一个网关 /代理,中间拦截一下数据存下来,至于追溯的话再回去掉。然后再跑任务做缓存。

    或者是用信息队列推拉,数据推过来统一处理,有问题再回推消息让业务数据自己处理。不过数据别太多了。
    SbloodyS
        2
    SbloodyS  
       2020-01-09 10:23:18 +08:00
    2、3 点实时数仓都可以解决
    dongeast52123
        3
    dongeast52123  
       2020-01-09 11:03:57 +08:00
    个人推荐用后者,这样你的业务就不会去其他业务系统耦合。在细节一点,可以通过 binlog 抓取数据,抓取到的数据怎么折腾,还不是你自己决定的么。
    betajun
        4
    betajun  
       2020-01-09 11:40:28 +08:00
    1. 上下游系统是不是你有完全的控制权?
    如果你有控制权,都可以
    如果你没有控制权,是别的团队(人)在维护,最好通过调用接口来处理,你可以要求接口不变。

    我觉得能少耦合就少耦合~
    dongisking
        5
    dongisking  
       2020-01-09 11:45:42 +08:00
    我现在用子系统的结算就是“是中间一个数据仓,数据 T+1 同步到数据仓,系统之间不直接连接,通过数据仓交互数据”这个方案
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2821 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 21ms · UTC 05:51 · PVG 13:51 · LAX 21:51 · JFK 00:51
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.