前言
测试应该了解 微服务架构常用组价及其实现机制,可以更好地提高测试能力。
微服务架构
微服务架构可以说是SOA架构的⼀种拓展,这种架构模式下它拆分粒度更⼩、服务更独⽴。把应⽤拆分成为⼀个个微⼩的服务,不同的服务可以使⽤不同的开发语⾔和存储,服务之间往往通过Restful等轻量级通信。
组件与组件的统一调度和管理都是由 注册中心 配合 网关 来使用;
注册中心
注册服务中心组件:Nacos 和 Eureka
简单理解就是:有注册中心就是微服务架构
核心功能:
- 服务注册:为其他服务提供注册服务
- 服务发现:获取到提供方的调用信息
- 配置管理:作为配置中心,统一管理配置文件,使得配置文件可以动态修改无需重启服务
这两个注册中心的区别:
相同点:
(1)、都支持服务注册和服务拉取。
(2)、都支持服务提供者心跳方式做健康检测。
不同点:
(1)、Eureka对服务提供者是每30秒一次心跳检测来检测服务健康,Nacos则把服务分为临时服务和非临时服务,对于临时服务,Nacos采取策略与Eureka相同,对于非临时服务,Nacos不会对其进行心跳检测,而是会主动调用该服务查看是否正常,若不正常会把该服务标记为不健康,不会把该服务从服务列表中去掉。
(2)、Eureka会定时向注册中心定时拉去服务,如果不主动拉去服务,注册中心不会主动推送。Nacos中注册中心会定时向消费者主动推送信息 ,这样就会保持数据的准时性。
(3)、Nacos集群默认采用AP方式,当集群中存在非临时实例时,采用CP模式;Eureka采用AP方式。
(4)、eureka是使用定时发送和服务进行联系,属于短连接;nacos使用的是netty和服务直接进行连接,属于长连接;
负载均衡
负载均衡分为服务器端负载均衡和客户端负载均衡
服务器的负载均衡(Nginx):请求到达服务器之后由这些负载均衡器根据⼀定的算法将请求路由到⽬标服务器处理。
客户端的负载均衡(Ribbon):Ribbon组件是部署在每一个组件上的,用户客户端的负载均衡。
作用:拔取注册中心的组件信息 ,进行配置 轮询机制 负载均衡,避免组件的请求过多导致宕机
服务熔断
当组件断链或失败了,该如何处理?(降级,熔断处理)
Sentinel 流量防卫兵是Spring Cloud Alibaba提供的一个专门用于服务容错、服务熔断、服务限流的微服务组件,它和Hystrix组件的作用是类似的,都用于服务熔断;
Sentinel 主要以流量为切入点,从流量控制、熔断降级、系统负载保护、实时监控和控制台等多个维度来帮助用户提升服务的稳定性。
Hystrix 对于并发 超时 错误率 都可以设置相应的阈值来进行熔断,从closed 状态转化为open状态,时间窗口期内是直接进行服务降级的,窗口期过去之后转为half-closed 当请求来到时若能成功返回,则转化为closed,否则转为open;
Hystrix主要关注点就是熔断降级,其隔离策略主要通过线程池/信号量 来进行的。
微服务通信
微服务之间通信大概分为两种:
一种是同步通信:主要方式有HTTP REST、RPC的方式。HTTP REST方式指的是使用http协议进行数据传递,数据格式是使用json格式;RPC是一种远程过程调用,消息格式是采用二进制格式。
http rest 是属于osi七层模型中的应用层,而rpc则属于传输层,所以rpc的效率要比http rest的效率更加高效。
还有一种是异步通信:异步消息传递通常有两种模式,一种是无代理模式:指的是C端直接将消息发送给P端即可不需要得到恢复,当需要P端恢复时由于是异步通信,C端也不会阻塞,P端处理完后再根据接收到的信息向C端回复处理结果。这种方式比较小众主要适用于一些异步通知场景。
另外一种就是:使用消息代理,这里需要借助一些消息中间件,比如RocketMQ、kafka等。这种方式的使用场景比较广泛,行业内有很多成熟方案。通过使用异步消息通信的方式能够很好的实现微服务的解耦。
消息队列
消息队列:RocketMQ 、Kafka 每个请求数据全部拉取到到消息队列进行分门别类的存放中,发放到相应的服务中,遵循 先进先出 的机制。
生产者和消费者之间的调用接口发生了改变,导致接口调用失败。
消费者和生产者之间建立的契约,在架构体系中是有非常多组的存在。为了防止随意修改契约,所以通过契约测试手段,确保整个系统中的契约正确性。
契约测试偏向属于白盒测试的阶段。
通过 pact-python 库,git上开源的契约测试库,专门用于对生产者消费者之间的契约进行测试的一个库;
消息异步处理,当异步处理时,万一消息失败了?数据该怎么办?需要加入 事务与回滚
事务与回滚
Seata组件作用:
1、分布式的事务处理与回滚
2、保证数据的一致性