有奖捉虫:办公协同&微信生态&物联网文档专题 HOT
在采用云数据库 Redis 的集群架构和读写分离时,代理服务器(Proxy)扮演着至关重要的角色。它负责执行路由分配、均衡负载以及自动故障切换等关键任务,从而为您简化了客户端的逻辑处理。深入理解 Proxy 的路由机制和对特定命令的处理策略,将助力您构建更为高效的业务架构。

Proxy 介绍

代理服务器(Proxy)作为云数据库 Redis 架构中的一个独立组件,它不会消耗数据分片的资源。通过部署多个 Proxy 节点,可以实现流量的负载均衡和系统的故障转移,从而增强 Redis 实例的可用性和伸缩性。
功能
说明
路由转发
Proxy 维护与后端数据分片的持久连接,承担着请求的均衡分配与精确路由的关键角色,确保请求的高效处理和系统的稳定运行。
兼容主从集群访问模式
当业务增长超出了标准架构的承载能力时,您可以轻松地将数据迁移到配备了 Proxy 的集群架构中,非多 Key 操作的情况下都可以兼容,无缝实现架构转换,显著减少了业务调整的成本,确保了业务的平滑过渡和持续增长。具体操作,请参见 升级实例架构
变更分片无感
Proxy 本身并不直接调整数据分片的数量和大小,而是通过与后端的数据分片管理机制协同工作来实现数据分片弹性伸缩。在数据分片需要迁移(如扩容或缩容操作)时,Proxy 可以支持透明的数据迁移过程,确保客户端操作不受影响。
多数据库(DB)
原生 Redis 及其 Cluster 客户端通常仅支持单一数据库操作,且默认情况下仅使用数据库0,同时不提供对`SELECT`命令的支持。通过使用 Proxy 来连接集群实例,可以实现对多个数据库的访问,并且能够使用`SELECT`命令在不同的数据库间切换。在集群版中,每个实例默认提供高达256个数据库,为多数据库功能提供了强大支持。
副本只读
读写分离架构,Proxy 持续监控只读节点的运行状况,以便在特定情况下实施流量管理措施:
当只读节点表现出异常状态时,Proxy 将减少该节点的权重,降低其处理请求的比例。若一次尝试连接失败,Proxy 将进行路由刷新,暂时停止向该节点转发流量,将业务请求转换到其他节点,直至问题得到解决并重新激活服务。
如果只读节点正在进行全量数据同步,Proxy 将暂停向该节点发送流量。这一措施将持续至同步过程完成,确保节点在承担用户请求前拥有最新和一致的数据副本。同步完成后,Proxy 将恢复对该节点的服务,允许其参与正常的请求处理。
多账号权限控制
Proxy 可以根据用户设定的权限来控制用户能够执行的命令类型。不同的账户能执行他们被授权的命令。
只读权限用户:只能执行读命令,如 GET、MGET、HGET、SMEMBERS等。尝试执行任何写命令(如 SET、LPUSH、SADD等)将会被 Redis 服务器拒绝。
读写权限用户:具有读写权限的用户可以执行包括读命令和写命令在内的所有命令。

路由转发规则

转发规则
说明
基础转发规则
集群架构
操作单个 Key 的命令,每个 Key 通常存储在一个分片上,Proxy 会直接将请求发送到该 Key 所属的槽(slot)位。
当操作涉及多个 Key 时,如果这些 Key 是存储在不同的数据分片,Proxy 会将命令拆分成多个子命令,每个子命令只涉及一个 Key,将每个 Key 分别发送给对应的分片。
读写分离
写请求:因为所有的数据变更都需要在主节点上进行,Proxy 将其直接转发到主节点(Master)。
读请求:Proxy 根据从节点的实际性能和当前负载动态调整权重,将读请求均衡分配到每个从节点。当前暂不支持自定义具体的节点。
特定命令转发规则
SCAN 类命令,当执行 HSCAN、SSCAN、ZSCAN 命令时,Proxy 会执行如下操作:
计算 Key 的槽号。
根据用户的读写分离策略选择节点转发。
其他命令,Proxy 会将事务命令(MULTI 或 EXEC)、Lua 脚本命令 (EVAL 或 EVALSHA)、SCAN、INFO、发布订阅命令(PUBLISH、SUBSCRIBE 等)转发至主节点。

连接数说明

在正常情况下,Proxy 通过与数据分片建立长连接来处理请求。当请求中包含特定命令时,Proxy 将根据命令的处理需求在相应的数据分片上创建额外的连接。单个数据节点分片最大连接数限制,请参见 调整连接数数量。为避免超过连接数限制,您需要谨慎使用以下命令。
阻塞类命令:BRPOP、BRPOPLPUSH、BLPOP、BZPOPMAX、BZPOPMIN、BLMPOP、BZMPOP。
事务类命令:MULTI、EXEC、WATCH。
MONITOR 类命令:MONITOR、IMONITOR。
订阅命令:SUBSCRIBE、UNSUBSCRIBE、PSUBSCRIBE、PUNSUBSCRIBE。