AirJD 焦点
AirJD

没有录音文件
00:00/00:00
加收藏

豆瓣数据架构实践 by 员旭鹏

发布者 style
发布于 1435044489072  浏览 12431 关键词 架构, DevOps, 数据库 
分享到

第1页

豆瓣数据架构实践

员(yùn)旭(xù)鹏(péng) 2014-04-19



第2页

关于豆瓣

- 2005 年 3 ⽉月上线 - 以发现和分享为核⼼心的社区 - 读书、电影、⾳音乐、同城、⼩小组、阅读、

FM、东西等等



第3页

- 架构变迁 - ⼏几个问题 - ⼀一些挑战



第4页

一些数据

- 2TB+ 结构化数据 (MySQL) - 3TB+ ⾮非结构化⽂文本数据 (DoubanDB) - 100TB+ 图⽚片、⾳音乐等 (DoubanFS) - 约 30 个集群 (MySQL) - 约 30 对 Redis - 约 20 台服务器,⼀一半线上、⼀一半离线 (MySQL) - 2 个 DBA (2013.08 前 0.5 个)



第5页

Application

rw

luz



第6页

读压⼒力⾼高



Application

rw

luz



第7页

读压⼒力⾼高



Application

rw

luz



引⼊入 Memcached



第8页

Memcached



Application

rw

luz



第9页

数据挖掘和推荐反馈

Memcached



Application

rw

luz



第10页

数据挖掘和推荐反馈

Memcached



Application

rw

luz



新的 slave ⽤用于离线读



第11页

Memcached



Application

rw



read



repl

luz luz slave



Data mining



write



第12页

Memcached



Application

rw



read



repl

luz luz slave



Data mining



读写压⼒力⾼高,离线写对线上带来冲击



write



第13页

拆库,使⽤用独⽴立的库⽤用于数据挖掘反馈



Memcached



Application

rw



read



repl

luz luz slave



Data mining



读写压⼒力⾼高,离线写对线上带来冲击



write



第14页

Memcached



Application

rw



read



repl



luz elf



elf slave



repl

luz slave



write read



Data mining



第15页

MyISAM 全⽂文搜索出现性能问题



Memcached



Application

rw



read



repl



luz elf



elf slave



repl

luz slave



write read



Data mining



第16页

MyISAM 全⽂文搜索出现性能问题



Memcached



Application

rw



read



repl



luz elf



elf slave



Data mining



repl

luz slave



write read

使⽤用独⽴立的搜索引擎



第17页

Memcached Search



Application

rw



read



repl



luz elf



elf slave



repl

luz slave



write read



Data mining



第18页

⼤大⽂文本字段严重影响性能

Memcached Search



Application

rw



read



repl



luz elf



elf slave



repl

luz slave



write read



Data mining



第19页

⼤大⽂文本字段严重影响性能

Memcached Search



Application

rw



read



repl



luz elf



elf slave



Data mining



repl

luz slave



write read

开发 BeansDB,拆分⽂文本字段



第20页

Memcached Search

BeansDB



Application

rw



read



repl



luz elf



elf slave



repl

luz slave



write read



Data mining



第21页

Memcached Search

BeansDB

读压⼒力增长快



Application

rw



read



repl



luz elf



elf slave



repl

luz slave



write read



Data mining



第22页

Memcached Search

BeansDB

读压⼒力增长快



Application

rw



read



repl



luz elf



elf slave



repl

luz slave



write read



Data mining

读写分离



第23页

Memcached Search

BeansDB



Application

rw



Data mining

read



repl



luz elf



elf slave



read



repl write



luz slave



read



第24页

读写分离开发成本⾼高



Memcached Search

BeansDB



read



Application

rw



read



repl



luz elf



elf slave



repl

luz slave



write read



Data mining



第25页

读写分离开发成本⾼高



Memcached Search

BeansDB



read



Application

rw



read



repl



luz elf



elf slave



Data mining



repl

luz slave



write

read

停⽤用读写分离,继续拆库



第26页

Memcached Search

BeansDB



rw

muk



Application

rw



read



repl



luz elf



elf slave



repl repl

muk slave luz slave



write read

read



Data mining



第27页

去重、计数代价⾼高



Memcached Search



rw

muk



Application

rw



read



repl



luz elf



elf slave



BeansDB



repl repl

muk slave luz slave



write read



read



Data mining



第28页

去重、计数代价⾼高



Memcached Search



rw

muk



Application

rw



read



repl



luz elf



elf slave



BeansDB



repl repl

muk slave luz slave



write read



read



Data mining

引⼊入 Redis



第29页

Memcached Search

BeansDB Redis



rw

muk



Application

rw



read



repl



luz elf



elf slave



repl repl

muk slave luz slave



write read

read



Data mining



第30页

- 架构变迁 - ⼏几个问题 - ⼀一些挑战



第31页

Application



Failover



Application



master



slave



slave master



第32页

Failover

- 早期通过 hostname 访问数据库,切换后需要重启应⽤用

- skinbark => leaflock



第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



第35页

分库分表

Application Middleware

luz elf



第36页

分库分表

- sqlstore Python 客户端库,数据库访问中间层,屏蔽分库细节



第37页

分库分表

- sqlstore Python 客户端库,数据库访问中间层,屏蔽分库细节 - 分库、分表前预发布新路由信息,重启应⽤用



第38页

分库分表

- sqlstore Python 客户端库,数据库访问中间层,屏蔽分库细节 - 分库、分表前预发布新路由信息,重启应⽤用 - 应⽤用变多之后重启所有的应⽤用很困难



第39页

分库分表

- sqlstore Python 客户端库,数据库访问中间层,屏蔽分库细节 - 分库、分表前预发布新路由信息,重启应⽤用 - 应⽤用变多之后重启所有的应⽤用很困难 - 基于配置推送系统,亚秒级更新进程内的路由信息

- 基于 zookeeper + inotify



第40页

定位性能问题

db db



第41页

定位性能问题

- 从 Web ⼊入⼜⼝口处给每个查询增加注释,标明来源



第42页

定位性能问题

- 从 Web ⼊入⼜⼝口处给每个查询增加注释,标明来源 - 基于 tcpdump + dpark 从旁路分析流量,从多个纬度分析查询



第43页

定位性能问题

- 从 Web ⼊入⼜⼝口处给每个查询增加注释,标明来源

- 基于 tcpdump + dpark 从旁路分析流量,从多个纬度分析查询

- 外⽹网 IP - ⼊入⼜⼝口 URL - normalized SQL - 时间 -…



第44页

应对突发的性能问题

旁路收集



实时反馈



分析



修正



第45页

应对突发的性能问题

- 给客户端推送临时的封禁规则,封禁有性能问题的查询



第46页

应对突发的性能问题

- 给客户端推送临时的封禁规则,封禁有性能问题的查询 - 优化索引,或改写查询、重构应⽤用



第47页

追溯问题和审计











0 00:00



01:00



02:00



03:00



04:00



05:00



06:00



07:00



第48页

追溯问题和审计

- tcpdump 旁路收集并保留历史数据



第49页

追溯问题和审计

- tcpdump 旁路收集并保留历史数据 - 离线分析数据,追溯问题



第50页

追溯问题和审计

- tcpdump 旁路收集并保留历史数据 - 离线分析数据,追溯问题 - 敏感数据访问审计



第51页

数据备份和恢复

- 逻辑备份,恢复很慢 - 物理备份⾄至 MooseFS - 多机房在时间上交错备份 - PITR(即时恢复)使⽤用 MooseFS snapshot + binlog



第52页

监控与报警

Graphite + StatsD



第53页

- 架构变迁 - ⼏几个问题 - ⼀一些挑战



第54页

连接压力

- 使⽤用长连接获得更好的性能 - 每实例 3000 - 5000 连接 - 基于 proxy 的外部连接池



第55页

- ⼤大事务 - 极慢查询 - CPU 密集型查询 - 资源隔离



QoS



第56页

人才的延续



第57页

理想的 DBA

- 扎实的系统管理能⼒力



第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



第64页

谢谢!



支持文件格式:*.pdf
上传最后阶段需要进行在线转换,可能需要1~2分钟,请耐心等待。