Ce diaporama a bien été signalé.
Nous utilisons votre profil LinkedIn et vos données d’activité pour vous proposer des publicités personnalisées et pertinentes. Vous pouvez changer vos préférences de publicités à tout moment.
豆瓣数据架构实践 
员(yùn)旭(xù)鹏(péng) 
2014-04-19
关于豆瓣 
- 2005 年 3 ⽉月上线 
- 以发现和分享为核⼼心的社区 
- 读书、电影、⾳音乐、同城、⼩小组、阅读、 
FM、东西等等
- 架构变迁 
- ⼏几个问题 
- ⼀一些挑战
一些数据 
- 2TB+ 结构化数据 (MySQL) 
- 3TB+ ⾮非结构化⽂文本数据 (DoubanDB) 
- 100TB+ 图⽚片、⾳音乐等 (DoubanFS) 
- 约 30 个集群 (MySQL) 
- 约 30 对 Redis...
Application 
rw 
luz
Application 
rw 
luz 
读压⼒力⾼高
Application 
rw 
luz 
读压⼒力⾼高 
引⼊入 Memcached
Application 
luz 
Memcached 
rw
Application 
luz 
Memcached 
rw 
数据挖掘和推荐反馈
Application 
luz 
Memcached 
rw 
数据挖掘和推荐反馈 
新的 slave ⽤用于离线读
Application 
luz 
Memcached luz slave 
Data mining 
rw 
repl 
read 
write
Application 
luz 
Memcached luz slave 
Data mining 
rw 
repl 
read 
write 
读写压⼒力⾼高,离线写对线上带来冲击
拆库,使⽤用独⽴立的库⽤用于数据挖掘反馈 
Application 
luz 
Memcached luz slave 
Data mining 
rw 
repl 
read 
write 
读写压⼒力⾼高,离线写对线上带来冲击
Application 
elf 
elf slave 
Data mining 
rw 
luz 
luz slave 
read 
repl 
repl 
write 
read 
Memcached
Application 
elf 
elf slave 
Data mining 
MyISAM 全⽂文搜索出现性能问题 
rw 
luz 
luz slave 
read 
repl 
repl 
write 
read 
Memcached
Application 
elf 
elf slave 
Data mining 
rw 
luz 
luz slave 
read 
repl 
repl 
write 
read 
Memcached 
使⽤用独⽴立的搜索引擎 
MyISA...
Application Data mining 
read 
rw 
luz 
repl 
repl 
write 
elf elf slave 
read 
luz slave 
Memcached 
Search
Application Data mining 
read 
rw 
luz 
repl 
repl 
write 
read 
⼤大⽂文本字段严重影响性能 
elf elf slave 
luz slave 
Memcached 
Searc...
Application Data mining 
read 
rw 
luz 
repl 
repl 
write 
elf elf slave 
read 
⼤大⽂文本字段严重影响性能 
开发 BeansDB,拆分⽂文本字段 
luz sla...
Application Data mining 
read 
rw 
luz 
repl 
repl 
write 
elf elf slave 
read 
luz slave 
Memcached 
Search 
BeansDB
Application Data mining 
read 
rw 
luz 
repl 
repl 
write 
elf elf slave 
读压⼒力增长快 
luz slave 
read Memcached 
Search 
Bean...
Application Data mining 
read 
rw 
luz 
repl 
repl 
write 
read 读压⼒力增长快 
读写分离 
elf elf slave 
luz slave 
Memcached 
Search...
Application Data mining 
read 
rw 
luz 
repl 
repl 
write 
read 
read 
elf elf slave 
luz slave 
Memcached 
Search 
BeansD...
Application Data mining 
read 
rw 
luz 
repl 
repl 
write 
read 
读写分离开发成本⾼高 
read 
elf elf slave 
luz slave 
Memcached 
Se...
Application Data mining 
read 
rw 
luz 
repl 
repl 
write 
elf elf slave 
read 
读写分离开发成本⾼高 
read 
停⽤用读写分离,继续拆库 
luz slave ...
Application Data mining 
read 
rw 
luz 
repl 
repl 
write 
read 
rw 
muk 
repl 
muk slave 
read 
elf elf slave 
luz slave ...
Application Data mining 
read 
rw 
luz 
repl 
repl 
write 
read 
rw 
muk 
repl 
read 
去重、计数代价⾼高 
elf elf slave 
luz slave ...
Application Data mining 
read 
rw 
luz 
repl 
repl 
write 
read 
rw 
muk 
repl 
read 
去重、计数代价⾼高 
引⼊入 Redis 
elf elf slave ...
Application 
Memcached 
Data mining 
read 
rw 
luz 
repl 
repl 
write 
read 
rw 
muk 
repl 
read 
Search elf elf slave 
lu...
- 架构变迁 
- ⼏几个问题 
- ⼀一些挑战
Failover 
Application 
master slave 
Application 
slave master
Failover 
- 早期通过 hostname 访问数据库,切换后需要重启应⽤用 
- skinbark => leaflock
Failover 
- 早期通过 hostname 访问数据库,切换后需要重启应⽤用 
- skinbark => leaflock 
- 后来改为 hosts alias,切换时更新 hosts,不需要重启应⽤用 
- luz_m(on sk...
Failover 
- 早期通过 hostname 访问数据库,切换后需要重启应⽤用 
- skinbark => leaflock 
- 后来改为 hosts alias,切换时更新 hosts,不需要重启应⽤用 
- luz_m(on sk...
分库分表 
Application 
Middleware 
luz elf
分库分表 
- sqlstore Python 客户端库,数据库访问中间层,屏蔽分库细节
分库分表 
- sqlstore Python 客户端库,数据库访问中间层,屏蔽分库细节 
- 分库、分表前预发布新路由信息,重启应⽤用
分库分表 
- sqlstore Python 客户端库,数据库访问中间层,屏蔽分库细节 
- 分库、分表前预发布新路由信息,重启应⽤用 
- 应⽤用变多之后重启所有的应⽤用很困难
分库分表 
- sqlstore Python 客户端库,数据库访问中间层,屏蔽分库细节 
- 分库、分表前预发布新路由信息,重启应⽤用 
- 应⽤用变多之后重启所有的应⽤用很困难 
- 基于配置推送系统,亚秒级更新进程内的路由信息 
- 基于...
定位性能问题 
db db
定位性能问题 
- 从 Web ⼊入⼜⼝口处给每个查询增加注释,标明来源
定位性能问题 
- 从 Web ⼊入⼜⼝口处给每个查询增加注释,标明来源 
- 基于 tcpdump + dpark 从旁路分析流量,从多个纬度分析查询
定位性能问题 
- 从 Web ⼊入⼜⼝口处给每个查询增加注释,标明来源 
- 基于 tcpdump + dpark 从旁路分析流量,从多个纬度分析查询 
- 外⽹网 IP 
- ⼊入⼜⼝口 URL 
- normalized SQL 
- 时...
应对突发的性能问题 
旁路收集 
实时反馈分析修正
应对突发的性能问题 
- 给客户端推送临时的封禁规则,封禁有性能问题的查询
应对突发的性能问题 
- 给客户端推送临时的封禁规则,封禁有性能问题的查询 
- 优化索引,或改写查询、重构应⽤用
追溯问题和审计 
400 
300 
200 
100 
0 
00:00 01:00 02:00 03:00 04:00 05:00 06:00 07:00
追溯问题和审计 
- tcpdump 旁路收集并保留历史数据
追溯问题和审计 
- tcpdump 旁路收集并保留历史数据 
- 离线分析数据,追溯问题
追溯问题和审计 
- tcpdump 旁路收集并保留历史数据 
- 离线分析数据,追溯问题 
- 敏感数据访问审计
数据备份和恢复 
- 逻辑备份,恢复很慢 
- 物理备份⾄至 MooseFS 
- 多机房在时间上交错备份 
- PITR(即时恢复)使⽤用 MooseFS snapshot + binlog
监控与报警 
Graphite + StatsD
- 架构变迁 
- ⼏几个问题 
- ⼀一些挑战
连接压力 
- 使⽤用长连接获得更好的性能 
- 每实例 3000 - 5000 连接 
- 基于 proxy 的外部连接池
QoS 
- ⼤大事务 
- 极慢查询 
- CPU 密集型查询 
- 资源隔离
人才的延续
理想的 DBA 
- 扎实的系统管理能⼒力
理想的 DBA 
- 扎实的系统管理能⼒力 
- 掌控 MySQL / Redis / MongoDB / 以及其他 
任何所需系统的能⼒力
理想的 DBA 
- 扎实的系统管理能⼒力 
- 掌控 MySQL / Redis / MongoDB / 以及其他 
任何所需系统的能⼒力 
- 深⼊入研究特定问题的能⼒力
理想的 DBA 
- 扎实的系统管理能⼒力 
- 掌控 MySQL / Redis / MongoDB / 以及其他 
任何所需系统的能⼒力 
- 深⼊入研究特定问题的能⼒力 
- ⾃自动化⼀一切能⾃自动化的东西的能⼒力
理想的 DBA 
- 扎实的系统管理能⼒力 
- 掌控 MySQL / Redis / MongoDB / 以及其他 
任何所需系统的能⼒力 
- 深⼊入研究特定问题的能⼒力 
- ⾃自动化⼀一切能⾃自动化的东西的能⼒力 
- 持续的⾃自驱动⼒...
理想的 DBA 
- 扎实的系统管理能⼒力 
- 掌控 MySQL / Redis / MongoDB / 以及其他 
任何所需系统的能⼒力 
- 深⼊入研究特定问题的能⼒力 
- ⾃自动化⼀一切能⾃自动化的东西的能⼒力 
- 持续的⾃自驱动⼒...
Q & A 
http://www.douban.com/people/recordus/ 
xupeng@douban.com 
Twitter: @xupeng 
微博:@yunxupeng
谢谢!
Prochain SlideShare
Chargement dans…5
×

豆瓣数据架构实践

8 062 vues

Publié le

2014-04-19 在 ACOUG 活动上的分享,介绍了豆瓣数据架构的演进过程,以及过程中遇到的问题、目前正在面临的挑战等。

Publié dans : Technologie

豆瓣数据架构实践

  1. 1. 豆瓣数据架构实践 员(yùn)旭(xù)鹏(péng) 2014-04-19
  2. 2. 关于豆瓣 - 2005 年 3 ⽉月上线 - 以发现和分享为核⼼心的社区 - 读书、电影、⾳音乐、同城、⼩小组、阅读、 FM、东西等等
  3. 3. - 架构变迁 - ⼏几个问题 - ⼀一些挑战
  4. 4. 一些数据 - 2TB+ 结构化数据 (MySQL) - 3TB+ ⾮非结构化⽂文本数据 (DoubanDB) - 100TB+ 图⽚片、⾳音乐等 (DoubanFS) - 约 30 个集群 (MySQL) - 约 30 对 Redis - 约 20 台服务器,⼀一半线上、⼀一半离线 (MySQL) - 2 个 DBA (2013.08 前 0.5 个)
  5. 5. Application rw luz
  6. 6. Application rw luz 读压⼒力⾼高
  7. 7. Application rw luz 读压⼒力⾼高 引⼊入 Memcached
  8. 8. Application luz Memcached rw
  9. 9. Application luz Memcached rw 数据挖掘和推荐反馈
  10. 10. Application luz Memcached rw 数据挖掘和推荐反馈 新的 slave ⽤用于离线读
  11. 11. Application luz Memcached luz slave Data mining rw repl read write
  12. 12. Application luz Memcached luz slave Data mining rw repl read write 读写压⼒力⾼高,离线写对线上带来冲击
  13. 13. 拆库,使⽤用独⽴立的库⽤用于数据挖掘反馈 Application luz Memcached luz slave Data mining rw repl read write 读写压⼒力⾼高,离线写对线上带来冲击
  14. 14. Application elf elf slave Data mining rw luz luz slave read repl repl write read Memcached
  15. 15. Application elf elf slave Data mining MyISAM 全⽂文搜索出现性能问题 rw luz luz slave read repl repl write read Memcached
  16. 16. Application elf elf slave Data mining rw luz luz slave read repl repl write read Memcached 使⽤用独⽴立的搜索引擎 MyISAM 全⽂文搜索出现性能问题
  17. 17. Application Data mining read rw luz repl repl write elf elf slave read luz slave Memcached Search
  18. 18. Application Data mining read rw luz repl repl write read ⼤大⽂文本字段严重影响性能 elf elf slave luz slave Memcached Search
  19. 19. Application Data mining read rw luz repl repl write elf elf slave read ⼤大⽂文本字段严重影响性能 开发 BeansDB,拆分⽂文本字段 luz slave Memcached Search
  20. 20. Application Data mining read rw luz repl repl write elf elf slave read luz slave Memcached Search BeansDB
  21. 21. Application Data mining read rw luz repl repl write elf elf slave 读压⼒力增长快 luz slave read Memcached Search BeansDB
  22. 22. Application Data mining read rw luz repl repl write read 读压⼒力增长快 读写分离 elf elf slave luz slave Memcached Search BeansDB
  23. 23. Application Data mining read rw luz repl repl write read read elf elf slave luz slave Memcached Search BeansDB
  24. 24. Application Data mining read rw luz repl repl write read 读写分离开发成本⾼高 read elf elf slave luz slave Memcached Search BeansDB
  25. 25. Application Data mining read rw luz repl repl write elf elf slave read 读写分离开发成本⾼高 read 停⽤用读写分离,继续拆库 luz slave Memcached Search BeansDB
  26. 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. 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. 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. 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
  30. 30. - 架构变迁 - ⼏几个问题 - ⼀一些挑战
  31. 31. Failover Application master slave Application slave master
  32. 32. Failover - 早期通过 hostname 访问数据库,切换后需要重启应⽤用 - skinbark => leaflock
  33. 33. Failover - 早期通过 hostname 访问数据库,切换后需要重启应⽤用 - skinbark => leaflock - 后来改为 hosts alias,切换时更新 hosts,不需要重启应⽤用 - luz_m(on skinbark) => luz_m(on leaflock)
  34. 34. Failover - 早期通过 hostname 访问数据库,切换后需要重启应⽤用 - skinbark => leaflock - 后来改为 hosts alias,切换时更新 hosts,不需要重启应⽤用 - luz_m(on skinbark) => luz_m(on leaflock) - 服务器变多,更新 hosts 过程太慢,开发配置推送系统 - 基于 zookeeper
  35. 35. 分库分表 Application Middleware luz elf
  36. 36. 分库分表 - sqlstore Python 客户端库,数据库访问中间层,屏蔽分库细节
  37. 37. 分库分表 - sqlstore Python 客户端库,数据库访问中间层,屏蔽分库细节 - 分库、分表前预发布新路由信息,重启应⽤用
  38. 38. 分库分表 - sqlstore Python 客户端库,数据库访问中间层,屏蔽分库细节 - 分库、分表前预发布新路由信息,重启应⽤用 - 应⽤用变多之后重启所有的应⽤用很困难
  39. 39. 分库分表 - sqlstore Python 客户端库,数据库访问中间层,屏蔽分库细节 - 分库、分表前预发布新路由信息,重启应⽤用 - 应⽤用变多之后重启所有的应⽤用很困难 - 基于配置推送系统,亚秒级更新进程内的路由信息 - 基于 zookeeper + inotify
  40. 40. 定位性能问题 db db
  41. 41. 定位性能问题 - 从 Web ⼊入⼜⼝口处给每个查询增加注释,标明来源
  42. 42. 定位性能问题 - 从 Web ⼊入⼜⼝口处给每个查询增加注释,标明来源 - 基于 tcpdump + dpark 从旁路分析流量,从多个纬度分析查询
  43. 43. 定位性能问题 - 从 Web ⼊入⼜⼝口处给每个查询增加注释,标明来源 - 基于 tcpdump + dpark 从旁路分析流量,从多个纬度分析查询 - 外⽹网 IP - ⼊入⼜⼝口 URL - normalized SQL - 时间 - …
  44. 44. 应对突发的性能问题 旁路收集 实时反馈分析修正
  45. 45. 应对突发的性能问题 - 给客户端推送临时的封禁规则,封禁有性能问题的查询
  46. 46. 应对突发的性能问题 - 给客户端推送临时的封禁规则,封禁有性能问题的查询 - 优化索引,或改写查询、重构应⽤用
  47. 47. 追溯问题和审计 400 300 200 100 0 00:00 01:00 02:00 03:00 04:00 05:00 06:00 07:00
  48. 48. 追溯问题和审计 - tcpdump 旁路收集并保留历史数据
  49. 49. 追溯问题和审计 - tcpdump 旁路收集并保留历史数据 - 离线分析数据,追溯问题
  50. 50. 追溯问题和审计 - tcpdump 旁路收集并保留历史数据 - 离线分析数据,追溯问题 - 敏感数据访问审计
  51. 51. 数据备份和恢复 - 逻辑备份,恢复很慢 - 物理备份⾄至 MooseFS - 多机房在时间上交错备份 - PITR(即时恢复)使⽤用 MooseFS snapshot + binlog
  52. 52. 监控与报警 Graphite + StatsD
  53. 53. - 架构变迁 - ⼏几个问题 - ⼀一些挑战
  54. 54. 连接压力 - 使⽤用长连接获得更好的性能 - 每实例 3000 - 5000 连接 - 基于 proxy 的外部连接池
  55. 55. QoS - ⼤大事务 - 极慢查询 - CPU 密集型查询 - 资源隔离
  56. 56. 人才的延续
  57. 57. 理想的 DBA - 扎实的系统管理能⼒力
  58. 58. 理想的 DBA - 扎实的系统管理能⼒力 - 掌控 MySQL / Redis / MongoDB / 以及其他 任何所需系统的能⼒力
  59. 59. 理想的 DBA - 扎实的系统管理能⼒力 - 掌控 MySQL / Redis / MongoDB / 以及其他 任何所需系统的能⼒力 - 深⼊入研究特定问题的能⼒力
  60. 60. 理想的 DBA - 扎实的系统管理能⼒力 - 掌控 MySQL / Redis / MongoDB / 以及其他 任何所需系统的能⼒力 - 深⼊入研究特定问题的能⼒力 - ⾃自动化⼀一切能⾃自动化的东西的能⼒力
  61. 61. 理想的 DBA - 扎实的系统管理能⼒力 - 掌控 MySQL / Redis / MongoDB / 以及其他 任何所需系统的能⼒力 - 深⼊入研究特定问题的能⼒力 - ⾃自动化⼀一切能⾃自动化的东西的能⼒力 - 持续的⾃自驱动⼒力
  62. 62. 理想的 DBA - 扎实的系统管理能⼒力 - 掌控 MySQL / Redis / MongoDB / 以及其他 任何所需系统的能⼒力 - 深⼊入研究特定问题的能⼒力 - ⾃自动化⼀一切能⾃自动化的东西的能⼒力 - 持续的⾃自驱动⼒力 Don’t Be Afraid!
  63. 63. Q & A http://www.douban.com/people/recordus/ xupeng@douban.com Twitter: @xupeng 微博:@yunxupeng
  64. 64. 谢谢!

×