加入收藏 | 设为首页 | 会员中心 | 我要投稿 PHP编程网 - 黄冈站长网 (http://www.0713zz.com/)- 数据应用、建站、人体识别、智能机器人、语音技术!
当前位置: 首页 > 运营中心 > 网站设计 > 教程 > 正文

深入浅出百亿请求高可用Redis(codis)分布式集群揭秘

发布时间:2019-04-20 14:29:51 所属栏目:教程 来源:jackiej
导读:副标题#e# 一、背景 随着直播元年开启,越来越多的直播产品如春笋般出现,在拉动营收的过程中,产品竭尽全力思考着各种活动来刺激用户的消费欲望,而这类活动的基础形式就是榜单,在2016年我们基于cmem及扫描流水表的方式来实现榜单排名,2017开始,我们对
副标题[/!--empirenews.page--]

深入浅出百亿请求高可用Redis(codis)分布式集群揭秘

一、背景

随着直播元年开启,越来越多的直播产品如春笋般出现,在拉动营收的过程中,产品竭尽全力思考着各种活动来刺激用户的消费欲望,而这类活动的基础形式就是榜单,在2016年我们基于cmem及扫描流水表的方式来实现榜单排名,2017开始,我们对原有系统进行重构,使用redis作为我们的榜单基础存储,在重构的过程中接到调研redis分布式解决方案的任务之后,比对业内各种开源产品,最后定下Codis,并对其中细节做了一些研究,期间在与Codis作者交流的过程中,有幸知道增值产品部的simotang已经在部门引入codis近2年时间,遂加入到codis的运维工作中,目前在部门内部署运维codis集群15套,2T容量,总日访问量百亿+,支撑了互动视频产品部基础存储,运营活动,榜单类业务2年多,共计100多个活动,榜单上千个。同时在这里非常感谢codis作者spinlock在接入codis过程中给予的指导与帮助。见spinlock github 与 codis地址。

二、Redis相关基础概览

2.1 Redis简介

redis是一个基于内存同时具备数据持久化能力的高性能,低时延的KV数据库,value的数据结构可以是string,hash表,list(列表),set(集合),sortedset(有序集合)。

Redis(RemoteDictionary Server)

Redis is anopen source (BSD licensed), in-memory data structure store, used as adatabase, cache and message broker. It supports data structures suchas strings, hashes, lists, sets, sorted sets with rangequeries,Practice: http://try.redis.io/

2.2 Redis的特点

1. 单线程异步架构(单线程,收包,发包,解析,执行,多路io复用接收文件事件)

2. k-v结构,value支持丰富的数据结构(string,hash,list,set,sortset)

3. 高性能,低时延,基于内存操作,Get/Set10w+,高性能,基于RDB、AOF落地保证数据可靠性

4. 丰富的特性,可用于缓存,消息队列,TTL过期

5. 支持事务,操作是原子性,要么全部提交,要么全部不提交。

2.3 Redis应用场景

深入浅出百亿请求高可用Redis(codis)分布式集群揭秘

2.4 写在前面:codis与redis的关系

codis与redis之间关系就是codis是基于多个redis实例做了一层路由层来进行数据的路由,每个redis实例承担一定的数据分片。

2.5 redis学习资料

由于本文重点在于redis分布式解决方案,对于redis相关的基础部分,大家可以参考两本书及相关源码分析文章。

1. Redis开发与运维(付磊)

2. Redis设计与实践(黄健宏)(值得多看两遍)

三、Redis分布式解决方案公司内外比较

在比较方案之前,我们先根据我们的经验输出了我们期望的解决方案应该具备的能力,以此来衡量我们的选择标准。

深入浅出百亿请求高可用Redis(codis)分布式集群揭秘

基于此我们对公司内外做了一个如下的比较:

【公司内组件对比】

【公司外组件对比】

基于以上比较,codis作为开源产品,可以很直观的展示出codis运维成本低,扩容平滑最核心的优势。

对于数据安全目前我们基于机器本机48小时滚动备份加上公司刘备备份(每天定时目录备份的系统)的兜底备份,对于监控,目前接入monitor单机备份和米格监控告警)。

四、codis的架构设计

4.1Codis整体的架构设计

codis官网

深入浅出百亿请求高可用Redis(codis)分布式集群揭秘

【图codis架构图】

如上图所示,codis整体属于二层架构,proxy+存储,相对于ckv+无proxy的设计来说整体设计会相对简单,同时对于客户端连接数据逐渐增大的情况下,也不用去做数据层的副本扩容,而只需要做proxy层的扩容,从这一点上看,成本会低一些,但是对于连接数不大的情况下,还需要单独去部署proxy,从这一点上看,成本会高一些。

深入浅出百亿请求高可用Redis(codis)分布式集群揭秘

其中,开源的codisproxy的服务的注册发现是通过zk来实现,目前部门是基于l5来做。

从整体的架构设计图来看,codis整体的架构比较清晰,其中codisproxy是分布式解决方案设计中最核心的部分,存储路由,分片迁移均与codisproxy分不开,这块我们来看一下codisproxy的设计实现。

4.2Codisproxy的架构设计实现

codisproxy的架构实现分成2个部分,分别为4.2.1的路由映射的细节与4.2.2的proxy请求处理的细节。

4.2.1 路由映射细节

(编辑:PHP编程网 - 黄冈站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读