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

news/2024/5/11 5:49:00/文章来源:https://blog.csdn.net/lionzl/article/details/39178545

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

引言

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

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

相关文章

信息收集之网站指纹(CMS)识别、Waf识别、CDN探测(w8fuckcdn全网扫描获取ip)

CMS识别 CMSeek下载地址 Webfinger下载地址 CMS指纹识别-CMSeek CMSeek安装使用: 安装:git clone https://github.com/Tuhinshubhra/CMSeeKcms扫描命令:python3 cmseek.py -u 目标 #输出结果保存在/root/cms/CMSeeK/Result/www.4tricks.c…

网线制作ppt_这个能做PPT的逆天网站可能会让我失业,但我还是想介绍给你!

嗨,各位木友们好呀,我是小木。身为一个资浅无证的PPT设计师,我已经习惯了每天被人问一些奇形怪状的沙雕问题:不能用PPT的情况下怎么做PPT?没学过设计,怎么在10分钟内做出高大上的海报?去哪下载超…

有keras环境吗_CV学习笔记(十六):Windows环境复现ChineseOCR

项目地址:https://github.com/xiaofengShi/CHINESE-OCR为了方便下载:https://gitee.com/yunshizhijian/CHINESE-OCR因为项目中推荐使用的环境为MAC和Linux,因此迁移到Windows上仍需要一些改动,但是在网上的资料很少,并…

php网站留言,php实现网站留言板功能,php实现留言板_PHP教程

php实现网站留言板功能,php实现留言板我要实现的就是下图的这种样式,可参考下面这两个网站的留言板,他们的实现原理都是一样的畅言留言板样式:网易跟帖样式:原理需要在评论表添加两个主要字段 id 和 pid ,其…

seo原创工具_seo优化外包

seo优化外包,合肥辰俊尽职尽责,合肥辰俊信息科技有限公司(简称辰俊网络)是一家专注于全网整合营销领域的互联网公司,致力于为安徽中小型企业提供全方位的公司整体品牌策划、营销型网站建设、G3云推广全网整合营销、微信营销推广、微信平台代运…

wordpress插件翻译不生效_外贸网站多语言插件 Polylang

WordPress外贸网站多语种插件 Polylang作为网站翻译市场的两大巅峰, Polylang和WPML凭借着各自的强大翻译功能和高度自定义化的操作,成功的获得了广大外贸建站人员的欢迎。在上一篇文章中 ,Jack老师着重讲解了WPML的相关实操步骤,…

众筹系统源码 java_基于JavaWeb的创意众筹网站系统的设计与实现 毕业论文+任务书+开题报告+外文翻译+设计源码+mysql文件...

摘 要现代众筹指通过互联网方式发布筹款项目并募集资金。相对于传统的融资方式,众筹更为开放,能否获得资金也不再是由项目的商业价值作为唯一标准。只要是网友喜欢的项目,都可以通过众筹方式获得项目启动的第一笔资金,为更多小本…

python爬取两个网站_爬取90%的网页,只需学会这13行爬虫通用代码框架——Python版!...

还有一种方法apparent_encoding,可以通过分析网页内容来得到编码,有时候网站没有头部标识时,为了能正常显示,一般常用 apparent_encoding 替代 encoding。 五、状态码异常raise_for_status的作用就是返回一个异常错误requests.HTT…

安装错误 服务尚未启动_【云服务器Centos7.x建站】MySQL 5.7安装、使用、错误总结...

MySQL环境搭建进入本机源文件目录 cd /usr/local/src wget下载yum源的rpm包 wget https://dev.mysql.com/get/mysql57-community-release-el7-11.noarch.rpm 安装rpm包 rpm -ivh mysql57-community-release-el7-11.noarch.rpm 使用yum安装mysql-server yum install -y mysql-se…

ios图标素材_设计必备丨强推50个免费的图标素材网站

不会画图标,如果知道这50个图标素材网站,制件图标信手拈来!对于UI设计师来说,都会遇到图标设计的需求。如果有高质量的图标素材资源做后盾,会大大提供自己的工作效率。今天,给大家整理了50个设计师必看的免…

站点地图用xml好还是用html好,网站有必要做网站地图(sitemap)吗?

原标题:网站有必要做网站地图(sitemap)吗?网站地图有引导搜索引擎蜘蛛爬网站和增加收录的功能,是一种对收索引擎友好的设置,那么,是不是每个网站都要做一个网站地图呢?其实,根据实际情况的不同&…

服务器网站迁移注意事项,网站更换主机服务器的安全迁移注意事项

很多运营网站的过程中有更换虚拟空间的需求,那么更换虚拟主机空间应该注意什么呢?不管是使用什么样的网站空间,都可能会遇到更换新主机的情况,换空间相对来说比较麻烦,有很多问题需要我们注意,其中网站的安全是一定要…

python脚本根据cookies自动登录网站_python接口自动化4-绕过验证码登录(cookie)

前言 有些登录的接口会有验证码:短信验证码,图形验证码等,这种登录的话验证码参数可以从后台获取的(或者查数据库最直接)。 获取不到也没关系,可以通过添加cookie的方式绕过验证码。 一、抓登录cookie 1.登…

网站拒绝访问_你的网站被为什么会被DDoS攻击 如何防御DDoS

互联网安全威胁无处不在,随着网络安全问题的不断演化,DDoS攻击情况愈演愈烈,侵害了很多网站的利益,甚至威胁了很多网站的生存。DDoS攻击日趋增强据卡巴斯基2018 Q3全球DDoS攻击分析报告指出,在DDoS攻击方面&#xff0c…

bbt如何制作流程图_超级好用的5个免费在线版流程图制作网站

目录:zen flowchartZen Flowchart - Sign In​www.zenflowchart.comvisual paradigm onlineVisual Paradigm Online​online.visual-paradigm.comdraw ioFlowchart Maker & Online Diagram Software​app.diagrams.net迅捷画图迅捷画图-专业的在线作图网站,在线…

视频网站云服务器带宽选择,视频云服务器带宽要求

视频云服务器带宽要求 内容精选换一换当您发现云服务器的运行速度变慢或云服务器实例突然出现网络断开的情况,则可能是云服务器的带宽和CPU利用率过高导致。如果您已经通过云监控服务完成创建过告警任务,当CPU或带宽利用率高时,系统会自动发送…

网站页面左右_股票配资网站SEO案例 站群SEO优化案例

股票配资网站一直是超级盈利的网站类型,百度权重2就可以卖8W,首页的网站一条广告位几千/月,年入百万应该是入门级别了。有高利润自然就有高竞争,这些配资网站的站长都是怎么操作的,用了什么技术方法。我这SEO案例就来分…

python符号怎么打_「符号怎么打出来」```这个符号怎么打出来 - seo实验室

符号怎么打出来 2019独角兽企业重金招聘Python工程师标准>>>切换到英文输入法 在TAB键上面 转载于:https://my.oschina.net/u/3707523/blog/1553266 相关阅读 $符号在php中是表示变量的特征字符, 在js中它也有很多作用&…

如何制作透明背景图片_网站制作中页面背景该如何设计?

如今科技发展和设计趋势日月牙异,网页设计人员要时刻保持敏感,要对国际化的网站设计趋势时刻关注,如许才能让网站团体的感觉不至于那么过时。为了让网站显得当代化优雅,网站制作公司要在与客户充分沟通的基础上,理解客…

c常用算法程序集_推荐一个采用方便程序员在线动画学习常用算法的良心网站...

网址:https://algorithm-visualizer.org/进去之后的页面是程序员熟悉的码农风格:假设我想学习冒泡排序算法,在搜索栏里输入sort,在结果列表里选择bubble sort:点击之后,排序操作处于就绪状态,点…