1、Facebook架构
大体层次划分,Facebook的架构可以从不同角度来换分层次。一种是:一边是PHP整的经典的LAMP stack;另外一个是非PHP整的各种service。
--Web 前端是由 PHP 写的。Facebook 的HipHop会把PHP转成C++并用g++编译,这样就可以为模板和Web逻贺业务层提供高的性能。
--业务逻辑以Service的形式存在,其使用Thrift。这些Service根据需求的不同由PHP,C++或Java实现(也可以用到了其它的一些语言……)
--持久化由MySQL, Memcached, Facebook的Cassandra, Hadoop的HBase完成。Memcached使用了MySQL的内存Cache。Facebook工程师承认他们的Cassandra使用正在减少,因为他们更喜欢HBase,因为它的更简单的一致性模型,以到其MapReduce能力。
Flickr.com是网上最受欢迎的照片共享网站之一,还记得那位给Windows Vista拍摄壁纸的Hamad Darwish吗?他就是将照片上传到Flickr,后而被微软看中成为Vista壁纸御用摄影师。
--Pair of ServerIron's做负载均衡
--Squid做html和照片的缓存
--Memcached做数据缓存
--尤其是mysql数据库采用master-slave和shards技术实现了mysql数据库的负载均衡,解决了数据库的瓶颈,达到了数据库横向扩展的目标。
这个貌似在国内是被和谐的,要fan qiang才能访问(不知到底何故)。看看他的架构:
--NetScaler用于负载均衡和静态内容缓存
--使用lighttpd作为Web服务器来提供视频服务
--CDN在多个地方备份内容,这样内容离用户更近的机会就会更高
--使用Google的BigTable,一个分布式数据存储、数据库分成shards,不同的用户指定到不同的shards、使用BigTable将图片备份到不同的数据中心,代码查看谁是最近的
这个我觉的最神奇了,一个人每天花2个小时,可以维护一个每天3000W PV的,而且是基于.NET的(呵呵,终于给我们.net程序员一个好榜样了)。简述他的架构:
--用Microsoft Windows操作系统作为服务器
--使用ASP.NET技术
--使用IIS作为Web容器
--用Akamai CDN来缓存网页
--用Foundry ServerIron 来做负载均衡
--sqlserver采用master-slave架构,两台负责read操作,master那台负责写操作
--所有的request数据都使用了gzip压缩
*(Wikipedia)是一个基于Wiki技术的全球性多语言百科全书协作计划,同时也是一部在网际网路上呈现的网路百科全书,其目标及宗旨是为全人类提供*的百科全书——用他们所选择的语言来书写而成的,是一个动态的、可*和的全球知识体。
--GeoDNS让用户能够访问离他地域最近的Web服务器
--用LVS实现负载均衡
--用Lighttpd做图片服务器
--使用MediaWiki软件
--大量缓存(Cache),Squid作为反向代理,Memcached做数据缓存
--用Mysql数据库集群
6、Google架构
Google的架构大概地整理一下:
--GFS,Google的强有力的面向大规模数据密集型应用的、可伸缩的分布式文件系统
--MapReduce,Google的分布式并行计算系统,GFS存储数据,而MapReduce则是以最快最可靠的方式处理数据。
--BigTable,Google基于GFS和MapReduce之上的用来存储结构化数据的解决方案,有了它,不仅可以存储结构化的数据,而且可以更好的管理和做出负载均衡决策。
7、优酷网架构
在国内,上不了YouTube,只能看看优酷了,说实在优酷在国内算是做的不错了,视频加载速度明显比土豆什么的要快,那就看看他的架构吧:
--自建的一个模块化的CMS系统,前端十分灵活
--mysql数据库从单台MySQL服务器(Just Running)到简单的MySQL主从复制、SSD优化、垂直分库、水平sharding分库,解决数据库服务器的灵活横向扩展。
--为了避免内存拷贝和内存锁,没有(很少)用内容缓存。
--最核心的是构建了比较完善的CDN网络,就近原则,让你看视频时从离你最近的服务器上获取视频信息,所以我们看优酷比土豆要快,原因就在这里。
8、Twitter架构
twitter,怎么说呢,说他简单么还真简单,但又是那么复杂,真是纠结。话说这140个字的鼻祖让国内的某某某非常风骚,算了不跑题了,说说他的架构吧:
--平台比较广泛:
-Ruby on Rails:web应用程序的框架
-Erlang:通用的面向并发的编程语言,开源项目地址:http://www.erlang.org/
-AWStats:实时日志分析系统:开源项目地址:http://awstats.sourceforge.net/
-Memcached:分布式内存缓存组建
-Starling:Ruby开发的轻量级消息队列
-Varnish:高性能开源HTTP加速器
-Kestrel:scala编写的消息中间件,开源项目地址:http://github.com/robey/kestrel
-Comet Server:Comet是一种ajax长连接技术,利用Comet可以实现服务器主动向web浏览器推送数据,从而避免客户端的轮询带来的性能损失。
-libmemcached:一个memcached客户端
-使用mysql数据库服务器
-Mongrel:Ruby的http服务器,专门应用于rails,开源项目地址:http://rubyforge.org/projects/mongrel/
-Munin:服务端监控程序,项目地址:http://munin-monitoring.org/
-Nagios:网络监控系统,项目地址:http://www.nagios.org/
--细化memcached,同时建立向量缓存Vector Cache、行缓存Row Cache、碎片缓存Fragmeng Cache、缓存池Page Cache
--给力的消息队列,用Ruby写的一个分布式队列 Starling
9、Yupoo网站架构
一个试图做国内最好的图片服务提供商,虽然和Flickr还有点差距,但也不错了,话说搞图片和视频的是很烧服务器和带宽的,在国内这么贵的带宽也挺不容易的,好了,一起看看他的架构吧:
--Squid,这个貌似做图片缓存挺好使的,而且还是分布式的,可以硬盘命中和内存命中,速度都还不错。
--MogileFS图片存储
--mysql分库设计,垂直分库,水平sharding,跨库关联查询
--透明的缓存设计
10、Amazon网站架构
这个Amazon从小书店开始现在成了全球商品品种最多的网上零售商和全球第2大互联网公司,貌似很风光嘛,那架构一定很犀利的,下面一起来看看:
--平台,Linux、oracle、C++、Perl、Mason、Java、Jboss、Servlets
--Dynamo Key-Value存储架构