建设部网站 自住房,佛山网站制作,百度推广网页制作,seo搜索引擎优化业务设计评论系统#xff08;缓存怎么做#xff09;
mysql是否有主从延迟#xff0c;如何解决
mysql有主从延迟
主从延迟主要因为mysql主从同步的机制#xff0c;mysql有三种同步机制
同步复制#xff1a;事务线程等待所有从库复制成功响应异步复制#xff1a;事务不等待…设计评论系统缓存怎么做
mysql是否有主从延迟如何解决
mysql有主从延迟
主从延迟主要因为mysql主从同步的机制mysql有三种同步机制
同步复制事务线程等待所有从库复制成功响应异步复制事务不等待从库直接响应半同步复制事务线程不用等待所有从库复制完成只要一部分复制成功响应即可
分布式事务解决方案
(142条消息) 分布式事务 秒懂_40岁资深老架构师尼恩的博客-CSDN博客_分布式事务尼恩
rokectmq事务消息实现原理
rocketmq采用了2PC的思想事务消息的提交分为两个阶段。阶段一Producer发送half消息到brokerbroker储存消息bing并进行响应此时消息是Consumer不可见的。阶段二Producer根据half消息发送结果进行处理如果half消息发送成功则执行本地事务并提交事务状态给broker。
事务状态有三种
COMMIT_MESSAGE:事务提交消息对consumer可见ROLLBACK_MESSAGE:事务回滚丢弃消息UNKNOWN_MESSAGE:事务未知暂不处理稍后处理
Broker如何实现事务half消息Consumer不可见改写topic并将原参数保存
half消息回查是由broker发起的broker会定期对UNKNOWN_MESSAGE执行任务回查防止producer提交状态失败为避免无限回查默认回查次数为15
rocketmq如何保住消息不丢失
rocketmq消息主要有三个步骤
producer发送消息到brokerbroker持久化消息consumer消费消息
下面分别从三个角度讨论rocketmq是如何保住消息不丢失的
Producer
对于producer来说消息发出去之后如果消息未能正确存储则算消息丢失
消息发送后返回四种状态码发送失败时producer会进行重发默认重发2次
SEND_OK:消息发送成功并不代表消息一定会发送成功还取决于broker的刷盘方式FLUSH_DISK_TIMEOUT:如果broker配置的刷盘方式为同步刷盘 broker接到消息并且未能在配置的时间内落盘则返回该状态FLUSH_SLAVE_TIMEOUT:如果broker配置的主从同步方式为SYNC_MASTER,并且未能在配置时间内完成同步则返回该状态SLAVE_NOT_AVALIBLE:如果broker是主节点并且配置的同步方式为SYNC_MASTER,在没有可靠的slave节点时返回该状态
异步消息需要设置回调函数
事务消息可能会出现ack发送失败的情况严格意义来讲消息不算丢失可以在commit log中看到
Broker
对于broker来说消息默认存储到broker的内存异步保存到磁盘磁盘崩溃则算消息丢失
broker有两种刷盘机制同步刷盘、异步刷盘
同步刷盘broker接到消息后立即通知刷盘线程将消息刷到磁盘成功后返回ack异步刷盘默认broker接到消息后保存到缓存中pagecache直接返回ack当内存中消息累计到一定程度统一触发写入程序。
broker有两种同步机制异步复制、同步双写
同步双写broker-master接到消息后将消息复制给slave复制成功后返回ack异步复制broker-master接到消息后直接返回ack异步复制slave
rocketmq不是百分之百保证消息不丢失的异步刷盘、异步复制都不能百分百保证但是rocketmq可以通过调整配置同步刷盘、同步双写实现消息不丢失。
Consumer
消息完成持久化后consumer拉取之后未能成功消费且未反馈broker算作消息丢失
consumer会在本地持久化保存消费offsetconsumer消费消息之后会向broker提交ack。