代码改变世界

Redis version 3.2 standaloan模式架构图

2022-06-30 21:14  虎背熊腰  阅读(50)  评论(0编辑  收藏  举报

 

 

 
 
2:应用架构图

 

 


3: 技术架
 
 
QA
1: 关于slave的AOF
从节点通过readSyncBulkPayload-> replicationCreateMasterClient -> createClient 执行链路从而实现cs模式client-> server 模拟伪客户端的请求,把数据写入aof_buf
 
 
2: 关于主从同步讲解
  • replicationCron函数触发主从同步
  • slave-1:连接master,并把当前fd注册在main-Thread epoll上,注册回掉函数syncWithMaster完成握手协议。握手中会发送psync,psync支持offset复制增量复制参数(无offset 发送 -1),master返回fullsync则全量复制,master返回not suport,则slave会发送sync全量复制,最后在epoll上注册readSyncBulkPayload,通过异步事件实现复制。
  • slave-2 管理自身的slave节点,发送PING检查心跳,断开超时的slaves,fork进程同步数据给需要全量复制的slave, 释放空闲主从复制队列内存
  • master-1:管理自身的slave节点,发送PING检查心跳,断开超时的slaves,fork进程同步二进制数据给需要全量复制的slave, 释放空闲主从复制队列内存。
  • master-2:收到psync事件,判断同步模式,全量同步模式下判断当前有无全量同步slave节点或是rdb bgsave进程有则等待replicationCron触发同步,fork全同步进程并把slave状态设置为SLAVE_STATE_WAIT_BGSAVE_END【通过wait3 获取同步结果】状态(方便master 时时同步客户端的请求数据),等待rdb同步结束则改状态为KSLAVE_STATE_ONLINE
  • Master-3: 增量同步情况先阻塞同步replication_backlog数据,同步完后master命令实时写入slave。(propagate 同时同步命令和写入到repl_backlog)
 
 
 
4: 数据架构

 

 

 
QA
1:OBJ_ENCODING_EMBSTR 和 OBJ_ENCODING_RAW 的区别
OBJ_ENCODING_EMBSTR robj 和 sds 分配在同一快内存