一、WikiPedia(维基百科)
WikiPedia是非盈利网站,因此尽可能地使用免费的软件和廉价的服务器。截止到2012年,这个只有区区数百台服务器和十余个技术人员开发、维护的网站,成为流量全球排名第6的大型网站,可见其架构、性能优化有许多值得我们学习的地方。
1、WikiPedia的数据量
  • 峰值每秒钟3万个 HTTP 请求
  • 每秒钟 3Gbit 流量, 近乎375MB
  • 350 台 PC 服务器

2、WikiPedia的主要架构

 
3、WikiPedia的性能优化策略
1)前端
① 网站前端服务包括DNS服务、CDN服务、反向代理服务、静态资源服务等。对WikiPedia而言,80%以上的用户请求可以通过前端服务返回,请求不会到达应用服务器,这就大大减轻了应用服务器和存储端的压力。
② CDN服务对于Wikipedia性能优化居功至伟。因为用户查询的词条大部分集中在比重很小的热点词条上,将这些词条内容页面缓存在CDN服务器上,而CDN服务器又部署在离用户浏览器最近的地方,用户请求直接从CDN返回,响应速度非常快,这些请求甚至根本不会到达Wikipedia数据中心的Squid反向代理服务器,服务器压力减小,节省的资源可以更快地处理其他未被CDN缓存的请求。
③ Wikipedia前端架构的核心是反向代理服务器Squid集群,大约部署数十台服务器。请求通过LVS负载均衡地分发到每台Squid服务器,热点词条被缓存在这里,大量请求可直接返回响应,请求无需发送到Apache 服务器,减轻应用负载压力。Squid 缓存不能命中的请求再通过LVS发送到Apache应用服务器集群,如果有词条信息更新,应用服务器使用Invalidation Notification 服务通知Squid缓存失效,重新访问应用服务器更新词条。
2)服务端
后端优化最主要的手段是使用缓存,将热点数据缓存在分布式缓存系统的内存中,加速应用服务器的数据读操作速度,减轻存储和数据库服务器的负载。
Wikipedia的缓存使用策略如下:
① 热点特别集中的数据直接缓存到应用服务器的本地内存中,因为要占用应用服务器的内存且每台服务器都需要重复缓存这些数据,因此这些数据量很小,但是读取频率极高。
② 缓存数据的内容尽量是应用服务器可以直接使用的格式,比如HTML格式,以减少应用服务器从缓存中获取数据后解析构造数据的代价。
③ 使用缓存服务器存储 session对象。
④ 相比数据库,Memcached的持久化连接非常廉价,如有需要就创建一个Memcached连接。
3)MySQL数据库优化
① 使用较大的服务器内存。在Wikipedia应用场景中,增加内存比增加其他资源更能改善MySQL性能。
② 使用RAID0磁盘阵列以加速磁盘访问,RAID0虽然加速磁盘访问,但是却降低了数据库的持久可靠性,数据的可靠性问题可以通过MySQL主从复制、数据异步备份等手段来解决。
③ 将数据库事务一致性设置在较低水平,加快宕机恢复速度。
④ 如果Master数据库宕机,立即将应用切换到Slave数据库,同时关闭数据写服务,这意味着关闭词条编辑功能(通过约束业务获得技术方案选择余地)。
 
二、Facebook
1、Facebook的数据量
  • 每月的页面浏览量:570000000000 (5700亿)
  • 照片数量超过其他图片网站的总和(包括诸如Flickr等网站)
  • 每个月有超过30亿张照片上传
  • 每秒可以处理120万张照片,这还不包括CDN处理的照片
  • 每月处理超过25亿条内容 (状态更新,评论等)
  • 服务器超过30,000台(此数据为2009年的数据)

2、Facebook的主要架构

Facebook使用LAMP(Linux、Apache、MySQL、PHP)作为技术构架,为了配合其他大量的组件和服务,Facebook对已有的方法做了必要的改变、拓展和修改。比如:

  • Facebook依然使用PHP,但已重建新的编译器,以满足在其Web服务器上加载本地代码,从而提升性能;
  • Facebook使用Linux系统,但为了自身目的,也已做了必要的优化,尤其是在网络吞吐量方面;
  • Facebook使用MySQL,也对其做优化;
  • 还有定制的系统,比如:
                Haystack — 高度可扩展的对象存储,用来处理Facebook的庞大的图片;
                Scribe — Facebook的日志系统。
 
三、Google App Engine
Google App Engine是一款PaaS服务,帮助用户快速搭建web应用,并且无需再运维花费大量的时间和精力。
主要功能有:支持Web应用,提供持久存储空间,对应用自动扩展和负载均衡,支持Email、用户认证和缓存等多种服务等等。
GAE架构分为如上图所示的三个部分:前端,Datastore和服务群,主要架构如下:
 
四、Amazon AWS
1、平台以及状态
  • Linux、Oracle、C++、Perl、Mason、Java、Jboss、Servlets
  • 超过5500万活动顾客帐号
  • 世界范围内超过100万活动零售合作商
  • 构建一个页面所需访问的服务介于100至150个之间
2、Amazon AWS的主要架构
Amazon云计算服务AWS主要包括以下模块:
 
五、Twitter
1、Twitter的数据量
  • twitter每月有180万独立访问用户数,并且75%的流量来自twitter.com以外的网站。
  • 每天通过API有30亿次请求
  • 每天平均产生5500次tweet,37%活跃用户为手机用户,约60%的tweet来自第三方的应用。
2、系统架构
平台:Ruby on Rails 、Erlang 、MySQL 、Mongrel 、Munin 、Nagios 、Google Analytics 、AWStats 、Memcached
 
 
六、优酷
1、优酷的数据量
  • 日均独立访问人数(uv)达到了8900万(2010年数据)
  • 日均访问量(pv)达到了17亿,凭借这一数据成为google榜单中国内视频网站排名最高的厂商(2010年数据)
  • 1000多台服务器(2007年数据)
2、优酷的主要架构
 
 

2017-6-6&6-8/大型网站架构总结的更多相关文章

  1. Drupal与大型网站架构(译)- Large-Scale Web Site Infrastructure and Drupal

    Drupal与大型网站架构(译)- Large-Scale Web Site Infrastructure and Drupal Linuxjournal 网站经典文章翻译,原文地址: Large-S ...

  2. 《大型网站系统与JAVA中间件实践》读书笔记-大型网站架构演进

    大型网站架构演进 大型网站是一种很常见的分布式系统,除了海量数据和高并发的访问量,本身业务和系统也复杂. 大型网站的架构演进 我们现在常用的大型网站都是从小网站一步一步发展起来的,这个过程中会 有一些 ...

  3. Java程序员的职业发展道路 附:大型网站 -- 架构技能图谱(Java版)

    职业发展道路基本有3条: 第一条路线(技术专精): 初级Java开发---中级--高级---项目主管--Java项目经理---网站架构师----资深专家 第二条路线(技术转产品):初级Java开发-- ...

  4. 各大型网站架构分析收集-原网址http://blog.csdn.net/lovingprince/article/details/3379710

    1. PlentyOfFish 网站架构学习http://www.dbanotes.net/arch/plentyoffish_arch.html 采取 Windows 技术路线的 Web 2.0 站 ...

  5. 大型网站架构之JAVA中间件

    中间件就是在大型网站中,帮助各子模块间实现互相访问,消息共享或统一访问等功能的软件产品.常见的有: 远程服务框架中间件:主要解决各子模块之间互相访问的问题. 消息队列中间件:主要解决各子模之间消息共享 ...

  6. 大型网站架构演进(6)使用NoSQL和搜索引擎

    随着网站业务越来越复杂,对数据存储和检索的需求也越来越复杂,网站需要采用一些非关系型数据库技术(即NoSQL)和非数据库查询技术如搜索引擎.NoSQL数据库一般使用MongoDb,搜索引擎一般使用El ...

  7. 大型网站架构演化(八)——使用NoSQL和搜索引擎

    随着网站业务越来越复杂,对数据存储和检索的需求也越来越复杂,网站需要采用一些非关系数据库技术如NoSQL和非数据库查询技术如搜索引擎,如图. NoSQL和搜索引擎都是源自互联网的技术手段,对可伸缩的分 ...

  8. 大型网站架构演化(六)——使用反向代理和CDN加速网站响应

    随着网站业务不断发展,用户规模越来越大,由于中国复杂的网络环境,不同地区的用户访问网站时,速度差别也极大.有研究表明,网站访问延迟和用户流失率正相关,网站访问越慢,用户越容易失去耐心而离开.为了提供更 ...

  9. 大型网站技术架构(四)--核心架构要素 开启mac上印象笔记的代码块 大型网站技术架构(三)--架构模式 JDK8 stream toMap() java.lang.IllegalStateException: Duplicate key异常解决(key重复)

    大型网站技术架构(四)--核心架构要素   作者:13GitHub:https://github.com/ZHENFENG13版权声明:本文为原创文章,未经允许不得转载.此篇已收录至<大型网站技 ...

随机推荐

  1. pgAdmin的数据恢复

    DOC 本地添加server 1.设置备份.恢复的exe路径.一般在pgAdmin的安装路径下可以找到 2.恢复restore,备份backup

  2. java泛型的作用和好处

    转载于:https://blog.csdn.net/u012760183/article/details/52092692 之前参加面试的时候遇到面试官问泛型的作用,只是说了大概自己的理解, 在此转载 ...

  3. java.lang.OutOfMemoryError:GC overhead limit exceeded

    在调测程序时报java.lang.OutOfMemoryError:GC overhead limit exceeded 错误 错误原因:在用程序进行数据切割时报了该错误.由于在本地执行数据切割测试的 ...

  4. 17秋 SDN课程 第二次上机作业

    1.控制器floodlight所示可视化图形拓扑的截图,及主机拓扑连通性检测截图 拓扑 连通性 2.利用字符界面下发流表,使得'h1'和'h2' ping 不通 流表截图 连通性 3.利用字符界面下发 ...

  5. Wordpress搭建

    Install Environment apt install apache2 php mysql-server apt install php-mysql php-fpm Config mysql ...

  6. 中国地区免费注册bitcointalk论坛教程

    bitcointalk论坛是著名的老牌比特币论坛,中本聪当年也在这里和各路大神探讨.但现在国家的高墙禁止网民访问. 你可能会用一个国外的代理工具来看贴,看贴确实可以,但是如果想注册,注册完后就会发现帐 ...

  7. 使用python读取yaml文件

    在做APP测试时,通常需要把参数存到一个字典变量中,这时可以将参数写入yaml文件中,再读取出来. 新建yaml文件(android_caps.yaml),文件内容为: platformName: A ...

  8. aar的使用(module或者library)

    引入: 1. android studio正常的module引用aar文件需要配置如下: ① 在module的build.gradle的android节点下 repositories { flatDi ...

  9. 学习笔记29—Linux基础

    一.简单命令: 1.进入文件夹heyi目录:cd ./heyi 2.查看该目录下内容:ls 二.linux压缩和解压缩命令大全 tar命令 解包:tar zxvf FileName.tar 打包:ta ...

  10. cocos2dx lua 绑定之一:自动绑定自定义类中的函数

    cococs2dx 3.13.1 + vs2013 + win10 1.首先定义C++类Student 在cocos2d-x\cocos文件夹下新建一个user_define的文件夹放置两个文件. 注 ...