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

news/2024/5/9 6:41:30/文章来源:https://blog.csdn.net/weixin_30347335/article/details/95254527

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

引言

    近段时间以来,通过接触有关海量数据处理和搜索引擎的诸多技术,常常见识到不少精妙绝伦的架构图。除了每每感叹于每幅图表面上的绘制的精细之外,更为架构图背后所隐藏的设计思想所叹服。个人这两天一直在搜集各大型网站的架构设计图,一为了一饱眼福,领略各类大型网站架构设计的精彩之外,二来也可供闲时反复琢磨体会,何乐而不为呢?特此,总结整理了诸如国外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,欢迎关注从上百幅架构图中学得半点大型网站建设经验(下)。有任何问题或错误,欢迎不吝指正。谢谢大家。本文完。

转载于:https://www.cnblogs.com/v-July-v/archive/2011/10/01/2214117.html

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

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

相关文章

cefsharp 加载网页慢_网站访问慢的排查方案(最详细)

说实话,比起网站打不开,网站访问慢更让人抓狂。因为造成网站访问慢的因素太多了,一般用户根本无从下手!任他千头万绪的问题,从以下三个方面入手,也能轻松破解访问慢的大难题 :响应时间、执行时间…

无法从该网站添加应用_教大家如何在iOS13的iPhone苹果手机和iPad的主屏幕上添加网站...

是否想将网站直​​接放在iPhone或iPad主屏幕上,以实现超级便捷的访问?如果您有一个经常访问的网站(当然像osxdaily.com),则可能需要将该网站添加到iPhone或iPad的主屏幕中。这会将所选网站的图标放置在设备主屏幕上,然后可以像其他任何应用…

[asp.net]网站数据安全之验证码

数据安全是网站实现必不可少的其中一环,其中最基本的就有防止暴力破解这一类的机器人攻击。 机器人攻击,顾名思义,单纯地由程序算法计算出用户名对应的密码,达到破解账户的功能。 机器人攻击的原理如下: 网页与服务器是…

定制 LAMP 网站服务平台

安装环境:系统:CentOS release 6.2 (Final)Mysql: mysql-5.1.62.tar.gz http:httpd-2.2.25.tar.gzphp: php-5.4.19.tar.gz前期准备:先将需要的软件包拖到虚拟服务器root上,如下图[rootlocalhost ~]# unzip LAMP.zip[rootlocalhost ~]# yum …

做网站用什么语言_给网站做外链现在还有用吗?

网站外链现在还有用吗?如今已经是众说纷纭的一个话题。但我想说的是这和搜索引擎发展的三个重要阶段有着紧密的联系,所以用处还是有的,但有多少呢?请往下仔细了解。网站外链有用吗作为一名SEO从业者,给网站做外链是一件…

SharePoint【表单认证方式】-- 更改现有Sharepoint网站的认证方式,让其支持FBA:01.前期准备...

之前公司开发的Sharepoint 网站使用的是Classic Mode Authentication方式(基于Windows AD方式),近期的客户需求需要使这个已投入使用的Sharepoint应用不但能支持原有的AD认证方式,并且还要能支持Form方式。 于是问题出来了,一般我们在新…

html关于圣诞节主题的网页,玩转圣诞创意!10个以圣诞节为主题的优秀网站设计...

设计达人网 :还有9天就到圣诞,如果你还没有idea来做这个节日专题,那么今天收集的这10个圣诞节主题网站就不要放过咯,有大名鼎鼎的追踪圣诞老人创意,也有帮你自由创造圣诞老人的绘画网站,全都是技术与创意兼…

利用 squid 反向代理提高网站性能(转)

本文在介绍 squid 反向代理的工作原理的基础上,指出反向代理技术在提高网站访问速度,增强网站可用性、安全性方面有很好的用途。作者在具体的实验环境下,利用 DNS 轮询和 Squid 反向代理技术,实现了网站的负载均衡,从而…

换服务器要重新百度站长验证站点吗6,六个步骤搞定更换网站服务器

原标题:六个步骤搞定更换网站服务器最近又不少站长朋友发帖咨询说要更换网站的服务器了,但是怕误操作导致网站被K,因为已经有不少的站长朋友来反馈,说自己因为换了IP导致网站被K了。那么今天云雀运维就来跟大家谈一下,…

lamp部署php工程,Centos7运维(2)-第一次在Linux下部署PHP项目,采用LAMP网站架构(Linux+Apache+MySQL+PHP)...

LAMP指的Linux(操作系统)、Apache(HTTP 服务器),MySQL(数据库软件) 和PHP(有时也是指Perl或Python) 的缩写,一般用来搭建web 服务器。(1)Mysql 5.61.下载mysql-server文件[rootCentos~]# wget http://dev.mysql.com/get/mysql-community-release-el7-5.n…

伪静态隐藏域名后缀_网站建设三部曲:域名程序+主机

怎么建设网站,企业外包,个人研究,做为一个建站老手,我给大家说一下建站的三部曲:域名、程序、主机。如果说有第四部和第五六步的话,那么就是备案、友链等。一、关于域名兄弟啊,注册域名还是尽早…

hishop网站迁移后出现DataProtectionConfigurationProvider错误(转)

配置错误说明: 在处理向该请求提供服务所需的配置文件时出错。请检查下面的特定错误详细信息并适当地修改配置文件。分析器错误信息: 未能使用提供程序“DataProtectionConfigurationProvider”进行解密。提供程序返回错误信息为: 该项不适于在指定状态下使用。 (异常来自 HRES…

【项目总结】扯一扯电商网站前端css的整体架构设计(1)

最近半忙不忙的写了一个外包网站,网站主要功能是艺术品竞拍和艺术衍生品的销售。工程已经完成了80%左右,现在前后端代码量已经50W行左右,我主要负责的是前端设计和前端布局。下面就先放一个网站的设计图吧,因为涉及到甲方的“商业…

tomcat找不到servlet这个类_办公中常用的模板和工具找不到?这个网站就能帮到你...

相信大家都知道我们平时办公的时候,需要去找一些办公类的资源,但是去哪里找免费的呢?只需要用到一个网站就够了,各种模板和抠图功能都有,总有一款适合你!一、PPT资源1、PPT模板首先我们登陆办公资源网这个网…

化工网站开发_石油化工行业网站定制 | 石油化工产品销售网站制作

在网站建设中,如果想要运营好网站,那么一定是离不开对网站的访问信息进行收集、记录并归类,还要在统计这些数据的基础上进行深度分析,来找到网站出现的一些问题,从而进行整改。今天我们来具体说说网站建设中&#xff0…

Python进阶学习网站

2019独角兽企业重金招聘Python工程师标准>>> www.scipy.org 科学 数学 工程 http://www.pygame.org/lofi.html http://www.pygame.org/news.html pygame(库)是一个免费和开源的Python编程语言库,用于制作多媒体应…

反复刷新增加访问量_基于爬虫刷新某网站访问量!我说怎么上千万呢!

前言:前一段时间看到有博友写了爬虫去刷新博客访问量一篇文章,当时还觉得蛮有意思的,就保存了一下,但是当我昨天准备复现的时候居然发现文章404了。所以本篇文章仅供学习交流,严禁用于商业用途当我在写文章的同时&…

php 禁止抓取,服务器反爬虫攻略:Apache/Nginx/PHP禁止某些User Agent抓取网站

一、Apache①、通过修改 .htaccess 文件修改网站目录下的.htaccess,添加如下代码即可(2 种代码任选):可用代码 (1):RewriteEngineOnRewriteCond %{HTTP_USER_AGENT} (^$|FeedDemon|Indy Library|Alexa Toolbar|AskTbFXTV|AhrefsBot|CrawlDadd…

java天气获取网站_java扒取天气网站的数据

1:由于天气apk接口不稳定所以经常获取不到信息。于是就动手写一个扒取天气网站上的数据然后做成json,apk直接调用服务器上扒取的数据增加稳定性。2:项目主要是用servlet然后正则表达式来提取网站信息。3:我觉得比较难得地方就是如何写正确的正则来提取出…

使用Varnish为web网站加速

使用Varnish为网站加速varnish概述 Varnish是一款高性能的开源HTTP加速器,挪威最大的在线报纸Verdens Gang (http://www.vg.no) 使用3台Varnish代替了原来的12台squid,性能居然比以前更好。Varnish 的作者Poul-Henning Kamp是FreeBSD的内核开发者之一&am…