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

news/2024/5/8 20:48:29/文章来源:https://blog.csdn.net/iteye_20954/article/details/82162603

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

引言

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

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

相关文章

正在播放2020Me比较特别的我_现在比较流行的网站设计风格是什么?

全球的流行元素一般都是特别倾向于国际流行色的发布而一些网站设计风格模板当中还没有这样的盛行色在里面,总体的网站色彩就会显得非常的俗套。  一、停止flash播放功能的中型网站  现在比较流行的网站设计风格是可以停止flash播放功能的中型网站,如果用一个小型的比较简单…

关于工商银行网站打不开的问题终极解决办法

首先你应该试一试的:网银最好是用IE菜单: "工具"-->"Internet选项"-->"安全"选项卡, "可信站点", 将所有icbc相关的网站都删除(或者全部删除吧), 99%的错误都是由这个该死的地方产生的.以下是转载的:上面的不行再试试吧. 最近有…

ps 去掉一个人_电脑没有ps软件?只需要这个网站就能帮你搞定

现在很多朋友都喜欢自拍,那么肯定就都会用到一些修图软件,像PS、美图秀秀等,但是有的朋友可能会嫌PS体积太大了,太占电脑空间而不愿意安装PS,但是用到一些比较难搞定的修图问题还就得需要PS来搞定...真的是左右为难&am…

最近新上的电子商务网站

最近新上的电子商务网站,是一个B2C的,做这个站花费20天的时间,感觉很辛苦,但然我好好的了解烘培行业,烘培行业电子商务的企业21 Cake,好利来。 这样的网站在跟踪需求后,需要实现几个关键点,1用户…

我的建站经历(一)

转载自我的博客:https://blog.ljyngup.com 我的建站经历(一) 我建站时的状况为: 1.学生党 2.未满十八岁 3.预算不高(大约200左右) 4.不想花太多精力在建站上,想快速建站开始写博客。 5.不以盈利为目的(以后发展好了另说) 6.想拥有一个属于自己的…

长春网站建设×××,网站制作的步骤

当今互联网时代,人们大多从网络获取信息。为了迎合时代步伐,多数企业选择建立自己的网站,以此来提高企业知名度,扩大企业影响范围。如下就是网站制作的一些基本步骤,供大家了解:一、域名的选择根据所要建站的性质和内容…

干货!手把手教你打造自己的seo生态资源,让排名不在是梦想

又到了分享经验的时刻,每到这时候,高粱seo心里总是美滋滋的,因为分享是一种快乐,更是一种收获,能够与人分享,本身就是一种成功。在上一篇文章当中,高粱seo用两个实战案例,证明了目前…

大型网站技术架构(三)架构核心要素

2019独角兽企业重金招聘Python工程师标准>>> 所谓架构,一种通俗的说法就是“最高层次的规划,难以改变的决定”,这些规划和决定奠定了事物未来发展的方向和最终的蓝图。 而软件架构即“有关软件整体结构与组件的抽象描述&#xff0…

hadoop(datanode)宕机的原因和解决办法?_网站流量异常的10大原因

站点在日常运转的过程中,可能会遇到流量出现异常的现象,我们这里所说的异常是指流量下降达到一个较大的比率,且是如几天以上持续性的。作为一个SEOer,应该学会如何从各个维度去分析与查找到流量波动的原因,这里不仅限于…

公众号网页授权php,微信公众号里的PHP网站进行网页授权

要进行网页授权,肯定要和微信合作,首先,要有一个自己的公众号,而且必须要经过认证的公众号.(如果没有,可以去申请测试号)订阅号和服务号以及测试号:订阅号专注的是推送消息,所以一些高级接口会没有.服务号专注的是用户交互,所以接口会比订阅号多一点,相对的,推送消息的数量就会…

mouseenter 与mouseover 区别

mouseenter 与mouseover 区别 mouseenter与mouseover有什么不同,也许可以从两方面去讲。看他们是是否支持冒泡或者是否为事件的触发时机; 只有当鼠标指针在对象的边界之外,用户把鼠标移动到对象的边界内时,事件mouseenter才触发。…

Nginx 开启 Gzip压缩提升网站速度

多说无益 ,直接上配置 vim nginx.conf 参数 gzip配置的常用参数 gzip on|off; #是否开启gzip gzip_buffers 32 4K| 16 8K #缓冲(压缩在内存中缓冲几块? 每块多大?) gzip_comp_level [1-9] #推荐6 压缩级别(级别越高,压的越小,越浪费CPU计算资源) gzip_disab…

Bootstrap响应式网站开发实战 # 第二章习题答案

1.用Bootstrap实现一个隔行变色的表格 <!DOCTYPE html> <html> <head><title>Bootstrap Practice</title><link rel

Bootstrap响应式网站开发实战 # 第三章习题答案

一、选择题 AAA 二、操作题 1.实现如图所示的效果(四列网格布局) <!DOCTYPE html> <html> <head><title>Bootstrap Practice</title

Bootstrap响应式网站开发实战 # 第四章习题答案

一、选择题 1.A 2.B 3.A 二、操作题 1.实现如图所示的效果 <!DOCTYPE html> <html lang="zh-CN"> <head>

Bootstrap响应式网站开发实战 # 第五章习题答案

一、选择题 1.A 2.A 3.A 4.A 5.B 6.B 7.B 二、操作题 请用多媒体对象实现如图所示效果图 <!DOCTYPE html> <html lang="zh-CN"> <head>

Bootstrap响应式网站开发实战 # 第七章习题答案

1.实现如图所示效果 (网页里实现幻灯片切换效果 / 轮播) <!DOCTYPE html> <html lang="zh-CN"> <head><meta

Bootstrap响应式网站开发实战 # 第八章习题答案

如图所示 <!DOCTYPE html> <html lang="zh-CN"> <head><meta charset

修改网站自动关闭时间timeout_优雅关闭线程池的方案

我们经常在项目中使用的线程池&#xff0c;但是是否关心过线程池的关闭呢&#xff0c;可能很多时候直接再项目中直接创建线程池让它一直运行当任务执行结束不在需要了也不去关闭&#xff0c;这其实是存在非常大的风险的&#xff0c;大量的线程常驻在后台对系统资源的占用是巨大…

在这里输入你要搜索的内容怎么不显示_网站收录释疑,当遇到收录问题,我们该怎么处理...

做SEO的童鞋们都清楚&#xff0c;网站收录是一个网站能够获得排名的基础&#xff0c;网站内容被搜索引擎收录&#xff0c;它才有可能在这个搜索引擎里获得排名&#xff0c;这是先决条件。网站收录是什么&#xff1f;打个比方&#xff0c;一个高中生要在全国高考获得名次&#x…