注册网站入口,golang wordpress,alexa全球网站排名分析,wordpress 响应速度慢1. MQ的优缺点
优点#xff1a;解耦#xff0c;异步#xff0c;削峰
缺点#xff1a;
系统可用性降低 系统引入的外部依赖越多#xff0c;越容易挂掉。万一 MQ 挂了#xff0c;MQ 一挂#xff0c;整套系统崩 溃#xff0c;你不就完了#xff1f;系统复杂度提高 硬生…1. MQ的优缺点
优点解耦异步削峰
缺点
系统可用性降低 系统引入的外部依赖越多越容易挂掉。万一 MQ 挂了MQ 一挂整套系统崩 溃你不就完了系统复杂度提高 硬生生加个 MQ 进来你怎么保证消息没有重复消费怎么处理消息丢失的情况怎么保证消息传递的顺序性问题一大堆。一致性问题 A 系统处理完了直接返回成功了人都以为你这个请求就成功了但是问题是要是 BCD 三个系统那里BD 两个系统写库成功了结果 C 系统写库失败了咋整你这数据就不一致了。
2. 常见消息队列比较 3. RabbitMQ中的AMQP协议
AMQPAdvanced Message Queuing Protocol是一种用于消息传递的网络协议。
核心概念
Exchange交换机用于接收生产者发送的消息并根据一定的路由规则将消息路由到一个或多个队列中。Queue队列用于存储消息的容器消费者从队列中获取消息进行处理。Binding绑定用于将交换机和队列进行绑定指定消息的路由规则。Message消息包含消息内容和一些元数据如消息标识符、优先级、时间戳等。 4. 为什么kafka不支持读写分离
在kafka中生产者写入消息消费者读取消息的操作都是与 leader 副本进行交互的从而实现的是一种主写主读的生产消费模型。kafka不支持读写分离也就是主写从读。
读写分离有以下不足
(1) 主从延时。类似 Redis 数据从写入主节点再同步到从节点中的过程需要耗费一些时间。如果对延时的要求比较高读写分离并不太适用。
(2) 数据一致性问题。由于主节点数据同步到从节点需要一定时间。主从节点之间的数据不一定会一致。
kafka只支持主写主读有几个优点
(1) 负载均衡。
读写分离可以均摊一定的负载却不能做到完全的负载均衡比如对于写压力很大而读压力很小的情况从节点只能分摊很少的负载压力而绝大部分压力还是主节点上。而kafka 的主写主读可以做到负载均衡。
(2) 没有主从延时的影响。
(3) 副本稳定的情况下不会出现数据不一定的情况。
5. kafka是如何做到消息顺序性的
确定一个主题只有一个分区partition生产者和消费者都是单线程处理。
6. kafka为什么那么快
1. Kafka 是基于操作系统 的页缓存(page cache)来实现文件写入的我们也可以称之为 os cache意思就是操作系统自己管理的缓存。Kafka 在写入磁盘文件的时候可以直接写入这个 os cache 里也就是仅仅写入内存中接下来由操作系统自己决定什么时候把 os cache 里的数据真的刷入磁盘文件中。通过这一个步骤就可以将磁盘文件写性能提升很多了因为其实这里相当于是在写内存不是在写磁盘原理图如下 2. kafka 写数据的时候是以磁盘顺序写的方式来写的也就是说仅仅将数据追加到文件的末尾不是在文件的随机位置来修改数据。
3. kafka写入数据传统4次拷贝零拷贝技术可以减少没有必要的拷贝。 Kafka 利用了 Linux 的 sendFile 技术NIO实现零拷贝。 7. 如何避免重复消费
消费时做幂等性处理类似于mysql中update order set count 10 where id 1;采用MVCC多版本并发控制生产的时候带上数据的版本号。
8. RocketMQ如何保证高可用性
1. 主从机制
消息生产的高可用创建topic时把topic的多个message queue创建在多个broker组上。这样当一个broker组的master不可用后producer仍然可以给其他组的master发送消息。
消息消费的高可用消费者一般从master上进行消费当master不可用或者繁忙的时候consumer会被自动切换到从slave读。注意RocketMQ 是不支持自动主从切换的当主节点挂掉之后生产者就不能再给这个主节点生产消息了。
2. 刷盘机制
同步刷盘:当数据写如到内存中之后立刻刷盘(同步)在保证刷盘成功的前提下响应client。
异步刷盘:数据写入内存后直接响应client。异步将内存中的数据持久化到磁盘上。
RocketMQ采用多住多从同步复制和异步刷盘保证高可用性。 同步复制 也叫 “同步双写”也就是说只有消息同步双写到主从节点上时才返回写入成功 。 异步复制 消息写入主节点之后就直接返回写入成功 。 9. RocketMQ的存储机制
CommitLog 消息主体以及元数据的存储主体存储 Producer 端写入的消息主体内容,消息内容不是定长的。单个文件大小默认1G 文件名长度为20位左边补零剩余为起始偏移量比如00000000000000000000代表了第一个文件起始偏移量为0文件大小为1G1073741824当第一个文件写满了第二个文件为00000000001073741824起始偏移量为1073741824以此类推。消息主要是顺序写入日志文件当文件满了写入下一个文件。
ConsumeQueue 消息消费队列Consumer 即可根据 ConsumeQueue 来查找待消费的消息。其中ConsumeQueue作为消费消息的索引保存了指定 Topic 下的队列消息在 CommitLog 中的起始物理偏移量 offset 消息大小 size 和消息 Tag 的 HashCode 值。consumequeue 文件可以看成是基于 topic 的 commitlog 索引文件。
IndexFile IndexFile索引文件提供了一种可以通过key或时间区间来查询消息的方法。 10 RocketMQ性能比较高的原因
Netty高效的NIO框架大量使用多线程异步采用零拷贝技术MMAP文件存储顺序读写锁优化CAS机制无锁化存储设计读写分离。