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

多个服务访问同一个数据库时,如何组织代码?

  •  
  •   WillingXyz · 200 天前 · 1983 次点击
    这是一个创建于 200 天前的主题,其中的信息可能已经有所发展或是发生改变。

    同一个业务,有用于 app/web 的服务 A ,用于管理后台的服务 B ,用于运营后台的服务 C 。

    这三个作为单独的服务运行。

    那么代码是拆分为三个代码仓库,还是同一个代码仓库,然后内部分模块,共用 DAO 层,Service 层,比如:

    • xxx-dao
    • xxx-service
    • xxx-app app
    • xxx-admin 管理后台
    • xxx-manager 运营后台

    还是说这三个没必要作为单独的服务存在,直接在一个服务中就行。

    各位大佬是如何考虑的

    10 条回复    2021-11-04 11:36:52 +08:00
    SorcererXW
        1
    SorcererXW  
       200 天前
    1. 一个服务连接数据库,暴露 RPC 给上游服务(前端接口、管理后台)调用
    2. 同一套代码,通过环境变量控制开启哪些功能、接口
    yidinghe
        2
    yidinghe  
       200 天前 via Android
    那你就不能用缓存了。如果 A 缓存了记录但是 B 改了的话,A 是不知道的。
    XTTX
        3
    XTTX  
       200 天前
    好奇你准备怎么解决 race condition.
    feitxue
        4
    feitxue  
       200 天前
    单独两个项目,一个暴露前端的接口.一个内部使用的管理后台.
    业务都比较简单,管理平台只负责开个账号,看个报表什么的.
    这是目前我维护一个老项目.这样玩儿.问题不大.毕竟目前实际用户不到 20 个.
    业务复杂的话,并且访问量大,管理端功能也复杂的话,不建议这样玩儿.
    meeop
        5
    meeop  
       200 天前
    怎么分都行,关键点在于数据库连接和使用的代码,表定义的代码是共享的,具体调用点分布在多少个项目都行
    xuanbg
        6
    xuanbg  
       200 天前
    3 个项目,3 个仓库。
    sujin190
        7
    sujin190  
       200 天前
    建议别这么拆,建立把能独立单独做 rpc 服务提供接口统一调用,比如下单、退换货、退款管理等等,其它的各自搞各自的,搞个统一的 dao 层啥的在 web 上需要经常调整需求的用处不大,而且很快你就会发现几个调用方重合度完全没想的那么高,然后又各种不注意的相互依赖慢慢出来了,最后完全失去了一开始分模块项目的目的,完全一堆大杂烩
    Huelse
        8
    Huelse  
       200 天前
    请教下多个服务访问多个数据一致的数据库怎么解决,只能同步吗?或者是增加中间层?
    duduaba
        9
    duduaba  
       199 天前
    想怎么拆都可以,因为拆或不拆下个人接手也是骂人。。。
    yangzzzzzz
        10
    yangzzzzzz  
       199 天前
    我觉得还是根据业务拆开比较好。
    关于   ·   帮助文档   ·   API   ·   FAQ   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   2594 人在线   最高记录 5497   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 31ms · UTC 10:45 · PVG 18:45 · LAX 03:45 · JFK 06:45
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.