1.介绍

将一个复杂的系统分成几个相对独立的且相互协调的微服务来开发、部署、运维、维护,相对于单体式应用有着巨大的优势,但如果层次划分不清,无序访问数据,不但不会发挥这些优势,反而让系统更加复杂

2.层次结构说明

有关微服务的优点和缺点有非常多的讨论,这里讨论一下基于微服务系统的层次架构。

在这里插入图片描述
基于微服务系统的层次结构

如上图所示,整个系统分为三层:表现层,API网关层,业务逻辑层。

1、表现层:负责和用户进行交互, 包括WEB页面、APP页面、供第三方调用的接口等。

2、API网关层:它是系统的统一入口,外部通过统一的API网关接入微服务,同时处理一些非业务功能,如监控,负载均衡,流量控制,身份认证等。

3、业务逻辑层:负责实现业务规则,是系统核心部分,这一层又划分成基础服务层和聚合服务层两个子层。

1)基础微服务层:负责实现本业务模块的业务规则,一般是通过操作业务数据集来实现单一的业务规则。

2)聚合微服务层:负责实现跨业务模块的复杂的业务规则,他需要两个或两个以上的基础服务共同来完成一个复杂的业务规则。本层涉及到二个及以上的基础微服务的组合,所以这一层要处理跨数据集的事务。

在表现层或API网关层也可能存在微服务的架构,这里不做讨论。

3.业务逻辑数据集的独立和隔离

数据集是数据的集合,集合的元素是关系数据库或关系数据库中的表,NOSQL数据库或NOSQL数据库中的表,内存数据库等。例如数据库中的几个表可以组成一个数据集,几个数据库可以组成一个数据集,几个关系数据库和几个非关系数据库可以组成一个数据集等。

数据在一个系统中有着举足轻重的作用,数据的混乱必然会导致系统的混乱,牵一发动全身,很难维护,很难扩展。
在基于微服务的系统中如果数据出现混乱,不但不会发挥微服务的优点,反而比单体应用更混乱,难维护,更难扩展。

微服务中“微”需要通过数据的“微”来实现,业务模块之间的“独立和隔离”体现在业务数据集之间的“独立和隔离”。

我们把系统中业务逻辑层数据集分为业务数据集公共数据集两类。
业务数据集中存放业务数据;
公共数据集中存放支撑业务的非业务数据,它供一个或多个基础服务访问,这类数据的特点是一般数据量不大,而且相对稳定,几乎不修改或很少修改。

所谓“独立和隔离”就是要做到基础微服务不能交叉访问数据集。定义如下:

假设系统划分成n个基础微服务A={A_1,…, A_n};
根据基础服务将数据划分成m个业务数据集D={D_1,…,D_m},
其中n大于等于m,如果满足以下三个条件就则可认为微服务是“独立和隔离”的:

  1. 任意基础微服务A_i,至多访问一个业务数据集D_j,即不能访问两个或两个以上的数据集;

  2. 任意两个业务数据集D_i,D_j,D_i和D_j交集为空。

3)如果一个数据集存在多个基础微服务访问,其中一个是主基础微服务,其他的是主基础微服务的补充或扩展。

我们应该按照数据集“独立和隔离”的原则,保持微服务相对独立性。
————————————————
本文参考一下一位作者的总结,谢谢
原文链接:https://blog.csdn.net/stevehe/article/details/80431727


版权声明:本文为qq_40535327原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/qq_40535327/article/details/104985815