手机网站,南昌网站定制开发公司,中英文网站asp怎么做,两个男生如何做网站最近刷题#xff0c;看到了有问中间件的题目#xff0c;于是整理了一些中间件的知识#xff0c;大多是在小破站上的笔记#xff0c;仅供大家参考~ 主要分为七个部分来分享#xff1a;
一、常见的中间件
二、什么是队列#xff1f;
三、常见消息队列MQ的比较
四、队列…最近刷题看到了有问中间件的题目于是整理了一些中间件的知识大多是在小破站上的笔记仅供大家参考~ 主要分为七个部分来分享
一、常见的中间件
二、什么是队列
三、常见消息队列MQ的比较
四、队列的优点和缺点
五、消息队列的原理
六、为什么使用消息队列
七、队列的测试点
八、高频软件测试面试题 一、常见的中间件
Redis缓存中间价
MQ消息队列中间件
NginxWeb服务器中间件 二、什么是队列
队列Queue是一种常见的数据结构用于按照先进先出FIFOFirst In First Out的原则管理元素。这意味着最先被添加到队列的元素将首先被移除。队列的操作通常包括两个主要动作入队Enqueue和出队Dequeue 。 三、常见消息队列MQ的比较
ActiveMQ比较老一般不用了
RabbitMQ大部分公司够用了除非像阿里并发那么大的公司
RocketMQ阿里在用的
Kafka主要用于记录日志例如淘宝的足迹功能 四、队列的优点和缺点
1、优点
解耦
异步
流量削峰填谷 2、缺点
可用性低
复杂度
一致性问题例如消息丢失消息重复等等导致两个系统数据不一致
五、消息队列的原理
下面以用户下单这个场景为例分享下整个过程 一生产者如何将消息可靠投递到消息队列MQ
客户端发送消息到消息队列MQ。消息队列MQ将消息进行持久化并向客户端发送 Ack 消息。由于网络问题可能导致 Ack 消息无法及时发送至客户端因此客户端在等待一段超时时间后会重新传送消息。客户端在收到 Ack 消息后确认消息已被成功投递。 二 消息队列如何将消息可靠投递给消费者
消息队列MQ将消息推送给客户端或者客户端通过拉取方式获取消息。客户端接收并完成业务逻辑处理。客户端向消息队列MQ发送 Ack 消息通知消息队列删除该消息。由于网络问题可能导致 Ack 失败客户端会收到重复的消息从而引发了消费幂等性的问题。消息队列删除已被成功消费的消息。
六、为什么使用消息队列
主要用于解耦、异步、流量削峰填谷。
1、解耦
如果不加中间件MQ订单系统直接调用库存系统当库存系统出现故障时用户就会下单失败。加了中间件之后就不会出现下单失败了用户下单之后把订单id传给MQ监控系统发现库存系统挂了之后立马修复最后还是可以下单成功。
2、异步
如果不加中间件MQ下单的时候订单系统会同步调用库存系统有了MQ之后下单后订单系统只要把订单id传给MQ即可。
3、流量削峰填谷 例如B是订单系统C是库存系统C系统每分钟只能承受1W的并发现在突然有30W的并发那先把订单消息发送给MQC系统从MQ拉取信息处理速度还是每分钟1W最后花费30分钟来处理用时间换空间。 七、队列的测试点
一正向的业务逻辑测试
1、数据正确性
产者推送消息消费者能正常消费信息比如消息发送的字段以及接收的字段有无缺失且保持一致 2、时序
不同时序推送消息先后顺序是否与预期一致。
注意队列优先级可使用事务解决 二反向的异常测试
1、消息推送失败是否有重试
如因为网络原因导致的消息丢失是否有补发和重试机制用定时任务跑通常情况下Produce会设置补发。
2、避免重复消息
例如生产者重复推送同一条数据由于RocketMQ天生就有消息重复发送的机制所以当产生消息重新发送时如何对此问题进行处理通常情况下要对消费端的服务做幂等处理数据库里添加唯一索引保证消息不被重复消费。 三性能测试消费积压
主要就是通过性能测试看看在高并发访问的情况下系统正确处理消息的能力是否会出现消息队列拥堵宕机等情况。 解决消费积压的办法
首先要快速解决消息积压问题比如加大consumer消费数量消费频次临时紧急扩容比如临时征用10倍的机器来部署consumer程序这个程序部署上去消费积压的数据等快速消费完积压数据之后得恢复原先部署架构重新用原先的consumer机器来消费消息。 八、高频软件测试面试题
1、如何保证消息不丢失
消息队列将收到的消息持久化到磁盘中以保证消息队列异常或重启的情况下消息不会丢失
2、消息队列的工作原理是什么
生产者创建消息并将其发送到消息队列 消费者从消息队列中接收消息并异步地处理这些消息 消费者在成功处理消息后向消息队列发送确认Acknowledge消息通知队列可以删除已处理的消息。