YSMull
<-- Reading

第一章 微服务

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 共享数据库

如果其它服务想从一个服务获取信息,可以直接访问数据库。

4.4 同步与异步

4.5 编排与协同

4.6 远程过程调用