舞动的桥 阿里云首个百万IOPS云盘的背后

简介: 近日,阿里云推出了首个百万IOPS的ESSD云盘服务,性能上有50倍的飞跃,同时还具备超高吞吐、超低时延等特性,在真实业务场景中,PostgreSQL数据库的写入速度快了26倍。 如此超高的性能,有人会问,阿里云到底用了什么秘密技术?安全系数如何? 本文将从冗余设计思路出发,分享阿里云是如何建立存储冗余体系,抵御未知风险,解决故障率的。

1940年11月7日,竣工才4个月的塔科马海峡大桥在微风中大幅度舞动,桥上的汽车急速滑动,很快就戏剧性的垮塌。这件事故给建筑工程行业造成极大的震惊,很违反直觉,很低的风速居然会吹垮一座钢铁建造的大桥,在此之前所有的桥梁专家都没有意识到这个问题,事实上若干年后桥梁结构学与空气动力学得到极大发展,人类才彻底解决这个问题。

0915cf272a3d0f7616fcd8d03b7c54a80455f6f1

在工程领域通常将这类事前缺少认知,只有发生后才能意识到的问题统称为险恶性问题,这类问题杀伤力极大,对于盘古这样的分布式系统同样会面临这类险恶性问题,既然对问题都没有认知,又防御何谈呢?阳光之下并无新事,我们从各种安全至关重要的行业中广泛的学习,发现各个行业在面对这类问题时,已经有较为丰富的经验了,同样以桥梁为例,早于的塔科马海峡大桥的金门大桥(1937年建成通车)已经巍然屹立了80多年,可谓饱经风霜,后人在分析其设计者留下的设计手稿时发现早期的设计者在面对未知世界时非常谦卑,他们知道有些问题他们搞不清楚,可能会有风险,所以他们做了充分的冗余设计来抵御这种未知的风险,通过充分的冗余来斩断可能形成的故障链。

其实存储是一个高危行业,首先要保障的是不错,不丢,可访问,只有在这个前提下,极致的性能才有意义。不错,不丢,可访问,看起来平淡无奇,但实践下来常有如履薄冰之感,因为分布式问题太过复杂,因为操作系统、硬件都不是绝对可靠的,因为代码不可能绝对无bug,运维也不可能从不出错。有太多险恶性问题,即使行业先行者也出现过数据丢失和不可用。在盘古设计之初我们学习了上文中冗余设计的做法,承认自己所知有限,在很多地方做了冗余设计来抵御未知风险,并且在长期的演进中不但强化这类冗余设计,绝不为了性能或者其他的目标来做冗余设计上的妥协。

b6e5608fb4122ffdfed3e5e6e8d406c2c3242310

这些年来阿里云存储团队的同事们始终心存畏惧,铁棒磨针,始终专注于提供稳定可靠高性能的存储,天道酬勤,10年来我们做到了数据不错,不丢,非常庆幸。

下面我分享几个阿里云在存储方面的冗余设计:

  • E2E的数据校验

磁盘可能出错,内存也会出现bit反转,内核和应用程序更可能出错,甚至我们遇到过某厂的一块CPU在做某些特定运算时就会出错,在这样一堆不可靠的软硬件环境下,要构建出一个稳定可靠的存储平台(没有哪个用户能接受哪怕一个bit的错误),是非常困难的,一般的做法是端到端的逐层做数据校验,盘古很早就做了E2E 的数据校验。但一次在一个长时间大压力的测试环境上MySQL 报数据错,核对数据发现CRC和数据是匹配的,并没有出错,核对另外2份拷贝,发现另外两份数据也是CRC自洽的,而且另外两份完全一致,但与MySQL读取的这一份差异非常大。初步判定是MySQL读取的这一份数据出错了,但这份错误的数据是CRC自洽的,这就非常奇怪了,如果是存储介质出错,不太可能还保持CRC自洽,在读写链路上查看了所有日志,没有找到任何异常。调查的同事反复核对三份拷贝,说这一份看起来就不像是这个文件的数据。

说者无心,听者有意,另外一个同事想在哪种情况下会出现这样的错误,由于我们的CRC和数据是逻辑空间上是相邻的,会不会是这片数据其实不属于当前文件,而是和另外一个文件搞串了?大胆假设,小心求证,全盘扫描后果然证实了猜想:A和B两个文件中间有一部分内容写串了,详细调查后确认是EXT4 文件系统的BUG,它在做空间管理的时候出错,导致A文件的一个数据片写入到文件B, 文件B中有一个数据片写入到文件A中,由于写入的流程一致,CRC又和数据放置在一起,导致CRC无法发现这个问题,确认问题后解决起来就很简单了,要么将CRC和数据分开放置,要么在计算CRC的时候加上文件的一个特征值。

有E2E的数据校验是否就安全了呢?呵呵坑深不见底,硬件行业的人知道磁盘极小的概率发生静默错误(读出来的数据是错误的,但底层接口不报错,磁盘本身也不报错),如果三份拷贝很长时间都未被读取,而在这个较长的时间窗口内,如果有三份拷贝所在的3块盘都发生了静默错误,用户读取数据时,存储系统就会发现3份CRC校验都不通过,尽管知道出差错了,却没有任何办法修复。为了降低这种情况发生的概率,我们会定期扫描冷数据,校验其CRC。

  • 压缩检验

一天新来的同事问大家:“我们在做压缩的时候,为啥压缩完后,立刻又解压缩一次,并且将解压数据和原始数据再去比对一次?直接压缩不就完了吗?”,众人笑而不语,他思考良久,也未能找到足够的理由。团队内老司机告诉他,压缩本身是一个很复杂的东西,有些库是第三方提供的,尽管我们会review代码,有严格的引入测试,但没人能保障其绝对正确,万一压缩出来的内容是错的怎么办?CPU也可能存在一些偶发性的错误,如果压缩时发生这类小概率的偶发性错误,该怎么办呢?但户数据是绝对不能错的,所以我们这里采取防御性编程,压缩完后立即解压,再和原始内容比对,确保数据不错。

  • PAXOS

说到分布式存储,很多人就言必称PAXOS和RAFT,PAXOS俨然就成了救世主。PAXOS, RAFT 的确是好东西,但并不是所有的场景都适用。在一个分布式系统中,大家会认为在一个较小的时间窗口内同时发生2台机器failover是一个小概率事件,但随着集群规模的扩大,集群数量的增多,最终小概率事件长期积累,就变成必然事件了,在quorum=3的时候,PAXOS 协议是无法处理double fail的,甚至无法自愈,需要紧急人为干预才能恢复。想想半夜收到告警,你能在几分钟能处理好用户的IO HANG? 适合的才是最好的,实践是检验真理的唯一标准。

  • 磁盘错误

对于做存储的人来说,磁盘故障是司空见惯的事情了,本身有一套成熟的处理机制。但百密一疏,我们还是在这上面栽过跟头,进程主动检测到binary所在的系统盘故障,老司机当然知道此时不能再在该盘上发起任何IO 操作,日志写入到内存中,调用exit, 安静的退出,不带走一片云彩即可。但进程居然无法退出,调用exit 无法退出!而此时其它线程还在继续工作,在干坏事。所有人都觉得匪夷所思,为啥主线程调用 exit, 进程未能退出,其他线程在长达几分钟内还在继续干坏事?团队大牛反复推演,不放过任何一个蛛丝马迹,终于搞明白了,原来磁盘故障后,exit这段代码本身并不在内存中,调用时会产生major fault, 中断处理程序会尝试从磁盘上load相应的代码段,而磁盘已经故障了,load 被hang住,导致出现前面这些匪夷所思的怪事。

今天云计算已经成为互联网的基础设施,随着众多电力、水务、医疗企业上云,阿里云又成了这些基础设施的基础设施,任何一个黑天鹅都有可能带来难以估量的影响。只有对这个未知的世界保持敬畏,保持谦卑,才能走得更远。

相关文章
|
存储 缓存 人工智能
PLC SSD虽来但远,QLC SSD火力全开
PLC NAND的普及还需要一定的时日。乐观估计,PLC SSD最快也要到2025年才可能量产进入市场。所以,PLC SSD还是一个未来的产品,当前我们的目光还是聚集在QLC身上吧。
|
编解码 人工智能 缓存
启明云端分享|Sigmastar SSD202D都有哪些特点嘞~
启明云端基于Sigmastar SSD202D出品的分辨率为720x720的4寸超级智能面板应用于酒店,它集不同设备的功能于一身:智能网关、智能开关、空调面板、背景音乐面板、在线、离线AI语音等,可代替多个智能单品。操作便捷,交互出色,真正实现酒店的智能化、自动化,为客户带来全新的入住体验。
560 0
启明云端分享|Sigmastar SSD202D都有哪些特点嘞~
|
tengine 算法 智能网卡
2017双11技术揭秘—千亿级流量来袭,如何用硬件加速技术为CPU减负?
在刚过去的2017年双11零点流量高峰的考验下,主站接入层Tengine Gzip硬件加速机器运行平稳、同等条件下相比于未开启QAT加速的机器性能提升21%左右。
3868 10
大带宽增长需求 | 带你读《5G承载关键技术与规划设计》之六
带宽是 5G 承载最为基础和关键的技术指标之一。本节分别对单基站承载带宽需求、回传带宽需求,以及前传及中传带宽需求进行分析和评估。
大带宽增长需求   | 带你读《5G承载关键技术与规划设计》之六
|
机器学习/深度学习 大数据 开发者
【阿里云新品发布·周刊】第4期:快到飞起是怎样的体验?高达100万IOPS的高性能ESSD云盘!
将你想了解的,新产品、新版本、新技术、新功能、价格调整,评论在下方,下期更新!
6420 0
【阿里云新品发布·周刊】第4期:快到飞起是怎样的体验?高达100万IOPS的高性能ESSD云盘!
|
存储 调度 双11
阿里系统软件迎战“双11”超高流量峰值全纪录
阿里系统软件是如何应对“双11”流量峰值的呢?以下为大家一一揭晓!
3111 0
|
存储 视频直播 测试技术
乐视云如何炼成弹性支撑百万级别直播流
在观看视频直播中,难免因打断错过精彩片刻。
2423 0
|
Web App开发 存储 固态存储
[新品发布]全球首个百万IOPS云盘来了 阿里云推出超高性能云盘ESSD
搭配ECS云服务器使用, ESSD可提供单盘高达100万IOPS的随机读写能力和低至0.1毫秒的单路时延,相比SSD云盘分别提升了50倍性能上限和降低80%读写时延,单台云服务器整体存储性能提升500%。
6929 0