memcached不能算是分布式缓存系统,因为每个缓存节点之间是相互不可感知的,要实现分布式缓存需要借助客户端实现,而实现分布式缓存的关键在于katama算法。
###一致性哈希 一致性哈希,即katama算法。其中几个关键点是:
- 虚节点
- 0 ~ 2^32-1 的圆环
- 顺时针查找服务器
- hash(key)超过2^32-1 则缓存在第一台服务器
具体怎么实现的,大家去谷歌吧~ 我贴两张经典图片看下。
ketama算法
新增缓存节点
那么问题就来了:
- 到底多少个虚节点?
- 怎么哈希?
- katama算法在php-memcache扩展中如何实现?
- 每次hash(key)之后和2^32-1取余?
- hash(key)怎么找到对应的缓存服务器?
- 什么参数会影响服务器在圆环上的位置?
- 缓存节点在“圆环”上怎么分布的?
- 怎么预估每个节点的缓存数据量?
且听下回分解~