Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Erasure-Code-擦除码-1-原理篇

Erasure-Code-擦除码-1-原理篇

作者头像
drdrxp
发布于 2022-04-28 13:03:05
发布于 2022-04-28 13:03:05
5810
举报

本文链接: [https://blog.openacid.com/storage/ec-1/] 下载pdf: [Erasure-Code-擦除码-1-原理篇.pdf]

前言

分布式存储的同学, 一定都知道一个了不地的冗余算法叫作擦除码([Erasure-Code]), 它让存储以多副本几分之一的成本来达到同样高的可靠性.

虽然web上有很多介绍EC的文字, 但几乎所有这些文字都为了严(bi)谨(ge)而搞的像牛津词典一样难读, 懂的人不需要看, 不懂的人看不懂.

能把事情给人讲明白, 文字才有用. 于是准备了这3篇介绍EC的文字, 我敢肯定, 你没看过这样通(di)俗(diao)易(she)懂(hua)的EC教程. 看完这3篇文字! 保你可以徒手写出一个EC存储系统, 本文是第一部分:

  • [第一篇:原理]
  • 第二篇:实现(疯狂编辑中)
  • 第三篇:极限(疯狂编辑中)

问题

分布式系统的第一个问题是可靠

解决了数据可靠性的问题之后, 数据的其他问题如一致性, 性能, 可用性等的讨论才有意义.

然而现实残酷, 存储的硬件设备总是不够可靠. 下图摘自 [backblaze发布的硬盘故障率统计]

此外, 服务器还会宕机,磁盘会掉,光纤会被挖掘机铲断, 机房会被大雨淹没. 因此数据的存储必须要做到在部分硬件故障时还能保证正常读(或读写), 才可以达到工业可用的可靠性.

而提高可靠性最直接最简单的方法, 就是 对一份数据存储多个副本 (副本数一般选择3).

结合目前经验上的磁盘的损坏率(大约是年损坏率7%), 3个副本可以达到一个工业可接受的可靠性, 这个可靠性的预期大约是11个9以上(99.999999999%的概率不丢数据). 有些时候为了降低成本, 只存储2个副本, 也可以达到8个9的可靠性.

3副本的方式虽然简单容易实现, 但要额外浪费2倍的存储空间, 因此存储领域中一直都希望用一种较少的冗余的存储方式, 来实现同样较高的可靠性.

不论是单机上的[RAID]技术, 还是今天要提到的EC([Erasure-Code], 擦除码, 纠删码) 都是用来解决这个问题的. 接下来, 我们通过几个例子, 来逐步展示 EC 的工作原理.

RAID 本质上跟EC没有区别, 它是单机系统时代被广泛使用的成熟实现. EC可以认为是分布式系统发展起来后, RAID算法在多机系统上的重新实现:

  • RAID-0 相当于单副本;
  • RAID-1 相当于2副本;
  • RAID-5 相当于EC的k+1模式, k个数据块+1个校验块;
  • RAID-6 相当于EC的k+2模式, k个数据块+2个校验块;

EC的基本原理

EC的目标可以简单的理解为: 对k个同样大小的数据块, 额外增加m个校验块, 以使得这k+m个数据中任意丢失m个数据块/校验块时都能把丢失的数据找回.

栗子1: 实现k+1的冗余策略

Q: 有3个自然数, 能否做到再记录第4个数字, 让任何一个数字丢失的时候都可以将其找回?

这个问题很简单, 记录这3个数字的和: 假设3个数字是: d₁, d₂, d₃ ; 再存储一个 y₁ = d₁ + d₂ + d₃ 就可以了.

于是:

  • 存储过程: 就是存储这4个数字: d₁, d₂, d₃, y₁.
  • 恢复过程:
    • 如果 d₁, d₂, d₃ 任意一个丢失, 例如 d₁ 丢失了, 我们都可以通过 d₁ = y₁ - d₂ - d₃ 来得到 d₁ .
    • 如果 y₁ 丢失, 则再次取 d₁ + d₂ + d₃ 的和就可以将 y₁ 找回.

这种求和冗余策略, 就是 EC 算法的核心.

在上面这个简单的系统中, 总共存储了4份数据, 有效的数据是3份. 冗余是133%, 它的可靠性和2副本的200%冗余的存储策略差不多: 最多允许丢失1份数据.

这里还只是差不多, 虽然都是允许丢失1块数据, 但还并不是完全一样, 后面详细讨论可靠性的计算. 在讨论可靠性的时候, 一般数据丢失风险没有量级的差异, 就可以认为是比较接近的.

上面这个k+1的例子是和我们平时使用的 [RAID-5] 是类似的. [RAID-5] 通过对k个(可能是11个左右)数据块求出1份校验和的数据块. 存储这份校验块, 并允许1块(数据或校验)丢失后可以找回. 但在工程上, [RAID-5] 的计算并不是自然数的求和, 而是用bit-AND操作代替加法的. 后面细聊.

栗子2: 实现k+2的冗余策略

现在我们在k+1的冗余策略基础上, 尝试增加更多的校验块, 来实现任意k+2的冗余策略.

Q: 有3块数据: d₁, d₂, d₃ 可否另外再存储2个冗余的校验块(共5块), 让整个系统任意丢失2份数据时都能找回?

k+1求和的策略里, 我们给数据块和校验块建立了一个方程, 把它们关联起来了: y₁ = d₁ + d₂ + d₃.

现在, 如果要增加可丢失的块数, 简单的把 y₁ 存2次是不够的.

例如我们存储了2个校验块:

  • 存储过程: 存储 d₁, d₂, d₃, y₁, y₂ 这5个数字.
  • 恢复过程: 如果 d₁, d₂ 都丢失了(用 u₁, u₂ 表示丢失的数据), 下面这个关于 u₁, u₂ 的线性方程是有无穷多解的:

我们没有办法从这个方程组里解出 u₁, u₂ 的值, 因为第2个方程跟第1个一毛一样, 没有提供更多的信息.

所以我们现在需要做的是, 对第2个校验块 y₂, 设计一个新的计算方法, 使之跟3个数据块之间建立一个不同的关联, 使得当 d₁, d₂ 丢失时方程组有解:

我们采用的方式是, 在计算 y₂ 时, 给每个数据 dⱼ 设置不同的系数:

  • 计算 y₁ 时, 对每个数字乘以1, 1, 1, 1 …
  • 计算 y₂ 时, 对每个数字乘以1, 2, 4, 8 …

按照此方案, 我们就可以建议一个k+2的存储系统:

  • 存储过程: 存储 d₁, d₂, d₃, y₁, y₂ 这5个数字.
  • 数据恢复: 如果 d₁d₂ 之一丢失,恢复的过程跟k+1策略一样; 如果 d₁, d₂ 丢失(同样用 u₁, u₂ 表示), 我们可以使用剩下的3个数字 d₃, y₁, y₂ 来建立1个关于 u₁, u₂ 的二元一次方程组:

解出上面这个方程组, 就找回了丢失的 u₁, u₂ .

以上这种加系数计算校验块的方式, 就是[RAID-6]的基本工作方式: [RAID-6]为k个数据块(例如k=10)之外再多存储2个校验数据, 当整个系统丢失2块数据时, 都可以找回.

为什么计算 y₂ 的系数是1, 2, 4, 8…? 系数的选择有很多种方法, 1, 2, 4, 8是其中一个. 只要保证最终丢失2个数字构成的方程组有唯一解就可以. 在k+2的场景中, 选择1, 2, 3, 4…作为系数也可以.

到这里我们就得到了k+2的EC的算法: 通过166%的冗余, 实现差不多和三副本300%冗余一样的可靠性.

栗子3: 实现k+m的冗余策略

如果要增加更多的冗余,让EC来实现相当于4副本差不多的可靠性: k+3, 我们需要给上面的策略再增加一个校验块 y₃ ,

y₃ 的计算我们需要再为所有的 dⱼ 选择1组不同的系数, 例如1,3,9,27…来保证后面数据丢失时,得到的1个3元一次方程组是可解的:

这样我们通过不断的增加不同的系数, 就可以得到任意的k+m的EC冗余存储策略的实现.

到此为止, 就是EC算法的核心思想了. 接下来, 我们再深入1点, 从另外1个角度来解释下为什么要选择这样1组系数.

现实中使用的[RAID-5]和[RAID-6]都是 EC 算法的子集. EC 是更具通用性的算法. 但因为实现的成本(主要是恢复数据时的计算开销), [RAID-5] 和 [RAID-6]在单机的可靠性实现中还是占主流地位. 但随着存储量的不断增大, 百PB的存储已经不算是很极端场景了. [RAID-6] 在单机环境下不算高的数据丢失风险在大数据量的场景中显示的越来越明显. 于是在云存储(大规模存储)领域, 能支持更多的冗余校验块的EC成为了主流.

EC的几何解释

上面介绍了如何选择 EC 生成校验块(编码过程)的系数, 我们隐约可以感觉到它的系数选择可能有某种内涵, 接下来我们回到最初的问题, 思索下为什么要使用这样1组系数.

我们从比较简单的情况开始, 看下2个数据块计算(多个)校验块的方法:

2+m的冗余的本质: 两点确定一条直线

假设 现在我们有2个数据块 d₁, d₂. 要做2个校验块.

我们使用1个直线的方程, 把 d₁, d₂ 作为系数, 来实现数据的冗余备份和恢复:

这条直线具备这样的特点:

  • 这条直线包含的所有数据块 dⱼ 的信息:
    • 任何1对 d₁, d₂ 的值就确定一条不同的直线.
    • 同样, 任意1条直线也唯一对应1对 d₁, d₂ 的值.

数据可靠性的问题就转化成了:

  • 我们要保存足够多的关于这条直线的信息, 能够在需要的时候找回这条直线. 然后再提取直线方程的系数来找回最初存储的数据块 d₁, d₂.

要保存足够多的信息, 最直观的方法就是记录这条直线上的几个点的坐标.

例如假设要存储的数据d₁ d₂ 分别是5, 6, 则直线方程是: y = 5 + 6x. 记录直线上x=1, 2 时y的值, 如下图:

因为2点可以确定一条直线, 只要拿到直线上2个点的坐标, 就能确定直线方程, 从而确定它的系数 d₁, d₂ . 按照这样的思路, 我们重新用直线方程的方式描述数据冗余生成和数据恢复的过程:

  • 存储过程: 以 d₁, d₂ 作为系数建立一个直线方程, 再在直线上取2个点, 记录点的坐标(这里我们总是取x = [1, 2, 3…]的自然数的值, 所以只记录y的值就可以了): d₁, d₂, (1, y₁), (2, y₂).
  • 恢复过程: 已知过直线2点 (1, y₁), (2, y₂) 来确定直线方程, 再提取方程的系数.

在这个校验块跟数据块的关系中:

丢失1个数据块时只用 y₁ 的方程就够了. 丢失2个数据块时才需要解二元一次方程组. 如果 y₁y₂ 丢失, 则通过重新取点的方式恢复.

我们可以在直线上取任意多个点, 但恢复时最多也只需要2个点就够了.

k+m的冗余的本质: 高次曲线

现在我们把它再推广到更一般的情况: 直线方程只有2个系数 d₁, d₂ , 只能用于对2块数据做冗余, 如果要用描点方式来为更多的数据块生成冗余数据, 我们就需要有更多系数的方程, 也就是使用高次的曲线.

例如: 二次曲线抛物线 y = a x² + b x + c 需要3个系数来确定(可用来存储3块数据), 同时也需要知道抛物线上的3个点的坐标来找回这条抛物线.

如果有k个数据块, 我们把k个数据作为系数, 来定义1条关于x的高次曲线, 再通过记录曲线上的点的坐标来实现冗余:

例如要存储4个数据1, 2, 3, 4, 则曲线方程是: y = 1 + 2x + 3x² + 4x³. 记录曲线上x=1, 2, 3, 4 时y的值, 如下图:

  • 存储过程: 取m个不同的x的值(1, 2, 3…m), 记录这条曲线上m个不同点的坐标:

存储所有k个数据块 d₁, d₂ .... 和所有m个校验块 y₁, y₂ ....

  • 恢复过程: 平面上m个点可以唯一确定1条 m-1 次幂的曲线(或通过m个点跟k-m个已知系数确定一条k-1次幂的曲线). 确定了这条关于x的曲线,就找回了它的系数,也就是数据块

以上就是 EC存储跟恢复的几何本质: 一条k-1次曲线可以通过k个系数或曲线上的点来确定.

从曲线方程到生成矩阵

从EC的几何本质出发, 我们再系统的描述下生成校验块的过程: 为x取自然数的值(1,2,3…)来计算 y 的值:

把上面等式写成矩阵的形式, 就得到了EC校验块的 生成矩阵 [Generator-Matrix]:

这里 y₁, y₂ ... 就是校验块的数据, 因此, 上面[栗子3]中选择的系数, 就是从这里来的.

而这个矩阵, 就是著名的 [Vandermonde] 矩阵.

[Vandermonde] 矩阵只是 EC 其中1种系数的选择方式. 其他常用的系数矩阵还有 [Cauchy] 矩阵等.

EC的解码: 求解n元一次方程组

EC生成校验块的过程称之为EC的编码, 也就是用[Vandermonde]矩阵去乘所有的数据块.

而当数据丢失需要找回的时候, 使用的是EC的解码过程.

既然EC的编码过程是编码矩阵([Vandermonde])和数据块列相乘:

那么解码的过程就可以描述如下:

假设有q个数字丢失了, q <= m. 从上面的编码矩阵中选择q行, 组成的一次方程组, 求解方程组算出丢失的数据.

例如 d₂, d₃ 丢失了, 下面用 u₂, u₃ 表示 (只丢失了2块数据, 不需要所有的m个校验块参与, 只需要2个校验块来恢复数据)

这个矩阵表示的方程组里有2个未知数 u₂, u₃ , 解方程即可得到 u₂, u₃ 这2块丢失的数据.

[Vandermonde] 矩阵保证方程组有解

对于k+m的EC来说, 任意丢失m个数据块都可以将其找回. 因为我们选择的[Vandermonde] 矩阵保证了任意mm列组成的子矩阵都是线性无关的, 构成的方程肯定有确定解. 例如:

  • [Vandermonde] 的 行列式的值为:

只要 xᵢ 都不同, 则 [Vandermonde] 矩阵的行列式就不为0, 矩阵可逆, 表示方程有唯一解.

  • [Vandermonde] 矩阵的任意 m x m 的子矩阵, 是一个Generalized Vandermonde Matrix, 它在 xᵢ 都为正数时可以保证永远有唯一解. 因此在实数领域, 我们总能保证上面这个冗余策略很好的工作.

好了, 到此为止我们讨论了EC在实数范围内的全部内容. 相信大家根据以上原理很容易写出一个简单但可靠的EC的实现.

但这套理论还不能直接应用到线上产品中. 因为计算机中还要考虑数字大小限制, 例如k个32位整数作为数据, 通过[Vandermonde]矩阵生成校验块, 那校验块的数值几乎确定会溢出.

下一篇 Erasure-Code-擦除码-2-实现篇 中, 我们会展示出算数和计算机算法之间的差异, 以及我们将通过什么样的手段来解决这些问题, 将EC真正应用到生产环境中.

敬请关注:

  • 第二篇:实现(疯狂编辑中)
  • 第三篇:极限(疯狂编辑中)

本文链接: [https://blog.openacid.com/storage/ec-1/] 下载pdf: [Erasure-Code-擦除码-1-原理篇.pdf]

  • [下载Erasure-Code-擦除码-1-原理篇.pdf]: https://blog.openacid.com/publish/pdf/storage/ec-1.pdf
  • [Vandermonde]: https://en.wikipedia.org/wiki/Vandermonde_matrix
  • [Cauchy]: https://en.wikipedia.org/wiki/Cauchy_matrix
  • [failure-rate]: https://www.backblaze.com/blog/hard-drive-reliability-stats-q1-2016/
  • [RAID]: https://zh.wikipedia.org/wiki/RAID
  • [RAID-5]: https://zh.wikipedia.org/wiki/RAID#RAID_5
  • [RAID-6]: https://zh.wikipedia.org/wiki/RAID#RAID_6
  • [Finite-Field]: https://en.wikipedia.org/wiki/Finite_field
  • [Galois-Field]: https://en.wikipedia.org/wiki/Finite_field
  • [Reed-Solomon]: https://en.wikipedia.org/wiki/Reed%E2%80%93Solomon_error_correction
  • [Erasure-Code]: https://en.wikipedia.org/wiki/Erasure_code
  • [Prime-Polynomial]: https://en.wikipedia.org/wiki/Irreducible_polynomial
  • [Field-Extension]: https://en.wikipedia.org/wiki/Field_extension
  • [Complex-Number]: https://en.wikipedia.org/wiki/Irreducible_polynomial#Field_extension
  • [Hamming-7-4]: https://en.wikipedia.org/wiki/Hamming(7,4)
  • [Generator-Matrix]: https://en.wikipedia.org/wiki/Generator_matrix
  • [第一篇:原理]: https://blog.openacid.com/storage/ec-1
  • [第二篇:实现]: https://blog.openacid.com/storage/ec-2
  • [第三篇:极限]: https://blog.openacid.com/storage/ec-3
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-01-28,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 分布式研究小院 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Erasure-Code-擦除码-2-实现篇
本文链接: [https://blog.openacid.com/storage/ec-2/]
drdrxp
2022/04/28
7240
Erasure-Code-擦除码-2-实现篇
Erasure-Code-擦除码-3-极限篇
本文链接: [https://blog.openacid.com/storage/ec-3/]
drdrxp
2022/04/28
7980
Erasure-Code-擦除码-3-极限篇
分布式系统下的纠删码技术(一) — Erasure Code (EC)
近几个月主要参与一个分布式存储系统的纠删码部分(用于数据容错),纠删码在学术界出现比较早,现在ceph,微软的存储系统,Hadoop 3.0等都用了EC。文章会分为多篇,主要将Erasure Code,LRC, 以及相关的数学基础,作为学习总结。
全栈程序员站长
2022/11/17
3.3K0
分布式系统下的纠删码技术(一) — Erasure Code (EC)
RS 纠删码为什么可以提高分布式存储可靠性?| 原力计划
Erasure Code(EC),即纠删码,是一种前向错误纠正技术(Forward Error Correction,FEC,说明见后附录)。目前很多用在分布式存储来提高存储的可靠性。相比于多副本技术而言,纠删码以最小的数据冗余度获得更高的数据可靠性,但是它的编码方式比较复杂。
区块链大本营
2020/03/24
1.6K0
RS 纠删码为什么可以提高分布式存储可靠性?| 原力计划
有趣的纠删码(erasure code)
RAID 是 "Redundant Array of Independent Disk" 的缩写,中文意思是独立冗余磁盘阵列 是一种古老的磁盘冗余备份技术,也许你从未了解其中的原理,但肯定也听说过它的大名。简单地解释,就是将N台硬盘通过RAID Controller(分Hardware,Software)结合成虚拟单台大容量的硬盘使用,其特色是N台硬盘同时读取速度加快及提供容错性.
王磊-字节跳动
2021/05/30
12.1K0
详解HDFS3.x新特性-纠删码
EC(纠删码)是一种编码技术,在HDFS之前,这种编码技术在廉价磁盘冗余阵列(RAID)中应用最广泛(RAID介绍:大数据预备知识-存储磁盘、磁盘冗余阵列RAID介绍),RAID通过条带化技术实现EC,条带化技术就是一种自动将 I/O 的负载均衡到多个物理磁盘上的技术,原理就是将一块连续的数据分成很多小部分并把他们分别存储到不同磁盘上去,这就能使多个进程同时访问数据的多个不同部分而不会造成磁盘冲突(当多个进程同时访问一个磁盘时,可能会出现磁盘冲突),而且在需要对这种数据进行顺序访问的时候可以获得最大程度上的 I/O 并行能力,从而获得非常好的性能。在HDFS中,把连续的数据分成很多的小部分称为条带化单元,对于原始数据单元的每个条带单元,都会计算并存储一定数量的奇偶检验单元,计算的过程称为编码,可以通过基于剩余数据和奇偶校验单元的解码计算来恢复任何条带化单元上的错误。
五分钟学大数据
2021/01/15
1.7K0
【系统设计】S3 对象存储
在本文中,我们设计了一个类似于 Amazon Simple Storage Service (S3) 的对象存储服务。S3 是 Amazon Web Services (AWS) 提供的一项服务, 它通过基于 RESTful API 的接口提供对象存储。根据亚马逊的报告,到 2021 年,有超过 100 万亿个对象存储在 S3 中。
全球技术精选
2022/09/05
6.9K0
【系统设计】S3 对象存储
Hadoop3.0时代,怎么能不懂EC纠删码技术?
根据云存储服务商Backblaze发布的2021年硬盘“质量报告”,现有存储硬件设备的可靠性无法完全保证,我们需要在软件层面通过一些机制来实现可靠存储。一个分布式软件的常用设计原则就是面向失效的设计。
个推
2022/05/27
1.5K0
Hadoop3.0时代,怎么能不懂EC纠删码技术?
纯干货 | 深入剖析 HDFS 3.x 新特性-纠删码
HDFS是一个高吞吐、高容错的分布式文件系统,但是HDFS在保证高容错的同时也带来了高昂的存储成本,比如有5T的数据存储在HDFS上,按照HDFS的默认3副本机制,将会占用15T的存储空间。那么有没有一种能达到和副本机制相同的容错能力但是能大幅度降低存储成本的机制呢,有,就是在HDFS 3.x 版本引入的纠删码机制。
五分钟学大数据
2021/04/01
1.8K0
分布式存储系统纠删码技术分享
海云捷迅云课堂专题,旨在秉承开源理念,为大家提供OpenStack技术原理与实践经验,该专题文章均由海云捷迅工程师理论与实践相结合总结而成,如大家有其他想要了解的信息,可留言给我们,我们会根据问题酌情回复。
海云捷迅
2020/07/08
4K0
分布式存储系统纠删码技术分享
【云计算奇妙学习之旅】第六期:各级别RAID详解
在上一期的分享中,我们了解到企业级的存储是什么样子的,它由什么组成的。那么,本期分享我们该如何来使用存储,拿到一台新的存储设备,首先要什么呢?首先要做的是给存储上电开机然后做RAID,才能使用存储提供的空间。这个时候就要知道RAID是什么,我们该给存储选择配置什么样的RAID呢?
誉天小鹿
2020/05/08
8600
【云计算奇妙学习之旅】第六期:各级别RAID详解
Facebook F4架构解读:万亿级图片存储Haystack的演进
首先说下 BLOB 的意思, 英文全称是 Binary Large OBjects,可以理解为任意二进制格式的大对象;在 Facebook 的语境下,也就是用户在账户里上传的的图片,视频以及文档等数据,这些数据具有一次创建,多次读取,不会修改,偶尔删除 的特点。
木鸟杂记
2021/09/26
1.4K0
计算机存储系统之磁盘阵列技术
所谓磁盘阵列,它是由多台磁盘存储器组成,是快速、大容量、且高可靠的外存子系统,现在常见的独立冗余磁盘列阵(RAID)就是一种由多块独立磁盘构成的冗余列阵,
灰小猿
2020/09/23
6310
应用AI芯片加速 Hadoop 3.0 纠删码的计算性能
在保证可靠性的前提下如何提高存储利用率已成为当前 DFS 应用的主要问题之一。
ethanzhang
2018/12/30
10.5K1
应用AI芯片加速 Hadoop 3.0 纠删码的计算性能
什么是HDFS的纠删码
Fayson在前面的文章中介绍过CDH6,参考《Cloudera Enterprise 6正式发布》和《如何在Redhat7.4安装CDH6.0》。CDH6主要集成打包了Hadoop3,包括Hadoop3的一些新特性的官方支持,比如NameNode联邦,纠删码等。纠删码可以将HDFS的存储开销降低约50%,同时与三分本策略一样,还可以保证数据的可用性。本文Fayson主要介绍纠删码的工作原理。
Fayson
2018/11/16
5.5K0
可靠分布式系统-paxos的直观解释
另外一个经常被提及的分布式算法是[raft], raft的贡献在于把一致性算法落地. 因为 [Leslie Lamport] 的理论很抽象, 要想把他的理论应用到现实中, 还需要工程师完全掌握他的理论再添加工程必要的环节才能跑起来.
drdrxp
2022/04/28
2630
可靠分布式系统-paxos的直观解释
顶会论文:纠删码存储系统中的投机性部分写技术
本文已被USENIX'17年度技术大会录用,此处为中文简译版。 阅读英文论文完整版请点击:Speculative Partial Writes in Erasure-Coded Systems 。 前言 多副本和纠删码(EC,Erasure Code)是存储系统中常见的两种数据可靠性方法。与多副本冗余不同,EC将m个原始数据块编码生成k个检验块,形成一个EC组,之后系统可最多容忍任意k个原始数据块或校验块损坏,都不会产生数据丢失。纠删码可将数据存储的冗余度降低50%以上,大大降低了存储成本,在许多大规模分
美团技术团队
2018/03/13
2.4K0
顶会论文:纠删码存储系统中的投机性部分写技术
【RAID磁盘阵列服务器数据恢复】华为OceanStor Dorado存储系统RAID-TP数据丢失数据恢复案例
一:案例描述 客户向我们反馈他们的华为OceanStor Dorado存储系统RAID-TP故障,导致数据丢失,希望能够帮助他们进行数据恢复。
海境超备
2024/08/19
2050
【RAID磁盘阵列服务器数据恢复】华为OceanStor Dorado存储系统RAID-TP数据丢失数据恢复案例
图文并茂 RAID 技术全解 – RAID0、RAID1、RAID5、RAID100……
  RAID 技术相信大家都有接触过,尤其是服务器运维人员,RAID 概念很多,有时候会概念混淆。这篇文章为网络转载,写得相当不错,它对 RAID 技术的概念特征、基本原理、关键技术、各种等级和发展现状进行了全面的阐述,并为用户如何进行应用选择提供了基本原则,对于初学者应该有很大的帮助。
菲宇
2019/06/13
6.3K0
图文并茂 RAID 技术全解 – RAID0、RAID1、RAID5、RAID100……
大规模稀疏线性规划求解思路梳理
已知现在有M个广告主和N个广告词,其中每个单位流量的(广告主,广告词)收益固定,且每个广告主/广告词均有流量分配限制,问如何给(广告主,广告词)分配流量,使得收益达到最大。
锅逗逗
2022/08/01
1.7K0
大规模稀疏线性规划求解思路梳理
推荐阅读
相关推荐
Erasure-Code-擦除码-2-实现篇
更多 >
领券
💥开发者 MCP广场重磅上线!
精选全网热门MCP server,让你的AI更好用 🚀
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档