本文主要是介绍Microsoft、Google、Facebook的erasure code技术进展及系统分析,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
http://blog.sina.com.cn/s/blog_999d1f4c0101e160.html
数据规模庞大(目前google、淘宝等存储的大数据规模以PB为单位)、大数据增长速度远超过摩尔定律,如何利用有限存储资源满足迅速膨胀的存储需求成为大数据时代存储技术面临的一项重大挑战。多副本策略在满足存储可靠、优化数据读性能同时也不可避免地造成存储资源利用率低的缺陷。erasure code编码存储策略在满足和多副本同样可靠性前提下,可以达到更高的存储资源利用率。
Google GFS II中采用了最基本的RS(6,3)编码,将一个待编码数据单元(Data Unit)分为6个data block, 再添加3个parity block,最多可容包括parity blocks在内的任意3个数据块错误。存储的space overhead 为(6+3)/6 = 1.5x.数据恢复的网络I/O开销为:恢复任何一个数据块需要6次I/O,通过网络传输6个数据block.
为减少数据恢复时的网络I/O,微软采用了如上LRC编码策略,其核心思想为:将校验块(parity block)分为全局校验块(global parity)、局部校验块(local reconstruction parity).微软LRC(12,2,2)编码将一个待编码数据块分为12个data blocks,并进一步将这12个data blocks平均分为2个groups,每个group包括6个data blocks.为每个data group分别计算出一个local parity,以及所有12个data blocks计算出2个global parities.当发生任何一个数据块错误时,恢复代价由传统RS(12,4)编码的12(通过网络传输的数据块数量),变为6,恢复过程的网络I/O开销减半。Microsoft 以上LRC编码的space overhead为(12+2+2)/12 = 1.33x
除了在原先的10个data blocks之后添加4个parities外,还将10个data blocks均分为2组,每组单独计算出一个局部校验块(Parity),将数据恢复代价由原来的10降低为5.即恢复任何一个数据块错误只需要进行5次网络I/O,从网络传输5个数据块。此种编码方式的space overhead 为(10+4+2)/10 = 1.6x.
这篇关于Microsoft、Google、Facebook的erasure code技术进展及系统分析的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!