从亚马逊最大宕机事件看系统架构
2011-04-26 08:59:12 阿炯

本站赞助商链接,请多关照。 由于亚马逊在弗吉尼亚州(Virginia)北部的云计算中心宕机,包括回答服务Quora、新闻服务Reddit、Hootsuite和位置跟踪服务FourSquare在内的一些网站受到了影响。这些网站都依靠亚马逊的这个云计算中心提供服务。亚马逊服务页面显示Virginia北部的数据中心中断。具体如下:问题似乎从太平洋时间21日1:41开始:我们正在调查由于ESB卷引起的延时和错误,以及US-EAST-1区地EC2实例连接失效问题。最晚的一条更新出现在早上6:09:EBS的API错误和卷延迟在受影响的区域任然存在。我们正在继续寻找解决办法。

这次事件可以说是Amazon史上最严重的宕机事件。亚马逊没有表示它将在什么时候修复这个故障的具体时间。北弗吉尼亚州云计算中心是亚马逊经营的许多云计算中心之一,不过这些系统的设计通常是一个中心宕机不会中断其它的云计算中心,也不会影响使用那个服务的用户。亚马逊没有解释它为什么没有绕过北弗吉尼亚州云计算中心的故障把工作量转移到许多其它的云计算中心。



亚马逊拥有4个不同区域的不同数据中心提供云服务

截止4月22日,由于技术原因导致亚马逊计算服务中断事故已经持续了两天,业界分析师表示这次事故将会导致许多公司重新斟酌对远程的、没有控制权的计算机的依赖程度。

“这是给云计算提了一个醒”,IDC的分析师Matthew Wastwood表示,云计算是指通过因特网来访问位于远程大型数据中心的服务和信息,这些服务和信息是位于不确定的任何位置,就好像是位于云中。“它将引发业界对云计算的重新思考。”他说,这场思考将很可能会聚焦于什么数据和计算操作应该放到云上,什么是需要放在公司的防火墙内的。

Eastwood认为,这次事件还将会导致重新审查自己的云服务契约是否合适,是否需要实现备份和恢复服务,包括为不同位置的数据中心支付额外的费用。这是为什么呢?分析师表示,很明显,在本次实践中受打击最大的是一些创业公司,他们为了追求快速发展,没有选择昂贵的备份和容灾服务,从而导致数据不可恢复。

Amazon五年前创建了它的副业务:通过网络为企业提供数据中心先进的计算资源。今天这家公司成为飞速增长的云计算业务的早期领导者。在企业当中,云计算模型快速流行起来,因为它能够让企业把计算工作外包出去,从而避免了成本问题和令人头疼的数据中心运维只需按需使用,通过网络来获取计算机处理器和存储,而不用去拥有自己的机器或这是操作软件。

亚马逊有成千上万个企业客户,包括Pfizer和Netflix等,也有大量的创业公司,它们的业务经通常依赖于AWS。收到本次事件影响的包括Foursquare,一个本地社交网站Quora,一个问题和答案服务Reddit,一个新闻分享网站BogDoor,一个专门为网络出版商做游戏工具的公司。这些公司所报告的问题不尽相同,但是都包括了不能访问数据、服务中断和网站宕机等。

分析师说,一些已经选择了在Amazon计算机上进行关键操作大公司,倾向于选择付与计算实例同样的钱。视频网站Netfix已经成为Amazon云的大客户,其网站技术的大多数用户电影队列、搜素工具和喜好等都运行在Amazon数据中心。

Netfix表示平安渡过此次事件,“那是因为Netfix能够充分利用AWS的冗余云架构”,这防止了任何位置的技术故障,Nstflix的发言人Steve Swasey表示。

BigDoor是位于西雅图的一个20人左右的创业公司,因为Amazon的失误而受到打击。它有着Amazon的备份和恢复服务,该公司的 CEOKeith Smith表示,但是仅限于Amazon位于Virginia的数据中心。“总有要有一个权衡”,Smith说,注意到费用和开发者的时间将被要求来做更多的事情。

直到星期五早上,BigDoor的大部分用于支撑游戏和奖励功能的在线出版商的服务已经备份,但是站点任然不可用。

IDC预测,云计算将会以25%d的年增长率增长,到2014年将会到达555亿美元。主要技术供应商积极推出不同的云产品一些强调公用模式的服务,如 Amazon,还有一些更集中于向企业出售硬件和软件,以帮助企业实现海量计算工作负载的高效性。后面一种情况,企业除了使用云计算,还必须拥有这些基础架构,因此称为私有云。

Rackspace公司的首席战略官和数据中心服务专家Lew Moorman说,亚马逊的中断事故跟坠机差不多,属于普遍事故中的一种。他指出,飞机旅游比开车旅游还是安全一些的就好比云计算比公司私有的数据中心要安全。“从世界范围内来看,每天公司内部都会出现宕机事件。”Moorman表示,“每一段时间都很小,但是他们加起来就是更长的中断时间、金钱损失以及业务损失”。

Amazon的挫折将给我们一些很值得借鉴的经验,“我们都有兴趣看到亚马逊处理好这件事情的方法,”Moorman表示,Moorman所在的公司Rachapace在云计算领域是亚马逊的竞争对手。

系统设计常见问题

1、读操作频繁的系统

当系统中读操作频繁时,可能会导致响应时间变慢并增加数据库负载。

解决方案
使用缓存:实现缓存机制(如Redis、Memcached),将常访问的数据存储在内存中,减少数据库读取次数,加快响应速度。

2、高写入流量

大量写入操作可能会使数据库不堪重负,导致性能下降甚至可能发生数据丢失。

解决方案
使用异步工作者:将写入操作卸载到异步工作者中,后台处理任务,从而减少数据库的即时负载。
使用LSM树数据库:使用由日志结构合并树(LSM树)驱动的数据库(如Cassandra、RocksDB),这些数据库针对处理高写入吞吐量进行了优化。

3、单点故障

系统中的单点故障可能导致该组件失败时整个系统停机。

解决方案
实现冗余和故障转移:确保关键组件(如数据库)具有冗余设计,并具备故障转移机制。例如,使用多个数据库副本或集群解决方案,以在发生故障时不出现停机。

4、高可用性

确保系统始终可用,即使在发生故障时也能处理请求。

解决方案
负载均衡:将传入流量分配到多个服务器实例,确保请求由健康的服务器处理,从而提高系统整体的可用性。
数据库复制:实施数据库复制,在不同的服务器上创建数据库副本,以提高故障情况下的耐用性和可用性。

5、高延迟

高延迟会降低用户体验,导致系统响应速度变慢。

解决方案
使用内容分发网络 (CDN):部署CDN,将内容缓存并从地理位置上更接近用户的服务器提供服务,大幅减少静态资源(如图片、脚本、样式表)的延迟。

6、处理大文件

管理和存储大(量)文件可能会对传统数据库和存储系统造成压力。

解决方案
使用块存储:适用于需要快速访问大量数据块的结构化数据或数据库。
使用对象存储:适合无结构数据,如媒体文件、备份和大型二进制文件。例如,Amazon S3和Google Cloud Storage提供可扩展且耐用的存储解决方案。

7、监控和警报

没有适当的监控,系统中的问题可能无法及时发现,导致长时间的停机或性能下降。

解决方案
集中式日志记录和监控:使用ELK堆栈(Elasticsearch、Logstash、Kibana)等工具实现集中式日志记录和监控系统,以聚合日志和指标,设置警报,并深入了解系统性能和健康状况。

8、降低数据库查询速度

随着数据库的增长,查询速度可能变慢,影响系统性能。

解决方案
索引:正确地为数据库表创建索引,以优化查询性能。索引使数据库能够更有效地定位所需数据。
分片:使用数据库分片,将数据分布到多个服务器上。这样可以水平扩展数据库,使其能够同时处理更大的数据集和更多查询。


上文源自:IT168

《大型网站技术架构:核心原理与案例分析》阅读摘录

本书清晰地讲述了网站架构是如何一步步演进到现在的样子的,接上文,更好地处理如上文所述的灾难级别的故障,从架构上提供一种解决问题的方式方法。

负载均衡

Nginx 一般用于七层负载,吞吐量有一定限制。DNS 和 Nginx 之间,接入 LVS、F5 等四层负载均衡。

DR 模式:


负载均衡

Session 管理方案演化

session 复制方案,复制成本高,无法大规模应用:


session 绑定方案,无法对宕机容错:


session 的 cookie 方案,无法应对客户端关闭 token 的情况:


session 服务器


数据备份

异步热备:


同步热备:


失效转移:


预发布


缓存:

浏览器端缓存,Expire、Cache-control。

APP客户端缓存:大促之前把 APP 需要的访问素材提前下发到客户端。

CDN 缓存:推送机制和拉取机制。

memcache 缓存:


NoSQL

一般而言 NoSQL 数据库都放弃了关系数据库的两大重要基础:
以关系代数为基础的结构化查询语句 SQL
事务一致性保证 ACID

强化了:
高可用
可伸缩性

可扩展性

事件驱动架构:


消息队列原理

分布式服务框架:


开放API


密钥安全管理

密钥管理的目的是 防止密钥被广泛泄露:


风控系统

基于规则引擎的风控系统:


基于统计模型的风控系统:


秒杀系统

秒杀系统整体架构


秒杀页面中加载 js 文件的 url 时添加随机编号,穿透缓存,例如:
<script type="text/javascript">
    //为了兼容高版本chrome浏览器,此处不能读取缓存,故采用加随机数方式引入脚本
    document.write("<s" + "cript type='text/javascript' src='//cdn.freeoa.net/jquery/3.3.1/jquery.min.js?" + Math.random() + "'></s" + "cript>");
</script>

<script type="text/javascript">
    document.write("<link href='css/style.css?" + Math.random()+"' rel='stylesheet'>");
</script>

降级

这部分来自《亿级流量网站架构核心技术》

开关集中管理,通过推送机制把开关推送到应用。

服务功能降级,关闭一些不太重要的调用。

将读请求降级为只读缓存。

将写请求降级为只写缓存,异步更新 DB。

爬虫降级、风控降级。