1
wushigejiajia01 2020-05-16 12:21:50 +08:00 via Android
就我之前的项目经验来说,如果你这是个大型项目,且前期就能确定业务模块比较多的话,那么前期设计的时候就可以尽量的细分,或者即使不细分也要为以后得拆分留余地,不然经过一系列迭代升级之后再去拆分会头疼
小项目就无所谓了,大头的业务功能模块分清楚就好,其他怎么简单怎么来,拆的太细反倒麻烦 一家之言 |
2
312ybj 2020-05-16 12:35:13 +08:00 via Android
认证模块和用户模块我这边是放一起,单个认证没多少代码
|
3
hantsy 2020-05-16 12:39:44 +08:00
实际实用中,目前互联网 SAAS 程序,IDP 用第三方的服务比较靠谱,一,用户认证实现是件麻烦事,二,现在人大部分都是喜欢用 Social Account,没多少人愿意注册新账号。
|
4
demonzoo OP @wushigejiajia01 多谢!
|
5
demonzoo OP @312ybj 那请问一下如果 auth 和 user 合一起的话,token 在哪个模块生成?也是在 user 模块吗?
|
7
hantsy 2020-05-16 12:53:18 +08:00 1
基本都是支持 OAuth2/OIDC 的。
|
8
hantsy 2020-05-16 13:00:44 +08:00
common //用于存放公共的 entity---》 这个不知道干嘛的,完全没有意义。不同 Domain 来划分 Service,即使是同一概念,建模也会不一样,比如,库存,和产品目录中的 Product,属性会有差别, 而 Customer Service 和 Order Service 中的 Customer 也不尽相同。何况,Microservice 一个准则是每个服务都是维护自己的数据库。理想情况下,每个服务应该做到完全自治。
|
9
demonzoo OP @hantsy 这个主要就是因为我把服务拆成了 auth-service, user-service,admin-service,这几个模块都要访问一个共同的 UserEntity 。我觉得如果不抽到 common 里面的话,那就要在每一个 service 下面都放一个 UserEntity 和 UserRepository,感觉很重复。不过确实如你所说,不同模块下的 model 属性可能会有区别,所以你的建议还是去掉 common,把它们分别放到各自的模块中去?
|
10
Sayommy 2020-05-16 13:16:58 +08:00
教程 DEMO 就是学习一下组件的用法、背后的思想、参考下设计思路就好了。
实际的项目中如何落地,就需要具体问题具体分析。 做的什么业务?规模多大?团队配置情况?技术选型?开发策略?从 0 到 1 还是已有体系? 我们的业务最开始就是 ALL-IN-ONE,起步时需要快速验证,用户量上去了才开始拆,才开始上各种中间件,才开始招更多的人。 架构设计都是需要匹配业务场景、业务当前的发展阶段的,纸上谈兵没什么意义,需要找一个好公司到实际的业务中去积累经验。 |
11
xizismile 2020-05-16 13:33:58 +08:00 via Android
楼上说的对
|
12
wc951 2020-05-16 14:07:35 +08:00 via Android
每次遇到服务拆分的问题都建议去看下领域驱动设计的概念
|
13
admin7785 2020-05-16 14:36:07 +08:00 via Android 1
我的项目中:
1.是拆分开的,oauth 服务单独拿来做授权校验等; 2.可以单独一个 admin-service ; 3.同 1 ;如果你是做 demo 来练习的话,建议没必要拆分开,而且实际开发中,目前还没见过拆开单独做 login-service 的 |
16
Kyle18Tang 2020-05-16 15:14:37 +08:00
推荐一个脚手架,jhipster,多参考参考,它是注册中心、UAA (用户认证和授权)、网关、微服务这样。
|
17
xuanbg 2020-05-16 16:02:00 +08:00
@hantsy 什么时候微服务有「每个服务都是维护自己的数据库」这种准则了?谁提出来的?依据是什么?
照这个准则行事的话,一个领域只能存在一个服务咯?这显然是不切实际的,譬如用户管理这个领域,就可以具体拆分为:用户、用户组、组织机构、租户、角色、资源、认证等七大模块。这些难道都必须塞到一个服务里面? 一个财务管理领域,也可以分为:账户、流水、收款、付款、退款、对账、提现、开票等等功能,也必须塞到一个服务里面? |
18
chihiro2014 2020-05-16 16:26:18 +08:00
感觉看起来像是乐优商城
|
19
demonzoo OP @Kyle18Tang 多谢,刚看了一眼 JHipster 的官网,感觉这个东西有点意思,是不是用了它就基本上不用操心这些框架、架构的事情了?
|
20
demonzoo OP @chihiro2014 什么乐优商城?
|
21
Xbluer 2020-05-16 16:34:40 +08:00
@xuanbg #17 https://martinfowler.com/articles/microservices.html
Martin Fowler 在这篇文章中提出微服务这个概念的。你可以在文章中搜一下关键字词「 polyglot persistence 」。 「微服务更倾向于让每个服务管理自己的数据库,或者同一数据库技术的不同实例,或完全不同的数据库系统 - 这就是所谓的混合持久化(Polyglot Persistence)。」 |
22
Kyle18Tang 2020-05-16 16:38:18 +08:00 1
@demonzoo #19 可以多参考它们的东西,然后加入自己的东西,当然完全使用它们的框架创建项目也是可以的。Jhipster 使用的很多技术都是很好的实践,看看 jhipster-framework 的代码能学到不少知识,特别是 problem 库的使用,我已经打算在项目中推广。推荐异常处理一定按照标准来处理,不要返回 code 、message 、data 这种类似的格式。
|
23
tonnycao 2020-05-16 17:01:50 +08:00
@xuanbg 微服务的基础是领域编程,把领域搞清楚了,就看要拆分什么样的粒度了,我觉得一般还是按照领域(业务)来拆分,相关性强的拆分到一块,当然到时候不同领域都是要基于事件进行进程间通信的。
|
24
xuanbg 2020-05-16 17:19:40 +08:00
|
25
xuanbg 2020-05-16 17:33:56 +08:00 1
@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 」这个观点。根本没提什么「准则」……有些人也太过道听途说不求甚解了吧。 |
26
ajaxfunction 2020-05-16 17:36:17 +08:00
只有我一个人发现 楼主标题打错了吗?
|
27
xuanbg 2020-05-16 17:40:12 +08:00
确实是标题错打了,但大家都懂看了。。。。
|
28
demonzoo OP @ajaxfunction 噗,sprint 打顺手了
|
31
qbmiller 2020-05-17 00:23:24 +08:00 via iPhone
最近项目,在把原先 10 几个模块合成 3 个左右,里面关联调用太多了…维护也费劲
|
33
demonzoo OP @lcinshu 是的,国内有些服务特别脑残,明明 oauth 登录完事了,还是让填写用户名、手机号什么的。早知道还是要填手机号,我费劲用什么社交账号登录啊
|
34
AmosOvO 2020-05-21 09:32:47 +08:00
请问老哥这个项目,方便分享一下嘛,最近也想开始学习一下 Spring boot
|