【面试必背】中间件篇

中间件

RocketMQ

作用

队列模型,低延迟、高并发、高可用的分布式消息中间件,长轮询机制
解耦
降低系统耦合度,没有强依赖关系
异步
不需要同步执行,提高响应时间
削峰
到达峰值后,后端service还可以保持固定消费速率消费,不会被压垮
分布式事务最终一致性
数据分发
将原始数据分发到数据库、ES、redis等

架构

Name Server

		注册中心,无状态节点,可集群部署,更新和发现Broker服务

Broker

		消息中转角色,存储消息,转发消息,分为Master Broker和Slave Broker,一个主对应多个从,一个从只能对应一个主。

Broker启动后需要完成一次将自己注册至Name Server的操作,每隔30s定期向Name Server上报topic路由信息

Topic
				消息一级类型
Queue
				一个topic有多个Queue
Tags
				消息二级类型
		topic在多broker中分布式存储实现负载均衡

生产者

		与Name Server集群中随机的一个节点建立长链接,定期从Name Server读取Topic路由信息,并向提供Topic服务的Master Broker建立长链接,定时向Master Broker发送心跳

消费者

		与Name Server集群中随机的一个节点建立长链接,定期从Name Server拉取Topic路由信息,并向提供Topic服务的Master Broker、Slave Broker发送心跳。Consumer可以从主Broker或从Broker订阅消息,订阅规则由Broker配置决定
	tag
		通过tag分区
发布订阅流程
	producer连接Name Server,产生数据放入不同的topic
	一个topic分布在各个Broker
	topic再切分为若干等分,其中一份是一个Queue
	consumer连接Name Server,根据Broker分配的Queue来消费数据

消息类型

普通消息
		同步发送
			produce拿到messageId,表示发送成功
		异步发送
			重写sendCallback类的onSuccess方法
		单向发送
			只负责发消息
顺序消息
		消费者按先后顺序订阅消息
定时消息
		消息到指定时间才会投递给消费者消费
事务消息
		二阶段提交,结合消息反查机制来确保最终一致性
		发送方发送半事务消息到服务端
		服务端接收消息后,将消息持久化成功后,向发送方返回Ack确认消息已经发送成功,消息为半事务状态,不会投递给消费方
		收到半事务消息的ack后,发送方执行本地事务
		发送方根据本地事务执行结果向服务端提交二次确认,本地事务执行成功则commit,否则rollback。

服务端收到commit则将半事务消息标记为可投递,消费方最终收到该消息;
服务端收到rollback则删除半事务消息,消费方不会收到该消息
如果消息发送方没有二次确认,则等待固定时间后服务端对该消息发起消息回查
发送方收到消息回查后,检查对应消息的本地事务执行的最终结果,发送方根据事务状态提交二次确认,服务端收到二次确认后根据状态进行commit/rollback

消费模式

集群消费
		一条消息只需要被集群内的任意一个消费者处理即可
广播消费
		将每条消息推送给集群内所有注册过的客户端,保证消息至少被每台机器消费一次

刷盘方式

同步刷盘
异步刷盘
		更改配置flushDiskType=SYNC_FLUSH

MQ问题

消息清除
		Broker消息被消费后不会立即删除,每条消息都会持久化到CommitLog中,每个Consumer连接到Broker后会维持消费进度信息,默认72小时会删除不再使用的CommitLog文件
		文件过期
			到达清理时间,默认凌晨4点,自动清理过期文件
			磁盘空间占用率到达清理线阈值,默认75%
			磁盘占用率达系统危险线默认90%,broker拒绝写入
消息丢失
		生产者发送消息到MQ,网络抖动未到达MQ
			使用MQ事务机制,发送半消息,耗费性能
		MQ写入缓存还没异步刷盘,MQ宕机;

写入磁盘,但磁盘损坏
MQ为减少磁盘IO,先将消息写入os cache,过一段时间后再由os线程将消息异步刷入磁盘
异步刷盘改为同步刷盘,速度慢,耗性能;
磁盘备份
消息未消费完,就通知MQ已消费完,消费者宕机,消费丢失
消息消费后再通知MQ已消费完

重复消费
		正常情况下consumer消费完后会发送ack,通知broker消息已正常消费,从queue中剔除,ack因网络原因无法发送到broker,broker会认为消息未消费,会开启消息重投机制,再次发送消息
			业务上保证消费逻辑幂等,对同一条消息,无论消费多少次,结果都保持一致
消息堆积
		增加consumer,提高消费能力
		定位业务代码
		消息在消费失败默认16次后会进入死信队列,不会再重复消费,死信队列消息有效期为3天,到期清除;

死信队列处理:在监控平台,通过查找死信队列,获取死信的messageId,通过id对message消费

Nginx

功能

	反射代理
	负载均衡
	静态资源服务器

分配策略

	轮询
	权重
	ip_hash
	第三方
		fair、url_hash
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值