摘要: 12月13-14日,由云栖社区与阿里巴巴技术协会共同主办的《2017阿里巴巴双11技术十二讲》顺利结束,集中为你们分享了2017双11背后的黑科技。本文是《省身:分布式存储系统Pangu2.0在双十一中的战役》演讲整理,主要讲解了分布式存储系统Pangu2.0在双11一役中的表现,以及这一系统的架构,研发历程,和在提高系统稳定、强化系统性能、压缩用户成本、以及扩大业务适配等方面所取得的优异成绩。前端
12月13-14日,由云栖社区与阿里巴巴技术协会共同主办的《2017阿里巴巴双11技术十二讲》顺利结束,集中为你们分享了2017双11背后的黑科技。本文是《省身:分布式存储系统Pangu2.0在双十一中的战役》演讲整理,主要讲解了分布式存储系统Pangu2.0在双11一役中的表现,以及这一系统的架构,研发历程,和在提高系统稳定、强化系统性能、压缩用户成本、以及扩大业务适配等方面所取得的优异成绩。算法
分享嘉宾:省身 数据库
阿里云资深技术专家,2012年加入飞天Pangu团队,主攻分布式存储方向,推进了Pangu2.0在双11期间的全面落地安全
这篇整理来自于阿里云飞天八部Pangu团队技术专家「省身」在2017阿里双11在线技术峰会中的分享,该分享总体由三个部分构成服务器
1.Pangu2.0在双十一当天的表现网络
2.Pangu2.0的背景和架构 以及完善这一系统的历程架构
3.详细介绍Pangu2.0在稳定性,高性能,低成本和业务性上面的一些进展运维
实测业务支持,在双十一中保持完善与稳定异步
既然把双11做为一次对Pangu系统的战役,那么胜利的目标就是在业务支持方向达到最佳,事实上,Pangu2.0在双11的业务支持主要由四个部分构成:分布式
1.集团DB
2.中间件
3.列式数据库Histore
4.对蚂蚁金服支付业务的支持
那么就首先从DB开始聊聊吧。根据下面的图片显示,双十一当天的数据库压力存在明显的峰值(即波峰与波谷),但同时能够看出,全天以内衡量I/O质量的时延Latency值却极为平稳的保持在500上下,没有明显的波动,若是用一句话来归纳I/O表现的状况,想必就应该是「如丝般顺滑」,不存在惊喜,也不存在乎外,且一样没有超出客户们的预期,监控人员对着平稳的波动表也抓不到什么特殊的数据——尽管这一天的UPS吞吐量波动堪称惊人,但时延指标却一直平稳。着充分的代表:系统的容量压力还远远没有达到上限,依旧能够对更大的UPS实现支持。
咱们能够在PG-BS图上看到全天的UPS状况和时延状况。上图为将所有UPS平均到每台机器上的数据。很容易能够看出,UPS的峰值出如今上午十一时先后,这是由于在这一时间点,工做人员对业务进行了一些热操做,致使此时的峰值一跃提高至平均值的十倍,但对应到下图中的时延指标,却只出现了不到十分之一水平的波动,全天读写表现出极为平稳的态势,仅仅到双十一当夜二时左右由于I/O SIZE的变化方才又一次带来大体十分之一的波动。
接下来谈谈中间件。起初由于集群负载偏高,不管是存储水位仍是UPS水位都处于一个很高的水平,致使你们对此产生了一些担忧,但实际值班时,咱们对中间件时延的检测结果一样远小于预测,Latency的抖动幅度只有用户预期的八分之一,曲线很是的漂亮。
Pangu2.0诞生的缘由,历史沿革以及相关架构
这里首先对Pangu1.0的总体架构进行介绍:它是一款经典的分布式存储架构,由几个部分构成,上层是PanguMaster,下辖三台机器,负责解决存储原数据,命名空间以及具体数据的放置策略等问题,下面的部分是具体的存储节点,它的功能是肯定数据具体放在哪台机器上,并在这一层对数据进行存储,一般格式为64位。这是一个极为经典的架构,与业界的不少存储系统都很相似,例如Google的GFS,Hadoop的HDFS等等。他们的宏观架构都相差很少,具有着成熟的应用环境,完善的就近调度策略,其对线上业务的支持也已经持续了很长的时间。
推出Pangu2.0的缘由
这是一个硬件和网络飞速发展的时代,最先作存储系统的时候,主流的网络制式仍是千兆网。而现在,双25GB乃至100GB的网络已经逐步的投入使用。最先的存储媒介HDD机械硬盘须要10毫秒的时延才能成功进行访问,而如今NVME的盘时延则比之极低,十微秒以内就能完成一次写入,硬件的时延从毫秒压缩到微秒,使性能瓶颈的逐渐转移到传统的存储软件,传统软件没法适配新的硬件,令时延问题变得突出,必须进行革新来适配硬件的变化
能够举这样一个例子来方便说明——假设过去去美国一趟,飞机须要在空中飞行十个小时 ,中美海关各须要一小时的通关时间,旅程的总时长为12小时。但随着技术的进步,某款超音速客机在一小时就能直接抵达,那么整个旅程就变成了三小时,三分之二的通关时间就显得冗长起来。类比分布式存储系统:开始的时候,由于硬件的瓶颈,软件响应时间的长短并非突出的矛盾,但随着硬件的提高,这一矛盾的重要性也会日益凸显。咱们可以得知:软件必须适应硬件的变化,这是创造良好用户体验的必要前提。
同时,近些年来,用户上传的数据一直在飞速的增加,分布式系统所覆盖的文数件也从十亿级跃升到了千亿级,单纯垂直方向的Scale-up的存储架构已经难以知足用户数据的须要,咱们更多的开始须要一个可以水平扩展,不断知足千亿乃至更高级别需求,可以实现Scale-out模式的存储架构
做为通用的存储平台,Pangu系统一直在力求对更多的业务进行支持。完成多业务的的并行发展须要令模块分层更加单元化,以适应不一样使用者定制化的需求。Pangu1.0每次发布一个新版本都必须对每种不一样业务需求进行综合考量,不只时间上难以协调,且随着团队的规模逐渐扩大,这样一个单元和模块化不够细致的架构也愈发的不适于一个大团队的开发。亟需一个更加高效的架构,以更好的分层和更好的模块化来知足大团队快速迭代开发的须要。
还有一点,随着近年来专有云,混合云的快速发展,对存储系统独立输出,轻量化输出的需求也愈来愈强烈,Pangu1.0的输出不够轻量级,敏捷性也略显不足,这个过程也一样是须要加速处理的。
Pangu2.0的整体业务架构
接下来,咱们来聊聊Pangu2.0的整体业务架构。它的最底层是物理硬件架构与Datacenter网络,其上则是Pangu的存储系统,里面包括存储节点,分布式系统,存储系统内部的上层辐射出支持的多个业务方向,例如Block FS,LogFil,DBFS以及 HDFS ,整个系统的最上层则是目前主要的业务形式,包括存储服务、数据库服务、和大数据处理等一众分类。
详细分析Pangu2.0的模块划分,则能够将其分为两个部分,下层橙色的部门称为PanguCore,即核心层,上层绿色部分则对应于各项业务的适配。PanguCore的最底端是一个单机存储引擎,目的在于屏蔽左右硬件差别,保证为上层业务提供一致和接口相对稳定的内容,以此来解决基于硬件的高性能问题和新硬件的适配问题。Core内部的蓝色部分下辖多个模块,包括多副本协议、元数据管理数据放置策略、EC、压缩、多种数据间的分层存储,以及自研的分布式cache等。两层架构的应用有效的克服了1.0版本的不足,使各个模块可以独立发布,提升了敏捷性。模块改革的耦合度低,团队战线布的很是宽,也更适合一个大团队进行共同项目的开发。
解决核心诉求 作到用户满意
存储系统的核心诉求无外乎几点,重中之重的稳定性、性能尽量高、成本尽量低,运维难度一样越低越好。在接下来的文段中,咱们将针对这些用户永恒的追求,来详细的介绍Pangu2.0在这四个部分作到的一些成绩。
稳定性:高可用
首先是在稳定性方面的成果。面向线上众多的块存储集群,咱们要在平常工做中频繁的对其进行扩容、缩容、下线、机器维修、集群总体迁移、软件版本发布和变动等各式各样的操做。在自始至终的整个过程当中,咱们实现了整年零故障,彻底保障了业务的稳定性格。
如今正在进行的 “系统盘云化”工做也是一项良好的佐证,将来,咱们的服务器物理机将再也不采购系统盘,而是直接经过协议导出作成云盘,这一样充分体现了咱们对稳定性的掌控,一旦突发问题产生,咱们的终极目标就是让用户须要意识不到存在稳定性波动的可能。实现这点须要内部极为复杂的技术手段和管理手段,以及反复进行的尝试。
咱们的另外一个成果在于使基础设施彻底消除了故障依赖,没个数据三副本都分散在三个rack上,每一个rack都是独立的供电和网络单元,发生供电或交换机故障时不会影响所有数据,对用户读写也不会产生影响。以及保持健康状态,即对全部硬件进行自动化管理,在用户感知前就可以自动发现问题和解决问题,对故障硬件自行触发汰换流程,实现无人为的有机循环。
说道稳定性,实现单机的一致性就是保持数据稳定不可或缺的一部分:平常使用中,数据和日志同步落盘写入一个存储,必须保证两者一致来保证读写稳定,即数据写透盘片后,必须进行掉电测试。
第一是进行端到端的数据校验 ,消除静默错误。每次数据写入都要经过一个CRC来进行保证,无论硬盘,内存仍是CPU网络出现错误,用户在读取数据的时候要可以知道数据是错的,绝对不能将错误的数据传递给用户。
第二是快速副本补齐。在某些紧急状况下,咱们须要进行对于三副本的数据复制,集群交换机故障或者掉电的出现都属于这一范畴。这一过程很是精细,且具有严格的优先级区分。发生硬件故障后必须先复制高优先级的(例如三个副本只余其一)。在大范围掉电条件下,先进行单副本chunk数的下降,随后才进行单双副本的共同复制。该过程当中存在精准流控,可以反复权衡流量的使用,保证复制的同时前端用户的I/O依旧维持在可用度很高的状态,并采起并行复制的方法在半小时内完整恢复单台宕机的所有数据,从而尽量的淡化影响。
前文中,咱们讲了用于维持稳定性的一些大致技术手段,而面对系统抗压能力的测试,咱们也一样会采用很是严格的手段。从图中能够看到,平均每台机器都在每秒上百个UPS的条件下各类自杀进程(包括但不限于cs、bs、同时杀两台bm等)的failover 测试才勇于交付给用户。这一套测试和管控成熟 不管下面的进程如何failover,上面的UPS始终处于一条直线上 波动极小。
除了自杀进程,rack掉电的模拟每每会显得更加的极端,每一个版本发布前咱们都要进行rack掉电的模拟:直接关掉涵盖48台机器的rack集群,并测试其恢复的过程,实际结果代表,掉电的机器能安全的将负载转移到其它机器上,待掉电的rack恢复后再将负载转移回来,所有掉电机器的功能都能在一分钟以内恢复。总体过程对用户使用上的冲击很小。
还有另外有趣的一点,这比较像一道几率题:一般状况下,在一个集群的规模内,很是小的时间窗口内(例如一台机器重启的时间内)两台机器failover的几率应该是能够忽略不计的,但随着样本的容量增长,小几率事件长期积累就会必然发生,很短的时间窗口内两台机器同时failover 的糟糕境况也会时有出现。若是一个客户端同时写入A、B、C这3台机器,但A和B都出现了failover,就会只剩下C的一份造成I/O HANG。解除的惟一方法就是进行数据复制,将C中的数据复制到D,造成至少两份数据以确保其安全,可是在复制的几秒钟的时间内,这一I/O HANG没法解除,可能会严重的影响用户业务。这一问题在Pangu2.0中获得了妥善的解决:咱们直接假定double fail 常在,默认用Block Sever对A、B、C进行写入,若是A和B同时出现错误,就直接切换文件,把数据写到一个其它流上(例D、E、F),从而将用户干扰降低到毫秒级别。
咱们知道,在工程领域,黑天鹅事件的发生一般是没法避免的,永远会有超出认知范围以外的意外在前方等着咱们。这种事情发生时,咱们要考虑的内容就会变成怎样在既定条件下将损失控制在一个最有限的范围内。对此,咱们针对Pangu系统的1.0版本进行了优化,将元数据管理划分红两个部分:即Namespace 和Meta Server。把原来三节点的元数据管理分红多组,离散的分担到全部存储节点上去,即便其中的一组发生完整故障,也只会影响一小部分用户,能够根据内部的其它策略进行及时的迁移。确保不管任何一个组件发生故障, 整个系统依旧能维持在可用的状态,并作到在最短期内恢复,怎样减小爆炸半径,在极端事件发生的状况下保证系统柔性可用。
接下来将问题细化到具体单个存储节点的failover。咱们此前的调度是全局调度,它存在必定的缺陷:若是一台机器出现宕机,那么这台机器上承载的所有I/O流都会受到影响,甚至会在极端状况影响全部的用户。而现在,咱们进行了一个分组关联,将部分用户和某个存储节点进行连接,成功使机器错误的影响范围缩小至最低,若是集群规模较大,影响用户的比例就会变得极低。
技术手段的发挥离不开相关标准的制定,硬件和环境上的标准也是稳定性足以实现的重要部分。线上集群诸多,因为历史缘由的影响,各种硬件,网络,内核,和应用配置等信息的跨度都很发散,形成了隐形的危险:任何一个变化的影响都很难百分百的提早进行覆盖和评估。对此,咱们着力推行环境标准化,标准服务化, 一切内容都只有先遵循标准才能进行上线 ,从而真正把环境标准落到实处。
此外,改进稳定性的手段还有很多,好比,咱们会组织两个工程师团队造成攻守同盟,
抛开经验,发挥想象,蓝军的任务是在系统不一样单元制造failover,例如磁盘,网络,内核等,红军进行防护,并在接下来评估对错误系统和用户的影响。经过这一内部竞争显著提高了系统的稳定性。
针对运维操做的响应性,咱们制定了一个「双十」标准做为最后的两道防线:任什么时候候收到告警,团队都要在十分钟内响应。且一周收到的告警数不得超出10条。在技术人员的长期坚持和推行下,这两个标准都取得了成功。
高性能:对竞品和自个人同时超越
先看一组客户对于Pangu2.0性能的反馈。
1.DB: XDB+Pangu2.0 取得了超Aurora的4倍以上的TPS。后续会和Pangu2.0 在性能,成本,高可靠等领域深度合做,为用户提供更好的DB。
2.中间件:镜像加速项目每次镜像push、pull时间从50多秒缩短至1秒内,一个月全集团走aone的发布能够节省数百人天。Pangu 2.0 性能和稳定性全面超越竞品,今年合做磨合很是顺利,明年大规模的存储计算分离,「离在线」和「在离线」混部会大力推动。
3.分析型数据库:pangu2.0 很是靠谱,相比同规格的物理盘,为分析型数据库带来至少10% 的性能提高,后面分析型数据库的存储会所有迁移到pangu2.0上。
4.ECS云盘产品:性能大幅超越AWS最新的C5!存储领域提早实现对AWS的技术超越。
下面是对Pangu2.0和AWSC5实际性能的表格对比,能够很直观的看出,不管是单路读时延、单路写时延;仍是单路读99.9%时延 、单路写99.9%时延,蓝色的Pangu2.0都要明显优于橙色的AWSC5,极限吞吐量更是超越了一个数量级。
这么好的性能数据从哪儿来
首先,Pangu2.0拥有本身的单机存储引擎Bypass OS kernel,它是一个基于SPDK的用户态文件系统,区别于使用VFS、Block Layer 和drivers进行传递的传统文件系统,Bypass OS kernel直接将文件返回NVME盘,使用Polling方式进行访问来下降延迟,Data + meta直接一次落盘,整个过程当中无需进行任何拷贝。
网络上,Pangu2.0再也不使用基于内核的TCP,而是利用RMDA网络 Bypass掉内核,省略系统调用的过程。一样使用Polling方式进行访问,全过程零拷贝。
另一件颇有趣的事情就是在线程模型上的优化,咱们将客户端和服务端进行了一些配合, 客户端的连接由指定线程处理,造成Run-Complete的线程模型,从I/O请求到业务完成所有在一个线程内转完,没有任何上下文切换,且时间可控、关键路径无锁、无数据拷贝。
咱们还真正实现了I/OPS与云盘空间的解耦,现有的云盘最大IOPS值为20000,此前,若是用户须要使用2万I/OPS,则至少须要购买600GB空间才能实现。而Pangu2.0 完全实现了I/OPS与空间的解耦,只需128GB的云盘便可实现超百万I/OPS,对I/OPS需求大,空间需求小的用户尤其适用,避免了维度浪费。只要愿意,多大的盘都能获得超高的I/OPS。
前面的文段中,咱们综合介绍了平均水平上Pangu2.0在高性能的方面举措,但评价I/O水平的指标除了平均水平外还有长尾收敛,咱们每每但愿长尾收敛的越快越好。一样,Pangu2.0在长尾指标上也作了很多的建设。
第一是读长尾快速收敛,咱们作了一个Backup Read的算法来进行优化,载入Read CS1后,若是短期内没有返回值,那么会在极短的时间内直接载入CS2 ,CS2无返回值则继续读CS3,只要有一个请求获得回复,咱们就认为是响应成功的,就能在即便最坏的结果下也能把用户的读操做收敛到四倍的平均时间内,如图能够看出,在百分率达到99.9以后,读长尾的收敛效果极佳。
第二是写长尾快速收敛——这里采用2-3异步的模式进行。对于一个须要写入三份的文件, 一般状况下认定写入两份即为写入成功,第三份可经过异步化操做的方式进行补充。假设文件写在A、B、C三台机器上,且其中一台真的发生了故障,那么写入A和B两份成功后,首先将信息返回用户,再对另一份在客户端中进行range的记录 (描述第三份有那些数据没有计入),再从后台向空置的C端进行推送,在这一条件下,即便系统中出现单机的抖动或故障,绝大多数用户也可以能够被系统过滤,从而可圈可点的下降时延指标。
此外,分布式系统中还有一个很是复杂并难以处理的问题:局部热点。通常状况下,规模较大的分布式系统都有多个租户同时使用,一部分节点会由于外界巨大的访问量而造成热点。例如图中的三台机器,若是有一台变成热点,前文中的快速读写可让用户屏蔽掉这个问题,但若是状况再进一步,有两个节点都变成热点,读取数据可能影响不大,但写入的过程则会出现困难
这时,咱们会引入一项多流技术。将由于造成热点而速度降低的流废弃,马上切换到另一个流里去。由于新出现的Datafile客观全新,因此就不会存在这个问题,这一切换过程只须要一个RPC的时间,能够作到用户基本无感知,若是问题出如今BS上,即BS所承载的I/O过量的话,就会在用户中产生一个较高的时延。这时咱们一样会对BS进行切换,对用户的I/O的影响依旧能够控制在很小的范围内。
实际上,在不少维度中,基于云的Pangu2.0已经对物理盘实现了超越,例如:
1.多流并行映射技术,使得云盘的吞吐量能够水平扩展,吞吐量大幅超越物理盘。只受限于客户端所在的网络带宽。
2.空间上的水平扩展没有限制, 云盘能够作到PB级别的容量, 与最新的物理盘相比,有几个数量级的优点。
3.可以经过一系列技术手段来优化长尾,作到长尾优于物理盘,物理盘的热点没法经过切走来进行优化,云盘让这一点变得可能。
低成本:稳定高效以外,经济依旧是特长
除了出色的稳定和优秀的性能以外,更低的成本也是Pangu2.0的一大特点,例如:
1.全面支持EC,从而可以把经典的8+3从三份变成1.375份。
2.支持自适应压缩 根据特定算法筛选出可以压缩的文件,对其进行压缩。
3.数据冷热分离,冷数据存储到廉价介质,热数据存到高性能介质,造成资源的合理规划。
4.管控水平拆分到全部的存储节点,不须要独立的管控机型。
5.云盘跨集群,将单集群的空间利用率作到极致,充分发挥云的优点。
Pangu2.0的软硬件一体化工做也一直在同步进行,咱们与AIS合做,共同研发了USSOS – User Space Storage Operating System,并实现了不少以前所期待的目标:
1.创建一个统一的用户态存储软件基础平台
2.实现对新硬件的快速适配,任何硬件只要在USSOS层进行适配就能直接应用,且对从前的软件和服务毫无影响,彻底公开和透明。
3.提高I/O处理效率,发挥I/O极致性能
4.识别和冗余硬件故障,简化系统运维与管理,加强系统稳定性
5.实现存储硬件的自主可控,下降供应链风险,下降成本,使用户可以选择低成本的硬件,同时更激进的使用新的技术。
易运维:将使用的压力一样降到最低
1.高度的可运维性也是Pangu2.0不得不提的一个点,并在至关多的方面可以获得体现:
2.全部存储节点故障自愈,无需人工干预 提早检测,自行报修,自动下线和复制技术 维修后自动从新上线
3.管控故障自动迁移替换 管控节点自动替换
4.运维高度自动化,ECS 线上人都可运维数百个集群,数万台服务器
5.在支持集团业务中,咱们承担全部存储的运维工做,把麻烦留给本身,把便捷送给客户。
文章的尾声,就让咱们再次来回顾一下Pangu2.0在阿里云内部全部支持的业务,这是一个稳定而无处不在的平台,它将阿里的集团业务、云业务,蚂蚁业务和对接人串联在一块儿,咱们彻底能够这样进行描述————名为Pangu2.0分布式存储系统,切切实实的让双11运维变得智能了起来。