庖丁(数据分析)
1 项目概述
1.1 背景介绍及目标
针对 Redis 服务做 Redis 服务数据分析
大 key 分析
大 key 带来了什么危害?
Redis 阻塞:因为 Redis 单线程特性,如果操作某个 Bigkey 耗时比较久,则后面的请求会被阻塞。
内存空间不均匀:在 Redis 集群中,会造成节点的内存使用不均匀。
过期时可能阻塞:如果 Bigkey 设置了过期时间,当过期后,这个 key 会被删除,假如没有使用 Redis 4.0 的过期异步删除,就会存在阻塞 Redis 的可能性,并且慢查询中查不到(因为这个删除是内部循环事件)。
热 key 分析
1.2 名词说明
1.3 Roadmap
2 需求分析
2.1 功能需求
2.2 非功能需求
2.3 调研
2.3.1 big key
2.3.1.1 Redis cli
使用 scan 命令进行扫描 big key
output
缺点:
线上使用:虽然 scan 命令通过游标遍历建空间并且在生产上可以通过对从服务执行该命令,但毕竟是一个线上操作
set,zset,list 以及 hash 类型只能获取有多少个元素。但其实元素多的不一定占用空间大
2.3.2 hot key
2.3.2.1 Facebook redis-faina(基于 monitor)
使用 monitor 获取最近访问的热点信息
需要对 Redis 使用 monitor 命令,需要考虑 Redis client-output-buffer 问题
2.3.2.2 aof-selector(基于 aof)
https://github.com/hongliuliao/aof-selector
需要线上 Redis 开启了 AOF
2.3.2.3 阿里云热点 key 发现
热点数据的发现(在 Redis 侧进行统计)
请求统计
热点定位
热点反馈
需要改造 Redis 内核
3 总体设计
总体设计重点是设计与折衷
3.1 系统架构
一般来说会有个简单的架构图,并配以文字对架构进行简要说明;
3.2 模块简介
架构图中如果有很多模块,需要对各个模块的功能进行简要介绍;
3.3 设计与折衷
设计与折衷是总体设计中最重要的部分;
3.4 潜在风险
4 详细设计
详细设计重点在“详细”
4.1 模块 xx
(有了数据库 + 接口 + 流程,别的同学拿到详设文档,基本也能够搞定了)
4.1.1 交互流程
简要的交互可用文字说明,复杂的交互建议使用流程图,交互图或其他图形进行说明
4.1.2 数据库设计
4.1.3 接口形式
Last updated