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

news/2024/5/13 19:13:53/文章来源:https://blog.csdn.net/jiftlixu/article/details/7177311

http://blog.csdn.net/v_JULY_v/article/details/6839360

引言

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

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

相关文章

社工库365开网站公开售卖盗取的账号信息

如今网上盗号猖獗,个人信息泄露严重。 社工库365开网站公开售卖盗取的账号信息,我测试了下,的确可以查询到密码信息。包括很早以前注册的账号,163、126都沦陷了,密码的md5值都暴露出来了。 过了2天,再访问“…

Windows Server 2008 R2 下配置证书服务器和HTTPS方式访问网站

Windows Server 2008 R2 下配置证书服务器和HTTPS方式访问网站 http://www.cnblogs.com/zhongweiv/archive/2013/01/07/https.html目录 配置环境了解HTTPS配置CA证书服务器新建示例网站并发布在IIS新建自签名证书并配置HTTPS故障排除 其它机器无法通过访问 配置环境 Windows版…

Python之web开发(一):python常用搭建网站的框架简介

谈及WEB开发,使用java来的确要比python多的多。但实际上还是有很多大型的网站都是使用python搭建起来的,如国外最大的视频分析网站YouTube、国内的豆瓣、搜狐以及知乎等都是使用python开发的。使用python常用搭建网站的框架有Django、tornado、web.py、w…

Python之web开发(三):python使用django框架搭建网站之SQLserver数据库连接

先简单跟大家复习一下Django项目之前的内容: step1:建立一个Django项目的工程(使用django-admin.py startproject ) step2:创建app并配置相应的文件(app根据用户的功能模块去划分:manage.py sta…

Python之web开发(二):python使用django框架搭建网站之新建文件

本文为Django项目创建的简单介绍,更为详细的Django项目创建,编辑可以参考http://www.imooc.com/learn/790 Step 1. 点击 File --> New Project 弹出如下窗口: 说明: 1:存储位置所在文件夹 2:虚拟环境 3…

Python之web开发(六):python使用django框架搭建网站之登陆页搭建不同页面之间跳转

【写在前面】:有关urls及path函数的应用详见:https://blog.csdn.net/weixin_44322778/article/details/102598346 【官方说明】: 规划 URLs 简洁优雅的 URL 规划对于一个高质量 Web 应用来说至关重要。Django 推崇优美的 URL 设计&#xff…

Python之web开发(error):python使用django框架搭建网站之文件配置

error list: 1.Error:please enable Django support for the project 2:django.core.exceptions.ImproperlyConfigured: mysqlclient 1.3.13 or newer is required; you have 0.9.3. 1.Error:please enable Django support for the project 这个时候将点击PyCharm左…

Python之web开发(六):python使用django框架搭建网站之图表显示操作

配置环境: jango Highcharts Mysql Django chartit把简单的东西复杂话了,真心的,直接使用highchart更方便 highchart官方链接: https://www.highcharts.com.cn/demo/highcharts/line-basic 学习链接: https://bl…

seo从入门到精通_SEO入门到精通(七):SEO工作的流程是什么?

刚入门seo会对这个行业的工作流程产生疑问,或者因为自己学习的seo知识比较零散,无法去把控seo工作的整体流程,本文会给大家讲解下企业站通用的seo优化流程:行业概况分析→企业实况分析→竞品分析→确定关键词→网站优化→网站数据…

Python爬取网站用户手机号_设计师的福利,python爬取素材网站

前言本文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理。基本环境配置python 3.6pycharmrequestsparsel相关模块pip安装即可确定网站目标基本常规操作,F12打开开发者工具,分析网页网页返回的数据 &…

php网站入门鹿泉银山,01PHP编程新手入门第一步

01PHP编程新手入门第一步很多时候刚入手不知道从哪里下手。这个时候选择一些课程是最好的方法,自己摸索半天可能比不过别人5分钟讲解。就编程而言:1:有个地方存储程序和数据库可以选择云服务器,也可以选择本地。选择了服务器之后可…

本地服务器模板网站怎么安装,本地服务器怎样安装帝国CMS模版网站

本地服务器安装帝国CMS与安装DedeCMS有部分区别。喜欢使用帝国CMS程序的站长,可以下载不同的网站模版进行安装。调试完成后,则可以直接上传至虚拟主机或者独立服务器。由于帝国CMS功能较为强大,一般选择这个程序的企业基本对空间大小有要求&a…

网站建设技术方案_企业网站建设解决方案

企业网站作为一个公司的网络名片,最主要的作用是展示公司形象和宣传公司的服务或产品,所以做一个企业网站,关键在于如何更好地展示公司形象和宣传公司服务或产品,做好这点,需要做好网站的页面设计、方便的内容后台管理…

怎么给网站加js_网站站内SEO优化实操细节详解,权重上升嗖嗖的

做SEO优化的都知道,网站SEO排名的好与坏,影响的因素非常多。而站内优化是重要的一个因素,如果按满分100分来计算,菜鸟菌觉得站内优化至少占20分左右。因此,站内的优化是很重要的,但也不能说做好站内优化就能…

网站服务器被攻击的形式,服务器被攻击的不同表现类型以及应对策略

服务器被攻击的不同表现类型以及应对策略许多网站站长都遇到过网络服务器被攻击的状况,被攻击之后也大多数都只有束手待毙。由于大伙儿广泛对攻击不足掌握,很多人把多很多的攻击和防御力挂在嘴上,却压根不清楚网络服务器是怎么被攻击的,更不要说怎样应对攻击了。绝大多数互联网…

如何维护关键字_SEO人如何制定工作计划?【大站】

搜索引擎优化工作繁杂,不但要做好网站流量、还需要做好SEO全网推广。如果没有预先计划,往往人员无从下手。假如我想拓展互联网团队该如何做?假如我优化大型站点,如何分配团队?假如我要做行业关键词覆盖率要如何执行&am…

空服务器安装linux,debian服务器linux服务器web建站搭建linux服务器之Debian安装

debian服务器linux服务器web建站搭建linux服务器之Debian安装原文来自i火吧大家都知道linux的发行版本很多,有centos啊,debian啊,ubuntu等,下面我就用debian服务器为例教大家如何搭建web服务器。1:找到我们的服务器控制…

centos mysql权限不够_centos执行文件时权限不够怎么解决_网站服务器运行维护,centos...

centos怎么实现开机进入命令行模式_网站服务器运行维护centos实现开机进入命令行模式的方法是:1、查看系统当前的运行级别;2、执行命令【systemctl set-default multi-user.target】设置开机进入命令行模式。修改权限可以解决该问题。可以使用chmod命令修…

网站服务器安全维护,网站服务器安全维护

网站服务器安全维护 内容精选换一换云服务器使用,服务器使用,服务器配置,云主机使用,弹性云服务器入门,ecs使用来自:产品域名注册(Domain Registration)是用户付费获取Internet上某一域名一段时间使用权的过…