1. 云栖社区>
  2. 博客列表>
  3. 正文

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

场景研读 2016-11-01 11:00:21 浏览7169 评论4

redis 阿里云 视频直播 云数据库Redis版 云栖社区在线培训 白宸

摘要: 在阿里云云栖社区举办的在线培训中,来自阿里云数据库技术组的白宸为听众带来了题为《Redis实践及在直播行业的应用》的分享,本次直播包括Redis介绍、直播行业介绍、Redis应用场景、云数据库Redis设计、云数据库Redis实践五部分。

在阿里云云栖社区举办的在线培训中,来自阿里云数据库技术组的白宸为听众带来了题为《Redis实践及在直播行业的应用》的分享,本次直播包括Redis介绍、直播行业介绍、Redis应用场景、云数据库Redis设计、云数据库Redis实践五部分。分享中他重点介绍了Redis在直播行业的应用场景,并对云数据Redis设计的原理给出了精确的解释。

以下为直播整理内容。


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

Redis介绍

4019ae2e6e0cee1cafcaddb1e2c31ca1fc62e656

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过期等等特性。

41533f55bce8a4e90efd414c2da6edf16b907dca

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

关于直播

 

70cdcc487cc6495d9c6b6d194638de1f5d15af3f

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

cb753088ea8042a62698cfaf57ed179e83bf91d8

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

Redis应用介绍

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

场景一:用户信息管理

ef0bf66410a83f7f0a62215bb5303a9d9bce3db2

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

应用场景二:关注列表

3691b372ae4557474839640dd3c098fb510d8412

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

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

场景三:积分排行

bf4fc7e474a566528a8cc46991bf63dc8e82a75f

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

场景四:最新评论

79df37fff703e5bfaef8c923b4c06f0af7fd8499

在直播系统中,评论也是很关键的一部分,在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设计

 

708d5937c7d958b0baa6afe23c85b681c67760c9

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

817054d05fd1451fc125b681e0082666875ff577

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

f138908d13a287997bd46773b0a1f1fb73e2eebe

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

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

 

43f3ebfe145c7ef8be3bcbf29d24517030a803ce

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

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

53472857f72c7decca76f1f56f04cbb23190e955

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

 

 

e27b738783b0a455c0b635efc687424f95818bef

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

ad36c934e8e8727ab93af6b2aa2dd5d12413ed88

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

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

6ce623bed05a365e0d85be15c7430da3f24eef47

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

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

6f4282bd15ae5d3725c2683d1b0d11cc356182bb

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

1caf1712e5964d05e355ac1c7290059cfe6739fc

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

云数据库Redis实践

ea4a5501449c2bb8ea1b5420370e5911c9839633

用户在选择云数据库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


版权声明:本文内容由互联网用户自发贡献,本社区不拥有所有权,也不承担相关法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件至:yqgroup@service.aliyun.com 进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容。

用云栖社区APP,舒服~

【云栖快讯】红轴机械键盘、无线鼠标等753个大奖,先到先得,云栖社区首届博主招募大赛9月21日-11月20日限时开启,为你再添一个高端技术交流场所  详情请点击

网友评论

1F
看看就看看

不错,学到不少

(来自社区APP)
2F
元乐枫

学完了可以写直播网站吗?

(来自社区APP)
3F
王立功

学习到一些redis的应用场景

4F
wenni20161201

云中沙箱为阿里云官方实验平台,提供真实的阿里云环境以及系统的学习进程及课程教材,用户通过平台自动创建的阿里云资源,深度体验和学习阿里云产品和服务。(网址:http://lab.aliyunedu.net )

现沙箱实验:[快速部署低延时直播平台之OBS]限时免费!机会难得,快来学习吧!
网址:https://edu.cloudcare.cn/courses/cd3fa99dc3784a64805b4584b8aa4cdf/detail
活动时间:2016年12月28日早9:00-晚9:00

基于领先的内容接入与分发网络和大规模分布式实时转码技术打造的音视频直播平台,提供便捷接入、高清流畅、低延迟、高并... 更多>

一种稳定可靠、性能卓越、可弹性伸缩的数据库服务。基于飞天分布式系统和全SSD盘高性能存储,支持主备版和集群版两套... 更多>

基于云安全大数据能力实现,通过防御SQL注入、XSS跨站脚本、常见Web服务器插件漏洞、木马上传、非授权核心资源... 更多>

为您提供简单高效、处理能力可弹性伸缩的计算服务,帮助您快速构建更稳定、安全的应用,提升运维效率,降低 IT 成本... 更多>
MaxCompute75折抢购

MaxCompute75折抢购