- 1.1 什么是微服务
- 1.2 主要好处
- 1.3 面向服务的架构
- 1.4 其它分解技术
- 1.5 没有银弹
- 3.2 什么样的服务是好服务
- 3.3 限界上下文
- 4.3 共享数据库
- 4.4 同步与异步
- 4.5 编排与协同
- 4.6 远程过程调用
第一章 微服务
1.1 什么是微服务
微服务就是一些协同工作的小而自治的服务。
1.1.1 小
- 单一职责原则
- 能在两周内完全重写
1.1.2 自治
服务之间均通过网络调用进行通信,从而加强服务之间的隔离性,避免紧耦合。
1.2 主要好处
1.2.1 技术异构性
1.2.2 弹性
弹性工程学关键概念:舱壁。系统中一个组件不可用,不会导致级联故障,系统中的其它部分还可以正常运行。服务边界就是一个舱壁。
单块系统如果故障,所有服务都不可用,解决方案:部署多个实例。
微服务系统能很好处理服务不可用和功能降级问题。
1.2.3 扩展
单块服务如果只是其中一小部分有性能问题,那么也得对整个服务进行扩展。
微服务则可以对需要扩展的服务进行扩展。
1.2.4 简化部署
上百万行代码的单块系统,修改一句代码也得重新部署整个应用。这种部署频率低,风险高。微服务架构中,各微服务可独立部署,出错后容易快速回滚。
1.2.5 与组织结构相匹配
1.2.6 可组合性
微服务架构中,人们可以通过不同的方式使用同一个功能。系统会开放很多细粒度的接口给外部调用,可以使用不同的方式构造应用。而整体化应用程序只能提供一个非常粗粒度的接缝供外部使用。
1.2.7 对可替代性的优化
庞大的系统不敢轻易替代,微服务很容易重写。
1.3 面向服务的架构
SOA(Service-Oriented Architecture)是一种设计方法,其中包含多个服务,而服务之间通过配合最终会提供一系列功能。一个服务通常以独立的形式存在于操作系统进程中。服务之间通过网络调用,而非采用进程内调用的方式进行通信。
微服务架构是SOA的一种特定方法。
1.4 其它分解技术
1.4.1 共享库
缺点:
- 无法选择异构技术
- 除非是动态链接库,否则每次库更新都得重新部署
1.4.2 模块
1.5 没有银弹
微服务不是免费的午餐,你需要面对所有分布式系统需要面对的复杂性。
第三章 如何建模服务
3.2 什么样的服务是好服务
松耦合、高内聚
3.2.1 松耦合
能够独立修改及部署单个服务而不需要修改系统的其它部分。
如何避免紧耦合:尽可能少的知道与之协作的服务的信息。限制两个服务之间不同调用形式的数量,过度的通信可能导致紧耦合。
3.2.2 高内聚
把相关的行为聚集在一起,把不相关的行为放在别处。
为的是,如果你要修改某个功能,那么最好只在一个地方修改。这样可以提高发布效率,降低修改风险。
3.3 限界上下文
见《领域驱动设计》
第四章 集成
4.3 共享数据库
如果其它服务想从一个服务获取信息,可以直接访问数据库。