直播中「周边」系统的优秀实践|架构师实践日

编者按:直播中除了视频流外,还有多种用户互动的方式,譬如聊天、弹幕、打赏等周边系统。在 7 月 31 日的上海架构师实践日中,来自 LeanCloud 研发工程师吴俊,为我们带来了他们在直播中「周边」系统的优秀实践 ,以下是对他演讲内容的整理。








屏幕快照 2016-08-18 上午9.55.59


吴俊


先后就职于 Symbio 、微创,2014 年加入 LeanCloud 任职至今,C# 等 SDK 负责人。个人爱好新闻阅读,技术文档编辑,也是一名业余段子手和网络小说兼职作家。



直播-聊天屏幕快照 2016-08-18 上午9.55.01



图 1


一个直播 App 中的聊天室通常会有:



  • 波涛汹涌的信息墙

  • 来来往往的人

  • 礼物事件


波涛汹涌的信息墙,其本质就是文本消息。在 LeanCloud 聊天服务当中泛指普通消息,普通消息的格式如图 1 所示,type 代表的是该条消息的类型,默认是文本类型,而 content 表示的是消息真正的内容。


来来往往的人对应的是观众加入聊天室或者离开聊天室的时间通知,这两种行为在 客户端的 SDK 中都有事件通知,开发者只要注册和监听对应的事件就可以实现一些 UI 的展现。


礼物事件可视为一种消息,它与普通消息不同的是,它是类型自定义的消息。因此,开发者只需要修改普通消息的 type 字段,就可以实现自定义的消息。图 2 所示,这段代码定义了一个礼物消息。


屏幕快照 2016-08-18 上午9.55.12

图 2



直播-打赏屏幕快照 2016-08-18 上午9.55.23



图 3


打赏,指的是观众可以赠送礼物给主播。图 3 演示了聊天系统中实现打赏的简易流程。首先将打赏消息封装成自定义消息,然后在服务端编写 hook 函数( 在 hook 函数中判断消息类型)。如果是礼物类型的消息,就可以进入支付逻辑,比如判断余额是否充足。如果足够支付,就向聊天室里送达一个礼物赠送成功的消息,客户端随机进行 UI 展现;如果不充足,则返回结算失败的消息,然后引导客户端调用支付宝或者微信的 sso 充值支付。打赏消息也可以理解为一种自定义类型的消息,只是相对于其他的消息多了一层支付的结算过程,而这些都可以在自定义服务端逻辑里面完成。


通过打赏的实现,会引出一个打赏安全方面的考虑。打赏所涉及到的安全相关的逻辑在 LeanCloud 提供的解决方案中是可以从客户端以及服务端的分工入手。首先客户端承担的职责比较明确,先发送一个打赏消息,而服务端接到消息之后开始进入一个控制流程,这个流程开发者可以在服务端自定义逻辑中去掌控,比如有一些直播 App 打赏存在免费的礼物,而另一些 App 里面所有的礼物都需要付费。接着在收到打赏消息之后,开发者在自定义服务端逻辑中将这一条记录存储在数据存储服务当中。这样这条记录就持久化的存储在云端数据库当中,以便客户端在做展现的时候可以查询,例如礼物的多少,最后就是真正的扣费。



直播 App 常见问题



在直播当中会遇到很多问题,下面是 3 个比较典型的问题:



  • 吞吐量太大

  • 用户疯狂点赞

  • 打赏过程中的事务处理


直播 App 的刚性需求就是云服务在处理并发的时候一定要稳定,并且优化策略一定要对开发者公开并且友好可用。针对海量数据吞吐时,消息量的优化策略有以下几点:



  1. 分布式,同一个聊天室用户分布在多台服务器上

  2. 异步化,快速给发送端反馈

  3. 紧凑化,使用二进制协议减少传输量

  4. 定期检查连接上积压的数据量,当无法写下时丢弃一部分,保证服务器内存使用量健康。例如聊天室内当前有 20 万人,有一个人发了一条消息,这时会保证有 195000 人收到,另外 5000 人选择丢弃。这个属于可接受的逻辑处理,解决这个问题的最好方式就是加入消息分级,当连接上出现积压时,可以根据消息的优先级选择性丢弃。


点赞的处理是客户端在实现的时候采用定时或者分批发送的策略。定时指的是,一个时间段内记录用户点赞的数量,然后合并发送给服务端,或者采用分批发送的策略,例如收集用户点击次数每达到 20 次,就统一发送,这两种方式都可以提高性能。


打赏有时也会遇到高并发可能性,因此在服务端提供了异步化的接口给开发者可以异步处理,例如,开发者可以将打赏封装成一个事务运行服务端,用以提高效率。




屏幕快照 2016-08-18 上午9.55.39


「七牛架构师实践日」——这里只谈架构


七牛架构师实践日是由七牛云发起的线下技术沙龙活动,联合业内资深技术大牛以及各大巨头公司和创业品牌的优秀架构师,致力于为业内开发者、架构师和决策者提供最前沿、最有深度的技术交流平台,帮助大家知悉技术动态,学习经验成果。


七牛架构师实践日第十二期【泛娱乐+直播 技术实践】将于 9 月 3 日与大家在 厦门 见面,目前活动正在火热报名中,点击「阅读原文」了解更多信息,期待你的参与。