上海品茶

您的当前位置:上海品茶 > 报告分类 > PDF报告下载

Redis在唯品会的应用实践(39页).pdf

编号:91195 PDF 39页 1.66MB 下载积分:VIP专享
下载报告请您先登录!

Redis在唯品会的应用实践(39页).pdf

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

7、r挂了后,sentinel调用脚本通过replace_server命令把Twemproxy中的master替换成slaveTwemproxy 配置中心 集成zookeeper Twemproxy集群的配置信息统一由zookeeper管理,分发Twemproxy Mc增加Replication pool概念Twemproxy Slowlog 借鉴redis,增加slowlog功能,停留时间 增加简单统计信息,一天分成几个时间段,每个时间段记录slowlog次数Twemproxy 多线程 借鉴mc多线程模型 master线程+N个worker线程 master线程负责监听端口,接收新的客户端连接

8、worker线程负责处理客户端请求 开6个线程,qps可以达到35万/s 节约千万服务器成本Twemproxy 多线程Listen_fdEvent_base监听accept产生client_fd监听到新的连接pool idunitsocketpair0通过轮询方式选择一个worker线程,向其发送 c 字符worker1worker2worker3socketpair1Unit队列unitpushpop接收到c字符connectionEvent_baseMaster线程Worker线程Redis Cluster Failover flushall删不掉数据 master存活,网络也正常,但是C

9、luster却执行了failover Redis单线程,在执行时间复杂度为O(n)命令时,线程被阻塞,无法响应其他节点的ping命令,造成假死现象,主从切换 增加额外线程,extra-port 超过cluster-node-timeout/2时间,ping请求没有收到回复,主动向extra-port发送ping请求Redis Cluster 客户端 Hiredis支持集群模式 解析并更新路由表 处理moved/ask错误 Max redirect机制 支持mget/mset 支持pipeline 支持异步APIRedis Migrate Redis集群之间的数据迁移 多线程 基于redis复制

10、 迁移过程中,老集群正常对外提供服务 异构迁移,支持Twemproxy,redis cluster,rdb文件 和 aof文件 迁移状态查看 数据抽样校验Redis Migrate迁移工具写线程写线程写线程Key-valueKey-valueKey-value源集群目标集群part1part2Redis Migrate 步骤 建立新集群 填写迁移工具配置文件 运行迁移工具,开始迁移 通过迁移工具的info命令查看迁移状态 当全量数据全部迁移完后,把老集群设置成readonly 通过迁移工具的校验机制校验数据是否一致 业务同学进行变更,切换到新集群 迁移完成Redis 多线程 Master+N个

11、worker多线程模型 客户端由worker线程管理 单独后台线程处理过期key和dict维护 DB级别读写锁 数据结构的实现代码移植于Redis3.2.0 支持五大数据结构(string/list/hash/set/zset)支持100个Redis命令,包括管理命令Redis 多线程-DB 为了降低DB锁竞争,引入逻辑DB 一个逻辑DB包含N个真实的物理db 用户使用的是逻辑DB 一个逻辑DB的所有key分散在各个物理db 每个物理db拥有一把读写锁-pthread_rwlock_tRedis 多线程-DBDBs逻辑DB逻辑DB 1逻辑DB 2逻辑DB 3物理db 1物理db 2物理db 3

12、.逻辑DB mselect为了降低DB锁竞争,引入逻辑DB,一个逻辑DB包含N个真实的物理db,用户看到的是逻辑DBpthread_rwlock_tpthread_rwlock_tpthread_rwlock_tRedis 多线程-DB锁竞争Redis处理一个客户端命令过程:1.接收数据:readQueryFromClient()2.解析命令:processInputBuffer()3.准备执行:processCommand()4.执行命令:call()5.产生reply:addReply()6.发送数据:handleClientsWithPendingWrites()Redis 多线程-DB

13、锁竞争接收数据解析命令准备执行执行命令产生reply发送数据Worker 1接收数据解析命令准备执行执行命令产生reply发送数据Worker 2接收数据解析命令准备执行执行命令产生reply发送数据Worker 3接收数据解析命令准备执行执行命令产生reply发送数据Worker 4Redis 多线程-性能测试环境:4个worker线程OS:Centos6 Linux 2.6.32-504.23.4.el6.x86_64Cpu Model Name:Intel(R)Xeon(R)CPU E5-2630 v2 2.60GHzCpu Processors:24Network:10000MbpsMemory:128GRedis 多线程-性能测试用例:Key长度为16字节,1000万个随机keyValue长度为20字节测试命令:set/getRedis 多线程-热key只写一个key只读一个key有效改善热key问题Q&A

友情提示

1、下载报告失败解决办法
2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
4、本站报告下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。

本文(Redis在唯品会的应用实践(39页).pdf)为本站 (云闲) 主动上传,三个皮匠报告文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知三个皮匠报告文库(点击联系客服),我们立即给予删除!

温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。
会员购买
客服

专属顾问

商务合作

机构入驻、侵权投诉、商务合作

服务号

三个皮匠报告官方公众号

回到顶部