《微服务设计》第 3 章 如何建模服务
- 2019 年 10 月 8 日
- 筆記
3.1 MusicCorp简介
3.2 什么样的服务是好服务
- 我希望你专注在两个重要的概念上:松耦合和高内聚
- 如果这两点做不到,那么微服务也就没什么价值了
3.2.1 松耦合
- 使用微服务最重要的一点是,能够独立修改及部署单个服务而不需要修改系统的其他部分,这真的非常重要
- 一个松耦合的服务应该尽可能少地知道与之协作的那些服务的信息
3.2.2 高内聚
- 最好能够只在一个地方进行修改,然后就可以尽快地发布
- 在多个不同的地方进行修改会很慢,同时部署多个服务风险也很高,这两者都是我们想要避免的
3.3 限界上下文
- 限界上下文的定义是:“一个由显式边界限定的特定职责。”(http://blog.sapiensworks.com/post/2012/04/17/DDD-The-Bounded-Context-Explained.aspx)如果你想要从一个限界上下文中获取信息,或者向其发起请求,需要使用模型和它的显式边界进行通信。在这
3.3.1 共享的隐藏模型
- 对于 MusicCorp 来说,财务部门和仓库就可以是两个独立的限界上下文。它们都有明确的对外接口(在存货报告、工资单等方面),也都有着只需要自己知道的一些细节(铲车、计算器)

3.3.2 模块和服务
- 然而对于一个新系统而言,可以先使用一段时间的单块系统,因为如果服务之间的边界搞错了,后面修复的代价会很大。所以最好能够等到系统稳定下来之后,再确定把哪些东西作为一个服务划分出去
3.3.3 过早划分
- 过早划分导致很多跨服务修改,这些修改的代价相当高
3.4 业务功能
- 当你在思考组织内的限界上下文时,不应该从共享数据的角度来考虑,而应该从这些上下文能够提供的功能来考虑
3.5 逐步划分上下文
- 首先考虑比较大的、粗粒度的那些上下文,然后当发现合适的缝隙后,再进一步划分出那些嵌套的上下文
- 我见过有一种做法是,使这些嵌套的上下文不直接对外可见。对于外界来说,它们用的还是仓库的功能,但发出的请求其实被透明地映射到了两个或者更多的服务上


3.6 关于业务概念的沟通
- 微服务之间如何就同一个业务概念进行通信,也是一件很重要的事情
- 事实上,通信形式在整个组织范围内都非常重要
3.7 技术边界
- 洋葱架构,因为它有很多层,而且当纵切这些层次时,我只想哭
3.8 小结
- 限界上下文是寻找这些接缝的一个非常重要的工具,通过将微服务与这些边界相匹配,可以保证最终的系统能够得到微服务提供的所有好处
书
- 《领域驱动设计》
- 《实现领域驱动设计》
工具
- SnapCI
- Go-CD