关于分布式存储:纠删码技术在vivo存储系统的演进上篇

作者:vivo 互联网服务器团队- Gong Bing本文将学术界和工业界的纠删码技术的外围研究成果进行了相应的梳理,而后针对公司线上存储系统的纠删码进行剖析,联合互联网企业通用的IDC资源、服务器资源、网络资源、业务个性进行剖析对原有纠删码技术进行优化和微翻新,提出了交融EC整体计划以及可落地的RS+LRC+两头后果优化+并行修复跨AZ带宽设计方案,为后续的工程实际提供重要原理和架构撑持。 引言本文借友商轮值CEO 于2020年8月28日在长沙“数学促成企业翻新倒退论坛”上分享的《后香农时代,数学决定将来倒退的边界》【85】进行开篇,发言提出了后香农时代,ICT信息产业面向数学的十大挑战性问题,其中就有一项“高效的纠删码问题”,尽管这个问题的提出背景是出于通信编码畛域,但对于纠删码在存储畛域的应用同样面临着具大的时机与挑战。 图1:纠删码问题挑战 针对纠删码的钻研分为两派: 一派则是纯理论界针对纠删码编码技术在编解码复杂度、修复带宽及磁盘IO、存储开销等维度进行钻研提出新的实践齐备性证实过的纠删码,这类钻研可能思考更多的是实践齐备性的证实;不会思考工程界的实现复杂度等状况;一派是不扭转编码实践,利用纠删码联合生产环境进行适当革新(多AZ、异构服务器、大条带、跨rack等)再联合试验数据在修复开销、存储开销、可靠性等指标来证实价值。这两派的钻研相辅相成独特推动纠删码技术在分布式存储畛域的倒退。本次分享的主题“纠删码技术在vivo存储系统的演进”,分为高低两篇: 上篇偏重介绍和剖析纠删码技术的演进历程、外围纠删码技术的原理和以及工业界存储产品当中的纠删码技术的摸索与实际,最初介绍vivo存储系统在纠删码技术上的一些摸索;下篇重点开展介绍存储团队在纠删码畛域的研究成果及纠删码研究成果在vivo存储系统中的实际,与工业界存储产品中的纠删码相干指标进行全方位比照,以及将来的一些布局。 图2:本文的组织构造 注:本文当中有大量的专业术语,不可能所有术语都去作个解释,因而针对不懂的有些术语能够自行去搜寻相干含意一、相干背景1.1 钻研意义分布式存储系统为了降低成本往往采纳大量便宜通用的服务器提供服务,然而这些服务器的磁盘的可靠性是个很大的问题,其平均寿命在2-7年,还受外部环境因素的影响,受限于其机械结构,磁盘会产生磁盘故障、扇区故障和不可检测磁盘故障等。因而,分布式存储系统为了进步原始数据的可靠性,正本和纠删码是两种最常见的数据冗余办法。正本将原始数据复制到n份,并存储到不同的存储节点上,可能容忍任意n-1个节点生效,其毛病是存储开销大。纠删码则以计算资源换存储资源,采纳了一种更高效的形式减少数据冗余,因而,纠删码成为了以后云存储的支流数据冗余形式,并且继续成为学术界和工业界在存储畛域的一种钻研热点。 图3:应用纠删码技术公司列表 1.2 钻研现状纠删码也被称为纠错码,它将原始数据编码为数据量更大的编码数据,并可能利用编码后的局部编码数据复原出原始数据。当有节点产生故障时,要复原这个节点的数据须要读取多个节点的数据,这个过程会耗费大量的网络带宽和磁盘IO,另外解码复杂度对业务可用性和数据可靠性也有影响,解码复杂度越高,则长期修复时延就高,从而减少业务读取时延;因而,影响纠删码好坏的指标很多,次要有如下一些指标:以下指标都是以可靠性对立基准的前提下进行参考: 【编码复杂度】编码复杂度决定了数据写入的时延【解码复杂度】解码复杂度决定了读取的时延以及节点故障时数据长期修复及永恒修复的时延【修复网络带宽】节点故障时数据修复所需耗费的整体网络带宽,这个指标十分要害【修复磁盘IO】磁盘IO耗费和网络带宽个别成正比,思考大部分存储服务器是高密服务器,个别网络会是瓶颈【修复节点数】修复节点数缩小,往往也就升高了修复须要的网络带宽【更新复杂度】更新复杂度是指一份数据有大量更新操作,比方更新一两个字节很频繁所波及的相干操作复杂度【存储开销】这个指标是指的编码效率,编码效率越高,存储开销越低【参数限度】比方纠删码的码长受不受限制等等以利用最为宽泛的【n,k】RS码【2】为例,RS的码长为n,码的维度为k,当呈现有节点故障时,须要k个节点进行复原,同时能够容忍n-k个节点的故障,这种编码也被称为最大间隔可分纠删码MDS【3】,对应上述指标也就意味着雷同的容错能力下RS码的存储开销小,另外RS码的码长不受限制,这也是RS码如此受欢迎的起因;而在通信畛域大杀四方的LDPC【4】纠错码在存储畛域利用较少,起因就是因为LDPC不满足MDS个性,容错能力不限,意味着雷同的容错能力LDPC须要更大的存储开销, LDPC更多是利用在磁盘外部的冗余;而得益于晚期在RAID5和RAID6中的宽泛应用,具备MDS个性的阵列纠删码也被尝试着利用在分布式存储系统当中,MDS阵列码绝对于RS码全是异或操作,编解码绝对RS码复杂度低,然而同时相干参数有所受限,这也克制了它在分布式存储的广泛应用;常见的阵列码有EVENODD码【5】、RDP码【6】、STAR码【7】反对3容错、Liberation码绝对EVENODD更新复杂度靠近实践下界【8】,ZigZag码【9】磁盘IO开销达实践下界,Blaum-Roth码【10】基于多项式环上结构的MDS阵列码,绝对于RS是编解码复杂度要低些。 另外针对RS码昂扬的网络修复带宽,涌现出一类再生码【11】来升高修复中所要耗费的带宽。再生码是一类通过容许节点发送编码过的数据来使得修复中可最小化修复带宽的纠删码,其可在不减少存储开销的状况下显著升高修复带宽。Dimakis等人将再生码分为两大类:MSR码【23-47】和MBR码【12,13】。MBR码是最小化修复带宽次要分为Polygonal MBR Code【14】和Product-Matrix MBR Code【15】;MSR码是在最小化存储开销下升高修复带宽,又分为准确修复码和性能修复码,准确修复码是指通过修复可修复出原始失落数据,性能修复码则不保障,数据读取每次都须要进行解码操作。比方Hu等人提出了一种功能性MSR码F-MSR【16】,精确性MSR钻研次要基于Product-Matrix MSR【26】,还有比方Butterfly码【48】、Coupled Layer Code码【38-40】等以后曾经在工业界有所利用的再生码。最近又有一些工作【18,19,20】是针对跨机架带宽和机架内带宽进行辨别,为最小化跨机架带宽为指标缩小修复带宽。升高修复带宽还有一些其它的钻研工作,比方2013年Rashmi等人提出Piggybacking框架【22】,框架以MDS码为根本码通过将子条带数据嵌入其它条带来显著升高修复带宽,Piggybacking框架的编码设计也有很多研究成果。【79-81】 针对修复节点数升高这个指标,Huang等人提出了一种部分修复码LRC【17,21】通过对传统编码数据块进行分组,并针对每组生成校验块,从而使得单块修复只须要组内节点参加修复进步修复性能。但因为引入额定存储开销,LRC没达到存储最优。但因为LRC的繁难性,工业界有很多的实际反馈,因而LRC逐步成为近年来纠删码畛域的钻研热点【66-78】。LRC的一个分支MRC码的钻研PMDS也吸引了不少关注【49-60】,除了单节点修复相干的LRC码的结构,针对修复多个节点的LRC码【62-65)】是一个钻研方向,另外,联合LRC和RC的Local Regeration Code【61】也是个钻研思路。 图4:纠删码钻研方向概览 二、原理解析2.1 基础知识介绍概念1:纠删码原理 纠删码通用由两个参数n和k来进行配置,称为(n,k)编码。在分布式系统当中,通常将数据以固定大小的块进行组织,编码时,存储系统将k个数据块进行编码生成额定的n-k = m个大小雷同的校验块,这样n个数据块和校验块中有任意的磁盘节点故障,都能够通过其它的磁盘节点进行解码复原失落的数据。以下为纠删码的一个示意图: 图5:纠删码原理示意图 概念2:Singleton顿界 假如C是一个参数为[n,k]的线性码,则C的极小间隔d≤n-k+1。以上表明一个线性码的极小间隔不会“太大”,无论怎样致力,都不可能结构出一个参数为[n,k]的线性码,使得它的极小间隔大于n-k+1,这个n-k+1就称为Singleton界。 概念3:MDS个性 一个参数为[n,k]的线性码C,若满足dmin(C)=n-k+1,则称该码为极大间隔可分码,简称为MDS(Maximum Distance Separable)码。 概念4:系统性 系统性就是零碎中存储了k个数据块可用来直接存取,如果故障的节点没包含数据块,则不影响数据的读取,系统性可升高读取时延。非系统性则在每次读取时都须要进行解码操作,读取时延绝对偏大。 2.2 经典纠删码介绍2.2.1 Reed-Solomon CodeRS码最早是ECC畛域的一种纠错算法,RS编码算法是一种典型的零碎编码,也是一种典型的MDS性质的编码。 RS码根本思维其实就是拉格朗日插值多项式,我感觉用拉格朗日插值多项式来推导RS码绝对于其它文献的解说会更清晰,上面咱们简略回顾一下拉格朗日插值多项式:对于任何k阶的多项式函数f(x)=a0+a1x+a2x^2+...+akx^k,咱们很容易通过任意的n+1个点(x0, f(x0),(x1,f(x1)),... (xk,f(xk))对这个多项式进行复原。 解码过程如下: 那么RS码是如何应用拉格朗日插值的呢?对于一个(n,k)的RS码,假如a0,a1,...ak-1在Fq域内的k个发送信号,咱们在Fq中采样n个插值点x0,x1,...xn-1,则能够失去拉格朗日插值多项式为: 不难发现,前k个插值的多项式值有如下: 如果用矩阵来示意则为: 令上式的范德蒙德矩阵的逆*a向量 = b向量,则校验矩阵有如下: 【A|B】【A^-1】 a向量= 【E|BA^-1】* a向量 = 【a0,a1,...ak, c1,...cn-k】 ...

June 9, 2023 · 11 min · jiezi

关于分布式存储:创云融达基于-Curve-的智慧税务场景实践

业务背景创云融达是一家以海量数据的存管用为外围,以企业级公有云建设能力为根底,并提供数据资产和数据中台产品和解决方案的高新技术企业。 近年来,为了优化人们征税缴费的服务体验,各省市税务系统逐渐构建了面向税务办事大厅的各种创新型智慧设施和智慧利用,如办税一体机,智慧税务大屏,语音辅助设施、以及业务流程辅助 AI 机器人等。极大便当人们税业务体验的同时也对IT集成和IT基础设施提出了更高的要求。 创云融达承建了多地的智慧税务大厅解决方案,在实践中,咱们发现智慧事务大厅的业务有如下特点: 1. 各类智慧税务利用零碎数量较多; 2. 办事大厅的业务场景对服务的实时性和可用性也有较高要求; 3. 利用不仅仅须要数据库等结构化数据,也须要肯定规模的非结构化数据的存储需要; 依据以上特点,咱们总结出了智慧税务基础设施的需要:稳固、牢靠,适应于超交融集群环境(规模3-6节点)的分布式存储解决方案,提供云主机和对象存储,保证数据安全性、和稳固牢靠运行。 计划选型对于对象存储,创云融达有自研的 OEOS, 有冷热数据主动分层和智能编排机制,实现了海量数据的长久化存储,同时也满足了海量小文件的高IO性能要求。能够为各类智慧利用提供非结构化数据的存管用治理平台。 对于块存储,十分出名的有 Ceph,然而开源版本的 Ceph 在应用过程中是有很多稳定性的问题,惯例的一些异样都会引起IO抖动, 和 Curve 替换 Ceph 在网易云音乐的实际 中提到的问题也相似。这些问题和 Ceph 的一致性协定、数据搁置算法都相干,基于开源版本去改变复杂度和工作量都很大。同时,咱们留神到了开源的 Curve。 通过和 Curve 社区屡次深刻的技术交换,理解到 Curve 分布式存储通过对数据块的数据摆放机制的优化,胜利解决了 Ceph 类存储中 CRUSH 算法在生产环境中的微小不确定性,从而具备生产环境所须要的稳定性和高可靠性。因而,基于Curve 构建分布式块存储,作为虚拟化环境的数据底座,具备比 Ceph 产品具备更高的可靠性和数据安全性。 特地须要提到的是 Curve 块存储在快照上的设计。Curve 块存储的快照反对上传到 S3,不限度快照数量并且升高了快照的存储老本。这一设计和咱们自研的对象存储 OEOS 能够完满联合。 计划落地咱们对 Curve 块存储进行了深刻的测试,以后曾经在我的项目中胜利构建了基于 Curve 的分布式块存储和创云 OEOS 对象存储联合的分布式存储解决方案,为智慧税务我的项目中提供了对立存储基础设施。为智慧税务提供了无力的技术撑持,并在多地市的新建智慧税务大厅我的项目中失去了胜利利用。 整体的架构如下: 反对块存储和对象存储,反对 ISCSI、S3、NFS、SMB 协定对象存储反对冷热分层,反对 EC块存储提供高性能,快照数据反对转储到对象存储中所有服务高可用,任一节点故障不影响用户IO在我的项目落地的过程中,联合 Curve 的特点和业务场景,总结了一些虚拟化场景下的应用教训。 1. 业务短暂的IO波峰 在 KVM 虚拟化场景下,当用 KVM 镜像生成虚拟机实例的时候,会有短暂的 IO波峰(5000-6000 IOPS),之后则隐没。而业务场景少数状况下对 IO 的要求不高。因而,咱们设计了两个逻辑池,一个 SSD 盘逻辑池,和一个机械盘逻辑池。KVM 虚拟机则制作成40G 的系统盘。这样,所有的 KVM 系统盘都调配在 SSD逻辑池中,而数据盘调配在机械盘逻辑池中,从而解决了 KVM 镜像问题。 ...

November 25, 2022 · 1 min · jiezi