从上百幅架构图中学得半点大型网站建设经验(上)

news/2024/5/20 4:45:27/文章来源:https://blog.csdn.net/iteye_13254/article/details/82162604

从上百幅架构图中学大型网站建设经验(上)

引言

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

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

  • 1、WikiPedia 技术架构

WikiPedia 技术架构图Copy @Mark Bergsma

  1. 来自wikipedia的数据:峰值每秒钟3万个 HTTP 请求 每秒钟 3Gbit 流量, 近乎375MB 350 台 PC 服务器。
  2. GeoDNSA :40-line patch for BIND to add geographical filters support to the existent views in BIND", 把用户带到最近的服务器。GeoDNS 在 WikiPedia 架构中担当重任当然是由 WikiPedia 的内容性质决定的--面向各个国家,各个地域。
  3. 负载均衡: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和服务群。

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

  3. 整个服务群包括很多服务供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的主从复制解决了数据库的读写分离,并很好的提升了读的性能,其原来图如下:

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

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

    1. 写入无法扩展
    2. 写入无法缓存
    3. 复制延时
    4. 锁表率上升
    5. 表变大,缓存率下降

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

  2. MySQL垂直分区

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

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

  3. MySQL水平分片(Sharding)

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

    如何来确定某个用户所在的shard呢,可以建一张用户和shard对应的数据表,每次请求先从这张表找用户的shard id,再从对应shard中查询相关数据,如下图所示: 但是,优酷是如何解决跨shard的查询呢,这个是个难点,据介绍优酷是尽量不跨shard查询,实在不行通过多维分片索引、分布式搜索引擎,下策是分布式数据库查询(这个非常麻烦而且耗性能)。

  4. 缓存策略

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

    1. 避免内存拷贝,避免内存锁
    2. 如接到老大哥通知要把某个视频撤下来,如果在缓存里是比较麻烦的

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

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

附注:1、此段优酷网的技术架构整理于此处:http://www.itivy.com/ivy/archive/2011/8/13/the-architecture-of-youku.html;2、同时推荐一个非常好的站点:http://www.dbanotes.net/)。从上百幅架构图中学得半点大型网站建设经验(上),完。

后记

此篇文章终于写完了,从昨日有整理此文的动机后,到今日上午找电脑上网而不得,再到此刻在网吧完成此文。着实也体味了一把什么叫做为技术狂热的感觉。大型网站架构是一个实战性很强的东西,而你我或许现在暂时还只是一个在外看热闹的门外汉而已。不过,没关系,小鱼小虾照样能畅游汪汪大洋,更何况日后亦能成长为大鱼大鲨。

ok,欢迎关注从上百幅架构图中学得半点大型网站建设经验(下)。有任何问题或错误,欢迎不吝指正。谢谢大家。本文完。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_750521.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

电商网站商品详情页缓存服务框架以及Hrstrix核心

小型电商网站商品详情页架构 会做一个静态化页面,直接返回给用户,不涉及业务,所以返回时间特别快,如图所示。 这坏处在于只是使用一些小型的网站,几百几千到几万的商品数据。如果一些大型网站,商品数量几亿…

php测试网站并发量和某个网页访问时间工具---ab.exe

基本用法进入到cmd控制台 ab.exe-n 访问的总次数 -c 有多少人同一时间访问(并发量) 访问页面的 url 例如: 第一行的意思:进入在 apache服务器下面的 bin目录 然后 执行 ab.exe -n 10000(访问总次数) -c 100(有多少人同时访问&a…

一个网站自动化测试程序的设计与实现

CSDN博客不再经常更新,更多优质文章请来 粉丝联盟网 FansUnion.cn! (FansUnion) 代码 下载地址:http://download.csdn.net/detail/fansunion/5018357(免积分) 代码亮点:可读性很好,注释详尽 背景 工作中,在维护一…

假如我来架构12306网站

笔者连日来也萌发了一个想法,假如让我来设计12306网站,我作为总架构师,该当如何考虑呢?自己虽然经历过众多的大项目的全生命周期跟踪管理,对于软件工程应该是有一定的研究,但像如此巨型项目,应该…

万维网向公众开放20周年:全球首个网站重新上线

互联网改变了我们生活,学习和工作的方方面面,尤其是现在蓬勃发展的移动互联网更是将我们与互联网拉近了距离。昨天是万维网(World Wide Web)面向公众开放20周年的日子,是一个值得纪念的日子,故转载此文,以示纪念。 在万…

网站的发布和iis部署

第一步:在确保生成的网站没有问题的情况下,发布网站。右击-发布网站 第二步:保存路径(去掉允许更新此预编译站点) 第三步:生成成功,把生成的文件发布到IIS上。IIS是Internet Information Servic…

IIS网站部署常见问题汇总(乱码,服务器不可用)

在IIS上部署网站,运行时却是乱码一堆:先来看一张图片 最终得知问题出在网站属性设置上:(右击部署网站的属性) ASP.NET 选项:.NET 版本设置 部署网站时要不开发时用的.NET 版本保持一致,或者…

前端不错的网站

网址: http://www.whycss.com/http://f2er.club/转载于:https://www.cnblogs.com/yzenet/p/5820473.html

一个网站自动化测试程序的设计与实现

CSDN博客不再经常更新,更多优质文章请来 粉丝联盟网 FansUnion.cn! (FansUnion) 代码 下载地址:http://download.csdn.net/detail/fansunion/5018357(免积分) 代码亮点:可读性很好,注释详尽 背景 工作中,在维护一…

外链引入css有哪些方式_如何对网站进行seo 网站上线之后SEO会有哪些工作内容?...

企业网站的SEO优化外包给第三方是一种可取的方式,也可以自己建立一个搜索引擎优化团队。两种方法各有利弊,可以根据自己的情况选择。那么,如何建立一个可靠的seo团队呢?答案在于每一个细节岗位的人才技能,合适的人才的…

wordpress 可以添加woocommerce的分类到导航吗_分类目录 vs 标签:WordPress网站SEO之内容分类...

很多人都有一个疑问:分类目录 VS 标签,哪个对网站SEO更好?可能大部分人都不太清楚WordPress的分类目录和标签到底是什么,它们的区别之处在哪里。了解这些知识有助于各位站长正确使用分类目录和标签。本文摘自苦心孤译博客&#xf…

从零开始利用vue-cli搭建简单音乐网站(三)

1、利用router-link在组件之间传递数据 如上图,MainPage.vue中主要有8个推荐曲目数据,主要实现方式是建立好主页面模板,然后用v-for循环获取返回的music对象,然后分别绑定曲目,代码如下: ul作为承载8个曲目…

电商网站参考

1. 新都.云商汇 http://dijingvip.165183.cn/BusinessList.aspx?fromsinglemessage 2. 拼团商城 拼多多 https://www.pinduoduo.com/index.html?utm_sourcebaidubz&utm_mediumBrandZ&utm_term&utm_campaignsearch&utm_contentlogolink 3.微信小商城 古拉优选…

linux 部署.net网站后其它电脑无法访问_教程为知笔记私有部署,畅享所有 VIP 功能...

今天来玩玩为知笔记私有部署 docker 镜像,将为知笔记服务端部署在自己的服务器或者电脑上,全方位掌握自己的笔记信息,直接获得公版账号所有的的 VIP 功能。只需要启用为知笔记服务端,就可以利用自带的为知笔记网页版,…

宝塔linux如何安装asp程序,宝塔linux面板可以搭建运行asp网站程序吗

宝塔linux面板可以搭建运行asp网站程序吗?宝塔linux面板怎么支持asp?下面由宝塔教程栏目为大家详细介绍!首先登录到宝塔 Linux 面板 >> 软件管理 >> 运行环境中查看,发现 Linux 面板的运行环境中可以安装nginx、Apach…

mysql报错注入_网站SQL注入渗透测试手法介绍

国庆即将到来,前一期讲到获取网站信息判断所属环境以及各个端口的用处和弱口令密码利用方法,这期仍有很多客户找到我们想要了解针对于SQL注入攻击的测试方法,这一期我们来讲解下注入的攻击分类和使用手法,让客户明白漏洞是如何产生的,会给网站…

阿里云网站域名申请及备案

1. 2. 注册域名 转载于:https://www.cnblogs.com/liangfc/p/9469028.html

为什么打不开_电脑为什么打不开指定的网站?什么是DNS解析我要如何设置DNS

每天都浏览的一个网站突然间打不开了,明明网络没有问题,打开其它的网站都是正常的,为什么就突然打不开了呢?电脑为什么打不开指定的网站?什么是DNS解析我要如何设置DNS这时候我们要了解一下什么是DNS?DNS也…

Win2003下实现Web虚拟网站

Win2003下实现Web虚拟网站一、IP地址法 一般情况下,一块网卡只设置了一个IP地址。如果我们为这块网卡绑定多个IP地址,每个IP地址对应一个Web站点,那么同样可以实现“一机多站”的目的。 假定[url]www.ghq.com[/url]、study.ghq.com 和 …

ASP.NET网站国际化策略

1 问题提出 现在很多网站项目开发要求同时支持多国语言,所以在用户界面及程序的设计和开发中需采取国际化策略,以达到代码改动量小、网站部署便利,用户群广泛的目的。 2 解决策略 .NET Framework 为开发全球通用的应用程序…