本文主要介绍视频直播间系统,以及如何使用阿里云Redis混合存储实例方便快捷的构建大数据量,低延迟的视频直播间服务。
背景
视频直播间作为直播系统对外的表现形式,在整个系统中处于核心地位。通常除了视频直播窗口外,直播间还包含在线用户,礼物,评论,点赞,排行榜等信息。直播间消息,时效性高,互动性强,对系统时延有着非常高的要求,非常适合使用Redis等缓存服务来处理。
直播信息
实时排行信息
实时排行信息包含直播间在线用户列表,各种礼物排行榜,弹幕消息(可以理解为按消息维度的消息排行榜)等信息,适合使用Redis中的SortedSet结构进行存储。
例如,以unix timestamp+毫秒数为分值,记录user55的直播间增加的5条弹幕
redis> ZADD user55:_danmu 1523959031601166 message111111111111
(integer) 1
11.160.24.14:3003> ZADD user55:_danmu 1523959031601266 message222222222222
(integer) 1
11.160.24.14:3003> ZADD user55:_danmu 1523959088894232 message33333
(integer) 1
11.160.24.14:3003> ZADD user55:_danmu 1523959090390160 message444444
(integer) 1
11.160.24.14:3003> ZADD user55:_danmu 1523959092951218 message5555
(integer) 1
返回最新的3条弹幕信息:
redis> ZREVRANGEBYSCORE user55:_danmu +inf -inf LIMIT 0 3
1) "message5555"
2) "message444444"
3) "message33333"
返回指定时间段内的3条弹幕信息:
redis> ZREVRANGEBYSCORE user55:_danmu 1523959088894232 -inf LIMIT 0 3
1) "message33333"
2) "message222222222222"
3) "message111111111111"
计数类信息
计数类信息以用户维度为例,有未读消息数,关注数,粉丝数,经验值等等。这类消息适合以Redis中的Hash结构进行存储。
redis> HSET user:55 follower 5
(integer) 1
redis> HINCRBY user:55 follower 1 //关注数+1
(integer) 6
redis> HGETALL user:55
1) "follow"
2) "6"
时间线信息
时间线信息是以时间为维度的信息列表,典型的比如主播动态,新帖。这类信息排序方式是固定的时间顺序,可以考虑使用List或者SortedSet来存储。
redis> LPUSH user:55_recent_activitiy '{datetime:201804112010,type:publish,title:开播啦,content:加油}'
(integer) 1
redis> LPUSH user:55_recent_activitiy '{datetime:201804131910,type:publish,title:请假,content:抱歉,今天有事鸽一天}'
(integer) 2
redis> LRANGE user:55_recent_activitiy 0 10
1) "{datetime:201804131910,type:publish,title:\xe8\xaf\xb7\xe5\x81\x87\",content:\xe6\x8a\xb1\xe6\xad\x89\xef\xbc\x8c\xe4\xbb\x8a\xe5\xa4\xa9\xe6\x9c\x89\xe4\xba\x8b\xe9\xb8\xbd\xe4\xb8\x80\xe5\xa4\xa9}"
2) "{datetime:201804112010,type:publish,title:\xe5\xbc\x80\xe6\x92\xad\xe5\x95\xa6,content:\xe5\x8a\xa0\xe6\xb2\xb9}"
阿里云Redis优势
- 阿里云主从版Redis提供10万的QPS,读写分离版本Redis提供60万QPS最大力度支持系统的高并发需求。
- 资深专家团队深度开发维护Redis源码,经千万服务考验,超高稳定性和安全性。
- 双机热备架构,故障秒级自动迁移,全力保障订单数据。
- 一键创建,一键扩容,全方位智能监控运维平台。请求量,活跃度一眼就能看清。
- 专业服务团队,实时监控可用性,7 x 24小时在线咨询。
使用Redis混合存储实例存储信息
阿里云Redis混合存储产品完全兼容Redis协议,用户无需修改任何代码,以低成本的NVMe盘存储不常访问的直播间数据,可以突破内存容量限制,单实例最高可支持TB级别的数据容量。
- 当Redis混合存储实例内存可以存储所有直播间数据时,访问所有直播间数据均可享受极致性能。
- 当直播间数据越来越多,快要超过实例内存限制时,Redis混合存储实例会自动从访问频率,访问时间等维度选择冷门的直播间数据,后台将其Value存储到磁盘上;
- 热门直播间数据仍然保留在内存中,性能不受任何影响;
- 当访问到磁盘上的冷门直播间数据时,数据会自动从后台加载到内存中,所有IO操作都经过阿里云自研的新一代存储引擎Fusion Engine极致优化,4K数据加载速度在20us左右;
- 通过将部分冷数据存储到磁盘的方式,有效降低了用户成本并突破内存对单实例容量的限制。