知识卡片
为什么放弃EC纠删码而用主从副本:恢复代价决定编码方案的适用边界
内容
EC编码(Erasure Code,纠删码)是一种用更少的存储空间换取容错能力的编码方式,常被用来降低多副本存储的空间开销,但Bada明确放弃了这个方案,转而使用更”浪费空间”的多副本策略,原因在于EC编码的恢复代价和它的适用场景不匹配:一旦某个分片挂掉,EC编码要恢复数据,必须和其他多个持有编码片段的节点通信、协同计算才能重建出原始数据,这个恢复过程会产生大量额外的网络开销。这种”空间换恢复成本”的权衡对偏冷、低频访问的数据是合适的——反正很少被访问,恢复慢一点、恢复时网络开销大一点都可以接受;但对Bada这种服务线上热点请求、要求毫秒级延迟的系统而言,节点故障后的恢复速度直接关系到服务可用性,用网络开销换存储空间的账算不过来,所以选择了恢复更快(简单复制副本、故障时直接从副本读取即可,不需要跨节点协同计算)但存储成本更高的多副本策略。这个案例给出了一条判断存储编码方案适用场景的通用标准:不能孤立地看编码方案本身”省不省空间”,而要结合数据的访问热度和对恢复速度的容忍度——热数据、高并发访问的场景,宁可多花存储成本也要保证故障恢复足够快;冷数据、低频访问的场景,才值得用更复杂的编码去换取空间效率。
参考来源
- 位置:《高可用架构(第1卷)》第2章《高可用架构原理与分布式实践》"2.5 360分布式存储系统Bada的架构设计和应用"节,"2.5.4 数据分布策略"(源文件:_epub-src/OEBPS/Text/Chapter2_5_5.xhtml)
- 结论依据:原文说明"为什么不使用EC编码……因为EC编码主要用于保存偏冷数据,它遇到的问题是如果某一个副本挂掉,就必须与其他多个节点进行通信来恢复数据……这会造成大量的网络开销",直接支撑本卡片结论。
- 原始内容:首先为什么不使用EC编码(Erasure Code,纠删码)?因为EC编码主要用于保存偏冷数据,它遇到的问题是如果某一个副本挂掉,就必须与其他多个节点进行通信来恢复数据,从而恢复副本,这会造成大量的网络开销。