日800万访客、20万RPS网站的5个9可用性架构

news/2024/5/15 11:22:01/文章来源:https://adean.blog.csdn.net/article/details/19616169

【编者按】AOL.com,American Online(美国在线),美国著名的新闻聚合网站,也是美国最大的互联网服务提供商之一。当下,AOL.com的天访问人次已超过800万,月PV更达10亿之巨。近日,Lead Squirrel创始人、AOL架构师兼工程团队负责人、拥有10年架构经验的Dave Hagler在HighScalability上撰文分享了AOL高可用性(99.999%)网站架构,以下为译文:


CSDN推荐:欢迎免费订阅《Hadoop与大数据周刊》获取更多Hadoop技术文献、大数据技术分析、企业实战经验,生态圈发展趋势。


当下,AOL.com的架构已发展到第五代,也可以说是20年内重建了5次;现在使用的架构是在6年前设计,虽然整体保持不变,但组件的更新和添加却从未停止。在6年的持续改进过程中,代码、工具、开发、部署等环节都得到了充分的调优,也让AOL.com在当下的数据洪流中屹立不倒。

AOL.com工程团队一直保持在25人左右,包括了开发、测试及运维人员,公司的主要工作地点在Dulles和Virginia,也有一小部分在Dublin及Ireland。应对如此流量并将可用性保持在5个9从来都不是件容易的事情,在系统架构中我们使用了多种技术:Java、JavaServer Pages、Tomcat、Apache、CentOS、Git、Jenkins、Selenium和 jQuery等。

设计原则

关于架构的设计我们有着明确的思路,其中最重要的就是冗余一切,在系统中某个部分发生故障,或者需要离线维护时,有个备份无疑省时省力,而5个9的可用率要求每年不超过5分钟宕机时间。

第二个原则就是AOL.com不能依赖任何共享基础设施去交付页面,即使某个系统或内容发生故障,AOL.com仍然需要维持着高可用。在这个架构设计后不久,AOL大部分的网络内容都共享一个被称为Big Bowl的基础设施,这样会存在一个非常致命的问题——不同内容之间的相互影响。为了解决这个问题,当下的AOL专门设计了不同内容之间的隔离,任何依赖AOL.com的内容都会被一个保护服务前移至一组更少的主机上,保护服务负责将调用聚集到下游系统。因此,取代从上万个服务器上接收请求,下游系统可能只会从20个不同的服务器上获取请求,响应同样会被缓存来减少负载。同时,运维团队还会对AOL.com备份外部数据库。这样一来,在整个系统中只有网络和协议服务被共享。

物理基础设施

AOL.com部署在3个不同的数据中心,两个在Northern Virginia,一个在California,这些数据中心都由公司自主运营。虽然每个数据中心的规模都足以支撑整个AOL.com,但是AOL.com仍然坚持同时运行这三个数据中心,多冗余让数据中心的离线维护变得简单。

当请求接入时,负责跨数据中心负载均衡的Akamai GSLB将为用户指向离他最近的数据中心。为静态内容使用了Akamai CDN,一旦确定某个数据中心,进一部的请求(数据库或者是服务)都会传入这个数据中心。用户的会话信息会保存在cookies里,并通过请求发送;因为不需要保存状态,所以请求可以在任何服务器上被执行。


在数据中心上,请求会被发送给Netscaler组件,并通过负载均衡的方式将请求传送给前端应用服务器,当下3个数据中心前端服务器的数量已接近700。鉴于所有前端都是虚拟服务器,运维人员可以根据需要快速的添加容量,每个服务器配备了2 个虚拟CPU、4GB RAM和80GB的磁盘空间。每个前端服务器都单独运行了Apache和Tomcat,Apache会被请求发送给本地主机上的Tomcat,而Tomcat则负责大多数请求的处理,调用数据库或者服务以及执行应用程序逻辑。

流量

AOL.com的流量遵循常见的互联网使用模式——通常情况下流量不会有太大的变化,当然现实世界中发生大事件时除外。

 

每天流量最低的时候是早上3-6点,10点之前则是一个流量剧增期,会持续5个小时保持在20万点击每秒,在下午5点后降低。在一般情况下,工作日的流量会高于周末。

 

这些流量由个数据中心共同支撑,两个东海岸的数据中心各负责40%,西海岸则负责剩余的20%,流量分布不均匀的原因归结于用户分布的不均匀,同时也因为加拿大、英国、法国等国家的用户也被路由给了东海岸数据中心。

监视

所有的应用程序都运行在AOL数据中心,包括AOL.com,都由一个自主研发的工具监控,类似于Amazon的CloudWatch,已投入使用多年。监视工具会实时的收集软硬件信息,并通过一个客户端应用程序提供报告、图及仪盘表,提供了主机、CPU、接口、网络设备、文件系统、网络流量、响应代码、响应时间、应用程序度量等众多信息。服务器端点更是每分钟都进行检查,并在超过基于可用性及响应时间设置的阈值时进行报警。


内容管理系统

大部分的AOL.com内容及许多的业务逻辑都来自Content Management System,CMS同样是个自主研发系统,建立在相同的Java/JSP上,它的功能远超越一般的CMS。编辑使用它来创建AOL.com上的可见内容,开发者使用它来配置应用程序;它同样还是个仪表盘,让编辑可以实时的了解页面上所有部分的执行情况。

同样,AOL的首页远不止单一域名 www.aol.com上的一个页面。它其实由不同域名商的数十个版本组成,它们之间可能存在明显或细微的区别。CMS允许这些不同的版本在同一个地方制作,任何一个版本都可以从相同层上的多个父类继承不同内容,版本间的区别可以包括不同页面上的品牌化Logo、不同ID造成的内容不同等等,比如因为国际化的和访问设备造成的不同。

 

因此,内容管理系统减少了或者消除了手动的复制粘贴。比如,某个突发的事情只与美国相关,那么编辑只会在美国接口上呈现这个页面,然后这个内容将传播到美国网站的所有份数网站,同样也可以实现为自助的传播到下行网站。

在投放前,我们曾给这个项目进行了一定的尝试。为了更好的测试,我们建立了多变量、多单元并行测试工具。持之以恒的进行测试,并找出优化的途径。首先,我们选择一定比例的测试受众,他们将访问一个不同的版本(可能只是按钮颜色不同,也可能是完全不同的浏览体验),通过浏览器cookie进行追踪,通常往往会测试好几周才会确定一个结果。

数据库

AOL.com上的内容是高度动态的,因此需要为每次页面访问都制定数据库和应用程序连接规则。除了在页面上提示,CMS同样包含了许多规则和条件内容,如果你在旧浏览器上,你可能会在顶部看到一个浏览器升级提示。因此,CMS数据需要足够的快,有能力处理流量的爆发,并且一直可用。我们当下使用的是MySQL 5,区别于前端的虚拟服务器,数据库服务器拥有更多的容量——16 CPU的物理服务器。

CMS数据库使用了30个从副本,每个数据中心10个;同时,我们还会在一个数据中心建立主节点,同时还建立这个主节点的备份节点。除了主从设计之外,还会在每个数据中心设立1个中继器(reapeater)——主节点的另一个备份,负责与整个数据中心的从节点通信,repeater的作用是减少跨数据中心的数据通信;同时,在这种情况下,如果主节点和其备份节点都宕掉,中继器中的1个将会被指派为新的主节点。

应用程序通过1个HTTP接口访问数据库,AOL还为MySQL开发了1个Apache模块。每个数据库主机都有一个安装了Apache模块的Web服务器,它们负责管理数据库的连接池,给GET请求做SQL查询,结果则以XML格式返回。对于AOL.com这样的Java应用程序,还会有一个Java客户端,负责抽象HTTP调用并将XML解析成对象类型。

之所以使用HTTP数据库接口有多个原因:首先,它让客户端可以更轻松的访问数据库,因为任何语言都可以做HTTP调用,开发者不必再去考虑MySQL客户端驱动及连接池;其次,它有利于应用程序扩展——应用程序通过指定的URL访问数据库,URL对应负载局衡器的IP地址,当新的从节点加入时候,客户端应用程序不需要进行重新配置。此外,使用HTTP接口还有利于监视。标准的Web服务器访问日志和监视工具可以提供数据库事务量、查询次数及错误,然而在查询包含了URL作为参数后,日志将变得更加明了;同时,因为Apache模块中还加入了管理员接口,因此运维人员可以在任何浏览器上获取数据库状态。

缓存

AOL的架构中多处使用了缓存,而在CMS中就有两个级别的缓存。第一,CMS中访问数据的Java代码使用了内存缓存。鉴于CMS中的内容片都被版本化了,只要是新版本的话就不会有什么改动,因此数据可以被缓存来减少数据库IO。这种缓存是在Tomcat实例级别,每700实例使用1个单独的缓存。

但是为了得知是否有新的版本加入,我们仍然需要时常的查询数据库,这将带来大量的数据库IO,通常情况下返回的还是相同的结果。鉴于我们的数据库查询都由HTTP接口通过Apache模块完成,使用Varnish Cache来缓存查询将异常简单。数据库查询都是非常简单的HTTP GET请求,使用了URL做参数的完全SQL,因此Varnish显著的减少了访问数据库服务器的流量。

Akamai CDN被用于缓存所有的静态内容,除了静态内容之外,AKmai每隔几秒还会缓存AOL.com的静态版本,这个副本被用于极端情况下的灾难恢复——所有数据中心都不可访问时,用户将直接访问这个副本的类容,直到数据中心恢复。

系统中最后一处缓存用于AOL.com前端JSP代码,前端代码的作用是从CMS收集众多的页面并将它们聚合到HTML。我们开发JSP标签库让开发者可以缓存聚合HTML所需的任何部分,比如指定页面的那个部分需要缓存只需要用<cache:cache> </cache:cache>这对标签包含它们。


开发过程

大部分的时间,AOL团队都遵循Scrum开发过程,但是也不乏因为业务需求需要加班加点的时候。大部分的网站修改都可以通过CMS完成,避开了建立或代码开发过程。这种类型的更新每天可能发生数起至数十起,耗费的时间也是几分钟到几天不等。

开发团队会订阅一份iPhone周刊来监视应用程序状态,一旦发现异常数据,比如下游系统丢失,因为冗余策略虽然不会立刻影响到终端用户,但是却是在事情进一步恶化之前的提醒。除了应用程序方面,运维团队在网络、主机、数据库问题上都建立了类似的机制,让团队可以应对任何状况。

开发者在局部环境工作,大部分都使用装有Netbeans或Eclipse的Macbook Pro笔记本。在开发过程中存在6个不同的生产环境——与生产环境配置相同,但是规模较小。

代码在发布前需要经过严格的QA过程,同时鉴于AOL.com的多版本,测试环节所需要做的事情更加复杂(详情见原文)。

回顾和展望

当下AOL.com的技术堆栈已非常成熟,鉴于系统的架构设计于6年前,部分设计在今天可能已经不是第一选择,比如Java/Tomcat/JSP已经给Python和PHP应用让路,Apache可能也会略逊于Nginx,同时NoSQL数据库也带来了更多的选择,许多选择已运用在AOL的其它系统中。

不能免俗的是,架构中带来灵活和稳定的部分同样阻碍了新技术的采用,然而这并不能阻碍我们给系统做出有益的改变,比如:从实体到虚拟机、添加Varnish Cache以及引入Jenkins。同时,我们现在还在重写前端的HTML和CSS以清理历史遗留代码,同时也有助于多年前不可能关注的响应速度。总而言之,根据需求不停的演变架构以迎合产业的需求才是关键所在。

原文链接: How the AOL.com Architecture Evolved to 99.999% Availability, 8 Million Visitors Per Day, and 200,000 Requests Per Second(编译/仲浩 审校/魏伟) 

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

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

相关文章

App会取代网站吗?

http://blog.csdn.net/happydeer/article/details/17389467 自1999年以来&#xff0c;不管是作为买家还是卖家&#xff0c;我一直是eBay的热心用户。这么多年下来&#xff0c;eBay已经从原先一个极客们买卖破旧激光笔的地方&#xff0c;演变成了一个商家可以向客户销售任何东西…

【web标准设计】学习、提高、欣赏网站推荐

【web标准设计】学习、提高、欣赏网站推荐 (转&#xff09;文章包含的一些粗俗、庸俗、恶心的言语可能造成您阅读后的不适感&#xff0c;请谨慎选择是否阅读。如你自愿阅读本文&#xff0c;因粗俗、庸俗、恶心的言语给您所造成的任何后果&#xff0c;本文作者不负任何责任。 华…

想成为程序猿?28个在线学习网站让你变身齐天大圣!

http://www.gbtags.com/gb/share/3045.htm 无论是考虑换工作成为一个全职的程序猿&#xff0c;还是试图搭建一个网站&#xff0c;亦或是想要掌握更多的技能&#xff0c;总之现在越来越多的人都开始学习如何编程。虽然编程不一定适合所有人&#xff0c;但是对相关的知识多深入了…

编程要趁早 BI推荐8个编程学习网站

最近一个热门话题是雅虎以3000万美元收购了移动阅读应用Summly&#xff0c;真正让人吃惊的不是3000万美元的价格值不值&#xff0c;而是Summly的开发者--只有17岁的尼克达洛伊西奥。他12岁开始学习编程&#xff0c;2011年&#xff08;15岁时&#xff09;因Summly从李嘉诚基金获…

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

引言 近段时间以来&#xff0c;通过接触有关海量数据处理和搜索引擎的诸多技术&#xff0c;常常见识到不少精妙绝伦的架构图。除了每每感叹于每幅图表面上的绘制的精细之外&#xff0c;更为架构图背后所隐藏的设计思想所叹服。个人这两天一直在搜集各大型网站的架构设计图&…

大型网站技术架构(五)网站高可用架构

2019独角兽企业重金招聘Python工程师标准>>> 网站的可用性&#xff08;Avaliability&#xff09;描述网站可有效访问的特性。 1、网站可用性的度量与考核 网站不可用时间&#xff08;故障时间&#xff09;故障修复时间点-故障发现&#xff08;报告&#xff09;时间点…

ASP.NET网站防止SQL注入攻击

目的: 对输入的字串长度,范围,格式和类型进行约束. 在开发 ASP.NET 程序时使用请求验证防止注入攻击. 使用 ASP.NET 验证控件进行输入验证. 对不安全的输出编码. 使用命令参数集模式防止注入攻击. 防止错误的详细信息被返回到客户端. 概述 : 你应该在程序中验证所有的不信任输入…

aws s3 静态网站_如何使用AWS S3构建React静态网站

aws s3 静态网站There are a number of ways you can build a website with React such as Java with React, NodeJS with React, NGINX serving React, etc. For the single-page applications, all you need to do is to load the initial index.html. Once you load the ind…

大型网站技术架构(五)网站高可用架构

2019独角兽企业重金招聘Python工程师标准>>> 网站的可用性&#xff08;Avaliability&#xff09;描述网站可有效访问的特性。 1、网站可用性的度量与考核 网站不可用时间&#xff08;故障时间&#xff09;故障修复时间点-故障发现&#xff08;报告&#xff09;时间点…

大型网站技术架构(六)网站的伸缩性架构

2019独角兽企业重金招聘Python工程师标准>>> 网站系统的伸缩性架构最重要的技术手段就是使用服务器集群功能&#xff0c;通过不断地向集群中添加服务器来增强整个集群的处理能力。“伸”即网站的规模和服务器的规模总是在不断扩大。 1、网站架构的伸缩性设计 网站的…

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

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

一键seo提交收录_关于SEO行业中的某些信息,你究竟应该相信谁?又或者谁都不要信!...

「阿北SEO」是阿北最近才创建的网站和微信公众号&#xff0c;但本人并非SEO行业新手&#xff0c;也不敢妄称所谓SEO高手&#xff0c;1998年触网&#xff0c;一直低调&#xff0c;从传统网站到新媒体&#xff0c;从内容编辑、产品经理、COO&#xff0c;再到后来自己创业&#xf…

创立网站管理系统,关于新闻文章内无法添加附件的修改

论坛里晒了好长时间的bug&#xff0c;被俺用笨方法改好了............. 『清雨小竹』 0:10:59在吗&#xff0c;那个问题&#xff0c;我想了一个笨的方法解决了。原因是在网页编辑框内添加附件之后&#xff0c;超链接是<img border0 src"/Editor/Images/file/doc.gif&q…

在相关网站首页加载到手机上浏览网页

学了一段时间的IOS相信大家一定非常的想编写一个软件使自己的手机能够访问你指定的网站。其实呢这个实现起来非常的简单&#xff0c;下面我会为大家分享一下代码&#xff0c;另外还要实现网络的状态&#xff0c;就是那个白色的菊花&#xff0c;由于第一个实在是太简单了&#x…

优化网站设计(四):对资源启用压缩

前言 网站设计的优化是一个很大的话题,有一些通用的原则,也有针对不同开发平台的一些建议。这方面的研究一直没有停止过&#xff0c;我在不同的场合也分享过这样的话题。 作为通用的原则&#xff0c;雅虎的工程师团队曾经给出过35个最佳实践。这个列表请参考 Best Practices fo…

JiaSale 购物按钮 WordPress 插件:让你博客瞬间变成电商网站

什么是 JiaSale 长期关注我爱水煮鱼的读者可能知道我还有一个专门销售 WordPress 插件和主题的站点&#xff1a;WPJAM 应用商城&#xff0c;通过支付宝购买&#xff0c;成功之后就可以直接附件了&#xff0c;全程无需人工介入&#xff0c;我只在后面收钱即可&#xff0c; 。 …

规划以主机命名的网站集 (Windows SharePoint Services)

摘自MSDN&#xff1a;http://technet.microsoft.com/zh-cn/library/cc288637.aspx Windows SharePoint Services 3.0 既支持以主机命名的网站集&#xff0c;也支持基于路径的网站集。以主机命名的网站集提供可缩放的宿主解决方案&#xff0c;其中每个网站集都有不同的主机名。这…

android 清华镜像,清华镜像网站下载android源码并编译

8种机械键盘轴体对比本人程序员&#xff0c;要买一个写代码的键盘&#xff0c;请问红轴和茶轴怎么选&#xff1f;下载android源码方法&#xff1a;我的系统是ubuntu 18.04&#xff0c;主要参考了blog通过清华大学镜像下载Android源码并编译源码&#xff0c;通过国内镜像网站下载…

利用WINXP IIS服务自建ASP网站的步骤

利用WINXP IIS服务自建ASP网站的步骤 1. 安装搭建IIS服务环境(在可能需要下载IIS安装包)&#xff0c;控制面板&#xff0c;利用“添加/删除程序”的“添加/删除Windows组件”功能&#xff0c;安装“Internet信息服务”组件&#xff08;如Internet信息服务管理单元、公用文件、万…

干货分享!12款响应式的移动网站模板免费下载

如果你打算开发网站&#xff0c;你想要关注的第一件事就是网站的外观和感觉。另外用户体验很重要&#xff0c;现在是属于移动互联的时代&#xff0c;用户有可能通过移动设备浏览你的网站&#xff0c;因此同样重要的是要考虑你的网站在移动端的使用体验。 这个特殊的列表包含一组…