您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 项目/工程管理 > 腾讯互娱高级DBA康中良《Redis集群在腾讯游戏的应用及演变》
Redis集群在腾讯游戏的应用及演进康中良DBA@TencentGameRedisisanopensource,BSDlicensed,advancedkey-valuecacheandstore.Itisoftenreferredtoasadatastructureserversincekeyscancontainstrings,hashes,lists,sets,sortedsets,bitmapsandhyperloglogs.—特点❖速度快QPS10w+❖单线程一个线程干活:收包、发包、解析❖K-V存储所有数据按“key”访问❖纯内存+持久化数据全内存,高性能,RDB/AOF落地❖支持多种数据结构strings,hashes,lists,sets,sortedsets❖协议简单各种语言的api支持❖生产者/消费者消息队列高性能,异步处理请求队列❖过期时间到期数据自动删除Redis@腾讯游戏❖主要代理手游使用(2013~至今)❖实例数:1900+❖数据量:2.5T+❖访问量:900亿+/天Redis@游戏场景❖string:openid映射等❖hash:角色信息、装备道具等❖list:DB数据缓写、排队等❖set:用户单属性记录:好友等❖sortedset:全局排行等❖过期时间:定期活动礼包发放等Redis@游戏场景*周排行腾讯手游特点❖用户多❖增长快❖节奏快❖业务多❖周期短上线推广Redis集群在腾讯游戏的应用及演进阶段1:直接使用Redis标准化管理可用性阶段2:定制+集群服务海量数据支撑简化运维管理阶段3:在线迁移扩缩容在线容量迁移展望:冷热数据分离AOF增量落地数据SSD落地冷热数据分离2013.72014.32014.8TODO阶段一:直接使用Redis直接使用Redis,重点关注:❖标准化管理❖可用性Redis-标准化管理❖标准安装,集中管理❖统一配置+个性配置❖标准安装目录及命名规范❖自动化部署❖自动化部署实例,支持大量实例批量安装❖平台化❖监控❖统一监控内容❖Redis性能数据集中上报❖备份❖统一备份策略,本地备份+异地备份Redis-标准化管理❖Redis服务化❖上架工作一步完成Redis-可用性❖主备部署❖master访问,slaveaof落地+备份❖域名接入,自动故障切换❖Redis故障程序配置不需要修改❖故障自动切换❖方案透明,应用无需改造❖Whynotzookeeper/LVS?Redis故障自动切换GameSvrGameSvr…..DNSRedis(M)Redis(S)GCS系统DNS管理故障检测域名切换故障Redis切换时间:1分钟Redis-容量管理单实例如果数据量太大,带来的困难:✤备份✤replication✤性能解决:❖单机多实例❖单实例容量管理:❖单实例16G(最好8G)❖请求量5w/s❖内存超过配置80%告警单线程既是优点,也是缺点!直接使用Redis的不足❖单实例容量有限❖大量实例管理复杂❖运维操作复杂例如某业务模块:❖需500G空间,访问峰值100w/s,需要30+Redis节点❖程序需自己实现hash算法,扩容还需要修改算法。。阶段二:定制-提供集群服务大量Redis运营,重点关注:❖海量数据支撑❖运维管理简化引入中间件❖Redis集群引入twemproxy作为代理:❖按key分片❖访问透明,协议兼容关于Twemproxy:❖Afast,light-weightproxyformemcachedandRedis—定制❖关于twemproxy性能:(与直连Redis对比)腾讯定制twemproxy,主要改造:❖1.定制hash分片算法(42w)❖2.故障切换支持❖3.ping/auth命令的支持Redis集群分片管理❖单集群固定分片:42W❖key=hash(key)%420000=key存储Redis❖扩容、缩容操作定制twemproxygetmykeyRedis10-200000Redis220001-419999Redis1Redis2hash(“mykey”)=9642Redis集群方案GameSvrGameSvr…..DNS定制twemproxy……定制twemproxyRedis(M)Redis(M)Redis(M)……GCS系统DNS管理hash取模Redis(S)Redis(S)Redis(S)……集群高可用❖1.Redis集群通过DNS+port访问.❖2.当twemproxy故障时,GCS系统会将twemproxy从DNS中剔除掉故障IP,业务访问重试即可恢复.(需重连)❖3.当Redis实例故障时,GCS系统会将所有访问该Redis节点的twemproxy全部指向Redis的slave.整个操作预计1分钟左右完成.Redis集群-收益❖程序访问配置一个域名,扩缩容无需修改,运维方便❖twemproxy层可以在线扩容、缩容,调度灵活❖提供高并发,海量请求处理能力Redis集群-数据某手游Redis集群现网运行数据:❖单集群60个Redis节点❖30台twemproxy(90个实例)❖单集群查询峰值达100w/s❖单集群容量900G集群容量的扩展问题不足阶段三:容量可扩展服务重点关注:❖Redis集群数据在线迁移(扩缩容)在线迁移-设计❖迁移以key为单位❖Redis哈希取模分片❖Twemproxy支持消息重定向及重试❖Redis分片/key增加迁移状态❖分片、key迁移状态在Redis中落地Redis集群在线迁移流程twemproxyGameSvrRedis(old)Redis(new)TransferCenter①④Redis_old0-4199991Redis_new0-4199992迁移过程:a.Transfer向proxy发送增加迁移svr的指令addSPRedis_newAPP0-419999b.向Redisold/new每个bucket发送迁移开始指令,并获取bucket内所有keyRedis_old0-4199991c.在old/new上锁定一个key,开始搬迁mykeystatus:0d.搬迁key(dump/pttl/restore)e.释放new上的key锁定,删除oldkeyf.Bucket迁移完成mykeystatus:1mykeystatus:1mykeystatus:0g.迁移完成,发送adddone命令到proxydump/pttl/restoreRedis_new0-4199991迁移中请求处理key未搬迁,且未锁定:TwemproxyRedis(old)Redis(new)getmykey1234mykey迁移中请求处理TwemproxyRedis(old)Redis(new)getmykeykey搬迁完成,未锁定:312456mykey迁移中请求处理TwemproxyRedis(old)Redis(new)getmykeykey搬迁中,锁定:3124….mykey567try10times…….迁移中的key,如果在oldRedis请求失败,请求重定向到newRedis.如果newRedis中key未迁移完成,Twemproxy最多重试10次。定制改造❖Twemproxy❖支持请求重定向❖支持添加、修改Redis节点❖支持配置文件落地,支持Redis节点状态❖Redis❖分片功能支持,共42w个分片(buckets),可以按分片提取分片内所有key❖增加管理指令,用于支持迁移❖对key增加迁移状态,对分片增加迁移状态❖分片迁移状态落地到rdb/aof文件,并主从同步❖迁移工具(transfer,新开发)❖支持按分片迁移集群内Redis数据❖支持失败重迁移Redis集群在线迁移-收益❖提供7*24不间断Redis集群服务❖在线扩容&缩容&迁移❖集群资源快速调度,节约成本,缩容不停机展望:冷热数据分离TODO:❖增量同步❖Redis+SSD落地,冷热分离目标:❖Redis集群建设为高效、稳定的存储解决方案。Q&Azhongliangkang@qq.com
本文标题:腾讯互娱高级DBA康中良《Redis集群在腾讯游戏的应用及演变》
链接地址:https://www.777doc.com/doc-4506121 .html