微服务概述
微服务应用是一系列自治服务的集合,每个服务只负责完成一块功能,这些服务共同合作来就可以完成某些更加复杂的操作。与单体的复杂系统不同,开发者需要开发和管理一系列相对简单的服务,而这些服务可能以一些复杂的方式交互。这些服务之间的相互协作是通过一系列与具体技术无关的消息协议来完成的,这些协议可能是点到点形式的,也可能是异步形式的。
这种想法听起来很简单,但是它确实能够显著降低复杂系统开发过程中的摩擦和冲突。传统的软件工程实践倡导设计良好的系统都应该具备高内聚、低耦合的特点。具备这些特性的系统更加易于维护,并且在面对变更时,也更加容易适应和扩展。
内聚度是用来衡量某个模块中的各个元素属于一个整体的紧密程度的指标,耦合度则是衡量一个元素对另一个元素的内部运行逻辑的了解程度的指标。在讨论内聚度时,罗伯特·C.马丁(Robert C. Martin)的单一职责原则是一种非常有用的方式:
将那些因相同原因而修改的内容聚合到一起,将那些因不同原因而修改的内容进行拆分。
在单体应用中,开发者会在类、模块、类库的层面来设计功能属性;而在微服务应用中,开发者的目标则变成了可独立部署的功能单元——要为这些功能单元设计功能属性。单个微服务应该是高内聚的:它应该只负责应用的某一个功能。同样,每个服务对其他服务的内部运行逻辑知道得越少,就越容易对自己的服务或者功能进