知名互联网公司网站架构图

引言

近段时间以来,通过接触有关海量数据处理和搜索引擎的诸多技术,常常见识到不少精妙绝伦的架构图。除了每每感叹于每幅图表面上的绘制的精细之外,更为架构图背后所隐藏的设计思想所叹服。个人这两天一直在搜集各大型网站的架构设计图,一为了一饱眼福,领略各类大型网站架构设计的精彩之外,二来也可供闲时反复琢磨体会,何乐而不为呢?特此,总结整理了诸如国外wikipedia,Facebook,Yahoo!,YouTube,MySpace,Twitter,国内如优酷网等大型网站的技术架构(本文重点分析优酷网的技术架构),以飨读者。

本文着重凸显每一幅图的精彩之处与其背后含义,而图的说明性文字则从简从略。ok,好好享受此番架构盛宴吧。当然,若有任何建议或问题,欢迎不吝指正。谢谢。

1、WikiPedia 技术架构

WikiPedia 技术架构图Copy @Mark Bergsma

来自wikipedia的数据:峰值每秒钟3万个 HTTP 请求 每秒钟 3Gbit 流量, 近乎375MB

350 台 PC 服务器。

GeoDNSA :40-line patch for BIND to add geographical filters support to the existent views in BIND", 把用户带到最近的服务器。GeoDNS 在 WikiPedia 架构中担当重任当然是由 WikiPedia 的内容性质决定的--面向各个国家,各个地域。

负载均衡:LVS,请看下图:

2、Facebook 架构

Facebook 搜索功能的架构示意图

细心的读者一定能发现,上副架构图之前出现在此文之中:从几幅架构图中偷得半点海里数据处理经验。本文与前文最大的不同是,前文只有几幅,此文系列将有上百幅架构图,任您尽情观赏。

3、Yahoo! Mail 架构

Yahoo! Mail 架构

Yahoo! Mail 架构部署了 Oracle RAC,用来存储 Mail 服务相关的 Meta 数据。

4、twitter技术架构

twitter的整体架构设计图

twitter平台大致由twitter.com、手机以及第三方应用构成,如下图所示(其中流量主要以手机和第三方为主要来源):

缓存在大型web项目中起到了举足轻重的作用,毕竟数据越靠近CPU存取速度越快。下图是twitter的缓存架构图:

关于缓存系统,还可以看看下幅图:

5、Google App Engine技术架构

GAE的架构图

简单而言,上述GAE的架构分为如图所示的三个部分:前端,Datastore和服务群。

前端包括4个模块:Front End,Static Files,App Server,App Master。

Datastore是基于BigTable技术的分布式数据库,虽然其也可以被理解成为一个服务,但是由于其是整个App Engine唯一存储持久化数据的地方,所以其是App Engine中一个非常核心的模块。其具体细节将在下篇和大家讨论。

整个服务群包括很多服务供App Server调用,比如Memcache,图形,用户,URL抓取和任务队列等。

6、Amazon技术架构

Amazon的Dynamo Key-Value存储架构图

可能有读者并不熟悉Amazon,它现在已经是全球商品品种最多的网上零售商和全球第2大互联网公司。而之前它仅仅是一个小小的网上书店。ok,下面,咱们来见识下它的架构。

Dynamo是亚马逊的key-value模式的存储平台,可用性和扩展性都很好,性能也不错:读写访问中99.9%的响应时间都在300ms内。按分布式系统常用的哈希算法切分数据,分放在不同的node上。Read操作时,也是根据key的哈希值寻找对应的node。Dynamo使用了 Consistent Hashing算法,node对应的不再是一个确定的hash值,而是一个hash值范围,key的hash值落在这个范围内,则顺时针沿ring找,碰到的第一个node即为所需。

Dynamo对Consistent Hashing算法的改进在于:它放在环上作为一个node的是一组机器(而不是memcached把一台机器作为node),这一组机器是通过同步机制保证数据一致的。

下图是分布式存储系统的示意图,读者可观摩之:

Amazon的云架构图如下:

Amazon的云架构图

7、优酷网的技术架构

从一开始,优酷网就自建了一套CMS来解决前端的页面显示,各个模块之间分离得比较恰当,前端可扩展性很好,UI的分离,让开发与维护变得十分简单和灵活,下图是优酷前端的模块调用关系:

这样,就根据module、method及params来确定调用相对独立的模块,显得非常简洁。下图是优酷的前端局部架构图:

优酷的数据库架构也是经历了许多波折,从一开始的单台MySQL服务器(Just Running)到简单的MySQL主从复制、SSD优化、垂直分库、水平sharding分库。

1.简单的MySQL主从复制。

MySQL的主从复制解决了数据库的读写分离,并很好的提升了读的性能,其原来图如下:

其主从复制的过程如下图所示:

但是,主从复制也带来其他一系列性能瓶颈问题:

写入无法扩展

写入无法缓存

复制延时

锁表率上升

表变大,缓存率下降

那问题产生总得解决的,这就产生下面的优化方案。

2. MySQL垂直分区

如果把业务切割得足够独立,那把不同业务的数据放到不同的数据库服务器将是一个不错的方案,而且万一其中一个业务崩溃了也不会影响其他业务的正常进行,并且也起到了负载分流的作用,大大提升了数据库的吞吐能力。经过垂直分区后的数据库架构图如下:

然而,尽管业务之间已经足够独立了,但是有些业务之间或多或少总会有点联系,如用户,基本上都会和每个业务相关联,况且这种分区方式,也不能解决单张表数据量暴涨的问题,因此为何不试试水平sharding呢?

3. MySQL水平分片(Sharding)

这是一个非常好的思路,将用户按一定规则(按id哈希)分组,并把该组用户的数据存储到一个数据库分片中,即一个sharding,这样随着用户数量的增加,只要简单地配置一台服务器即可,原理图如下:

如何来确定某个用户所在的shard呢,可以建一张用户和shard对应的数据表,每次请求先从这张表找用户的shard id,再从对应shard中查询相关数据,如下图所示:

是如何解决跨shard的查询呢,这个是个难点,据介绍优酷是尽量不跨shard查询,实在不行通过多维分片索引、分布式搜索引擎,下策是分布式数据库查询(这个非常麻烦而且耗性能)。

缓存策略

貌似大的系统都对“缓存”情有独钟,从http缓存到memcached内存数据缓存,但优酷表示没有用内存缓存,理由如下:

避免内存拷贝,避免内存锁

如接到老大哥通知要把某个视频撤下来,如果在缓存里是比较麻烦的

而且Squid 的 write() 用户进程空间有消耗,Lighttpd 1.5 的 AIO(异步I/O) 读取文件到用户内存导致效率也比较低下。

但为何我们访问优酷会如此流畅,与土豆相比优酷的视频加载速度略胜一筹?这个要归功于优酷建立的比较完善的内容分发网络(CDN),它通过多种方式保证分布在全国各地的用户进行就近访问——用户点击视频请求后,优酷网将根据用户所处地区位置,将离用户最近、服务状况最好的视频服务器地址传送给用户,从而保证用户可以得到快速的视频体验。这就是CDN带来的优势,就近访问。

原文地址:https://www.cnblogs.com/jpfss/p/9397245.html

时间: 2024-08-05 09:11:10

知名互联网公司网站架构图的相关文章

软件各种架构图2

Spring MVC 核心架构图 架构图对应的DispatcherServlet核心代码如下: //前端控制器分派方法 protected void doDispatch(HttpServletRequest request, HttpServletResponse response) throws Exception { HttpServletRequest processedRequest = request; HandlerExecutionChain mappedHandler = nu

十台服务器集群架构图

注释: 此架构图体现了动态网站的速度.稳定.冗余.安全等. 在速度方面,咱们做了nginx协助tomcat负载均衡,实现多用户访问同时处理,加快处理速度.在速度方面,咱们还做了tomcat和nginx的动静分离,众所周知tomcat专门处理jsp的动态界面,nginx在处理静态界面又是比较擅长,利用这个特点,将静态页面和图片专门由nginx server处理,动态页面则由tomcat服务器处理了,一个网页由多个服务器上的不同服务处理自己擅长的界面,速度自然而然就快很多了. 在安全方面,咱们做了n

最简单直观的分布式架构图

这张图第一眼看过去非常的空洞,但是我认为却是最理想化的分布式架构图.不管什么样的分布式系统,都是从这套系统上改造演变过去的.下面我就来解释一下这张图每个步骤的意义. 用户群访问某个网站,比如说www.baidu.com,我们先忽略DNS解析和CDN服务器的作用,直接请求服务器,穿过防火墙,通过负载均衡来分配用户的请求,负载可以提高整个架构的抗压和流量的负载能力,将用户请求平均分配到应用服务器,有效的解决了单点失效的问题,通过应用服务器要交互的是数据层,也就是我们所说的MySql或者Oracle,

离线数据分析流程及推荐系统架构图

1.离线数据分析流程 一个应用广泛的数据分析系统:"web日志数据挖掘" 1.1 需求分析 1.1.1 案例名称 "网站或APP点击流日志数据挖掘系统". 1.1.2 案例需求描述 "Web点击流日志"包含着网站运营很重要的信息,通过日志分析,我们可以知道网站的访问量,哪个网页访问人数最多,哪个网页最有价值,广告转化率.访客的来源信息,访客的终端信息等. 1.1.3 数据来源 本案例的数据主要由用户的点击行为记录 获取方式:在页面预埋一段js程序

iphone开发 IOS 组织架构图

转载自 :http://blog.csdn.net/mashi321323/article/details/18267719 登录|注册     mashi321323的专栏 目录视图 摘要视图 订阅 10月28日 大牛带你玩转Spark    微信开发学习路线高级篇上线    免费公开课平台正式上线啦    恭喜July新书上市 iphone开发 IOS 组织架构图 分类: iphone2014-01-14 17:20 1870人阅读 评论(0) 收藏 举报 iphone开发组织架构 目录(?

国内知名互联网公司的开源项目

国内知名互联网公司的开源项目 时间:2014-09-05 10:24:03  来源:  作者: 这里列出的开源内容由网络整理而来. 阿里 阿里的开源项目很多,这也跟@淘宝正明的开源态度密不可分.有很多重量级的项目,例如LVS.Tengine,或者很有实践价值的中间件,例如 MetaQ(分布式消息系统).dubbo(RPC框架).cobar(数据库中间件),或者是Java世界的工具,例如druid.fastjson.都说国内Java公司的技术架构大部分来自阿里系,我觉得一方面来自阿里员工,一方面也

程序员/架构师/CTO:如何画出一张美观的架构图

作为一名程序员或架构师,有时候我们需要画一张架构图去给同Team同事或其他组的同事或者给上级/老板进行汇报.我们都梦想画的架构图,很漂亮,让人一看就眼前一亮的感觉. 在这里我们介绍一种画图的方法论,来让架构图或流程图更加清晰,层次化.首先我们来看一个网站 (https://c4model.com/).该网站提出了一个被称之为C4模型的东西.什么是C4?Context(上下文).Container(容器).Component(组件).Code(代码).C4就是代表上述一系列分层的图表,可以用这些图

LoadRunner相关架构图

LoadRunner概览图: Lr架构图:

飞达资讯App总体介绍及关系架构图

飞达资讯App总体介绍: 下图为飞达资讯App的关系架构图: 该App关系架构图所需的图片云盘链接地址:http://pan.baidu.com/s/1gfHIe4b 提取密码:x1nr 该App的云盘下载地址:http://pan.baidu.com/s/1eS8WGXs 提取密码:5eqe 由于作者水平有限和时间仓促,该App可能存在一些疏漏和不当之处,敬请读者批评指正. 作者联系方式: 电话:15223328653,QQ:2099904576,邮箱:[email protected]