我们处于分布式存储产品选型阶段,做了一些POC测试,在压测阶段发现增减节点对I/O的性能影响都比较大。请问社区大神们如何尽量的降低这种影响?是否有好的处理模式。
收起讨论这个问题之前,我想先分析一下分布式存储增删节点是如何造成性能影响的?跟哪些因素相关?个人认为增加节点和删除节点是两个场景,可以分开来讨论。
1)元数据类型:分布式存储其中一个重要的特征是存储的数据会分布多台服务器上的不同硬盘上,简单来说,需要正确存取这些数据,系统需要知道哪些数据是存放在那台服务器的哪块硬盘上,这部分的信息需要有元数据来管理。而元数据的组织形式主要有两个大流派,元数据表和一致性哈希。
2)元数据表的原理:通过一个表格记录数据的映射信息,增加一个存储对象就多一条记录,元数据表会随数据量增加不断增大,至于增加节点并不会修改或变更现有的元数据信息,也就是说增加节点并不需要进行数据迁移。
3)一致性哈希的原理:为了避免元数据表的数据量不断膨胀的问题,使用一致性哈希算法运算直接得出数据映射信息,而不需要依赖元数据表。一致性哈希算法涉及 2 个重要变量,集群节点数和节点位于哈希环的位置。增加节点意味着变量更改了,会直接影响到数据分布的位置信息,引发额外的数据迁移操作,数据迁移实际上就是数据传输,肯定会影响性能的。
4)数据重平衡:无论元数据表还是一致性哈希都会遇到一个问题,新增节点上并没有数据,没有办法马上负载压力或者平衡容量空间。为了发挥新节点的功能,需要执行数据重平衡,将一部分数据迁移到新加入节点中,这将触发数据迁移。
上面分析了新增节点触发系统性能影响的原因,下面小结如何避免这种影响。