1.Redis读写分离

1.1Redis性能

  • TPS(吞吐量)

系统在单位时间内处理请求的数量

  • RT(响应时间)

系统对请求作出响应的时间。在讨论一个系统的响应时间时,一般指系统所有功能的平均时间或者所有功能的最大响应时间

  • QPS(每秒查询率)
每秒查询率 QPS 是对一个特定的查询服务器在规定时间内所处理流量多少的衡量标准,即最大吞吐量

1.2Redis读写分离

本机redis性能测试QPS为17万,而一些大型项目需要千万级别的QPS,这时需要采用读写分离突破性能瓶颈。通过运行新的服务器

(从服务器)连接主服务器,然后主服务器发送数据副本给从服务器,这样就有新的服务器处理读请求。通过读写分离,用户将有新的服务器专门处理读请求,提高了redis性能。

1.3Redis同步原理

主从复制中的主从服务器双方的数据库将保存相同的数据,概念上将这种现象称作数据库状态一致
Redis持久化方式有两种:
  • RDB全量持久化
  • AOF增量持久化

数据同步步骤

  • 旧版本使用SYNC,完整重同步非常耗费资源
  • 新版本使用PSYNC,使用完整重同步和部分重同步,效率较高

2.Redis高可用Sentinel

2.1高可用介绍

高可用是分布式系统架构设计中非常重要的因素,高可用就是减少系统不可用的时间,高可用一般遵循以下几点:

  • 避免单点故障。某个功能的实现不能只有一台服务器,否则出现故障整个系统就不可用
  • 保证冗余。增加重复的部分,对数据库等有备份
  • 保证自动故障转移。每次故障人工修复会增加不可用的时间,所以要实现自动故障转移

redis主从复制后将主节点的数据复制给从节点,从节点此时具有的功能有:

  • 分担主节点的读写压力
  • 主节点故障后,从节点可以代替主节点从而实现高可用

2.2手动主从切换

当主节点故障后,我们可通过手动主从切换让某一从节点成为主节点继续工作。其中需要手动修改配置文件和修改主从配置等,十分繁琐

2.3Sentinel实现高可用

2.3.1Sentinel介绍

哨兵是一个独立的进程,作为进程,它会独立运行。其原理是哨兵通过发送命令,等待Redis服务器响应,从而监控运行的多个Redis实例。

哨兵的三大工作任务:

  • 监控:通过发送命令,让Redis服务器返回监控其运行状态,包括主服务器和从服务器。
  • 提醒:当某个redis发生故障,哨兵可通过API通知管理员
  • 自动故障转移:当主服务器失效时,sentinel会进行一次自动故障转移,sentinel会将主服务器的一个从服务器自动升级为主服务器,并且让失效主服务器的其他从服务器改为复制新的主服务器

自动故障转移的过程:

当哨兵1检测到有服务器宕机,仅仅哨兵1判断服务器宕机我们称之为主观下线。当有多于n个(n可以自己设置)哨兵判断服务器宕机,此时为客观下线,之后会进行自动主从切换,故障转移。

互联网冷备和热备

  • 冷备

冷备发生在数据库完全关闭的情况下,备份快速安全,易于维护

  • 热备

热备发生在数据库开启的情况下,难于维护

3.Redis内置集群(cluster)

3.1集群原理

Redis分布式缓存

原理:

1、所有的redis节点彼此互联(PING-PONG机制),内部使用二进制协议优化传输速度和带宽。
2、节点的fail是通过集群中超过半数的节点检测失效时才生效。
3、客户端与redis节点直连,不需要中间proxy层.客户端不需要连接集群所有节点,连接集群中任何一个可用节点即可。
4、redis-cluster把所有的物理节点映射到[0-16383]slot上(不一定是平均分配),cluster 负责维护node<->slot<->value。
5、Redis集群预分好16384个桶,当需要在 Redis 集群中放置一个 key-value 时,根据 CRC16(key) mod 16384的值,决定将一个key放到哪个桶中。

Redis集群的主从复制模型

为了保证集群的高可用性,redis每个节点都有至少一个复制节点。

Redis一致性保证

为了提高性能,主节点先回复命令再复制给从节点数据,这样有可能造成主从不一致情况,为了性能作出的必要取舍。

4.Redis集群扩展

4.1集群现状

  • 很多公司在使用自己的redis高可用集群方案,并没有使用redis内置集群(上线较晚)
  • 网络通讯问题。
  • 数据迁移问题

4.2一致性哈希算法

4.3虚拟节点

 

相关文章: