豆瓣 刘洪清分享。
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内存,主要就用于缓存处理。至于具体都缓存什么数据,这在具体项目中会有不同。