分布式之如何突破raft集群写数据性能瓶颈

写在前面

分布式之Raft共识算法分析 一文中我们分析了当前比较常用的raft共识算法,通过raft算法我们可以很容易搭建集群并选举leader,然后由leader负责数据的写操作,这样也可以很容易的解决数据一致性的问题,但是只由leader来处理写操作,无疑就会让我们的系统退化为单机,系统性能也就可想而知了,本文就一起来看下如何解决这个问题。

1:万能的加一层

架构问题,一般都可以通过加一层来解决,那么我们这里的问题自然也是可以的,通过加一层代理,然后通过哈希算法来访问多个集群,就很容易的解决了集群单leader处理数据写请求的性能问题,此时架构可能如下图:

在这里插入图片描述

之后我们只需要在proxy执行简单的哈希就能定位由哪个集群来处理请求了,这样就达到了数据请求负载均衡的效果,如下图:

在这里插入图片描述

上图kye-01经过哈希就由集群A来处理了。之后,当需要增加系统的处理能力时只需要增加新的集群就可以了,假定我们增加了集群D,此时因为集群总个数变了,所以key哈希的结果部分也会改变,所以,在正式对外开始提供服务之前,我们需要迁移数据,现在假定我们有1000万的key,则要迁移的数据大概在75%,这个数据的迁移量还是有些大的,且如果集群数越大,这个数值也会越高,所以很明显,简单的哈希在这里是不适用的,此时我们可以考虑使用一致性哈希 来解决,首先我们将集群ABC映射到哈希环上,如下:

在这里插入图片描述

接着假设我们有key-1,key-2,key-3,则映射关系如下:

在这里插入图片描述

此时假定集群C不可用,则我们只需要迁移集群B和集群C之间的数据到集群A就可以了,如下:

在这里插入图片描述

此时如果数据分配均匀的话,则迁移的数据量大概在33%左右,相比于普通哈希算法75%的数据迁移量,还要小得多了,并且当集群的个数越多时,这个值会越小,当有10个左右节点,一千万个key时,这个值大概在6%左右,所以一致性哈希算法实现负载均衡的容错性还是比较强的。当然这建立在数据分布均匀的前提下,当数据分布不均匀,即冷热不均时,也依然有问题,为了解决这个,我们需要引入虚拟节点的概念,来让节点均匀的分布在哈希环上,比如node-A,可以有虚拟节点node-A-1,node-A-2,node-A-3等,当映射到node-A-1时,再次映射到实际的节点node-A就行了,增加虚拟节点后可能如下图:

在这里插入图片描述

2:问题

2.1:增加虚拟节点为什么能够解决冷热不均

利用哈希算法的随机性,当虚拟节点足够多时,会均匀分布到哈希环上,从而解决冷热不均问题。

写在后面

小结

本文看了如何通过一层代理的方式来解决raft集群单leader写数据带来的写数据性能瓶颈问题,并分析了如何使用哈希,一致性哈希配合代理来完成数据访问的负载均衡。希望本文能够帮助到你,如果你有什么问题,就留言告诉我吧,咱们一起讨论!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值