摘要: 最近看到网上有些文章在讨论JAVA中普通文件IO读/写的时候经过了几次数据拷贝,如果从系统调用开始分析,以读取文件为例,数据的读取过程如下(以缓存I/O为例): 应用程序调用read函数发起系统调用,此时由用户空间切换到内核空间; 内核通过DMA从磁盘拷贝数据到内核缓冲区; 将内核缓冲区的数据拷贝到 阅读全文
posted @ 2022-09-25 18:19 shanml 阅读(149) 评论(0) 推荐(0) 编辑
摘要: Raft协议 Raft是分布式系统中的一种共识算法,用于在集群中选举Leader管理集群。Raft协议中有以下角色: Leader(领导者):集群中的领导者,负责管理集群。 Candidate(候选者):具有竞选Leader资格的角色,如果集群需要选举Leader,节点需要先转为候选者角色才可以发起 阅读全文
posted @ 2022-09-13 09:16 shanml 阅读(271) 评论(1) 推荐(2) 编辑
摘要: 最近遇到了一个SQL没有走索引导致出现慢查询的问题,SQL本身很简单,两张表联合查询然后进行排序和分页,由于涉及到一些业务,这里以用户表和订单表为例,用户表数据在35W左右,订单表数据只有8条,订单表中有外键userid可以与用户表关联,此时查询在订单表中不存在数据的用户,根据用户的姓名、性别和创建 阅读全文
posted @ 2022-09-03 17:01 shanml 阅读(195) 评论(0) 推荐(0) 编辑
摘要: 事务的使用 RocketMQ事务的使用场景 单体架构下的事务 在单体系统的开发过程中,假如某个场景下需要对数据库的多张表进行操作,为了保证数据的一致性,一般会使用事务,将所有的操作全部提交或者在出错的时候全部回滚。以创建订单为例,假设下单后需要做两个操作: 在订单表生成订单 在积分表增加本次订单增加 阅读全文
posted @ 2022-08-15 11:36 shanml 阅读(426) 评论(0) 推荐(0) 编辑
摘要: 上一讲【RocketMQ】消息的拉取 消息消费 当RocketMQ进行消息消费的时候,是通过ConsumeMessageConcurrentlyService的submitConsumeRequest方法,将消息提交到线程池中进行消费,具体的处理逻辑如下: 如果本次消息的个数小于等于批量消费的大小c 阅读全文
posted @ 2022-07-25 21:35 shanml 阅读(694) 评论(0) 推荐(0) 编辑
摘要: RocketMQ消息的消费以组为单位,有两种消费模式: 广播模式:同一个消息队列可以分配给组内的每个消费者,每条消息可以被组内的消费者进行消费。 集群模式:同一个消费组下,一个消息队列同一时间只能分配给组内的一个消费者,也就是一条消息只能被组内的一个消费者进行消费。(一般情况下都使用的是集群模式) 阅读全文
posted @ 2022-07-11 20:51 shanml 阅读(602) 评论(0) 推荐(0) 编辑
摘要: 刷盘策略 CommitLog的asyncPutMessage方法中可以看到在写入消息之后,调用了submitFlushRequest方法执行刷盘策略: public class CommitLog { public CompletableFuture<PutMessageResult> asyncP 阅读全文
posted @ 2022-07-05 18:09 shanml 阅读(452) 评论(0) 推荐(3) 编辑
摘要: Broker对消息的处理 BrokerController初始化的过程中,调用registerProcessor方法注册了处理器,在注册处理器的代码中可以看到创建了处理消息发送的处理器对象SendMessageProcessor,然后将其注册到远程服务中: public class BrokerCo 阅读全文
posted @ 2022-07-01 22:16 shanml 阅读(346) 评论(0) 推荐(0) 编辑
摘要: 集群故障转移 节点下线 在集群定时任务clusterCron中,会遍历集群中的节点,对每个节点进行检查,判断节点是否下线。与节点下线相关的状态有两个,分别为CLUSTER_NODE_PFAIL和CLUSTER_NODE_FAIL。 CLUSTER_NODE_PFAIL:当前节点认为某个节点下线时,会 阅读全文
posted @ 2022-06-19 22:19 shanml 阅读(571) 评论(0) 推荐(1) 编辑
摘要: 消息发送 首先来看一个RcoketMQ发送消息的例子: @Service public class MQService { @Autowired DefaultMQProducer defaultMQProducer; public void sendMsg() { String msg = "我是 阅读全文
posted @ 2022-06-17 22:19 shanml 阅读(381) 评论(0) 推荐(2) 编辑