测试也要了解的中间件知识
公众号后台有同学私信问了一个问题:中间件服务,如何做好质量保障工作?
日常我们的测试工作范畴,大多都是业务强相关的,比如:电商业务大多是商品、订单、库存、支付;金融业务则是存取款、清结算等。
而中间件服务很多时候会被我们下意识忽略,或者说测试过程中都会涉及到这些服务组件,但不会专门去针对它们开展质量保障工作。
要做好质量保障工作,对中间件有所了解是必不可少的。这篇文章,我会列举一些常见的中间件,以及它们在日常的质量保障工作中,都在发挥什么作用。
如何理解中间件
记得16年时候,刚接触到中间件测试,当时对中间件这个概念不甚了解,问了我司的架构师什么是中间件?
他的回答是:为业务应用提供解耦、复用能力的中介层软件。好吧,限于我当时的专业知识匮乏和技术经验不足,还是无法很好的理解他的意思。
近几年,随着知识储备的增长以及技术实践经验的不断提升,开始对中间件这个术语有了较多的理解。那么如何理解中间件呢?为大家举个例子:
我们(用户)要买房,一般来说是自己去搜集房子的相关信息,比如地段、单价、开发商、资源配套等很多房子的信息,然后综合评估后,决定购买。
但市场上要买房的人太多了,如果每个人都亲自去搜集信息,不断匹配评估,花很多时间去看房子,这样效率实在是太低了,因此就产生了各种房产中介机构(中间件)。
以房地产行业类比软件研发,大概的逻辑是这样:
- 政府(通信服务商)提供土地(操作系统、通信网络);
- 开发商(各种服务厂商)拿地(服务器、云服务、基础资源);
- 建筑公司(各行各业企业)组织盖楼(按照产品设计实现业务需求);
- 房产中介(中间件应用)整合信息提供咨询带看(业务解耦、能力服用);
- 购房人群(业务研发人员)看房付款拿钥匙(只关注业务实现,不考虑业务应用如何通信);
这个例子可能不太恰当,换个简单的描述:中国电信提供网络服务,云服务商提供各种服务器资源,公司购买资源然后部署服务提供用户使用,业务研发实现具体的业务功能(比如搜索下单支付)、中间件通过统一接口提供业务应用间的通信、数据传递存储等功能。
如果更简单一点该如何理解中间件的作用呢?大家都知道用户产生的数据最终要存储到数据库,后端业务应用要存储数据就要和数据库建立连接。短链接性能差,长链接资源占用多,这个时候DA(Data Access)层就出现了。
无论是DAO还是DAL,通过封装后端业务应用和数据库之间的链接功能,提供统一的接口和配置方法,业务应用只需要考虑业务需求逻辑的实现,而不用太关注应用如何与数据库连接,是否会对数据库带来性能瓶颈。
常见的中间件组件
上文举了一个数据访问的中间件例子,可能有些同学会觉得比较绕,下面列举一些日常工作中常用的中间件,大家应该对中间件会有更好的理解。
中间件层级 |
中间件名称 |
中间件作用 |
基础层 |
Tomcat、Netty |
服务容器 |
Nacos、Apollo |
注册中心、配置中心 |
|
接入层 |
Nginx、SpringCloud Gateway |
网关、负载均衡 |
Grpc、Dubbo、Feign |
服务调用、服务间通信 |
|
服务层 |
Kafka、RocketMQ |
消息队列 |
XXX-Job、Elastic-job |
任务调度 |
|
Redis、Sharding-JDBC |
数据存储、数据访问 |
|
Canal、Otter |
数据同步 |
|
Pingpoint、SkyWalking |
链路追踪 |
不同层级中间件的作用
上面用房地产行业类比了中间件,也列举了一些日常工作中常见的中间件服务,这些不同的中间件服务在一个完整的软件系统中,发挥着不同的作用。
我尝试用一张思维导图,来说明这些不同的中间件的作用,请看下图。
如上图所示,是一个常见的微服务架构。各中间件的作用大致如下:
- 用户请求通过DNS解析最终路由到网关层;
- 网关将用户请求按照访问的URL路由到对应的业务应用;
- 业务应用在注册中心注册(上线),相关配置在配置中心完成;
- 不同服务间的调用和数据交互,通过Dubbo这类服务通信中间件;
- 可缓存的数据在Redis,缓存和数据库之间数据同步通过Canal完成;
- 业务应用和数据库之间的数据交互通过Sharding-JDBC/MQ类的组件完成;
- 数据报表之类的非及时数据,通过配置定时任务,然后通过XXX-Job来调度完成;
这篇文章仅对中间件做一个简单介绍,并列举了一些常见中间件,然后通过一张微服务架构图来说明各中间件的作用。
具体的中间件测试方法,请期待下一篇文章。