豆瓣数据架构实践
- 2. 关于豆瓣
- 2005 年 3 ⽉月上线
- 以发现和分享为核⼼心的社区
- 读书、电影、⾳音乐、同城、⼩小组、阅读、
FM、东西等等
- 4. 一些数据
- 2TB+ 结构化数据 (MySQL)
- 3TB+ ⾮非结构化⽂文本数据 (DoubanDB)
- 100TB+ 图⽚片、⾳音乐等 (DoubanFS)
- 约 30 个集群 (MySQL)
- 约 30 对 Redis
- 约 20 台服务器,⼀一半线上、⼀一半离线 (MySQL)
- 2 个 DBA (2013.08 前 0.5 个)
- 15. Application
elf
elf slave
Data mining
MyISAM 全⽂文搜索出现性能问题
rw
luz
luz slave
read
repl
repl
write
read
Memcached
- 16. Application
elf
elf slave
Data mining
rw
luz
luz slave
read
repl
repl
write
read
Memcached
使⽤用独⽴立的搜索引擎
MyISAM 全⽂文搜索出现性能问题
- 18. Application Data mining
read
rw
luz
repl
repl
write
read
⼤大⽂文本字段严重影响性能
elf elf slave
luz slave
Memcached
Search
- 19. Application Data mining
read
rw
luz
repl
repl
write
elf elf slave
read
⼤大⽂文本字段严重影响性能
开发 BeansDB,拆分⽂文本字段
luz slave
Memcached
Search
- 21. Application Data mining
read
rw
luz
repl
repl
write
elf elf slave
读压⼒力增长快
luz slave
read Memcached
Search
BeansDB
- 22. Application Data mining
read
rw
luz
repl
repl
write
read 读压⼒力增长快
读写分离
elf elf slave
luz slave
Memcached
Search
BeansDB
- 24. Application Data mining
read
rw
luz
repl
repl
write
read
读写分离开发成本⾼高
read
elf elf slave
luz slave
Memcached
Search
BeansDB
- 25. Application Data mining
read
rw
luz
repl
repl
write
elf elf slave
read
读写分离开发成本⾼高
read
停⽤用读写分离,继续拆库
luz slave
Memcached
Search
BeansDB
- 26. Application Data mining
read
rw
luz
repl
repl
write
read
rw
muk
repl
muk slave
read
elf elf slave
luz slave
Memcached
Search
BeansDB
- 27. Application Data mining
read
rw
luz
repl
repl
write
read
rw
muk
repl
read
去重、计数代价⾼高
elf elf slave
luz slave
muk slave
Memcached
Search
BeansDB
- 28. Application Data mining
read
rw
luz
repl
repl
write
read
rw
muk
repl
read
去重、计数代价⾼高
引⼊入 Redis
elf elf slave
luz slave
muk slave
Memcached
Search
BeansDB
- 29. Application
Memcached
Data mining
read
rw
luz
repl
repl
write
read
rw
muk
repl
read
Search elf elf slave
luz slave
muk slave
BeansDB
Redis
- 33. Failover
- 早期通过 hostname 访问数据库,切换后需要重启应⽤用
- skinbark => leaflock
- 后来改为 hosts alias,切换时更新 hosts,不需要重启应⽤用
- luz_m(on skinbark) => luz_m(on leaflock)
- 34. Failover
- 早期通过 hostname 访问数据库,切换后需要重启应⽤用
- skinbark => leaflock
- 后来改为 hosts alias,切换时更新 hosts,不需要重启应⽤用
- luz_m(on skinbark) => luz_m(on leaflock)
- 服务器变多,更新 hosts 过程太慢,开发配置推送系统
- 基于 zookeeper
- 38. 分库分表
- sqlstore Python 客户端库,数据库访问中间层,屏蔽分库细节
- 分库、分表前预发布新路由信息,重启应⽤用
- 应⽤用变多之后重启所有的应⽤用很困难
- 39. 分库分表
- sqlstore Python 客户端库,数据库访问中间层,屏蔽分库细节
- 分库、分表前预发布新路由信息,重启应⽤用
- 应⽤用变多之后重启所有的应⽤用很困难
- 基于配置推送系统,亚秒级更新进程内的路由信息
- 基于 zookeeper + inotify
- 42. 定位性能问题
- 从 Web ⼊入⼜⼝口处给每个查询增加注释,标明来源
- 基于 tcpdump + dpark 从旁路分析流量,从多个纬度分析查询
- 43. 定位性能问题
- 从 Web ⼊入⼜⼝口处给每个查询增加注释,标明来源
- 基于 tcpdump + dpark 从旁路分析流量,从多个纬度分析查询
- 外⽹网 IP
- ⼊入⼜⼝口 URL
- normalized SQL
- 时间
- …
- 47. 追溯问题和审计
400
300
200
100
0
00:00 01:00 02:00 03:00 04:00 05:00 06:00 07:00
- 51. 数据备份和恢复
- 逻辑备份,恢复很慢
- 物理备份⾄至 MooseFS
- 多机房在时间上交错备份
- PITR(即时恢复)使⽤用 MooseFS snapshot + binlog
- 58. 理想的 DBA
- 扎实的系统管理能⼒力
- 掌控 MySQL / Redis / MongoDB / 以及其他
任何所需系统的能⼒力
- 59. 理想的 DBA
- 扎实的系统管理能⼒力
- 掌控 MySQL / Redis / MongoDB / 以及其他
任何所需系统的能⼒力
- 深⼊入研究特定问题的能⼒力
- 60. 理想的 DBA
- 扎实的系统管理能⼒力
- 掌控 MySQL / Redis / MongoDB / 以及其他
任何所需系统的能⼒力
- 深⼊入研究特定问题的能⼒力
- ⾃自动化⼀一切能⾃自动化的东西的能⼒力
- 61. 理想的 DBA
- 扎实的系统管理能⼒力
- 掌控 MySQL / Redis / MongoDB / 以及其他
任何所需系统的能⼒力
- 深⼊入研究特定问题的能⼒力
- ⾃自动化⼀一切能⾃自动化的东西的能⼒力
- 持续的⾃自驱动⼒力
- 62. 理想的 DBA
- 扎实的系统管理能⼒力
- 掌控 MySQL / Redis / MongoDB / 以及其他
任何所需系统的能⼒力
- 深⼊入研究特定问题的能⼒力
- ⾃自动化⼀一切能⾃自动化的东西的能⼒力
- 持续的⾃自驱动⼒力
Don’t Be Afraid!
- 63. Q & A
http://www.douban.com/people/recordus/
xupeng@douban.com
Twitter: @xupeng
微博:@yunxupeng