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 ?专门用于新用户注册、登录验证等等。
5376 次点击
所在节点    Java
34 条回复
Xbluer
2020-05-16 16:34:40 +08:00
@xuanbg #17 https://martinfowler.com/articles/microservices.html

Martin Fowler 在这篇文章中提出微服务这个概念的。你可以在文章中搜一下关键字词「 polyglot persistence 」。

「微服务更倾向于让每个服务管理自己的数据库,或者同一数据库技术的不同实例,或完全不同的数据库系统 - 这就是所谓的混合持久化(Polyglot Persistence)。」
Kyle18Tang
2020-05-16 16:38:18 +08:00
@demonzoo #19 可以多参考它们的东西,然后加入自己的东西,当然完全使用它们的框架创建项目也是可以的。Jhipster 使用的很多技术都是很好的实践,看看 jhipster-framework 的代码能学到不少知识,特别是 problem 库的使用,我已经打算在项目中推广。推荐异常处理一定按照标准来处理,不要返回 code 、message 、data 这种类似的格式。
tonnycao
2020-05-16 17:01:50 +08:00
@xuanbg 微服务的基础是领域编程,把领域搞清楚了,就看要拆分什么样的粒度了,我觉得一般还是按照领域(业务)来拆分,相关性强的拆分到一块,当然到时候不同领域都是要基于事件进行进程间通信的。
xuanbg
2020-05-16 17:19:40 +08:00
@tonnycao 一般而言,按领域划分服务是合适的,我举例是有些领域比较大,拆分更多的服务会比较合适。

@Xbluer 是的,「倾向于」。这一点我是认可的,也是尽量这么做的。但绝不能不因地制宜教条地认为微服务必须一个服务一个数据库,某些时候多个服务都属于同一领域,因此会在数据上产生依赖关系。这个时候就是需要多个服务共用一个数据库。
xuanbg
2020-05-16 17:33:56 +08:00
@Xbluer 原文是「 While monolithic applications prefer a single logical database for persistant data, enterprises often prefer a single database across a range of applications - many of these decisions driven through vendor's commercial models around licensing. Microservices prefer letting each service manage its own database, either different instances of the same database technology, or entirely different database systems - an approach called Polyglot Persistence 」
Martin Fowler 拿传统单体应用和微服务做了个对比,阐明「 As well as decentralizing decisions about conceptual models, microservices also decentralize data storage decisions 」这个观点。根本没提什么「准则」……有些人也太过道听途说不求甚解了吧。
ajaxfunction
2020-05-16 17:36:17 +08:00
只有我一个人发现 楼主标题打错了吗?
xuanbg
2020-05-16 17:40:12 +08:00
确实是标题错打了,但大家都懂看了。。。。
demonzoo
2020-05-16 21:38:37 +08:00
@ajaxfunction 噗,sprint 打顺手了
demonzoo
2020-05-16 21:39:41 +08:00
@xuanbg 我发现你字打颠倒了 🐶
demonzoo
2020-05-16 21:42:04 +08:00
@xuanbg 感谢!说“准则”确实不太合适,不过姑且可以称之为“原则”吧。
qbmiller
2020-05-17 00:23:24 +08:00
最近项目,在把原先 10 几个模块合成 3 个左右,里面关联调用太多了…维护也费劲
lcinshu
2020-05-17 16:54:36 +08:00
@hantsy 现在很多 social 账号登录,他喵的新用户还是让绑定手机账号,真想口吐芬芳
demonzoo
2020-05-18 22:44:39 +08:00
@lcinshu 是的,国内有些服务特别脑残,明明 oauth 登录完事了,还是让填写用户名、手机号什么的。早知道还是要填手机号,我费劲用什么社交账号登录啊
AmosOvO
2020-05-21 09:32:47 +08:00
请问老哥这个项目,方便分享一下嘛,最近也想开始学习一下 Spring boot

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

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

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

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

© 2021 V2EX