1、微服务架构是什么
软件架构的定义

软件架构五(4+1)视图模型

- 逻辑视图 :开发人员创建的软件元素。在面向对象的语言中,这些元素是类和包。它 们之间的关系是类和包之间的关系 ,包括继承、关联和依赖。
- 实现视图: 构建编译系统的输出。此视图由表示打包代码的模块和组件组成,组件是由一个或多个模块组成的可执行或可部署单元。在Java 中,模块是JAR 文件,组件通常是 WAR 文件或可执行JAR 文件。它们之间的关系包括模块之间的依赖关系以及组件和模块之间的组合关系。
- 进程视图:运行时的组件。每个元素都是一个进程,进程之间的关系代表进程间通信。
- 部署视图:进程如何映射到机器。此视图中的元素由(物理或虚拟)计算机和进程组成。机器之间的关系代表网络。该视图还描述了进程和机器之间的关系。
+1指的是场景,它负责把视图串联起来。每个场景负责描述在一个视图中的多个架构元素如何协作,以完成一个请求。例如在逻辑视图中的场景,展现了类是如何协作的。同样,在进程视图中的场景,展现了进程是如何协作。
也有另外的说法:
- 逻辑架构:功能设计、职责划分、协作关系
- 数据架构:数据模型、分布策略、存储格式
- 开发架构:技术选型、服务拆分、架构模型、代码工程
- 运行架构:业务流程、调用链路、高并发高性能高可用设计
- 物理架构:物理节点、资源拓扑、部署情况、网络结构
架构风格
分层式架构风格(逻辑视图)
定义
分层架构将软件元素按层的方式组织。每个层都有明确定义的职责。分层架构还限制了层之间的依赖关系。每层只能依赖于紧邻其下方的层(如果严格分层)或其下面的任何层。
三层架构
- 表现层:包含实现用户界面或外部API的代码。
- 业务逻辑层:包含业务逻辑。
- 数据持久化层:实现与数据库交互的逻辑。
弊端
- 单个表现层:它无法展现应用程序可能不仅仅由单个系统调用的事实。
- 单数据持久化层: 它无法展现应用程序可能与多个数据库 进行交互的事实。
- 将业务逻辑层定义为依赖千数据持久化层:理论上,这样的依赖性会妨碍你在没有数据库的情况下测试业务逻辑。
- 依赖关系与分层架构所描述相反。
六边形架构

- 业务逻辑不依赖表示层逻辑或数据访问层逻辑。
- 易于单测。
- 反映现代应用程序的架构。
微服务架构风格

- 服务单一、可独立部署
- 应用程序模块化
- 服务具有自己的架构或技术栈
- 典型六边形架构,包括操作适配器和事件适配器
- 核心特性:服务间的松耦合性
- 服务数据库的私有是实现松耦合的前提,也实现了隔离,但存在数据一致性和跨服务查询问题
如何定义微服务架构

- 定义系统操作(抽象领域模型非REST接口)
- 分解服务(基于业务概念)
- 确定服务间协作方式
分解服务需要考虑的点:
- 网络延迟
- 同步通信降低可用性
- 服务数据一致性
- 上帝类(领域驱动设计可解决)
识别系统操作

创建领域模型

定义系统操作


根据业务能力拆分
业务能力是指一些能够为公司(或组织)产生价值的商业活动.
其实就是按照功能模块来划分

根据子域进行服务拆分
根据DDD的架构思想设计服务(子域、限界上下文)

拆分原则
- 单一职责原则(SRP)
- 闭包原则(CCP)
成为服务的难点
- 网络延迟
- 同步通信降低可用性
- 数据一致性(分布式事务)
- 获取一致的数据视图(跨服务查询)
- 上帝类
通过拆分为多个领域模型,每个领域迷行表示这个上帝类代表的业务实体的不同方面来消除上帝类