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

news/2024/5/10 10:53:06/文章来源:https://blog.csdn.net/sjmnh1/article/details/35853417

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

引言

    近段时间以来,通过接触有关海量数据处理和搜索引擎的诸多技术,常常见识到不少精妙绝伦的架构图。除了每每感叹于每幅图表面上的绘制的精细之外,更为架构图背后所隐藏的设计思想所叹服。个人这两天一直在搜集各大型网站的架构设计图,一为了一饱眼福,领略各类大型网站架构设计的精彩之外,二来也可供闲时反复琢磨体会,何乐而不为呢?特此,总结整理了诸如国外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_806240.aspx

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

相关文章

构建高负载高性能大型网站的十个终极秘诀

对互联网有了解的人都有自己的想法,有人就把想法付诸实现,做个网站然后开始运营。其实从纯网站技术上来说,因为开源模式的发展,现在建一个小网站 已经很简单也很便宜。当访问量到达一定数量级的时候成本就开始飙升了,问…

it自学网站推荐

超详细的自学网站资源! w3cschool 2016-09-28 19:28活到才学到老,自学能力已经成为最重要的一种竞争力,特别是在IT行业,每个人都有自学的经历,我也不例外,这些是我在学习中、工作中收藏的网站资源。希望能帮…

Heroku 教程:使用 Heroku 快速搭建站点

简介 Heroku 是 Salesforce 旗下云服务商,提供方便便捷的各种云服务,如服务器,数据库,监控,计算等等。并且他提供了免费版本,这使得我们这些平时想搞一些小东西的人提供了莫大的便捷,虽然他有时…

c语言大学生自学网教学视频,6个质量最高的自学网站,悄悄的提成能力!

原标题:6个质量最高的自学网站,悄悄的提成能力!世界上没有蠢人,只有懒人。人生本来就是活到老,学到老,如果你不愿意接受新的知识,那么,你只能面临落后。自学很难,首先就要…

安居客检测到网页抓取_深圳seo网站优化快速吸引蜘蛛抓取的3种方法

最近SEOer也知道,百度下线了天级收录和周级收录,导致文章更新后收录没有以前那么快了,因此收到了太多的同行抱怨了,即便百度现在也上线了快速收录功能,但是这个效果也不是很明显,为此面对大部分苦恼的伙伴们…

自学网站大全(值得收藏)

自学,顾名思义就是自我学习。在这个信息爆炸的时代里,网络上有很多学习资源的。以下就是学习网站的介绍: 目录 综合类 中国大学MOOC(慕课)_国家精品课程在线学习平台 https://www.icourse163.org/ MOOC中国 - 慕课改变你,你改…

十分钟免费拥有永久网站

在人人都会上网的信息时代,拥有属于自己的网站,已经不是什么稀奇的事情了。Github Pages 就可以满足我们的需求了。它是 github 公司提供的免费的静态网站托管服务,用起来方便而且功能强大,不仅没有空间限制,还可以绑定…

怎么限制网页上传图片的尺寸_黑橙修图:有了这个网站,你再也不用担心你的图片超过限制大小了...

当我们在一些网站提交证件照或头像时,有时候会遇到图片大小超过网站限制的情况。比如前一阵就有朋友要我帮忙压缩一下证件照。要从xxxK压缩到xxk。其实压缩图片大小的方法有很多,有人可能会说:“ps里面,你xxxxxxxxx设置一下&#…

php复制统计源码整套_建站工具中百度统计代码的安装方法

以下是SEM培训班老师整理的在建站工具中百度统计代码的安装方法,仅供同学们参考学习。Discuz安装百度统计方法:首先在百度统计获取安装代码,然后登陆discuz后台,进入全局>站点信息>,复制统计代码并粘贴到“网站第…

base标签抓取错误:我不再用discuz程序建设门户网站[图]

2019独角兽企业重金招聘Python工程师标准>>> 以前我是采用discuz程序的门户来建设网站的,因为我一开始创建地方论坛的时候就采用了这套程序,不得不说的是,discuz论坛程序是国内最好的论坛系统,也得到了广泛的使用&…

大数据教程(2.11):大型网站架构图详解

2019独角兽企业重金招聘Python工程师标准>>> 很多知名的网站(如,百度;腾讯;360等)随着时间的推移,用户量越来越大,后台数据也越来越多。此时,服务器每秒钟的访问量可能就…

这10个免费电子书网站合集赶紧收藏了!

转载于《程序员书库》公众号 程序员书库(ID:OpenSourceTop)编译 链接:https://phreesite.com/free-ebook-download-sites/ 作为开发者多看点书还是应该的,要是想要看的书都能免费那就更好不过了,此前猿哥…

通过对nginx中FastCgi进程管理器的学习,了解php动态网站的网页的生成过程、nginx解析php程序的步骤...

关于factcgi和cgi的学习 1、FastCGI是什么? 首先我们看下CGI,CGI全称为通用网关接口 Common Cateway Interface.用于HTTP服务上的程序服务通信交流的一种工具,可以让一个客户端,从网页浏览器向执行在网络服务器上的程序请求数据。CGI描述了服…

python虚拟环境的安装_Python虚拟环境,你有使用过吗?分分钟教你使用虚拟环境搭建一个小网站...

在开始之前,我们先做一点知识储备,从上图中,我们可以看到几个三个关键的信息:Python、virtualenv和Flask。 Python咱就不说了吧,简单、好入门、可以干好多事情。小到写脚本、大到做网站、数据分析等等。人生苦短&#…

如何找到网站服务器的源代码_如何找到一篇论文的源代码?

1. 如果这论文很老,论文里的算法在该领域有举足轻重的地位。那么网上很可能有工具包。例如我做的机器学习方向,经典的聚类、分类算法,MATLAB, python等常用语言都有丰富的工具包可供使用,一般有名的算法都会包括在其中。2. 如果论…

上传的文件在其他页面解析_渗透测试 对网站安全防护解析漏洞详情

天气逐渐变凉,但渗透测试的热情温度感觉不到凉,因为有我们的存在公开分享渗透实战经验过程,才会让这个秋冬变得不再冷,近期有反映在各个环境下的目录解析漏洞的检测方法,那么本节由我们高级渗透架构师来详细的讲解平常用到的web环境检测点和网站漏洞防护办法。3.14.…

如何在js中获取response.getwriter()的内容_常用的网站分析工具有哪些,网站流量质量如何分析?...

优化流量和改善页面不是网站分析师的直接工作,但一个优秀的网站分析师得有能力为产品和运营部门提供分析和建议,并在公司中形成数据氛围,保证各个部门向着同一个目标前进。毕竟,网站分析是一个发现问题、分析问题和解决问题的过程…

php网站 被 黑_为什么Swoole可以加速php

前言最近在研究Swoole,原来一直听别人在说Swoole可以加速,一直都是懵逼的。在研究了Swoole之后,我有了一些自己的理解。PHP-CGI 的黑历史对于 PHP 处理网络请求,大家基本上也都是在用 CGI 的方式来做的。那么,什么是 C…

m_Orchestrate learning system---网站的语言选择功能(中文英文)

m_Orchestrate learning system---网站的语言选择功能(中文英文) 一、总结 一句话总结:有两种方法,一是sessionjs端代码,而是sessionphp端代码。 推荐使用sessionphp端代码 用函数最方便,最简便&#xff0c…

微软正式发布Azure Storage上的静态网站

微软正式宣布了Azure Storage上的静态网站,提供了从托管在Azure Storage上的HTML、CSS和JavaScript文件提供内容的能力。静态网站包含内容固定的Web页面,同时仍然允许利用JavaScript等客户端代码来创建丰富的用户体验。 有了这个新功能,继用于…