网站目的及功能定位深圳网站优化哪家好
news/
2025/10/8 15:03:25/
文章来源:
网站目的及功能定位,深圳网站优化哪家好,wordpress 正版插件吗,贵州灵溪seo整站优化目录 101.RocketMQ的事务消息是如何实现的
102.为什么RocketMQ不使⽤Zookeeper作为注册中⼼呢#xff1f;
103.RocketMQ的实现原理
104.RocketMQ为什么速度快
105.消息队列如何保证消息可靠传输
106.消息队列有哪些作⽤
107.死信队列是什么#xff1f;延时队列是什么
103.RocketMQ的实现原理
104.RocketMQ为什么速度快
105.消息队列如何保证消息可靠传输
106.消息队列有哪些作⽤
107.死信队列是什么延时队列是什么
108.如何保证消息的⾼效读写
109.epoll和poll的区别
110.TCP的三次握⼿和四次挥⼿
111.浏览器发出⼀个请求到收到响应经历了哪些步骤
112.跨域请求是什么有什么问题怎么解决
113.零拷⻉是什么 101.RocketMQ的事务消息是如何实现的 a. ⽣产者订单系统先发送⼀条half消息到Brokerhalf消息对消费者⽽⾔是不可⻅的 b. 再创建订单根据创建订单成功与否向Broker发送commit或rollback c. 并且⽣产者订单系统还可以提供Broker回调接⼝当Broker发现⼀段时间half消息没有收到任 何操作命令则会主动调此接⼝来查询订单是否创建成功 d. ⼀旦half消息commit了消费者库存系统就会来消费如果消费成功则消息销毁分布式事 务成功结束 e. 如果消费失败则根据重试策略进⾏重试最后还失败则进⼊死信队列等待进⼀步处理 102.为什么RocketMQ不使⽤Zookeeper作为注册中⼼呢 根据CAP理论同时最多只能满⾜两个点⽽zookeeper满⾜的是CP也就是说zookeeper并不能保证 服务的可⽤性zookeeper在进⾏选举的时候整个选举的时间太⻓期间整个集群都处于不可⽤的状态⽽这对于⼀个注册中⼼来说肯定是不能接受的作为服务发现来说就应该是为可⽤性⽽设计。 基于性能的考虑NameServer本身的实现⾮常轻量⽽且可以通过增加机器的⽅式⽔平扩展增加集群的抗压能⼒⽽zookeeper的写是不可扩展的⽽zookeeper要解决这个问题只能通过划分领域划分多个zookeeper集群来解决⾸先操作起来太复杂其次这样还是⼜违反了CAP中的A的设计导致服务之间是不连通的。 持久化的机制来带的问题ZooKeeper 的 ZAB 协议对每⼀个写请求会在每个 ZooKeeper 节点上保 持写⼀个事务⽇志同时再加上定期的将内存数据镜像Snapshot到磁盘来保证数据的⼀致性和持久性⽽对于⼀个简单的服务发现的场景来说这其实没有太⼤的必要这个实现⽅案太重了。⽽且本身存储的数据应该是⾼度定制化的。 消息发送应该弱依赖注册中⼼⽽RocketMQ的设计理念也正是基于此⽣产者在第⼀次发送消息的时候从NameServer获取到Broker地址后缓存到本地如果NameServer整个集群不可⽤短时间内对于⽣产者和消费者并不会产⽣太⼤影响。 103.RocketMQ的实现原理 RocketMQ由NameServer注册中⼼集群、Producer⽣产者集群、Consumer消费者集群和若⼲BrokerRocketMQ进程组成它的架构原理是这样的 Broker在启动的时候去向所有的NameServer注册并保持⻓连接每30s发送⼀次⼼跳 Producer在发送消息的时候从NameServer获取Broker服务器地址根据负载均衡算法选择⼀台服务器来发送消息 Conusmer消费消息的时候同样从NameServer获取Broker地址然后主动拉取消息来消费 104.RocketMQ为什么速度快 因为使⽤了顺序存储、Page Cache和异步刷盘。我们在写⼊commitlog的时候是顺序写⼊的这样⽐ 随机写⼊的性能就会提⾼很多写⼊commitlog的时候并不是直接写⼊磁盘⽽是先写⼊操作系统的 PageCache最后由操作系统异步将缓存中的数据刷到磁盘 105.消息队列如何保证消息可靠传输 消息可靠传输代表了两层意思既不能多也不能少。 1. 为了保证消息不多也就是消息不能重复也就是⽣产者不能重复⽣产消息或者消费者不能重复消费消息 2. ⾸先要确保消息不多发这个不常出现也⽐较难控制因为如果出现了多发很⼤的原因是⽣产者⾃⼰的原因如果要避免出现问题就需要在消费端做控制 3. 要避免不重复消费最保险的机制就是消费者实现幂等性保证就算重复消费也不会有问题通过幂等性也能解决⽣产者重复发送消息的问题 4. 消息不能少意思就是消息不能丢失⽣产者发送的消息消费者⼀定要能消费到对于这个问 题就要考虑两个⽅⾯ 5. ⽣产者发送消息时要确认broker确实收到并持久化了这条消息⽐如RabbitMQ的confirm机制Kafka的ack机制都可以保证⽣产者能正确的将消息发送给broker 6. broker要等待消费者真正确认消费到了消息时才删除掉消息这⾥通常就是消费端ack机制消费 者接收到⼀条消息后如果确认没问题了就可以给broker发送⼀个ackbroker接收到ack后才会删除消息 106.消息队列有哪些作⽤ 1. 解耦使⽤消息队列来作为两个系统之间的通讯⽅式两个系统不需要相互依赖了 2. 异步系统A给消息队列发送完消息之后就可以继续做其他事情了 3. 流量削峰如果使⽤消息队列的⽅式来调⽤某个系统那么消息将在队列中排队由消费者⾃⼰控制消费速度 107.死信队列是什么延时队列是什么 1. 死信队列也是⼀个消息队列它是⽤来存放那些没有成功消费的消息的通常可以⽤来作为消息重试 2. 延时队列就是⽤来存放需要在指定时间被处理的元素的队列通常可以⽤来处理⼀些具有过期性操作的业务⽐如⼗分钟内未⽀付则取消订单 108.如何保证消息的⾼效读写 零拷⻉ kafka和RocketMQ都是通过零拷⻉技术来优化⽂件读写。 传统⽂件复制⽅式 需要对⽂件在内存中进⾏四次拷⻉。 零拷⻉ 有两种⽅式 mmap和transfileJava当中对零拷⻉进⾏了封装 Mmap⽅式通过 MappedByteBuffer对象进⾏操作⽽transfile通过FileChannel来进⾏操作。Mmap 适合⽐较⼩的⽂件通常⽂件⼤⼩不要超过1.5G ~2G 之间。Transfile没有⽂件⼤⼩限制。RocketMQ当中使⽤Mmap⽅式来对他的⽂件进⾏读写。 在kafka当中他的index⽇志⽂件也是通过mmap的⽅式来读写的。在其他⽇志⽂件当中并没有使⽤零拷⻉的⽅式。Kafka使⽤transfile⽅式将硬盘数据加载到⽹卡。 109.epoll和poll的区别 1. select模型使⽤的是数组来存储Socket连接⽂件描述符容量是固定的需要通过轮询来判断是否发⽣了IO事件 2. poll模型使⽤的是链表来存储Socket连接⽂件描述符容量是不固定的同样需要通过轮询来判断是否发⽣了IO事件 3. epoll模型epoll和poll是完全不同的epoll是⼀种事件通知模型当发⽣了IO事件时应⽤程序才进⾏IO操作不需要像poll模型那样主动去轮询 110.TCP的三次握⼿和四次挥⼿ TCP协议是7层⽹络协议中的传输层协议负责数据的可靠传输。 在建⽴TCP连接时需要通过三次握⼿来建⽴过程是 1. 客户端向服务端发送⼀个SYN 2. 服务端接收到SYN后给客户端发送⼀个SYN_ACK 3. 客户端接收到SYN_ACK后再给服务端发送⼀个ACK 在断开TCP连接时需要通过四次挥⼿来断开过程是 1. 客户端向服务端发送FIN 2. 服务端接收FIN后向客户端发送ACK表示我接收到了断开连接的请求客户端你可以不发数据了不过服务端这边可能还有数据正在处理 3. 服务端处理完所有数据后向客户端发送FIN表示服务端现在可以断开连接 4. 客户端收到服务端的FIN向服务端发送ACK表示客户端也会断开连接了 111.浏览器发出⼀个请求到收到响应经历了哪些步骤 1. 浏览器解析⽤户输⼊的URL⽣成⼀个HTTP格式的请求 2. 先根据URL域名从本地hosts⽂件查找是否有映射IP如果没有就将域名发送给电脑所配置的DNS进 ⾏域名解析得到IP地址 3. 浏览器通过操作系统将请求通过四层⽹络协议发送出去 4. 途中可能会经过各种路由器、交换机最终到达服务器 5. 服务器收到请求后根据请求所指定的端⼝将请求传递给绑定了该端⼝的应⽤程序⽐如8080被tomcat占⽤了 6. tomcat接收到请求数据后按照http协议的格式进⾏解析解析得到所要访问的servlet 7. 然后servlet来处理这个请求如果是SpringMVC中的DispatcherServlet那么则会找到对应的 Controller中的⽅法并执⾏该⽅法得到结果 8. Tomcat得到响应结果后封装成HTTP响应的格式并再次通过⽹络发送给浏览器所在的服务器 9. 浏览器所在的服务器拿到结果后再传递给浏览器浏览器则负责解析并渲染 112.跨域请求是什么有什么问题怎么解决 跨域是指浏览器在发起⽹络请求时会检查该请求所对应的协议、域名、端⼝和当前⽹⻚是否⼀致如 果不⼀致则浏览器会进⾏限制⽐如在www.baidu.com的某个⽹⻚中如果使⽤ajax去访问 www.jd.com是不⾏的但是如果是img、iframe、script等标签的src属性去访问则是可以的之所以浏览器要做这层限制是为了⽤户信息安全。但是如果开发者想要绕过这层限制也是可以的 1. response添加header⽐如resp.setHeader(Access-Control-Allow-Origin, *);表示可以访问 所有⽹站不受是否同源的限制 2. jsonp的⽅式该技术底层就是基于script标签来实现的因为script标签是可以跨域的 3. 后台⾃⼰控制先访问同域名下的接⼝然后在接⼝中再去使⽤HTTPClient等⼯具去调⽤⽬标接⼝ 4. ⽹关和第三种⽅式类似都是交给后台服务来进⾏跨域访问 113.零拷⻉是什么 零拷⻉指的是应⽤程序在需要把内核中的⼀块区域数据转移到另外⼀块内核区域去时不需要经过先 复制到⽤户空间再转移到⽬标内核区域去了⽽直接实现转移。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/931631.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!