随着用户数据量的不断增长,基于传统共享存储的纵向扩展能力渐渐变得力不从心,分布式存储成为应对用户海量数据的标配。
作为一位架构师,在设计系统的分布式存储架构时,需要关注哪些方面呢?或者我们换句话说,对于客户来说,一个理想中的分布式存储产品应该具有哪些特性呢?
我们认为完善的分布式存储架构应该关注这五个方面:
- 扩展性:扩展性可谓是分布式存储有别于单机存储的重要特征,分布式存储的扩展性远远好于单机存储,但是不同分布式存储系统的扩展性之间仍然有着非常大的差异。某些分布式系统在几十个节点的量级上可能运行的很好,但是节点如果再多下去,到了上百个乃至上千个的时候可能就会面临很大的问题。用户数据的增长没有止境,如果不能做到线性扩展,那么今天能够支撑业务的系统到了明天可能就会成为业务进一步发展的阻碍。
- 高可用:在分布式系统中出现节点故障是很常见的事情,分布式系统中的节点越多,出现节点故障的频率也就会越高。在发生节点故障时是否能够保证系统仍然可用,对于很多业务来说至关重要。根据故障类型和恢复时间的不同,高可用也分有不同的级别,系统是否可以容单点故障、多点故障、单机房故障、多机房故障、单城市故障、多城市故障?系统恢复是否可以做到天级恢复、小时级恢复、分钟级恢复、秒级恢复?不同业务场景可能会对高可用有不同的要求。
- 一致性:一致性其实是一个被滥用的概念,很多同学会将其和数据库事务特性中ACID中的C相混淆,在这里我们特指分布式系统的一致性。那么分布式系统的一致性指的是什么?如果用一句话进行概括,我们认为一致性指的是在一个分布式的读写系统中,用户是否总能读到最新写入的数据。如果总是能读到,那么这个系统就是强一致的,否则则是弱一致的。最终一致性则是弱一致的一种特例,指的是尽管不能总是读到最新的数据,但随着写入操作的终止,最终还是可以读到最新的数据。尽管很多分布式系统都宣称提供一致性,但很多时候它们只是提供弱一致或者最终一致。强一致对于一些业务特别是和交易相关的金融业务来说至关重要,如果不能保证总是读到最新的数据,那么就会有发生资损的可能。
- 低成本:分布式存储系统可以使用更加廉价的PC服务器来代替高端的小机及大机,在成本上具有显著的优势。但低成本并不意味着低性能,事实上由于分布式系统下有着非常多的节点,同时使用这些节点的能力可以为我们带来相比大型服务器更高的性能。低成本高性能可以为我们的用户节省更多的系统成本。
- 易用性:低成本特性通常关注于硬件成本,易用性则关系到人力成本。对于开发同学来说,易用性意味着简单易上手的使用接口,最好学习和迁移成本为零,同时功能强大,能够满足各式各样的需求;对于运维同学来说,易用性则意味着系统稳定健壮,系统监控及运维手段完善,学习及使用门槛低。
架构演进历程
架构设计服务于业务,再完美的系统架构都需要有业务进行使用才能创造价值。对于业务来说,当然希望我们的产品能够同时具备高扩展、高可用、强一致、低成本以及零门槛的易用性,但对于系统架构师和开发者来说,这五个特性之间存在相互矛盾的不少,同时在实现这些特性时也会面临巨大的复杂性,这要求我们在做系统设计及实现时需要有所权衡。
下面我们就OceanBase创立九年多以来存储架构的演进历程,来回顾每一次架构变更背后的权衡与思考。
1)OceanBase 0.1版本(2010年)
OceanBase由阳振坤于2010年在淘宝创立,当时淘宝大多数业务都已经按照用户维度做了