在微服务的架构模式下,我们的运维视角一定转到应用这个核心概念上来,一切要从应用的角度来分析和看待问题。
微服务架构一般都是从单体架构或分层架构演进过来的。软件架构服务化的过程,就是我们根据业务模型进行细化的过程,在这个过程中切分出一个个具备不同职责的业务逻辑模块,然后每个微服务模块都会提供相对应业务逻辑的服务化接口。
除了应用这个实体之外,还会存在其他各类基础组件实体。同时,在应用运行过程中,还需要不断地与它们产生和建立各种各样复杂的关联关系,这也为后续的运维带来很多困难。
应用模型以及各种关系模型的梳理和建立,因为只有模型和关系梳理清楚了,才能为我们后面一系列的运维自动化、持续交付以及稳定性保障打下一个良好的基础。
1. 应用业务模型
应用业务模型,也就是每个应用对外提供的业务服务能力,并以 API 的方式暴露给外部。这个业务模型通常都是业务架构师在进行业务需求分析和拆解时进行设计,更多的是聚焦在业务逻辑上,所以从运维的角度,我们一般不会关注太多。
2. 应用管理模型
应用管理模型,也就是应用自身的各种属性,如应用名、应用功能信息、责任人、Git 地址、部署结构(代码路径、日志路径以及各类配置文件路径等)、启停方式、健康检测方式等等。这其中,应用名是应用的唯一标识,我们用 AppName 来表示。
这里我们可以把应用想象成一个人,通常一个人会具备身份证号码、姓名、性别、家庭住址、联系方式等等属性,这里身份证号码,就是一个人的唯一标识。
3. 应用运行时所依赖的基础设施和组件
- 资源层面:应用运行所必需的资源载体有物理机、虚拟机或容器等,如果对外提供 HTTP 服务,就需要虚 IP 和 DNS 域名服务;
- 基础组件:这一部分其实就是我们所说的中间件体系,比如应用运行过程中必然要存储和访问数据,这就需要有数据库和数据库中间件;想要更快地访问数据,同时减轻 DB 的访问压力,就需要缓存;应用之间如果需要数据交互或同步,就需要消息队列;如果进行文件存储和访问,就需要存储系统等等。
这些基础设施和组件都是为上层的一个个业务应用所服务的。也正是因为业务和应用上的需求,才开启了它们各自的生命周期。如果脱离了这些业务应用,它们自己并没有单纯存在的意义。所以,从始至终基础设施和组件都跟应用这个概念保持着紧密的联系。
第一步,建立各个基础设施和组件的数据模型,同时识别出它们的唯一标识。这个套路跟应用管理模型的梳理类似,以典型的缓存为例,每当我们申请一个缓存空间时,通常会以 NameSpace 来标识唯一命名,同时这个缓存空间会有空间容量和 Partition 分区等信息。
第二步,也是最关键的一步,就是识别出基础设施及组件可以与应用名 AppName 建立关联关系的属性,或者在基础组件的数据模型中增加所属应用这样的字段。
既然是应用申请的缓存空间,并且是一对一的关联关系,既可以直接将 NameSpace 字段取值设置为 AppName,也可以再增加一个所属应用这样的字段,通过外键关联模式建立起应用与缓存空间的关联关系。
相应地,对于消息队列、DB、存储空间等,都可以参考上面这个思路去做。
通过上面的梳理,我们就可以建立出类似下图这样的以应用为核心的应用模型和关联关系模型了,基于这个统一的应用概念,系统中原本分散杂乱的信息,最终都被串联了起来,应用也将成为整个运维信息管理及流转的纽带。
微服务架构模式下的运维思路一定要转变,一定要将视角转换到应用这个维度,从一开始就要统一规划,从一开始就要将架构、开发和运维的工作拉通了去看,这一点是与传统运维的思路完全不同的。