分享人:赵君钊
1.背景介绍
2.知识剖析
3.常见问题
4.解决方案
5.编码实战
6.扩展思考
7.参考文献
8.更多讨论
在说分布式和集群之前先说一下单机结构,单机结构是我们之前最常用的结构,所有代码都放在一个项目中,然后这个项目部署在一台服务器上,整个项目的所有服务都由这台服务器提供,但是当业务增长到一定程度时只能垂直向上进行扩展,通过增加CPU、内存和磁盘等方式提高处理能力,但是这种扩展方式的成本越来越高,而且单机的处理能力存在瓶颈,当单机出现故障时整个系统都会处于崩溃状态,稳定性和可用性难以得到保障。
分布式和集群
简单来说,分布式是以缩短单个任务的执行时间来提高效率的,而集群则是通过提高单位时间内执行的任务数来提升效率。
当单机处理能力达到瓶颈时,将单机复制几份分别部署,这几台单机就构成了一个集群,每一个单机服务器都是这个集群中的一个节点,每个节点都提供相同的服务,集群结构的优点就是系统扩展非常容易,随着业务的发展给集群增加节点就可以了,但是当业务发展到一定程度时增加集群节点对系统性能的提升会不明显。
分布式结构就是将一个完整的系统按照业务功能拆分成一个个独立的子系统,在分布式结构中,每一个子系统被称为服务,这些子系统能够独立运行在Web容器中,再以某种协议进行通信,比如说RPC和Http。
缓存使用集群主要是为了保证系统的高可用,除了可以分担一台服务器的压力外,当一个缓存服务器宕机,大量缓存失效会导致缓存雪崩,大量请求涌向数据库,数据库瞬时压力过重。这是时用缓存会把宕机的主节点下的从节点上升为主节点,这也是从一方面来保证系统的高可用。
这里介绍一下Redis的几种集群方案
客户端分区方案
客户端就已经决定数据会被存储到哪个节点或者从哪个节点读取数据,其主要思想是采用哈希算法将Redis数据的key进行散列,通过hash函数将key映射到节点上
优点
这种做法的优点是不需要使用中间件,可自行控制分区逻辑。
缺点
缺点也很明显,无法动态进行服务节点的增删,需要手动进行维护。
代理分区方案
客户端将请求发送到代理组件,代理组件解析客户端的数据,并将请求转发至正确的节点。常见的中间件有Twemproxy 和Codis。
优点
简化了客户端的逻辑,增删切换成本低
缺点
多了一层中间件,会导致一定程度上的性能损耗
查询路由方案
Redis Cluster 是redis自带的一种集群方案,客户端随机的请求任意一个Redis节点,然后由这个Redis节点将请求转发给正确的redis节点。
数据按照槽存储分布在多个Redis节点中,可以平滑进行增删节点,因为Redis Cluster是在Redis的主从模式和哨兵模式的基础上实现的,支持高可用和自动故障转移。
Redis Cluster
Redis Cluster 使用的数据分布方式是虚拟槽分区,所有的键的哈希值都会映射到0~16383整数槽内,三个主节点分别维护一部分槽,之前的下课堂讲过,这里就不多说虚拟槽分区了。
感谢大家观看
BY:赵君钊