Sprint boot 菜鸟请教一个微服务架构中对模块进行拆分的问题,望指教

2020-05-16 11:39:33 +08:00
 demonzoo
我是 Spring boot 菜鸟,最近才开始自学。目前对于服务拆分这一块有一点迷茫,网上教程五花八门,全都不一样。所以想请教一下大家在实际项目中是如何实现的。

我目前在做一个 demo,用到了 eureka,zuul gateway 和 jwt 做简单的认证。我目前的微服务模块大体如下:

euraka-server
zuul-gateway
common //用于存放公共的 entity
auth-service
user-service
admin-service
business-service-1
business-service-2
...


我看过的教程中有把 login,auth 和 gateway 整合在一起的,但是觉得这个 gateway 有点臃肿了,想继续细分一下。


所以想问一下
1. 实际项目中是否会将 gateway 与 auth-service 拆分开?
2. user-service 有没有必要与 admin-service 拆分开?
3. 有没有必要再拆分出一个 login-service ?专门用于新用户注册、登录验证等等。
5148 次点击
所在节点    Java
34 条回复
wushigejiajia01
2020-05-16 12:21:50 +08:00
就我之前的项目经验来说,如果你这是个大型项目,且前期就能确定业务模块比较多的话,那么前期设计的时候就可以尽量的细分,或者即使不细分也要为以后得拆分留余地,不然经过一系列迭代升级之后再去拆分会头疼

小项目就无所谓了,大头的业务功能模块分清楚就好,其他怎么简单怎么来,拆的太细反倒麻烦

一家之言
312ybj
2020-05-16 12:35:13 +08:00
认证模块和用户模块我这边是放一起,单个认证没多少代码
hantsy
2020-05-16 12:39:44 +08:00
实际实用中,目前互联网 SAAS 程序,IDP 用第三方的服务比较靠谱,一,用户认证实现是件麻烦事,二,现在人大部分都是喜欢用 Social Account,没多少人愿意注册新账号。
demonzoo
2020-05-16 12:43:53 +08:00
@wushigejiajia01 多谢!
demonzoo
2020-05-16 12:44:41 +08:00
@312ybj 那请问一下如果 auth 和 user 合一起的话,token 在哪个模块生成?也是在 user 模块吗?
demonzoo
2020-05-16 12:45:24 +08:00
@hantsy 感谢回复,你说的第三方认证就是走 oAuth2 对吧?
hantsy
2020-05-16 12:53:18 +08:00
基本都是支持 OAuth2/OIDC 的。
hantsy
2020-05-16 13:00:44 +08:00
common //用于存放公共的 entity---》 这个不知道干嘛的,完全没有意义。不同 Domain 来划分 Service,即使是同一概念,建模也会不一样,比如,库存,和产品目录中的 Product,属性会有差别, 而 Customer Service 和 Order Service 中的 Customer 也不尽相同。何况,Microservice 一个准则是每个服务都是维护自己的数据库。理想情况下,每个服务应该做到完全自治。
demonzoo
2020-05-16 13:10:00 +08:00
@hantsy 这个主要就是因为我把服务拆成了 auth-service, user-service,admin-service,这几个模块都要访问一个共同的 UserEntity 。我觉得如果不抽到 common 里面的话,那就要在每一个 service 下面都放一个 UserEntity 和 UserRepository,感觉很重复。不过确实如你所说,不同模块下的 model 属性可能会有区别,所以你的建议还是去掉 common,把它们分别放到各自的模块中去?
Sayommy
2020-05-16 13:16:58 +08:00
教程 DEMO 就是学习一下组件的用法、背后的思想、参考下设计思路就好了。

实际的项目中如何落地,就需要具体问题具体分析。
做的什么业务?规模多大?团队配置情况?技术选型?开发策略?从 0 到 1 还是已有体系?

我们的业务最开始就是 ALL-IN-ONE,起步时需要快速验证,用户量上去了才开始拆,才开始上各种中间件,才开始招更多的人。

架构设计都是需要匹配业务场景、业务当前的发展阶段的,纸上谈兵没什么意义,需要找一个好公司到实际的业务中去积累经验。
xizismile
2020-05-16 13:33:58 +08:00
楼上说的对
wc951
2020-05-16 14:07:35 +08:00
每次遇到服务拆分的问题都建议去看下领域驱动设计的概念
admin7785
2020-05-16 14:36:07 +08:00
我的项目中:
1.是拆分开的,oauth 服务单独拿来做授权校验等;
2.可以单独一个 admin-service ;
3.同 1 ;如果你是做 demo 来练习的话,建议没必要拆分开,而且实际开发中,目前还没见过拆开单独做 login-service 的
demonzoo
2020-05-16 14:51:46 +08:00
@admin7785
@Sayommy
好的,感谢
demonzoo
2020-05-16 14:58:45 +08:00
@admin7785 我其实也就是想听听大家实际项目中的经验,毕竟我不可能每家公司都去工作一遍,多谢分享
Kyle18Tang
2020-05-16 15:14:37 +08:00
推荐一个脚手架,jhipster,多参考参考,它是注册中心、UAA (用户认证和授权)、网关、微服务这样。
xuanbg
2020-05-16 16:02:00 +08:00
@hantsy 什么时候微服务有「每个服务都是维护自己的数据库」这种准则了?谁提出来的?依据是什么?

照这个准则行事的话,一个领域只能存在一个服务咯?这显然是不切实际的,譬如用户管理这个领域,就可以具体拆分为:用户、用户组、组织机构、租户、角色、资源、认证等七大模块。这些难道都必须塞到一个服务里面?

一个财务管理领域,也可以分为:账户、流水、收款、付款、退款、对账、提现、开票等等功能,也必须塞到一个服务里面?
chihiro2014
2020-05-16 16:26:18 +08:00
感觉看起来像是乐优商城
demonzoo
2020-05-16 16:29:05 +08:00
@Kyle18Tang 多谢,刚看了一眼 JHipster 的官网,感觉这个东西有点意思,是不是用了它就基本上不用操心这些框架、架构的事情了?
demonzoo
2020-05-16 16:30:15 +08:00
@chihiro2014 什么乐优商城?

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

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

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

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

© 2021 V2EX