霜天部落 | 专注PHP研发,研究LAMP高性能架构部署与优化

分布式数据库在豆瓣的应用

豆瓣 刘洪清分享。

Linux + Nginx + mysql + python 平台。

每天有1000万小组话题,1600万组照片,200G结构化数据,800G文本,10T图片,2T日志,6T音乐,2T各种备份数据。

针对这些数据,我们需要考虑。

1、可靠性。(持久性,一致性)

2、可用性。

3、伸缩性。

4、性能。

5、成本。

将这些数据再进行分类,可以分为结构化数据(关系,广播等),小文件(图片,文章,音乐等),大文件(备份,日志等)。

一、结构化数据。

(一)、特点。

1、结构固定。

2、可按条件查询

3、记录小而且多。

4、数据之间有关联。

5、可以批量查询。

(二)管理。采用mysql管理。

1、结构化存储。

2、多索引。

3、支持事务等。

(三)mysql实践一。

1、使用InnoDB引擎。

2、使用基本查询,外部join。(将join放在逻辑层去处理,这样大大提高了mysql查询的效率。)

3、通过memcache降低服务器端压力。

4、分库,分表(垂直分表)。

5、分离文本字段。

(四)mysql实践二

1、Master(RW)? ?à ?Master(备份)? à? Slave(容错)

2、双SCSI硬盘做Raid0

3、半自动Fail Over

4、多实例混合部署。

二、小文件处理。

(一)、特点

1、访问方式:get set delete

2、高可用。Fail-Over

3、大空间:10K-5M 增长快。

4、用户数据,很重要。

5、基本无修改,一致性要求低。

6、随机访问,高并发,大量IO操作。

(二)单机存储。

1、reiserfs。

2、本地,远程,WEBDAV,NFS

3、目录结构。

4、用rsync备份即可。

(三)多级存储。

1、MogileFS

2、瓶颈是 Tracker(Mysql)

3、数据迁移比较慢。

(四)BeansDB

1、Hash存储,不需要中心节点。

2、数据库存储,TokyoCabimet.

3、每个区间对应多个节点。

4、复制:客户端写多次。

5、依次读取,直到有数据。

6、Hash Tree ,快速同步。

7、扩容方法:

A、拷贝数据。

B、调整配置。

C、同步数据。

8、性能

目前5台服务器,4T*3 数据,1.5T*3 文件。 可以用1年多。

三、大文件处理。

(一)、特点

1、文件大,数量少,比较重要。

2、线上服务产生,在操作时,不能影响线上使用。

3、一次生成,无需修改。

4、定时或者偶尔访问。

(二)比较少时,单机管理,定时打包,rsync备份。

(三)比较多时。

1、类FS系统

2、MooseFS

(四)MooseFS

1、C实现,轻量,简洁,高效,稳定。

2、FOSE客户端,操作方便

3、按文件/目录拷贝数据。

4、web监视界面。

5、单Master,多MasterLog,手动操作。

(五)日志数据分析

1、导入到数据仓库。InfoBright,KDB+

2、Hadoop

针对以上三类文件,再总结下。

200G结构化数据 — Mysql管理。

800G文件,10T图片,6T音乐? — BeansDB管理。

2T日志,2T备份? —- InfoBright? MFS

补充:

1、? 针对文件管理,涉及到全文检索,豆瓣采用了“虾片”。

2、? 其每个DB有3个服务器,一个是线上服务,一个做数据备份,一个做容错。

3、? 其线上服务器,40G内存,主要用于做缓存处理。

4、? Master1(读和写)+Master2(Master1的备份) + slave
,这样的结构决定了,Master1或者Master2将要承受很大的压力。如何缓解这个压力,有一个很重要的功课,就是缓存。豆瓣这个master1有
40G内存,主要就用于缓存处理。至于具体都缓存什么数据,这在具体项目中会有不同。

作者: scofield 原文:分布式数据库在豆瓣的应用-刘洪清分享-笔记整理