如果你喜欢观看或参与游戏直播,那么你很有可能会用过虎牙。作为国内两大游戏直播平台之一,虎牙拥有两款核心产品,除了让国内用户津津乐道的虎牙直播,还有面向海外用户的NimoTV。前者的月活跃用户已突破1.78亿。
虎牙海外业务平台技术负责人马昭告诉记者,虎牙在发展过程中一直秉承着“技术驱动娱乐”的理念,在直播领域采用了很多新技术,如实现了行业首个虚实同台的AR互动直播。
而在深耕国内业务的同时,虎牙也拓展了海外业务。年,虎牙正式推出海外直播产品NimoTV,用两年时间顺利进入了东南亚、拉美、中东等地区,并获得了一定的市场份额。年,NimoTV的月活用户已经突破了三千万。
业务全球化的新要求
据马昭介绍,虎牙在业务全球化的过程中,对于数据库产生了新的要求:
第一个要求是成熟稳定,因为数据库的稳定性直接决定着上云业务的稳定性,一旦数据库出现问题,影响会很大。
第二,海外业务扩展比较迅速,对数据库的扩展性也提出了要求,要能跟上NimoTV的节奏,能进行快速扩展。
第三,数据库要能够兼容已有的架构。因为在业务出海之前,虎牙已经有了国内的虎牙直播业务,很多基础平台和构件已经可以部署到海外了,基本可以做到无缝上线。
基于这些需求,技术团队对虎牙的数据库体系进行了重新审视,并且重新设计了数据库体系。
马昭表示,市面上的数据库种类很多,不过虎牙选择数据库的时候还考虑到:供应商是否能对全球化业务进行支持、在某些区域里会不会更有优势、能不能很好的自动扩容、最终的吞吐量是多少,以及成本如何优化等因素,并最终选择了亚马逊云科技的数据库。
用AmazonAurora实现性能提升
过去,虎牙一直使用关系型数据库MySQL,但随着业务量的增加和数据内容的增加,MySQL的性能已经无法满足需求。经过研究和测试,虎牙用AmazonAurora替换了传统的MySQL,达到了性能提升的目的。
虎牙在AmazonAurora中存储了交易信息、主题信息、主播的开播记录以及用户信息等等。原先存储在MySQL上的数据都迁移进了AmazonAurora。
马昭告诉记者,使用AmazonAurora给虎牙带来了四个好处:
首先是性能提升,如果要提升传统的MySQL的读写性能,需要做分库分表操作。但这会让聚合查询变得非常困难,业务需要做很多兼容。而AmazonAurora省去了大量的分库分表工作,使研发人员可以更加聚焦在主营业务上。
第二,AmazonAurora非常容易扩展,因为海外流量变化非常迅速,需要频繁的扩容与缩容,而MySQL扩缩容需要迁移数据,非常困难。而Aurora属于计算和存储分离的架构,扩缩容非常容易。现在虎牙基本已经实现了Aurora自动扩缩容,使成本下降了50%以上。
第三,是AmazonAurora的全球同步能力,这对于虎牙的全球化业务非常重要。因为海外用户与国内用户有很大不同,海外用户的距离相对较远,处于不同的国家,所以用户之间的访问延迟比较高。如果要降低延迟,提升用户体验,需要能就近访问数据。但MySQL很难满足这个要求,AmazonAurora的物理同步方式能够很好的支撑虎牙数据的全球化。
第四是维护与迁移的能力,传统的MySQL维护和迁移都比较麻烦,需要很多DBA人员做复制、备份等工作,而AmazonAurora的维护简单得多,基本上可以实现自动化。另外,AmazonAurora有很多API,可以很方便的接入公司的运维体系,方便做监控和规划。
此外,AmazonAurora还能完全兼容MySQL,无需做任何代码更改就可以上线,研发人员对其也比较熟悉,基本上没有技术壁垒。
用AmazonDynamoDB应对流量突增
NimoTV业务还有个特点,就是经常会出现流量突增,低峰与高峰的数值跃动很大,相差几十倍。因为业务涉及的海外国家很多,虎牙很难去统计每个国家的节日、预测每个国家的大主播什么时候会上线,并为此预留资源。一旦流量突增,就会对NimoTV造成很大的压力。
“大主播上线的时间基本上没有什么规律。如果我们预留的资源少了,流量大时,系统可能会出问题,如果我们预留多了,就会造成很大的资源浪费。”马昭表示。
而且,用户订阅主播的情况分布不均,有的小主播只有几十个粉丝,有的大主播可能有上百万粉丝,这对NimoTV的存储也带来一些挑战。加上直播的实时性很高,如果主播开播了,粉丝在很长时间后才收到开播推送,就很容易错过精彩时刻。
所以虎牙设计了一套架构来做全球主播的推送,并选择用AmazonDynamoDB来应对流量突增。
据马昭介绍,AmazonDynamoDB有几个好处:首先可以做到自动扩容,虎牙不需要预留很多机器来应对流量突增带来的成本浪费。其次,它的计费方式非常友好,业务量低的时候,费用也低;业务量突然上涨的时候,只需要为高峰流量付费。第三,AmazonDynamoDB属于无服务器架构,不需要关心它的底层如何存储、服务器如何部署、硬盘坏掉、突然宕机等问题,也不需要投入专门的人力去做这块工作,节省了人力。
利用AmazonElastiCacheforRedis实现内存数据全球化
全球同步功能对于虎牙的全球化业务也很重要。随着虎牙的业务扩展到各个大洲,用户之间的距离越来越远,经常需要跨洲访问,因此必须解决降低物理延时的问题,提升用户体验。
于是虎牙开启了内存数据库全球化的进程,使用AmazonElastiCacheforRedis版本来存储数据:一种是传统的数据缓存,另外一种是用户和主播的状态,如主播是否在线,主播的粉丝有多少人在线等等,因为延迟要求很低,这块数据同步比较麻烦,虎牙使用亚马逊云科技的GlobalDatastore实现了低延迟的数据本地读取。
使用AmazonNeptune标定直播欺诈行为
由于传统的关系型数据库很难满足多度关系的查找,所以虎牙使用图数据库AmazonNeptune来存储和搜索多度关系,让查找变得非常方便。
而且,虎牙还可以使用AmazonNeptune来标定欺诈主播和欺诈用户。比如已经认定某个主播有欺诈行为,如果还想及时找到利益链条上的所有人,就要去数据库里搜索该主播的所有关联人,这个搜索量是非常大的,而且是多度关系的搜索。
马昭告诉记者:“AmazonNeptune给我们提供了一个很方便的方式,就是在图中搜索。只需要用一条简单的AmazonNeptune语句,就可以把整个关联关系搜索出来,把这个利益链条上的所有主播和用户全部找到,然后做更深入的分析,看其他用户是不是欺诈用户。这样有利于对平台风险进行整体把控。”
谈到对未来的展望时,马昭表示,虎牙会在云游戏领域继续探索,尝试不同的数据存储和同步方式对云游戏的支持,同时会做一些计算和存储的数据分离工作来支撑服务。其次,虎牙将打造更加灵活的数据库弹性方式,以应对各种流量突增。虎牙计划在数据库的弹性中应用AI技术,来预测主播和用户上线的时间、流量的变化等等;此外,虎牙还尝试一些无服务器化的数据库应用,来实现降本增效;使用一些数据库自带的机器学习工具,来实现各种推荐以及欺诈检测等功能。“总的来说,还是要结合我们自己的业务,再结合亚马逊云科技的技术去做一些创新。这样会走得更快、更远一点。”