下一代分布式云存储

in cloud •  7 years ago 

这个问题是4年前创业时提出的, 因为技术问题以及商业模式问题,一直没有成功, 现在复盘整个心路过程,不是严肃的专业论文,权当听故事。

在2013年, 当时阿里云OSS存储价格在1900元/TB/年, 成本价格高于(TFS成本)4000元,考虑到未来海量的数据需求, 存储成本是一个不断累积增长的成本, 任何公司都很难承受,就有了利用闲置设备做分布式存储的想法!

基本想法是利用路由器、OTT机顶盒的存储空间,构建一个分布式的可靠存储体系, 每个设备的存储空间不大,但长尾设备的数量巨大, 通过冗余思想能对抗设备的不稳定性、在线率低等困难。

这个想法告诉了小米,于是有了小米路由器加一块硬盘的产品出现。但显然,小米并没有理解分布式存储的思想, 只是充分利用当时的技术, 加一块硬盘做了本地存储管理,当然商业价值还是有的。

先说说这个利用长尾资源做存储的技术问题吧,这是一个世界级的挑战。

每个设备假定只有1GB存储空间, 共有 100万同时在线设备, 这样总存储空间为1000TB。

假定我们存储一个1GB的文件, 首先把文件分成1024个1MB的Chunk, 每个chunk在分成1024个1KB的piece, 对每个chunk的1024个piece 进行编码, 这样假设可以生成2048个完全不同的piece, 我们需要把这2048个pieces 放在2048个节点上。对1024个chunk 进行同样的操作, 这样我们可以在每个节点上存储1024片piece, 但每个chunk 只保存一份, 这样,每个节点只存储 1GB原始文件的1MB数据量。 整个文件在2048个节点上有,数据冗余量为2倍。

为了恢复这些数据, 从2048个节点中随机取出1024个节点的数据即可恢复。

这就是去中心化存储的基础! 但实现上述系统有着巨大的挑战:

海量节点对中心服务器的心跳冲击
如果去掉中心存储服务的备份,这个存储系统必须可靠, 快速发现数据冗余不够是关键
发现冗余不够之后,快速修复是关键中的关键
安全
第一个问题是工程问题, 只能硬扛。

第二个问题, 可以分组来解决。

第三个问题,涉及到存储的最核心问题,已经不是工程能高效解决了。分散的数据已经用喷泉编码算法进行了编码, 如果只有这个编码算法, 则需要把数据恢复之后在重新编码,然后在推送到新的设备节点上, 这样修复成本就太高了。 而存储中修复成本是有指标衡量的, 就是修复占用的计算量及被修复数据量的百分比。 如果重新解码在编码,修复成本就是原始数据量的200%。 如果喷泉编码能再次被编码, 而且能生成原始喷泉编码的域空间内, 则数据就能像基因复制一样,用最小代价在节点间自由迁移,那就完美了, 这样整个存储系统甚至网络的架构就被完全颠覆!

这个技术就叫再生码(regeneration code) , 我们首次提出再生码在这个场景下应用, 借助这个思想, 成功的获得1000万美元投资.

但再生码的构造太困难了, 我们寻求复旦大学及香港大学顶级编码专家研究这个问题,但只能构造O(n^2)的算法, 而且还不知道结果是否正确, 难点在于这个矩阵构造必须稀疏,但两个稀疏矩阵的运算得到的结果不稀疏,在工程上不可行,性能太差了,工程上必须达到O(n)。 这个问题留给科学家吧!

最终我们没有选择这个方向来做(现在想法有变化,但场景已不一样),主要有如下的考虑:

单碟存储能力在指数上升, 目前单硬盘容量已有120TB, 这样导致集中式云存储的成本下降非常快
在2014年就知道了Facebook的云存储成本降到了400/TB/年,也就是说云存储的margin越来越低
云存储的的系统瓶颈在内部数据恢复的IO上, 集中式云存储在内部通讯上有巨大优势,瓶颈不在存储的容量上
去中心化云存储部署在每个小设备上,每个设备上行带宽非常小, 导致数据通信及恢复很慢,效率比较低,而且为了对抗设备的不稳定性, 系统开销也变大,冗余倍数增加
在不安全的设备上做存储, 很难消除客户的顾虑, 安全性受到挑战, 教育市场任重道远。
总的来说,margin越来越低, 而且技术挑战性太大, 不是一个很性感的生意。 但反过来说, 可能是切入点不对, 如果这么好的技术,硬要去取代传统的云存储, 是否是一个错误的想法? 是否有适合雾计算的场景出现, 特别适合这种去中心化的云存储体系。 所以说不能单纯技术思维去考虑商业问题。 每个创新一定有他合适的场景,只是没有认识到罢了。

Authors get paid when people like you upvote their post.
If you enjoyed what you read here, create your account today and start earning FREE STEEM!