高性能消息数据存储引擎的设计解析

微风

2019/03/24 发布于 技术 分类

文字内容
1. 高性能消息数据存储引擎的设计解析 李淼 融云-首席架构师
3. 融云,通信云行业领导者 李淼-融云首席架构师,联合创始人 10年IM领域设计和研究经验 • 实时通讯云计算平台 • 日均活跃数 6500 万 • 日消息峰值 2200 亿
4. • 即时通讯消息存储特点 • 消息存储引擎设计 • 消息存储引擎优化 • 消息存储服务架构设计
5. 即时通讯消息存储特点 Ø 时间顺序进行排序 Ø 存储具有时效性,定期淘汰 Ø 写入并发量高 Ø 写入读取比一般在5:1
6. 融云消息存储历程 Ø 原型验证-MySQL Ø 正式阶段一-Redis Ø 正式阶段二-LevelDB Ø 正式阶段三-Redis
7. 为什么要自研存储 Ø 满足复杂的数据业务逻辑 Ø 降低设备成本 Ø 简化部署模型 Ø 源码基本可控
8. 存储设计要求 Ø 快速数据淘汰 Ø 避免数据合并 Ø 读写性能要求高 Ø 开发使用灵活
9. 站在前人的肩膀 Ø 数据采用WAL写入 Ø 借鉴 InfluxDB 的 LSM 树 Ø 借鉴 whiskey 的 K / V 分离存储 Ø 借鉴 MyISAM 的文件定义
10. 存储逻辑划分
11. 存储文件规划 Ø Ø Table ü xxx.data 数据存储文件 ü xxx.index 数据索引文件 ü xxx.info table信息文件 Log ü xx.log 日志信息文件
12. 数据写入逻辑
13. 日志文件设计
14. 数据存储文件设计
15. 数据索引文件设计
16. table信息文件设计
17. 数据查询逻辑
18. 内存优化篇 Ø 重写的SkipList,内存尽有Java中的 SkipList ¼ Ø 40亿数据索引,尽消耗400MB内存 Ø 实现内存对象分配器 Ø 实现 LRU 进阶的 LIRS 缓存
19. 存储优化篇 Ø 索引数据前缀压缩 Ø 数值数据 VarInt 编码 Ø 业务数据 quicklz 压缩 Ø 数据写入采用双循环Buffer Ø 重复数据引用写入
20. 性能数据指标 数据量 耗时(毫秒) 1,000,000 5,000,000 10,000,000 50,000,000 100,000,000 数据量 耗时(毫秒) 1,000,000 2,000,000 5,000,000 10,000,000 写入速率测试 速率(条/秒) 1,562 7,584 15,393 76,740 152,027 读取速率测试 速率(条/秒) 3,483 6,970 16,176 32,135 640,205 659,283 649,646 651,551 657,778 287,109 286,944 309,100 311,187 CPU:Intel i7 8550U 内存:16GB JVM 4GB 硬盘:PCIe SSD
21. 服务端架构
22. 服务端特点 ü 无数据迁移扩容 ü 自动主从切换 ü 异步长连接客户端 ü 多协议适配(MQTT、Websocket、HTTP2)
23. 特别提示 Ø 数据存储引擎未来两个月会进行开源