96SEO 2026-02-20 08:03 16
2、Zookeeper的工作原理Zab协议3、谈谈你对分布式锁的理解以及分布式锁的实现4、

RocketMq11、什么是消息队列12、RocketMq的路由类型和发送消息的方式13、死信消息的生命周期14、如何保证消息的顺序性15、如何防止消息丢失16、如何保证消息不被重复消费17、MQ处理消息失败了怎么办18、消息基于什么传输19、RocketMQ
基础、集合、多线程、Mysql、分布式、Spring全家桶、MyBatis、Dubbo、缓存、消息队列、Linux…等等会持续更新。
是一个开源的分布式协调服务为分布式系统提高了一系列的服务提供的服务包括了服务注册与订阅、统一命名服务、集群管理、分布式锁和分布式通知等。
Zookeeper提供了三个核心功能分别是文件系统、监听机制和集群管理
Zookeeper存储数据的结构类似于一个文件系统每个节点znode都是类似于K-V的结构每个节点的名字相当于key每个节点保存的数据相当于value。
2、监听机制
监听当监听的数据状态发生变化时服务端会向指定客户端发送一个事件通知客户端收到事件以后调用对应的回调方法完成事件变更的通知。
3、集群管理
Zookeeper提供了CP的模型来保证集群中的每个节点的数据一致性。
leader领导者处理所有的事务请求写请求也可以处理读请求集群中只有一个leader
observer观察者只能处理读请求不参与leader选举作用是为了提升集群的读性能
Zookeeper的工作原理核心是原子广播机制这个机制保证了各个节点之间的数据一致性实现这个机制的协议叫做Zab协议。
Zab协议有两种模式分别是恢复模式选主和广播模式同步当服务启动或者
服务器宕机Zab就进入了恢复模式此时不对外提供服务。
首先选举出新的
服务器进行数据同步当集群中超过半数机器完成数据同步之后退出恢复模式进入广播模式然后就可以接收客户端的事务请求了。
分布式锁是一种跨进程的跨机器节点的互斥锁它可以保证同一时刻只能有一个线程去访问共享资源。
命令如果设置key返回1说明获取锁成功返回0获取锁失败。
然后还可以通过
但也可能存在一些极端情况比如锁过期了但是业务逻辑还没处理完。
这种极端情况可以使用Redisson
的机制翻译过来就是看门狗它是基于Netty下面的一个时间轮的实现类来实现。
(getLock、lock、unlock)Zookeeper利用它提供的有序节点当线程创建节点后如果该节点是当前目录下所有节点序号最小的节点则认为获取锁成功。
如果不是最小的节点则对该节点序号的前一个节点添加一个监听事件当监听的节点释放锁之后触发回调通知从而再次去尝试抢占锁。
Redis它获取锁的方式简单粗暴如果获取不到锁会不断尝试获取锁消耗性能比较大但是实现难度比较低。
Zookeeper如果获取不到锁只需要添加一个监听器就可以了消耗性能比较小但是实现难度比较高。
zxidzxid实际上是一个64位的数字高32位是epoch时期;
新时代用来标识leader是否发生改变如果有新的leader产生出来epoch会自增然后低32位用来递增计数。
当产生新的提议时zookeeper会采用数据库的二阶段提交首先会向其他的节点发出事务执行请求如果超过半数的机器都能执行那么就会提交事务。
zxid2、leader将带有zxid的消息作为一个提案proposal分发给所有的follower3、当follower接受到提案后先把提案写到磁盘写入成功以后再向leader回复一个ack4、当leader
接受到半数以上ack就会向follower发送提交commit命令同时自己也执行5、当follower接受到commit命令以后就会提交该消息从而实现数据同步。
在分布式环境中有些业务逻辑只需要集群中的某一台机器进行执行其他的机器可以共享这个结果这样可以大大减少重复计算提高性能。
宕机只要超过半数的节点正常集群就能正常提供服务否则集群就会失效2、如果是一个
Vote这个票据包括三个属性epoch逻辑时钟zxid事务idmyid服务器id然后第一轮投票都会投给自己。
2、每个节点把收到的票据和自己节点的票据做比较根据
的顺序逐一比较以值最大的一方获胜比较结束以后就把票投给获胜的节点3、通过多轮投票以后以少数服从多数的方式最终获得票数最多的节点成为Leader。
其中epoch逻辑时钟用来标识当前票据是否过期zxid事务id用来表示当前节点最新存储的数据的事务编号;
高级消息队列协议的中间件接受并转发消息。
它有4个核心组件分别是producer生产者负责生产和发送消息到
Broker;Exchange交换机按照一定的规则将消息路由转发到某个队列对消息进行过虑;Queue队列用来存储消息并把消息转发给指定的消费者;consumer消费者负责从
它的工作原理是生产者把消息发送到Exchange交换机上。
Exchange交换机把收到的消息根据路由规则转发给绑定的queue队列队列再把消息投递给订阅了这个队列的消费者从而完成消息的异步通讯。
1、应用解耦把相关联的系统进行职责解耦比如生成订单会调用仓库管理系统或积分系统。
2、异步处理不需要立即处理消息提高系统的性能比如用户注册发送验证码、下单短信通知、发送优惠券等。
3、流量削峰能够有效的顶住瞬间高并发防止服务器承受不住导致崩溃比如秒杀、限时抢购优惠券等。
它的工作原理是生产者把消息发送到Exchange交换机上Exchange交换机把收到的消息根据路由规则转发给绑定的queue队列最后再把消息投递给订阅了这个队列的消费者从而完成消息的异步通讯。
在RabbitMQ中交换机常见的有3种类型分别是Fanout、Direct
Fanout扇出交换机类似于广播机制将消息转发给到所有绑定的队列上与routingKey路由键无关Direct直连交换机完整匹配方式也就是Routing
Key完全一致才把消息发给该队列Topic主题交换机就是Routing
Key加了通配符符合匹配规则的Queue队列都会收到这个消息#代表0个或多个单词*代表一个单词。
1、消费者消费业务消息时发生异常就会返回nck或者reject操作2、那么这些消息就会被投递到死信交换机中3、死信交换机将消息发送到相应的死信队列4、死信队列可以定时重新投递到Broker中也可以由死信消费者消费。
queue队列每个队列对应一个消费者。
比如生产者发送消息的时候同一个订单号的消息发送到同一个
queue队列的消息是有序的那么同一个订单号的消息就只会被一个消费者顺序消费从而保证了消息的顺序性。
就会返回一个ack告诉你说这个消息ok了如果MQ没有写入这个消息会回调一个nack接口告诉你这个消息失败了你可以进行重试或抛弃此条消息。
2、MQ收到消息写入到内存中还没消费服务挂掉了数据都会丢失
第1步把该消息设置为持久化即deliveryMode设置为2第3个参数设置如下
channel.basicPublish(“exchange”,
MessageProperties.PERSISTENT_TEXT_PLAIN,
第2步把该queue队列设置为持久化即durabletrue第2个参数设置为true,
channel.queueDeclare(QUEUE_NAME,
null)3、消费者刚拿到消息还没处理服务挂掉了MQ又以为消费者处理完了
ack然后消费者在处理完消息之后再手动返回ack。
这样可以保证如果你还没处理完就不会返回ack那队列就不会删除该消息。
channel.basicConsume(QUEUE_NAME,
我们为了消息的可靠性采用了手动ack机制如果消费者在处理完一个消息之后还没有手动调用ack服务就挂了MQ以为你还还没处理就把这个消息投递给其他的消费者就导致了消息被重复消费。
第1种幂等性场景就是说消息重复消费和消费一次产生的影响是一样的可以不用处理比如Redis的set操作它是天然幂等性的第2种非幂等性场景把消息唯一id保存到
一般生产环境中都会在使用MQ的时候设计两个队列一个是核心业务队列一个是死信队列。
核心业务队列就是比如专门用来给订单系统发送订单消息的然后另外一个死信队列就是用来处理异常情况的。
1、NameServer是一个简单的Topic路由注册中心支持Broker的注册与发现主要有两个功能Broker管理提供心跳检测机制和路由信息管理保存Broker的路由信息和用于客户端查询的队列信息2、BrokerServerRocketMQ
2、投递ConsumeQueue消息消费队列3.查询IndexFile索引文件4.以及维护消费者的Topic订阅信息和保证服务高可用
1、Producer消息生产者往Broker发送指定Topic的消息。
2、Consumer消息消费者主动拉取消息来消费支持集群方式同一Topic下的一条消息只会发送到同一消费组中的一个消费者和广播方式所有的消息会广播发送到所有的消费者。
Cache和异步刷盘我们在写⼊commitlog的时候是顺序写⼊的这样⽐随机写⼊的性能就会⾼很多而且它不是直接写⼊磁盘⽽是先写⼊页缓存开启一个异步线程通过零拷贝机制定时的将缓存中的数据刷到磁盘中从而保证消息的快速读写。
传统⽂件复制方式需要对⽂件在内存中进⾏四次复制内核态到用户态的来回复制。
零拷⻉就是减少内核态到用户态的来回复制它是通过内存映射的机制直接把内核态里的数据映射到用户态对文件的操作转化为对内存地址的操作
通常有两种⽅式mmapRocketMq和sendfile(kafka)。
当一条消息消费失败时经过多次重试依然失败为了保证消息数据不丢失需要将消息投入到死信队列中。
TTL存活时间过期2、队列满了无法再添加数据到队列中3、消息被拒绝消费方拒绝应答basic.reject
作为专业的SEO优化服务提供商,我们致力于通过科学、系统的搜索引擎优化策略,帮助企业在百度、Google等搜索引擎中获得更高的排名和流量。我们的服务涵盖网站结构优化、内容优化、技术SEO和链接建设等多个维度。
| 服务项目 | 基础套餐 | 标准套餐 | 高级定制 |
|---|---|---|---|
| 关键词优化数量 | 10-20个核心词 | 30-50个核心词+长尾词 | 80-150个全方位覆盖 |
| 内容优化 | 基础页面优化 | 全站内容优化+每月5篇原创 | 个性化内容策略+每月15篇原创 |
| 技术SEO | 基本技术检查 | 全面技术优化+移动适配 | 深度技术重构+性能优化 |
| 外链建设 | 每月5-10条 | 每月20-30条高质量外链 | 每月50+条多渠道外链 |
| 数据报告 | 月度基础报告 | 双周详细报告+分析 | 每周深度报告+策略调整 |
| 效果保障 | 3-6个月见效 | 2-4个月见效 | 1-3个月快速见效 |
我们的SEO优化服务遵循科学严谨的流程,确保每一步都基于数据分析和行业最佳实践:
全面检测网站技术问题、内容质量、竞争对手情况,制定个性化优化方案。
基于用户搜索意图和商业目标,制定全面的关键词矩阵和布局策略。
解决网站技术问题,优化网站结构,提升页面速度和移动端体验。
创作高质量原创内容,优化现有页面,建立内容更新机制。
获取高质量外部链接,建立品牌在线影响力,提升网站权威度。
持续监控排名、流量和转化数据,根据效果调整优化策略。
基于我们服务的客户数据统计,平均优化效果如下:
我们坚信,真正的SEO优化不仅仅是追求排名,而是通过提供优质内容、优化用户体验、建立网站权威,最终实现可持续的业务增长。我们的目标是与客户建立长期合作关系,共同成长。
Demand feedback