1、架构演进与功能定制申政高级数据库工程师Redis在唯品会的应用实践 Redis集群架构演进 一些经验 二次开发 Q&A目 录contentRedis 使用情况 8000个实例 1000台物理机 500个应用一、Redis集群架构演进演进历史Client ShardingTwemproxyRedis Cluster-2014.72014.7-2015.122015.6-Client ShardingMaster1Master2Master3Slave1Slave2Slave3Client 自定义key分布 增加业务开发难度 无在线扩容能力 failover困难TwemproxyMaster1Cl
2、ientMaster2Master3Slave1Slave2Slave3LvsLvskeepaliveTwempoxyTwempoxySentinel2Sentinel1HATwemproxy 优点 数据自分片,一致性hash 降低业务开发复杂度 支持redis/mc协议 支持pipeline 支持mget/mset操作 自身扩容简单Twemproxy 缺点 架构复杂,机器成本高 redis/mc扩容难 每一个环节都可能成为瓶颈 请求链路长,响应时间长 运维成本高Twemproxy 使用情况 2000个实例 800台物理机 150个应用Redis Clustermaster2master3ma
3、ster1slave1slave2slave3Clientfailover 无中心框架 在线扩容缩容 自动failover 相对Twemproxy架构,节省一半的机器 单层框架,响应时间短 需要智能客户端支持 对mget/mset支持不友好 对pipeline支持不友好二、一些经验Twemproxy Pipeline 一次pipeline过大,内存暴增 一次性接收完所有数据,再转发 内存只增不减一次pipeline包含的命令数量适中,最好不要超过1000Twemproxy Timeout 卡住所有请求 内存飙升Twempoxy队列S1S2S3队列队列队列队列Request for S1Clie
4、nt 1Client 2timeout:The timeout value in msec that we wait for to establish a connection to the server or receive a response from a server.By default,we wait indefinitely.Twemproxy 剔除 redis/mc没有挂,却发生了eject server_connections与server_failure_limitserver_connections server_failure_limitserver_connectio
5、ns:The maximum number of connections that can be opened to each server.By default,we open at most 1 server connection.server_failure_limit:The number of consecutive failures on a server that would lead to it being temporarily ejected when Twemproxy 连接不释放 LVS+Twemproxy+Redis/Mc Twemproxy端连接数远大于Client
6、端 LVS的expire机制,15min增加tcpkeepalive功能Twemproxy 内存泄漏mset命令引起https:/ Cluster cluster-require-full-coverage 建议 no cluster-node-timeout 建议 适当增大 jedisCluster 注意捕获异常 MaxRedirectionsException 不建议使用mget/mset等multi-key命令 尽量使用官方redis-trib脚本管理集群,不要轻易使用Cluster命令三、二次开发Twemproxy 高可用 增加replace_server命令 当redis maste