直播礼物系统设计要点

直播礼物系统的特点

  • 数据一致性要求高。用户购买的礼物,主播收到的礼物。这些都涉及真金白银结算,自然是不能错。
  • 实时性要求高。腾讯公司做过一次问卷调查,用户送礼时,最关注的是主播的反馈。送出礼物后,希望能较快听到主播感谢自己,念自己名字。主播会更关心礼物排行榜的变化,以便及时和粉丝互动。这样要求送礼后,礼物账户及各种排行榜准实时的更新。
  • 关联模块多。一次送礼,需要更新各种各样排行榜,还要增加用户等级,发送礼物消息等。
  • 安全性要求高。用户礼物账户好比银行账户。
  • 消息的重要性高。热门主播直播时,大量的粉丝进行送礼,粉丝及主播是根据看到的送礼消息来确定礼物是否送出和收到什么礼物。消息不能丢也不能多,同时还要求能较快显示。

礼物系统架构选择

  • 模块交互模式送礼功能关联的模块多,操作流水需要同步到其它模块,可选的方式有notify模式和消息队列模式。两者特点如下
    根据实际工作的碰到的各种问题,建议采用生产者消费者模型,用消息队列来进行模块间通讯。送礼是直播业务里的核心功能,随着业务的发展,围绕着送礼功能会衍生各种周边功能,如增加几种排行榜,建立一种荣誉体系等。这样,送礼流水需要同步的模块会越来越多,如采用notify模式,链条会越来越长,主notify流程需要经常修改,模块间容易互相受影响。如采用消息队列模式,一次生产,多次消费,当新增一种功能需要送礼流水时,自行接入消息队列拉取流水进行计算,不用修改现有的模块而影响到其它接入模块。另外,在notify模式里没有考虑到被通知端的实际处理能力。在生产者消费者模式,消费者可以根据自己的实际计算能力来调节拉取速度,架构的可扩展性强,更具备弹性。
  • 计算模式

排行榜是送礼服务里必不可少的功能。直播送礼是读多写少的服务,基本上还是大部分观众围观土豪送礼的模型。建议排行榜采用写扩散模式,异步计算好排行榜,读取时直接进行拉取。在实现上把读写进程分开,两者各司其职,互不影响。

  • 存储模式 根据礼物系统的特点,其在不同方面有不一样的要求。
  • KV存储:排行榜等核心基础数据最终落地在KV存储,以加快计算读写速度。
  • MEM:定时缓存KV的数据。减少网络请求,加快读取速度。
  • SQL:存储送礼流水。用于进行对账和各类实时性要求不高的统计计算。
  • SSD: 存储送礼流水。用于异常情况下的数据丢失重建,定位问题,日志回溯等。

礼物业务的流水数据重要,建议分级和分多份存储以便数据对账和数据重建。当然成本也是考虑因素之一。

数据一致性

  1. CAP理论已经广为人知。这里结合实际工作中遇到的问题,谈点个人的认知和方法。在服务海量用户时代,传统的SQL存储并不适合高并发,实时性要求高的场景,大量KV存储应用在我们的业务中,追求高性能高并发的KV的存储大部分并不支持事务功能,这样带来了数据一致性问题。总体来看,影响数据一致性主要有两个方面。一:数据损坏。这个可通过备份数据进行重建和对账来恢复。二:超时。在分布式架构下,超时简直是噩梦,其带来了状态的不确定性。
  2. K歌礼物业务解决数据一致性基本方法:每次送礼时会生成唯一送礼id号,唯一id号会贯穿整个送礼流程,最终的存储也会记录有id号信息。当送礼流程中有超时的会记录日志,由Redo程序来进行重试处理,Redo程序会先判断送礼id号是否已经处理以防止多算一次。

安全

  1. 送礼协议端到端加密防破解。
  2. 防抓包重放攻击。具体实现方法为送礼分两步走,分下单和消费两个步骤,联合送礼步骤的状态机进行判断。下面为实现流程图

举例:如果下单数据包被截获重放,只会新生成不同的订单号,如果消费包被截获,流程里会判断状态机这个订单是否是合法及是否已经消费了。

3.内部安全。堡垒最容易在内部被攻破,加强内部控制,严格流程规范。DO分离,定时对账。

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

编辑于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏编程一生

架构师之路--从业务角度谈缓存的选型

1685
来自专栏安恒信息

携程曝重大安全漏洞 客户信用卡信息或遭泄露

3月22日,乌云平台连续披露了两个携程网安全漏洞,漏洞发现者称由于携程开启了用户支付服务借口的调试功能,导致携程安全支付日志可被任意还可读取,日志...

2748
来自专栏安智客

物联网设备六种攻击面及其应对

Gartner的最新报告指出,近20%的企业机构在过去三年内至少观察到一次基于物联网的攻击。为了应对这些威胁,Gartner预测全球物联网安全支出将在2018年...

1012
来自专栏智能大石头

MF前传——探索者二号简介

    因为探索者一号供不应求,远超预期,并且我们自己设计制造的成本太高,所以没有再次生产。而是选择较高性价比的第三方STM32开发板作为MF学习板,是为探索者...

900
来自专栏黑白安全

告诉你怎么样用WIFI逐步渗透至内网

这个是我帮助朋友公司做的一个渗透测试,在这之前,并没有收到任何相关信息,唯一的可用渠道就是WIFI,而对方的要求就是希望我测试一下,整个网络是否安全,是否存在漏...

1134
来自专栏运维小白

11.2 MySQL、MariaDB介绍

MySQL/Mariadb介绍 MySQL是一个关系型数据库,由mysql ab公司开发,mysql在2008年被sun公司收购(10亿刀),2009年sun公...

3036
来自专栏FreeBuf

看我如何破解一台自动售货机

毫无疑问,自动售货机是非常受欢迎的东西,我们总会从中购买获取一些小零食。早几年前,自动售货机只接受离线的硬币支付,之后,也慢慢采用了普及的NFC技术功能。如果我...

5132
来自专栏智能大石头

MF前传——探索者二号简介

   因为探索者一号供不应求,远超预期,并且我们自己设计制造的成本太高,所以没有再次生产。而是选择较高性价比的第三方STM32开发板作为MF学习板,是为探索者二...

21510
来自专栏腾讯大讲堂的专栏

应用内容检查大法

作者:互娱iOS预审团队,隶属于互娱研发部品质管理中心,致力于互娱产品的iOS审核前的验收工作。 前面一篇分享了客户端检查的相关要点,本篇会给大家介绍有关应用内...

2108
来自专栏Python爬虫与数据挖掘

利用Python网络爬虫采集天气网的实时信息—BeautifulSoup选择器

相信小伙伴们都知道今冬以来范围最广、持续时间最长、影响最重的一场低温雨雪冰冻天气过程正在进行中。预计,今天安徽、江苏、浙江、湖北、湖南等地有暴雪...

1052

扫码关注云+社区