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

问一个系统设计的问题

  •  
  •   MeloForsaken 2020-09-05 16:21:52 +08:00 2422 次点击
    这是一个创建于 1878 天前的主题,其中的信息可能已经有所发展或是发生改变。

    目前有一个 springboot 的业务项目,打个比方叫做服务 A 。

    现在需要在这项目 A 的数据基础上,出一些报表,由于可能需要频繁的更改代码并更新,所以打算再起一个服务 B 。

    现在的问题是怎么让 B 调用 A 的数据,RPC ?还是把 A 的 Mapper 和 POJO 转移到公共的 module ?还是在服务 B 上单独重新写 Mapper 和 POJO ?

    10 条回复    2020-09-07 19:12:37 +08:00
    519718366
        1
    519718366  
       2020-09-05 16:39:42 +08:00 via iPhone
    最简单的快速迭代方式就是,a 服务直接出相关服务,B rpc 调用。

    有没有必要把相关的 dao 抽成单独模块,就看你们的划分了
    firefox12
        2
    firefox12  
       2020-09-05 17:09:34 +08:00
    RPC, 高内聚,A 就负责它的数据和逻辑,B 就复制 A 的数据里变报表。
    limuyan44
        3
    limuyan44  
       2020-09-05 18:39:58 +08:00
    你说的前 2 种方案 b 服务上线 a 服务难道不跟着上线吗,哪天业务新增一个字段不是从 a 服务频繁上线变成了 ab 服务频繁上线了。
    cassyfar
        4
    cassyfar  
       2020-09-05 18:54:18 +08:00
    A 的 mapper 和 pojo 移到公共的 module 来。不要通过 A 拿数据。。。因为业务逻辑上,A 和 B 是完全独立的。
    shizepeng
        5
    shizepeng  
       2020-09-05 19:14:16 +08:00
    一个好的系统设计者应该要多角度去综合考虑问题,如果你选择 RPC 方式,那么维护成本肯定低,但是可扩展性不强,系统耦合性高,而且 A 的改造升级会不会影响 B 的正常运转,系统之间的耦合性强。

    如果采用 B 方案,那么维护成本高容易出错,但是可扩展性强,耦合性低,生产活动、升级改造过程中不会互相干扰。

    各有优劣,没法抉择,这时候就看需求,需求很重要,仔细阅读需求后,再来考虑问题。如果对生产活动的稳定性要求高,对可扩展性要求强,那么采用 B 方案,反之,采取 A 方案。
    lecher
        6
    lecher  
       2020-09-06 00:16:44 +08:00
    问题是如何满足频繁变更的报表需求。
    成本最低的方案其实是用专门的报表基础设施解决这几个问题:
    1. 报表计算逻辑的声明
    2. 报表同步数据

    自己另起服务定制写统计是成本最高的方案,不管你是 rpc 还是定制写计算逻辑。
    两个业务其实可以通过数据库解耦。
    不管你有多少业务项目:A1 、A2 、A3……
    业务项目只负责自己的业务数据读写的约束。

    报表业务应该只关注数据库的数据是什么样,如何通过数据库的数据计算出需要的报表,clickhouse 、tableau 、superset 这类开箱即用的报表解决方案不是更合适吗。
    lazyfighter
        7
    lazyfighter  
       2020-09-07 11:14:50 +08:00
    B 依赖 A,也解决不掉,需求来了,不改 A 啊
    teddy2725
        8
    teddy2725  
       2020-09-07 11:17:32 +08:00
    再搞个 B 数据库以 A 的数据做数据源,联机分析和联机事务场景不同,表结构也需要不一样
    ychost
        9
    ychost  
       2020-09-07 14:43:25 +08:00
    B 去调用 A 就行了,用 dubbo 之类的也方便
    lix7
        10
    lix7  
       2020-09-07 19:12:37 +08:00
    直接 mono-repo 复用代码,但是分开部署
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     5317 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 30ms UTC 07:00 PVG 15:00 LAX 00:00 JFK 03:00
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86