C++高频缓存服务中的一致性哈希实践
## 导读
分布式缓存服务需要把 key 映射到不同节点。一致性哈希的价值在于节点增删时尽量减少 key 迁移,适合缓存集群、代理路由和分片存储。
## 基础模型
一致性哈希通常把节点和 key 都映射到一个环上:
```cpp
#include
#include
#include
class ConsistentHash {
public:
void add_node(const std::string& node) {
ring_[hash(node)] = node;
}
std::string pick(const std::string& key) const {
auto h = hash(key);
auto it = ring_.lower_bound(h);
if (it == ring_.end()) it = ring_.begin();
return it->second;
}
private:
std::size_t hash(const std::string& s) const {
return std::hash{}(s);
}
std::map ring_;
};
```
## 虚拟节点
如果节点数量少,直接映射容易分布不均。虚拟节点可以让负载更平滑,每个真实节点对应多个环上位置。
## 工程注意点
- 节点权重不同,应分配不同数量虚拟节点
- 哈希函数应稳定,避免版本升级后大量迁移
- 节点摘除要配合健康检查和预热策略
## 总结
一致性哈希不是万能负载均衡算法,但它非常适合需要稳定分片关系的系统。C++ 实现时要重点关注哈希稳定性、虚拟节点和路由表切换一致性。
C++高频缓存服务中的一致性哈希实践