一、集群与分布式的区别 (摘自某乎)
分布式:一个业务分拆多个子业务,部署在不同的服务器上
集群:同一个业务,部署在多个服务器上
二、集群技术 Cluster (摘自百度百科)
集群是一组相互独立的、通过高速网络互联的计算机,它们构成了一个组,并以单一系统的模式加以管理。一个客户与集群相互作用时,集群像是一个独立的服务器。集群配置是用于提高可用性和可缩放性。
1 提高性能 -- 其实就是负载均衡的好处
2 降低成本 -- 其实单位性能性价比
3 提高可扩展性 -- 可以随时增加和去掉节点
4.增强可靠性 -- 高可用
三、典型的两种集群 (摘自百度百科)
负载均衡集群 --- 扩展性
高可用性集群 --- 高可用
四、集群需要解决的问题,及Redis集群的处理 (摘自某篇文章)
负载失衡 负载均衡算法策略
网络包溢出 溢出可能发生在主控平衡器,也可能是在各服务节点
这两个问题,其实是一个问题。因负载失衡,会更容易导致某节点的网络包溢出。
Redis为了解决这种问题,使用了直连的方法,不需要中间proxy层.客户端不需要连接集群所有节点,连接集群中任何一个可用节点即可。
可用性保证 多节点,每个节点均存在主备双机。
Redis每个节点推荐使用主备节点。若某一节点的主备节点均失效,不影响其他节点的正常运行。若节点的失效数量超过整个集群的节点数量的一半,也就是说至少有一半的访问无法正常处理时,才判定整个集群失效。
(因为是过半选举,那么节点数量最好为奇数)
存储一致性 多节点共享数据,如何保证一致性,特别是redis这种本身作为数据存储的服务
实际上每个key的内容存储在固定的节点上,不同的节点在提供访问时,均会从存储节点那获取信息,这样保证了存储的一致性。
这样意味着每个节点均需要获取其他节点的数据。因此redis节点彼此互联(PING-PONG机制),内部使用二进制协议优化传输速度和带宽.
所有的物理节点映射到[0-16383]slot上,cluster 负责维护node<->slot<->value
Redis 集群中内置了 16384 个哈希槽,当需要在 Redis 集群中放置一个 key-value 时,redis 先对 key 使用 crc16 算法算出一个结果,然后把结果对 16384 求余数,这样每个 key 都会对应一个编号在 0-16383 之间的哈希槽,redis 会根据节点数量大致均等的将哈希槽映射到不同的节点
五、总结:Redis集群实际上是 负载均衡集群和高可用集群的集合。
多个节点分担访问和计算压力
每个节点的主备双机,保证高可用
注意: Redis集群并不提供单机的完整功能,如一个命令获取多个key。这很好理解,毕竟每个key分布的节点是很有可能不一样的。如果一次性获取多个key,也就意味着一个节点,需要同时获取多个节点的数据。