面试题答案
一键面试基本原理
- 哈希一致性算法:在Redis的模式订阅退订中,负载均衡常采用哈希一致性算法。其核心思想是将所有可能的键值通过哈希函数映射到一个固定长度的哈希环上。节点(如Redis实例)也同样通过哈希函数映射到这个环上。当有消息到来时,对消息的键进行哈希计算,确定在环上的位置,然后沿着环顺时针查找,找到的第一个节点即为负责处理该消息的节点。这种算法使得节点的增减只会影响到环上相邻的部分,而不是全部数据的重新分配,保证了负载均衡的稳定性。
- 权重分配:为了更灵活地适应不同节点的处理能力,还会引入权重的概念。每个节点可以根据其硬件性能、资源等因素设置一个权重值。在哈希环上,权重高的节点会占有更多的虚拟节点,从而在负载均衡时能分配到更多的消息,以此来更合理地利用节点资源。
高并发场景下确保高效性与公平性
- 高效性
- 减少数据迁移:哈希一致性算法使得在节点数量变化时,只有少量数据需要重新分配,减少了数据迁移带来的开销,在高并发场景下避免了频繁的数据移动对系统性能的影响。
- 并行处理:通过将消息均匀分配到多个节点,不同节点可以并行处理消息,充分利用集群的计算资源,提高整体的消息处理能力。同时,Redis自身的单线程模型以及基于内存的快速读写特性,也保证了单个节点在处理消息时的高效性。
- 公平性
- 基于哈希的均匀分布:哈希一致性算法确保了消息在节点间的均匀分布,避免了某个节点负载过重而其他节点闲置的情况。无论消息数量多少,从概率上来说,每个节点都能获得大致相同数量的消息处理任务。
- 权重调整公平性:权重分配机制在考虑节点处理能力差异的同时,也保证了公平性。性能强的节点由于权重高,能处理更多消息,但这种多处理是基于其更强的能力,而不是不合理的倾斜,从而确保了整个集群在处理消息时的公平性。