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

news/2024/5/12 9:46:10/文章来源:https://blog.csdn.net/u013220054/article/details/72830730

转自:http://blog.csdn.net/fenglibing/article/details/10270799

引言

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

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

  • 1、WikiPedia 技术架构

                                             WikiPedia 技术架构图Copy @Mark Bergsma

  1. 来自wikipedia的数据:峰值每秒钟3万个  HTTP 请求 每秒钟  3G bit 流量, 近乎 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/)。从上百幅架构图中学得半点大型网站建设经验(上),完。

后记

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


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

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

相关文章

基于ASP.NET的蒙古文网站建立及若干问题分析

摘要:随着全球数字化、网络化发展进程的加快,国家相关部门及时采取了保护、开发、利用民族语言资源的措施,因此蒙古文网络资源也日益丰富起来。但由于蒙古文编码及浏览方式的独特性,在开发的过程中会遇到不少难题,本文以ASP.NET技术为基础&am…

从轻松掌控中国教育部旗下2000多网站想到的安全防范

从轻松掌控中国教育部旗下2000多网站想到的安全防范 作者:李嘉义  来源于:中国黑客联盟http://www.cnhacker.com(只有此域名为正版官方网站)  发布时间:2006-1-26 15:58:17 前言: 半年前就开始写,在繁忙的工作…

利用 IIS日志追查网站入侵者

利用 IIS 日志追查网站入侵者 作者:HaK_BaN[B.C.T] 出处:cnbct.org 责任编辑: 原野 [ 2005-04-11 18:15 ] 如何追查黑客呢?请看本文为你介绍的通过 IIS 日志追查入侵者的方法…… 以前黑站黑了很多,但是就没有想过会不…

编程学习视频网站汇总

1、实验楼:https://www.shiyanlou.com/ 实验楼的课程主要偏向后端开发(Python、C/C、Linux、PHP、Java)、Linux 运维以及大数据等内容。提供精选Python在线实践项目,无需配置本地环境(利用配置好的虚拟环境完成相应的项…

验证码技术在网站中的应用

验证码应用目的:  为了防止某些别有用心的用户利用机器人(恶意程序)自动注册、自动登录、恶意灌水、恶意增加数据库访问、用特定程序暴力破解密码,可采用验证码技术。  另外一个好处是,使得你的网站给人一种很酷的感觉。    验证码应…

自制翻页型爬虫(思路适用很多网站)

文章目录 BULLSHIT翻页网页源代码思路代码示例 BULLSHIT 非“数据科学家”(挺烦别人自称数据科学家的,分析师就分析师,哪来这么多科学家)的我,还得负责数据这块,好辛苦。? 对我来说爬虫是玄学&#xff0…

自制瀑布流型爬虫(思路适用很多网站)

文章目录 BULLSHIT翻页网页源代码代码示例 BULLSHIT 之前误打误撞写过一篇《自制翻页型爬虫(思路适用很多网站)》,最近遇到瀑布流型的网站,于是继续整理一下有关瀑布流型网站的爬虫思路。 举例网站:http://www.dunkh…

做BTC合约交易,发现了免费的宝藏数据网站!

做过合约都知道,大部分时间在堵,但是当了这么久的韭菜,总要提升胜率吧,既然没那个能力去拿到各种项目方的小道消息,那跟着大佬开单总没错吧,大佬吃肉我喝点汤就行。 有了这个思路,我就特别关注…

python爬虫学习之路(1)_ CSDN网站的模拟登陆

初入爬虫的道路,找到了一篇好的指导文章,先在此献上,内部讲述了入门开始的每一步,个人是比较推荐的!!! 链接:https://zhuanlan.zhihu.com/p/21479334 (我跳过了python 2.7 基础知识…

多元宇宙算法求解多目标优化问题附matlab代码(Multi-VerseOptimizer,MVO)

✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,matlab项目合作可私信。 🍎个人主页:Matlab科研工作室 🍊个人信条:格物致知。 更多Matlab仿真内容点击👇 智能优化算法 …

108lan.com网站部署(记录一次误使用rm -rf /*)

今天误使用了rm -rf/*把网站的部署的东西全部删除了 还好有网站的源文件备份 但是网站的一些图片没有备份导致以前上传的图片文件访问不了 以前都把这个错误当玩笑看,唉,没想到有一天自己会误敲这个命令 jar包和前端静态文件都还在 下面来部署网站&…

志远电脑公司网站系统

志远电脑公司网站系统,是一套专门从事电脑维修,打印机维修,安装监控,手机维修等业务的公司,或电脑店开发的一套成品网站程序,用户可以通过使用志远电脑公司网站系统快速搭建一个自己的网站,这一…

网站头像: favicon.ico

很多人问过我:你的网站在地址栏中的那个图标是怎么弄出来的? 这个文件就是在WEB根目录下的favicon.ico文件: http://www.example.com/favicon.ico 很多门户网站都有这个文件。 我觉得它的作用和MSN中的人物头像类似,可以称作“网站…

利用StatViz生成网站用户点击路径图

今天尝试了一下StatViz,生成了自己网站的点击路径统计:网站好“扁平”啊; 图较大,点击这里下载 具体的安装过程如下:下载GraphViz: 一个通用的矢量图生成工具 下载StatViz: 一个基于Web日志生成…

基于群体分析发现网站的相关性

今天看: 其中谈到了Amazon的a9.com中的搜索历史等功能对于用户的帮助。忽然想到Google的搜索结果页上有一个不怎么常用的相关网站功能:其实是一个很有用“发现”的功能,这种发现完全是不基于“字面”的,我感觉是经常看当前网网站的…

给Blog加上雅虎通PingMe服务:和网站用户即时聊天

雅虎中国刚刚发布了Y!Pingme服务&#xff0c;什么是PingMe呢&#xff1f; 就是一个web界面的雅虎通留言簿&#xff0c;没有注册过雅虎帐号的用户只要点击网站上的PingMe图标 <img src"http://opi.yahoo.com/online?uchedong&amp;t1&amp;lcn" alt"ca…

各种社交网站的入口dashboard比较

作者&#xff1a;车东 发表于&#xff1a;2008-02-24 14:02 最后更新于&#xff1a;2008-02-24 02:02版权声明&#xff1a;可以任意转载&#xff0c;转载时请务必以超链接形式标明文章原始出处和作者信息及本版权声明。http://www.chedong.com/blog/archives/001414.html “找到…

网站服务以及部署网站论坛discuz与网络论坛WordPress

网站架构 LAMP LinuxApacheMySQLPHP 系统服务器程序数据管理软件中间软件 静态网站&#xff1a;Apache&#xff1a;服务端口&#xff1a;80/tcp(http)443/tcp(https) 1.主配置文件 /etc/httpd/conf/httpd.conf 子配置文件&#xff1a;/etc/httpd/conf.d/*.conf 主目录&am…

网站高并发解决方案LVS

目录 负载均衡 一.集群功能分类 1.LB load balance 2.HA high available 二.负载均衡 1.负载均衡的主要方式 2.四层负载和七层负载 三.LVS概述 四.LVS工作模式 NAT转发模式 DR直接路由模式 TUN-IP隧道模式 ***模式对比&#xff1a; *轮训算法 1.Fixed Scheduling…

phpstudy安装ssl证书_浅谈网站SSL证书安装的重要性

网站需要安装SSL证书吗&#xff1f;为什么需要安装SSL证书&#xff1f;近年来&#xff0c;网络安全事件层出不穷&#xff0c;屡禁不止。据统计仍有57%的网站未进行https加密&#xff0c;成为数据泄漏的“导火索”之一。而SSL证书不仅仅可以保护网站数据安全&#xff0c;而且可以…