直播兴起的军功章上也有你的一半——Redis实践及在直播行业的应用

以下为直播整理内容。



云数据库Redis是一种稳定可靠、性能卓越、可弹性伸缩的数据库服务;它基于飞天分布式系统和全SSD盘高性能存储,支持主备版和集群版两套高可用架构;并提供了全套的容灾切换、故障迁移、在线扩容、性能优化的数据库解决方案。

Redis介绍

Redis的全称是Remote Dictionary Server,它是由Salvatore Sanfilippo写的Key-Value存储系统。但它提供了比Key-Value更为丰富的数据结构,包括Lists、Sets、Ordered Sets以及Hashes,当然还有和Memcached一样的Strings结构;Redis当然还包括了对这些数据结构的丰富操作。Redis的优点可以总结为以下几点:

  •  性能极高,Redis能支持超过 100K+ 每秒的读写频率;
  •  丰富的数据类型,Redis支持二进制案例的 Strings、Lists、Hashes、Sets 及 Ordered Sets 数据类型操作;
  •  原子性,Redis的所有操作都是原子性的,同时Redis还支持对几个操作全并后的原子性执行;
  •  丰富的特性, Redis还支持 Publish/Subscribe、通知、Key过期等等特性。

这些丰富的特性,使得Redis在DB-Engines 排名稳居第十,其中在Key-Value数据库中排名第一。

关于直播

 

2015年到2016年,视频直播行业异军凸起,国内涌现了一批视频直播公司,如映客、一直播、熊猫TV、花椒等。直播行业的火爆与云计算和移动互联网的关系密不可分,云计算突破了视频直播技术的门槛;移动互联网使得直播随时随地成为可能。

上图是直播系统的完整框架图。用户终端,如智能手机、PAD、电脑等,通过网路接入负载均衡,进而进入后端的服务器系统;在后端服务器上,有不同的应用模块,如用户管理、关注信息、聊天交互、视频编码、金币系统、推送系统、排名系统、录像管理,这些业务系统都是搭建在底层云计算上,用户可以使用云Redis、MySQL、CDN、离线计算等资源构建直播系统。

Redis应用介绍

下面来具体介绍Redis具体应用场景。

场景一:用户信息管理

在直播系统中,用户有很多信息需要管理,如登录信息、注册信息等。传统的方式是采用关系型数据库存储用户信息,定义一张用户表,用户的属性对应表的列,这种方式的可扩展性很差,当用户增加新属性时,需要修改数据库中的用户表、数据订正等操作;采用Redis数据库进行用户信息管理时,通过采用Hashes数据结构,如上表所示,在user9527的个人信息中选择user9527作为Key,同时每一行的用户信息是Hashes内的Field,用户新增加信息时,通过Hset命令向Hashes内新加一个Field,如hset user9527 name xiaoqiang;最后可以通过hgetall user9527获取用户信息。

应用场景二:关注列表

在直播系统中有很多关注链,如明星、游戏玩家等等。用户可以使用sets实现这类关注链,查看不同主播的关注信息。

如上图所示的Jack关注列表,通过调用sadd方法给jack_follow增加响应的value值,用户Jack多关注一个人,则多增加一个记录;同时也可以通过sadd my_follow增加我关注的列表;最后,通过sinter jack_follow my_follow得出两个关注表中的交集部分。

场景三:积分排行

在直播系统中,需要实时更新积分排行榜,每个用户都有自己的积分和姓名信息。通过定义rank这个Key对应每个用户的积分,通过调用zadd增加对应用户的积分值,如 zadd rank 1000 Super;最后通过zrangebyscore zrank -inf +inf 遍历用户的key,得到指定范围内用户的积分,从而得到积分排行榜。

场景四:最新评论

在直播系统中,评论也是很关键的一部分,在Redis中可以通过Lists实现最新评论。如上图所示在Redis中定义latest.comment,当用户有评论时,调用Ipush增加用户的评论,如Ipush latest.comment “今天天气很好”;用户也可以调用 Irange latest.comment 0 2 获得最新评论。

除上述场景外,Redis还可以用在于:

  •  PHP session信息
  •  数据库缓存加速
  •  点赞数、评论数目,通过Incr/decr进行数目增加或减少
  •  消息广播,通过Subscribe/publish订阅模式实现
  •  附件的人,redis 3.2中新增了附近的人功能

云数据库Redis设计

 

Redis设计时单线程结构,进而导致了整个Redis存在性能瓶颈;另外,在单节点的场景下,机器宕机时,可用性面临着很大的问题;同时,由于Redis是全内存数据库,因此Redis内存受限于单机内存;当内存过大时,也会影响其使用情况,其可扩展性也面临着挑战。

为了解决上述问题,阿里云重新设计了云数据库Redis解决方案,供用户使用。目前阿里云提供了单机版和集群版两种版本的云数据库Redis产品。

上图是云数据库单机架构,用户在ECS上通过SLB来访问后端的Master-Slave结构的Redis,外面的HA模块会探测Master的节点,如果Master的TCP链接无效或请求没有响应或者其他异常时,HA将调用SLB接口,将流量调至备用节点上。

原生Redis中,单节点结构不可靠;同时单线程使得慢请求阻塞,导致误判。为了解决这个问题,在Redis中新增了端口,该新端口和线程一起用于探测,对Redis实际可用性进行检查,如检查内存、CPU、进程存活情况,避免由于慢请求阻塞导致误切换的情况发生。

 

上图是云数据库集群架构,ECS通过负载均衡访问后端的PROXY;PROXY根据路由表访问后端的Master-Slave结构;Config Server用于维护路由表的关系,在扩容时,用于维护两个路由表的变化;数据迁移通过Config Server促发Redis Server,PROXY链路根据路由表和后端Redis Server反馈情况,来访问迁移中的数据。整个集群同单机版类似,采用双备份架构,同时整个链路部署了全链路监控;此外还支持动态扩容和自动容灾。

用户并不希望在链路升级时出现闪断情况,因此云数据热升级机制就显得尤为重要。目前云数据库支持Proxy热升级和Redis热升级。

对于Proxy热升级,通过unix domain socket把所有TCP连接迁移到New proxy进程,迁移过程中,用户是无感知的,也不会发生闪断现象;所有的Client TCP链接都迁移到New Proxy进程上,再把Old Proxy进程关闭,完成升级。

 

 

对于后端的Redis热升级,将Redis进行拆分二进制文件和动态库SO,在升级过程中调用SO中的函数,将老版本内的SO信息复制到新版本SO中,最后释放旧版本中的数据。整个升级过程用户是无感知的,升级时间短,一次升级花费4毫秒。

接下来看下Redis中内核存储优化,原生Redis中有两种持久化方式:RDB和AOF。其中RDB是时间点的备份,用户可以通过两种方式出发RDB的备份;AOF的方式类似MySQL的Binlog,可以通过对AOF文件进行追加。从上图可以看出,这两种持久化方式存在Fork耗时、AOF阻塞请求、大IO影响稳定性的痛点。

对于访问量比较高,延迟要求低的数据库来说,这些问题必须加以解决。通过对Redis内核存储进行了优化,采取RDB加AOF的方式,其中AOF按照大小回滚,废弃AOF Rewrite过程;同时将AOF写入放到后台生成进行写入,在可运维时间内进行全量的写操作。

目前云数据Redis支持全量备份和基于时间点恢复备份,后者尚未在公有云上线。全量备份目前是按天级别的备份,整个备份过程由Backup Server进行管理。Backup Server通过访问元数据库获取信息,通过communicator下发任务给每个DB节点上的Backup Agent;Backup Agent接到任务后,通知Redis Server进行全量备份,将备份文件流式化上传到OSS上。在备份恢复时,Backup Agent从OSS上拉取备份文件,下载到本地;DBNode通过加载文件恢复之前备份的数据。整个备份恢复系统增加系统的可靠性,用户可以在数据丢失的情况下,通过数据恢复找到之前的数据。

云数据Redis运维监控体系主要包括:主机监控、网络监控、实例监控、可用性监控和巡检系统。

上图是主机监控效果图,从图上可以主要记录了CPU TOP进程、每个进程的CPU消耗、用户态的CPU和系统态的CPU以及磁盘I/O、读写等信息。

网络监控主要是通过在协议栈上抓取信息,统计实例级别的流量和链接信息、网络质量,查看是否存在丢包、乱序重传、异常关闭等信息。实例监控主要监控实例的访问量、流量、消耗的CPU、内存、磁盘IO、命令情况、慢请求等。 

云数据库Redis实践

用户在选择云数据库Redis时,需要注意以下几点:

  •  可用区选择,跨机房延迟比同机房高,因此需要尽量选择同机房;
  •  网络类型,目前阿里云提供两种网络类型:经典网络和专有网络,企业应根据对应的业务类型选择合适的网络类型。
  •  容量评估,容量受限于内存大小,企业根据业务需求选择对应的内存。
  •  计算评估,目前单机版最大是10wqps,集群版本是60-100wqps,企业需要较大的计算能力时,应选择集群版本。

云数据库Redis不同规格的存储容量、最大连接数、吞吐量都有限制,具体参数如上图所示。

在使用Redis过程中,总结了一些最佳实践:

  •  使用长连接,避免短连接风暴,因为短连接需要建立链接、鉴权等步骤,性能远不如长连接;
  •  使用时避免使用keys*命令,如需获取所有的Key,可以通过Scan代替,这是由于keys *容易阻塞所有的命令,导致CPU占满,出现超时现象;
  •  在使用时,如果发现后端Redis Server运行缓慢,可以通过Slowlog命令分析Redis运行情况;
  •  用户也可以通过设置过期时间,让缓存占用的内存尽快释放;
  •  对于持久化的存储,使用时应尽量避免内存大量淘汰;
  •  在使用Redis还使用云监控提前发现性能及容量瓶颈;

此外,用户还可以通过控制台进行历史监控,设置合理的备份时间以及使用DMS查看实时信息。

关于分享者:

白宸,14年加入阿里巴巴,早期在淘宝核心系统负责分布式缓存开发工作;后并入阿里云数据库技术组,专注于云数据Redis设计研发工作。



相关云产品:

云数据库 Redis 版本:https://www.aliyun.com/product/kvstore


时间: 2024-10-05 16:35:00

直播兴起的军功章上也有你的一半——Redis实践及在直播行业的应用的相关文章

业务技术协同线上化的硬盘式研发管理实践

摘要:在云效平台策划推出的<持续集成与交付:阿里最佳实践>专题中,阿里云效产品专家代平为大家深入浅出地分享了互联网的研发管理理念,解析了企业研发管理面临的挑战和困难,揭密了如何结合云效产品进行业务技术协同线上化的硬盘式研发管理实践. 以下内容根据演讲嘉宾视频以及PPT整理而成. 演讲嘉宾介绍 代平,阿里云效产品专家.在本次分享中,代平谈到自己的职业生涯目前总共经历了三个阶段,第一个阶段她从事研发.测试以及项目管理工作,在这个阶段水深火热地工作了四年,积累了大量的项目开发.测试以及管理经验.第二

【天池直播】天池线上赛自定义函数实践

本次直播你可以听到什么? 如何灵活应用天池平台自定义功能向线上赛发起挑战. 直播主题:天池线上赛自定义函数实践 直播时间:10月25日 晚20:00 直播地址:点击查看 直播嘉宾: 李雨亭 天池ID:余音,花名:墨音 数据挖掘竞赛选手,数据挖掘爱好者. 曾取得第一届阿里云安全算法大赛冠军等成绩. 直播内容: 1. 线上赛如何在odps利用MR/UDF进行个性化数据处理 2. xgboost生成叶子节点特征实战 有奖互动: 互动时间:10月25日直播活动后在互动帖中进行互动 互动时长:15-30分

CNNIC:中国网民规模达到7.1亿 接近一半人用过网络直播

今天上午,中国互联网络信息中心(CNNIC)在京发布第38次<中国互联网络发展状况统计报告>(以下简称为<报告>). <报告>显示,截至2016年6月,中国网民规模达7.10亿,互联网普及率达到51.7%,超过全球平均水平3.1个百分点.同时,移动互联网塑造的社会生活形态进一步加强,"互联网+"行动计划推动政企服务多元化.移动化发展. 网民规模突破7亿,互联网普及率增长稳健 截至2016年6月,我国网民规模达7.10亿,上半年新增网民2132万人,增

中美企业在数据分析上最大差异:增长黑客的实践

本文作者:GrowingIO 创始人&CEO张溪梦,原LinkedIn商务分析高级总监,微信公众号GrowingIO . 链接 一.烧钱≠增长,数据驱动是一种能力 在过去10年,中国互联网发展速度非常快,以前是流量驱动的互联网经济.随着人力成本不断攀升,竞争不断加剧,完全靠流量.预算.烧钱来获取客户和市场,已经不可持续了.如果你获取客户的成本高.速度慢且代价大,导致商业价值不能涵盖成本,最终是无法盈利和变现的. 同样获取一个购买客户,在中国可能是美国5倍的成本.在中国任何垂直领域都不是一个真空的

Kubernetes集群上基于Jenkins的CI/CD流程实践

本节我们通过在Kubernetes集群上创建并配置Jenkins Server实现应用开发管理的CI/CD流程,并且利用Kubernetes-Jenkins-Plugin实现动态的按需扩展jenkins-slave. 安装Kubernetes集群 首先,如果您没有Kubernetes集群,那么您需要创建一个.参见创建集群 安装Jenkins Server 为了让您的Jenkins Server可以具有Fail Over的能力,建议您将Jenkins的数据存储到阿里云NAS存储上. 步骤一: 首先

【集锦】2016年阿里云在线直播精华合集

每期阿里云的技术分享课程都报名火爆,各路技术大咖进行了对于技术理解的深度分享,但是还是有很多小伙伴错过了现场直播.本文特意为大家整理了阿里云在线技术分享课程的精彩合集,错过了直播的小伙伴们快来补补课吧! 12月28日 阿里沈询:分布式事务原理与实践 分布式数据库之中,一个最重要待解决的问题就是分布式事务应该怎么支持.往往一提到分布式事务,就立刻会联想到性能低,速度慢,然而真的是这样么?有没有一些方式和方法,能够比较好的解决这个问题呢?阿里针对这个场景又是怎么去实践的呢?阿里中间件资深技术专家沈询

95期:Docker常见故障排查指南大全

本期头条   不能错过的干货分享:支付宝App架构.阿里自研云数据库OceanBase.阿里机器学习应用-蚂蚁金服&阿里云在线金融技术峰会将于8月30日-31日在线举办.8位蚂蚁金服和阿里云技术大V,全程在线,与你深度互动,为你答疑解惑,共同探讨.本次峰会技术议题首次公开,绝对干货!马上报名. • 王宝强离婚成了谁的狂欢?通过阿里云·数加严肃解读数据背后的媒体传播路径 • 切换数据库引发的大战:阿里专家激辩PostgreSQL.MySQL到底哪个好?   技术干货   蚂蚁金服首席技术架构师:蚂

很好很强大--PPLive视频点播体验

笔者一直使用PPlive,从去年底发现PPLIVE的http://www.aliyun.com/zixun/aggregation/5218.html">客户端软件在直播功能的基础上,又增加了点播功能.并把直播和点播两大实用功能整合在 一款客户端软件上,同时可以用PPlive客户端观看本地视频文件,包括WMV.RMVB等格式, 不用安装其他软件,这对我们视频用户来说就比较方便了.点击下载PPLIVE 闲话不多说了,先介绍下个人的使用体会吧. 点播轻松,跳转快进想停就停 经常看在网上看节目的

王菲为宣传《将爱》出招:李亚鹏激情戏咋看?

王菲李亚鹏秀恩爱 李亚鹏.徐静蕾主演的电影<将爱>将在12日上映,票房"关系"着李亚鹏的收益,身为夫人的王菲自然不遗余力地帮夫宣传,在唱<将爱>主题曲之后,更在微博"号令"粉丝关注,并将话题引向李亚鹏和徐静蕾的"激情戏".此举引来"过来人"刘嘉玲"指点迷津",众 网友更是围观. 天后讨教 看老公的激情戏该不该闭眼? 以目前看,<将爱>的话题众多,热门的老剧翻拍,原班人马再