MocoSpace架构介绍阅读笔记
2010-05-19 00:26
357 查看
最近对大规模系统的架构比较感兴趣,有很多东西想看,这次正好看到在HighScalability
上读到《MocoSpace Architecture - 3 Billion Mobile Page Views a
Month
》,觉得讲的挺实在的,摘录一些内容放在这里。
先介绍下MocoSpace
,这是一个针对移动设备的SNS,拥有1千2百万用户,10万并发用户量,一个月30亿PV,6百万独立访问者,上传1千2百万照片。
一、系统平台
整个站点运行于CentOS及RedHat之上,应用服务器是Resin,数据库为PostgreSQL;缓存方面使用了Memcached
作为分布式缓存,Squid进行静态内容缓存;前台主要使用JQuery;大量使用消息队列进行异步处理,此处采用运行于RedHat集群中的
ActiveMQ;监控方面使用了Nagios和Zabbix。
硬件方面,Web层主要是5x Dell 1950(2x dual core, 16G RAM),5x Dell 6950/R905(4x
dual core, 32G RAM);数据库层2x Sun Fire X4600 M2 Server(8x quad core, 256G
RAM),2x Dell 6950(4x dual core, 64G RAM)。负载均衡器采用F5 BigIP硬件实现,EMC
SAN充当数据库的存储介质。
除此之外,MocoSpace还使用了Amazon的S3和EC2,前者存储用户的照片及视频,后者用于照片处理(使用云存储和云计算平台还是有不少好处
的,可惜国内要大规模使用还真需要考虑考虑,也许哪天Amazon就访问不了了。。。);Akamai
CDN每天有2TB的量,2亿5千万个请求。
二、系统架构
数据库根据用户的Key进行Shard,对大表进行拆分(eBay:Partition
Everything);离线环境下以批次为单位进行一致性校验,实现最终一致性。(eBay:Embrace
Inconsistency。从现在的趋势来看,设计系统时光知道ACID是远远不够滴,还要了解BASE和CAP,学校里可不会教这些。:-)
)
在缓存的应用方面,使用多层缓存(应用服务器本地缓存、Memcached分布式缓存),更新数据时同时更新Memcached和数据库,在更新
Memcached的同时通过消息队列发送invaild本地缓存的指令到各台应用服务器上。
采用专门的服务器在内存里构建及遍历social
graph;在部署新版本时通过负载均衡器保持全站可用性;服务器的配置和部署尽量自动化(eBay:Automate
Everything,别在靠系统管理员人肉部署了)。
以2周作为一个发布周期,发布周期越长,系统的复杂性就越高。
三、经验总结
1、
充分利用服务器资源。(不要担心服务器的Load过高,只要保持在可接受的范围即可。文章中说他们在一台应用服务器上跑了5个实例。)
2、找到每层的瓶颈所在。
3、严谨地剖析数据库。(找到系统中的Top Query,并对它进行跟踪处理。)
4、设计可降级的系统。(这个也是在很多地方都提到的一点)
5、只在必要时才使用同步通信。(鼓励使用异步通信,eBay:Asynchrony Everywhere)
6、在设计时就要考虑到监控的需求,而不是事后再补监控。(还要尽可能图形化,Twitter的Dashboard做的就很强大)
7、首选无状态,其次是粘性会话,尽量不要使用分布式Session。
8、注意Java的GC。(Full GC会Stop the whole world,一定要对GC进行优化,前几天BlueDavy写了个PPT专门讲了GC的问题
。)
9、当站点发展到一定规模时,要考虑垃圾信息和黑客攻击。
10、删除数据时采用软删除而非立即删除。(更新比删除效率更高,而且也许有误操作,可以恢复)
11、任何东西都要有冗余。(eBay:Remember Everything Fails)
P.S.
虽然是讲MocoSpace,但很多设计原则都是通用的,我在很多地方都标注了eBay架构原则里的一些东西,有兴趣的TX可以去搜一下eBay的
一些演讲PPT,会很有收获的。
上读到《MocoSpace Architecture - 3 Billion Mobile Page Views a
Month
》,觉得讲的挺实在的,摘录一些内容放在这里。
先介绍下MocoSpace
,这是一个针对移动设备的SNS,拥有1千2百万用户,10万并发用户量,一个月30亿PV,6百万独立访问者,上传1千2百万照片。
一、系统平台
整个站点运行于CentOS及RedHat之上,应用服务器是Resin,数据库为PostgreSQL;缓存方面使用了Memcached
作为分布式缓存,Squid进行静态内容缓存;前台主要使用JQuery;大量使用消息队列进行异步处理,此处采用运行于RedHat集群中的
ActiveMQ;监控方面使用了Nagios和Zabbix。
硬件方面,Web层主要是5x Dell 1950(2x dual core, 16G RAM),5x Dell 6950/R905(4x
dual core, 32G RAM);数据库层2x Sun Fire X4600 M2 Server(8x quad core, 256G
RAM),2x Dell 6950(4x dual core, 64G RAM)。负载均衡器采用F5 BigIP硬件实现,EMC
SAN充当数据库的存储介质。
除此之外,MocoSpace还使用了Amazon的S3和EC2,前者存储用户的照片及视频,后者用于照片处理(使用云存储和云计算平台还是有不少好处
的,可惜国内要大规模使用还真需要考虑考虑,也许哪天Amazon就访问不了了。。。);Akamai
CDN每天有2TB的量,2亿5千万个请求。
二、系统架构
数据库根据用户的Key进行Shard,对大表进行拆分(eBay:Partition
Everything);离线环境下以批次为单位进行一致性校验,实现最终一致性。(eBay:Embrace
Inconsistency。从现在的趋势来看,设计系统时光知道ACID是远远不够滴,还要了解BASE和CAP,学校里可不会教这些。:-)
)
在缓存的应用方面,使用多层缓存(应用服务器本地缓存、Memcached分布式缓存),更新数据时同时更新Memcached和数据库,在更新
Memcached的同时通过消息队列发送invaild本地缓存的指令到各台应用服务器上。
采用专门的服务器在内存里构建及遍历social
graph;在部署新版本时通过负载均衡器保持全站可用性;服务器的配置和部署尽量自动化(eBay:Automate
Everything,别在靠系统管理员人肉部署了)。
以2周作为一个发布周期,发布周期越长,系统的复杂性就越高。
三、经验总结
1、
充分利用服务器资源。(不要担心服务器的Load过高,只要保持在可接受的范围即可。文章中说他们在一台应用服务器上跑了5个实例。)
2、找到每层的瓶颈所在。
3、严谨地剖析数据库。(找到系统中的Top Query,并对它进行跟踪处理。)
4、设计可降级的系统。(这个也是在很多地方都提到的一点)
5、只在必要时才使用同步通信。(鼓励使用异步通信,eBay:Asynchrony Everywhere)
6、在设计时就要考虑到监控的需求,而不是事后再补监控。(还要尽可能图形化,Twitter的Dashboard做的就很强大)
7、首选无状态,其次是粘性会话,尽量不要使用分布式Session。
8、注意Java的GC。(Full GC会Stop the whole world,一定要对GC进行优化,前几天BlueDavy写了个PPT专门讲了GC的问题
。)
9、当站点发展到一定规模时,要考虑垃圾信息和黑客攻击。
10、删除数据时采用软删除而非立即删除。(更新比删除效率更高,而且也许有误操作,可以恢复)
11、任何东西都要有冗余。(eBay:Remember Everything Fails)
P.S.
虽然是讲MocoSpace,但很多设计原则都是通用的,我在很多地方都标注了eBay架构原则里的一些东西,有兴趣的TX可以去搜一下eBay的
一些演讲PPT,会很有收获的。
相关文章推荐
- 大型站点技术架构PDF阅读笔记(一):
- 【Spring学习笔记-MVC-1.0】Spring MVC架构介绍
- 阅读徐宜生《Android群英传》的笔记——第3章 Android控件架构与自定义控件详解(3.1-3.5)
- 阅读笔记- 了解ASP.NET底层架构 之二
- SOA 面向服务架构 阅读笔记(三)
- 《大型网站技术架构》阅读笔记01
- 架构之美阅读笔记六
- 大型网站技术架构:核心原理与案例分析阅读笔记之四
- 大型网站技术架构:核心原理与案例分析阅读笔记之五
- 阅读笔记 > 大型网站架构技术一览
- 大型网站技术架构:核心原理与案例分析阅读笔记三
- 大型网站技术架构:核心原理与案例分析阅读笔记六
- [置顶] HDFS入门笔记------架构以及应用介绍
- 大型网站技术架构PDF阅读笔记(一):
- UNIX Network阅读笔记 第三章socket介绍
- 【ARM学习笔记】六、计算机架构及Flash Memory介绍
- 大型网站技术架构:核心原理与案例分析阅读笔记一
- 大型网站技术架构-阅读笔记1
- 阅读笔记- 了解ASP.NET底层架构 之一