> For the complete documentation index, see [llms.txt](https://iqeq00.gitbook.io/microservices-book/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://iqeq00.gitbook.io/microservices-book/microservices/macrocontrol.md).

# 微服务宏观把控

## 架构演进过程

1. 单体应用架构模式
2. 单体应用优化架构模式
3. ESB 企业总线架构模式

   SOA 架构主要针对企业级、采用 ESB 服务（ESB企业服务总线），非常笨重，需要序列化和反序列化，采用 XML 格式传输。ESB 也可以说是传统中间件技术与 XML、Web Service 等技术相互结合的产物。
4. 微服务架构模式

   微服务架构主要用于互联网公司，轻量级、小巧、独立运行，基于 Http、REST、JSON 格式传输。

## 单体架构的缺点

* 复杂性逐渐变高
* 技术债务逐渐上升
* 部署速度逐渐变慢
* 阻碍技术创新
* 无法按需伸缩

## 什么是微服务

Martin Fowler：简而言之，微服务架构风格这种开发方法，是以开发一组小型服务的方式来开发一个独立的应用系统。**其中每个小型服务都运行在自己的进程中，并经常采用 HTTP 资源 API 这样轻量的机制来相互通信**。这些服务围绕业务功能进行构建，并能通过全自动的部署机制来进行独立部署。**这些微服务可以使用不同的语言来编写，并且可以使用不同的数据存储技术**。对这些微服务我们仅做最低限度的集中管理（也就是去中心化）。

微服务架构是一种架构模式，它提倡将单一应用程序划分成一组小的服务，服务之间互相协调、互相配合，为用户提供最终价值。每个服务运行在其独立的进程中，服务于服务间采用轻量级的通信机制互相沟通（通常是基于 HTTP 的 RESRful API）。每个服务都围绕着具体业务进行构建，并且能够被独立地部署到生产环境、类生产环境等。另外，应尽量避免同一的、集中式的服务管理机制，对具体的一个服务而言，应根据业务上下文，选择合适的语言、工具对其进行构建。

微服务是一种架构风格，一个大型复杂软件应用由一个或多个微服务组成。系统中的各个微服务可被独立部署，各个微服务之间是松耦合的。每个微服务仅关注于完成一件任务并很好地完成该任务。在所有情况下，每个任务代表着一个小的业务能力。

## 微服务架构风格特点

* 服务组件化
* 服务围绕业务
* 产品开发模式
* 轻量级通信机制

  REST API 或者是 RPC
* 去中心化处理
* 去中心化数据设计
* 故障处理设计
* 演进式设计
* 基础设施自动化

## 微服务的优点与挑战

### 优点

* 开发简单

  易于开发和维护。
* 技术栈灵活

  技术栈不受限制。
* 服务独立

  启动较快，局部修改容易部署。
* 按需扩容

  按需伸缩。
* DevOps

  开发要参与运维工作。

### 挑战

* 运维复杂

  对运维要求较高，也需要开发人员在一定程度上参与其中。
* 数据一致性问题
* 分布式的复杂性
* 接口调整成本高
* 集成测试复杂
* **重复代码**
* 监控困难

## 微服务设计原则

* 单一职责原则
* 服务自治原则
* 轻量级通信原则
* 接口明确原则
