求阙厅

春有百花秋有月,夏有凉风冬有雪。若无闲事挂心头,便是人间好时节。

RocketMQ 系列 生产者

刨析rocketMQ的底层实现

同步发送原理 RocketMQ 使用 Netty 进行发送,Netty 通讯默认都是异步的,那么同步是怎么实现的呢? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 public Remoti...

Java基础 系列 泛型

“泛型” 简单的意思就是泛指的类型(参数化类型)。 Java泛型类 类结构是面向对象中最基本的元素,如果类需要有很好的扩展性,那么可以将其设置成泛型的。假设需要一个数据的包装类,通过传入不同类型的数据,可以存储相应类型的数据。看看这个简单的泛型类的设计: 1 2 3 4 5 6 7 8 9 10 11 class DataHolder<T>{ T item; ...

分布式 系列 一致性协议 2PC

在对一个分布式系统进行架构设计的过程中,往往会在系统的可用性和数据的一致性进行反复的权衡,于是就产生了一致性协议。 二阶段提交算法 2PC(Two-phase commit) 为了使基于分布式系统架构下的所有节点在进行事务处理过程中能够保持原子性和一致性而设计的算法。 二阶段提交协议是将一个事务的处理过程分成了投票和执行两个阶段来进行处理,其核心是对每个事务都采用先尝试后提交的...

Redis 系列 过期清除

开启 redis 探索新篇章

Redis 作为缓存使用最主要的一个特性就是可以为键值对设置过期时间。 Redis 会将每个设置了过期时间的 key 放入到一个独立的字典中,以后会定期遍历这个字典来删除到期的 key。除了定期遍历之外,它还会使用惰性策略来删除过期的 key,所谓惰性策略就是在客户端访问这个 key 的时候,redis 对 key 的过期时间进行检查,如果过期了就立即删除。定期删除是集中处理,惰性...

Redis 系列 Redis 缓存和 MySQL 数据一致性方案

开启 redis 探索新篇章

不一致是指:假如一个数据访问者同时读取 Redis 和 DB,能在一段时间里发现二者不一样。 数据库和缓存更新时,就容易出现缓存(Redis)和数据库(MySQL)间的数据一致性问题。 先做一个说明,从理论上来说,给缓存设置过期时间,是保证最终一致性的解决方案。这种方案下,可以对存入缓存的数据设置过期时间,所有的写操作以数据库为准,对缓存操作只是尽最大努力即可。也就是说如果数据库写成功,...

分布式 系列 一致性协议 3PC

三阶段提交算法 3PC(Three-phase commit) 将二阶段提交协议的“提交事务请求”过程一分为二,形成了由 CanMommit、PreCommit和doCommit三个阶段组成的事务处理协议。 CanMommit 事务询问:协调者向所有的参与者发送一个包含事务内容的 canCommit 请求,询问是否可以执行事务提交操作,并开始等待各参与者的响应。 各参与者向协...

RocketMQ 系列 高可用设计

刨析rocketMQ的底层实现

这里将消息的整体处理阶段分为 3 个阶段进行分析: Producer 发送消息阶段。 Broker 处理消息阶段。 Consumer 消费消息阶段。 概念 故障延迟机制 消息发送端采用重试机制,选择消息队列有两种方式。 获取机制: 直接用 sendWhichQueue 自增再获取值,与当前路由表中消息队列个数取模,返回该位置的MessageQueue。 如果...

RocketMQ 系列 路由注册、发现及剔除机制

刨析rocketMQ的底层实现


MySQL 系列 undo 日志

MySQL 技术内幕:InnoDB存储引擎

undo log 保存了事务发生之前的数据的一个版本,可以用于回滚,同时可以提供多版本并发控制下的读(MVCC),也即非锁定读。 undo log 存放在数据库内部的一个特殊段中,这个段称为 undo 段,位于共享表空间中。 undo log 和 redo log 不一样,undo log 是逻辑日志, redo log 是物理日志。可以认为当 delete 一条记录时,undo log...

MySQL 系列 redo 日志

MySQL 技术内幕:InnoDB存储引擎

Redo 初衷是用于性能提升和崩溃恢复; 为了提供更好的读写性能,InnoDB在从磁盘读到page之后,会把page缓存在Buffer Pool中,在经过写入修改之后,这个page就变成了脏页。为了避免每次都把脏页落盘带来的海量随机写的IO开销,InnoDB是在后台异步的将脏页落盘,这时如果进程或机器崩溃导致内存数据丢失,磁盘上的数据和内存中的会存在不一致。为了保证数据库本身的一致...