代码改变世界

Fotolog 的 Solaris/MySQL 架构

2011-09-14 09:24  周国选  阅读(453)  评论(0编辑  收藏  举报

Fotolog 是一个以图片为主的 SNS 网站,让 VPSee 好奇的是用 Solaris 的 Web 2.0 站点不多,看看 Fotolog 有没有什么新东西。

数据

数据和图片来源(2007):Fotolog: Scaling the World’s Largest Photo Blogging Community

超过1100万用户
超过24亿条评论
每个月超过35亿 PV 和 2000万独立访问,Alexa Top 20
总共有超过2亿张的图片,每天还有超过50万张照片上传
20%用户每天在 Fotolog 停留 24分钟
32台 MySQL 服务器和一个由30台 memcached 服务器组成的集群

技术平台

Solaris 10
MySQL
Apache
Java / Hibernate
PHP
Memcached
3PAR
IBRIX
CDN

MySQL

32台 MySQL 服务器被分成4个集群:User, GB (guest book), PH (photos), FF (friends and favorites lists)。每个集群又被分成一个 shard 集,并由一个应用服务器集做前端。每个 shard 集包括若干个 MySQL 服务器,一个只写的 Master-Master 配几个只读的 Slaves,应用服务器把读请求发给 Slaves,把写请求发给 Master。MySQL 只存储图像的 metadata,没人想要把图像存到数据库里吧?什么是 metadata?metadata 是 “data about other data”,如一张照片的 metadata 就是一些包括:作者,年份,照片说明,摄影设备等信息就是这张照片的 metadata。

GB 集群的架构:

Fotolog 架构


 

 

 

 

 

 

 

 

 

 

 

 

 

GB 扩展后的架构:

Fotolog 架构

 

 

 

 

 

 

 

 

 

 

 

 

Fotolog 开始用的是 MyISAM 引擎,表结构:

CREATE TABLE `guestbook_v3` (
`identifier` bigint(20) unsigned NOT NULL auto_increment,
`user_name` varchar(16) NOT NULL default ”,
`photo_identifier` bigint(20) unsigned NOT NULL default ’0′,
`posted` datetime NOT NULL default ’0000-00-00 00:00:00′,

PRIMARY KEY (`identifier`),
KEY `guestbook_photo_id_posted_idx` (`photo_identifier`,`posted`)
) ENGINE=MyISAM

执行数据库查询的时候,需要6次磁盘 IO 从不同块读取数据:

Fotolog 架构

 

 

 

 

 

 

 

 

 

 

 

 

后来改成 InnoDB,表结构改成:

CREATE TABLE `guestbook_v4` (
`identifier` int(9) unsigned NOT NULL auto_increment,
`user_name` varchar(16) NOT NULL default ”,
`photo_identifier` int(9) unsigned NOT NULL default ’0′,
`posted` timestamp NOT NULL default ’0000-00-00 00:00:00′,

PRIMARY KEY (`photo_identifier`,`posted`,`identifier`),
KEY `identifier` (`identifier`)
) ENGINE=InnoDB 1 row in set (7.64 sec)

改成 InnoDB 后,只需要2次磁盘 IO 读取,大大减少了磁盘操作:

Fotolog 架构

 

 

 

 

 

 

 

 

 

 

 

 

InnoDB 是以 primary key 来存放数据到磁盘上的,而 MyISAM 是以插入数据的顺序来存放数据的,这样 InnoDB 有个潜在的好处就是如果以 primary key 来查询数据的话,磁盘 IO 操作就可以一次读取需要的数据(因为它们都在一起),不必像 MyISAM 那样从磁盘的不同位置执行多个 IO 操作来得到数据。简单的说就是 InnoDB 在查询的时候减少了磁盘 IO 操作的次数,从而获得了潜在的性能提升。Fotolog 正是利用了 InnoDB 的 这个优点。

3PAR 和 IBRIX

在DELL、EMC、日立、HP、IBM、NetApp、Sun等公司把持的存储市场,还能冒出个 3PAR 出来,显示了 3PAR 的特别和技术特色。3PAR 产品的主要技术是:分布式多态集群、虚拟化、自动精简配置、精简备份以及高性能 RAID 5,其中最突出的优势是自动精简配置。3PAR 在 Internet/Web 2.0 行业有几个重量级客户:myspace.com, ask.com, fotolog.com, shopzilla.com 等。

Fotolog CTO 解释了为什么用 3PAR:

With 3PAR Thin Provisioning, you set it up and walk away. As actual data is written, the system tells us when it needs more capacity—which is added simply and non-disruptively. With 3PAR, we’ve cut our monthly storage administration time from 40 hours to 30 minutes.

-Nathan Boeger
Director of Network Operations, Fotolog

IBRIX 是一家做文件服务器集群的存储公司,最近刚被 HP 收购,重量级客户有:AOL, Fotolog, RealNetworks, Disney, DreamWorks, 等。

Memcached Cluster

Fotolog 用50台 memcached 服务器连成一个集群,总共 cache 加起来差不多 150GB,能应付每个月40亿左右的 PV。使用 memcached 后,高峰时期网站 load 时间从 10秒降到2秒。Memcached 已经是动态网站的标配,LAMP 的 M 现在应该包括 MySQL 和 Memcached 了。