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

2021-11-03 09:09:53 +08:00
 WillingXyz

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

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

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

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

各位大佬是如何考虑的

2681 次点击
所在节点    程序员
10 条回复
SorcererXW
2021-11-03 09:27:20 +08:00
1. 一个服务连接数据库,暴露 RPC 给上游服务(前端接口、管理后台)调用
2. 同一套代码,通过环境变量控制开启哪些功能、接口
yidinghe
2021-11-03 09:34:31 +08:00
那你就不能用缓存了。如果 A 缓存了记录但是 B 改了的话,A 是不知道的。
XTTX
2021-11-03 09:38:06 +08:00
好奇你准备怎么解决 race condition.
feitxue
2021-11-03 09:53:46 +08:00
单独两个项目,一个暴露前端的接口.一个内部使用的管理后台.
业务都比较简单,管理平台只负责开个账号,看个报表什么的.
这是目前我维护一个老项目.这样玩儿.问题不大.毕竟目前实际用户不到 20 个.
业务复杂的话,并且访问量大,管理端功能也复杂的话,不建议这样玩儿.
meeop
2021-11-03 10:40:30 +08:00
怎么分都行,关键点在于数据库连接和使用的代码,表定义的代码是共享的,具体调用点分布在多少个项目都行
xuanbg
2021-11-03 10:47:10 +08:00
3 个项目,3 个仓库。
sujin190
2021-11-03 10:52:24 +08:00
建议别这么拆,建立把能独立单独做 rpc 服务提供接口统一调用,比如下单、退换货、退款管理等等,其它的各自搞各自的,搞个统一的 dao 层啥的在 web 上需要经常调整需求的用处不大,而且很快你就会发现几个调用方重合度完全没想的那么高,然后又各种不注意的相互依赖慢慢出来了,最后完全失去了一开始分模块项目的目的,完全一堆大杂烩
Huelse
2021-11-03 11:02:02 +08:00
请教下多个服务访问多个数据一致的数据库怎么解决,只能同步吗?或者是增加中间层?
duduaba
2021-11-03 20:10:53 +08:00
想怎么拆都可以,因为拆或不拆下个人接手也是骂人。。。
yangzzzzzz
2021-11-04 11:36:52 +08:00
我觉得还是根据业务拆开比较好。

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

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

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

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

© 2021 V2EX