整理 http 协议的状态码。
本章重点走读 redis 源码,理解 sentinel 检测 master 节点的主客观下线流程。
redis 哨兵集群有 3 个角色:sentinel/master/slave,每个角色都可能出现故障,故障转移主要针对 master
:
1
master 主观下线 --> master 客观下线 --> 投票选举 leader --> leader 执行故障转移。
上一章 简述了哨兵的工作原理。
本文通过 strace
命令抓取 sentinel 节点的系统调用日志,去熟悉节点的通信流程,更好地理解 redis 哨兵集群,是如何通过 PING / INFO / PUBLISH / SUBSCRIBE 这几个命令,将整个集群节点链接成一个整体的通信系统的。
最近整理了一下服务程序异步通信逻辑思路。异步逻辑与同步逻辑处理差别比较大,异步逻辑可能涉及多次回调才能完成一个完整的请求处理,逻辑被碎片化,切分成串行的步骤。习惯了写同步逻辑的朋友,有可能思维上转不过来。
走读 Linux 内核源码(5.0.1),理解 epoll 的 lt / et 模式区别:
两个模式,事件通知方式不同,lt 持续通知直到处理事件完毕,et 一般只通知一次,不管事件是否处理完毕。
【注意】et 模式,在事件通知后,该事件没有被再次触发的情况下只通知一次。
举个栗子:内核接收了 64k 数据,用户只读取了 16k,那么剩下 48k 数据在内核缓存里,内核不会再次通知用户处理,除非读操作后,又来了新的数据,重新触发了读事件。
epoll 详细信息参考《[epoll 源码走读] epoll 实现原理》。
redis 有主从数据复制功能。多个实例通过读写分离,使得单进程的 redis 可以充分利用多核性能。
当某些 redis 实例出现故障怎么办,服务还能正常工作吗?这时候故障管理者 sentinel
应运而生。它负责 redis 集群管理工作:检查故障,发现故障,转移故障,从而保证集群高可用。
自动代码工具,根据 sql 脚本的语法特征,提取脚本的表名(table name)和其对应的列(column)信息,抽象成类,并生成对应的 C++ 源码文件。
上一章 简述了主从复制的基本配置,以及抓包查看了数据复制的一些工作流程,本章将通过源码去深入分析 redis 主从节点数据复制的要点逻辑:复制命令,master 服务副本 ID,复制偏移量,积压缓冲区。
redis 是纯 c 源码,阅读起来实现比较清晰,缺点:它也是一个异步的网络框架,回调处理的逻辑理解有点费劲。
redis 为啥那么快?redis 单进程轻松并发 10w+ 。
本文将从这几个角度进行分析:单进程,单线程,多线程,多进程,多实例,集群。
理解 libev 工作流程,官方文档 和网上有很多资料可以查阅(事件库之Libev(一),随笔分类 - libev)。libev 源码,宏的使用频率比较高,也因为这样,源码理解起来比较费脑,可以展开宏查阅源码,或者通过调试方式,理解 libev 的工作流程。redis-ae 事件管理与 libev 有点类似,也可以相互比较一下。
分布式系统,用户连接到不同的物理设备,在不同的进程里工作。
独立进程在处理一些用户关系性比较强的业务时(例如用户在线状态),涉及多个进程交互,逻辑要比单服复杂很多。对于较小体量的系统,我们仍然希望寻求一种简单的交互方式。
redis 主从模式作用:多节点协调工作保证服务高可用;读写分离,提高系统负载能力;多节点保存数据副本,确保数据安全性。
主从模式,需要实现数据同步,master 节点将数据(全量/增量)复制到链接它的 slave 节点。redis 为了保证节点高性能,采用了异步的数据复制方式,高效地实现了数据的最终一致,并非强一致。
那么接下来,将分两个章节来探索 redis 数据复制的核心工作流程。
详细源码分析,请参考 下一章
常用知识整理和收藏,方便查阅。
外出作业,mbp 13 英寸屏幕有点小,生产力跟不上,急需一个扩展屏。
我的需求:便携,屏幕清晰。经过综合比较,最后在某宝入手 Gobigger
4k 便携屏。
4k 便携屏是大功率电器,发热问题无法避免,加上 mbp 散热本来就不好,长期使用会对电脑有损害,不是刚需请慎重购买。
重点 | 描述 |
---|---|
服务异步通信核心 | 非阻塞 + 异步事件驱动。 |
事件驱动核心源码 | ae.c |
网络通信核心源码 | connection.h / connection.c,networking.h / networking.c |
读/写数据核心函数 | readQueryFromClient / writeToClient |
本文主要讲述 Linux 平台下的 redis 客户端与服务端异步通信(单线程),不包括 redis 集群间的通信。