冲顶大会APP技术选型及架构设计
我在1月4日看到虎嗅推送"王思聪撒币"的消息,然后开始推敲背后技术。其中涉及直播流、实时弹幕、OAuth2.0开放授权、SMS api、Push网关、支付接口等业务,其技术实现并不复杂,我们对此进行剖析。
UI设计

可以说冲顶大会是照搬HQ的商业逻辑、业务逻辑和UI设计。想必在短期内会有更多的知识问答APP蜂拥出现。对此我不做过多评论,只说背后的技术实现,无关商业。
Flutter
可以说我是谷歌的脑残粉,据传言Google的Fuchsia OS UI都是用Flutter设计的,在这里,Android和IOS的适配都可以使用Flutter实现。具体设计可以完全模仿HQ。
业务逻辑
冲顶大会类APP的技术难点在于高并发和时效性。为此我们要对业务进行解耦合,将注册/登录、直播、弹幕、问答、奖池、推送、分享全部进行业务分离,这样有助于业务拓展,保证高并发以及后续维护问题。
其中主要的业务难点和重点在直播、弹幕、问答。直播和弹幕是主要的流量出口,将其分离有助于保证高并发和时效性。

直播

企业可以自行搭建直播服务,当然也可以购买云服务。假设这里选用阿里的视频直播服务。直播环节将视频流编码传输、转码、加速后推送数据流到客户端。
弹幕
弹幕可以做成简单的request请求方式,也可以使用消息队列。当然消息队列也可以选取云服务,但这里我们使用kafka,部署到服务器集群上进行负载均衡。对于网速较低的用户我们可以默认关闭弹幕功能,以增强用户体验。关于高并发和时效性,我们后面再谈。
问答
问答环节作为用户最相关的业务逻辑,我们要保证用户"秒级"接收消息,这里可以应用一个小技巧,即"同步推送,异步反馈"。也就是说,主持人在说出题目后由单一服务器进行问题推送,但考虑到用户的网络情况存在不同延迟,我们可以异步接收用户的答题结果,我们可以将异步反馈的最大时效设计为10s、15s。
其他业务
注册/登录:调用微信OAuth 2.0开放授权。具体参考微信开放平台接口文档,这里不在赘述。
奖池:在问答环节结束后进行统一分配,业务简单,不在赘述。调用支付宝提现接口。
推送:可以使用push网关,也可以使用http轮询,也可以使用云服务。
分享:调用各平台分享接口即可。
高负载
我建议分别在北京、上海、香港进行负载均衡服务器的假设,北京服务北方用户,上海服务南方用户,香港服务港澳台以及海外用户。技术上使用hadoop、zookeeper、docker、nginx等。

对于不同地理位置的用户IP,需要进行DNS解析,进行流量自动分发和适配。我们设置可以针对用户的地理位置不同而进行弹幕的分区域显示。
使用CDN加速。
运营
可以说每一次直播都是一次运营,因为有"主持人"因素,所以问答推送和答题结果都是需要"手动"控制的。
具体操作是在直播前准备题目,并且将题目录入数据库,或者某个配置脚本中。在主持人互动过程中,进行实时题目推送,并将答题结果反馈到主持人。
最后
我们排除人力成本和奖金成本,单独计算技术成本。单次问答直播大概20min,我们以10G流量峰值每天进行试算,大概每天的技术成本是1万元。当然,这是在用户数量达到一定规模之后。在互联网行业,这并不高。所以,在短时间内,一定会有大量的知识问答APP问世。
本文只在整体角度考量技术实现,并未涉及过多细节。但对于一些有经验的公司,特别是直播类公司,我想做出这种APP,不会超过一个星期。我们拭目以待吧。
本文欢迎注明出处的转载,但微信转载请联系公众号:caiyongji进行授权转载。
冲顶大会APP技术选型及架构设计的更多相关文章
- 如何从 ToB 企业级 IM 产品中学习技术选型和架构
如何从 ToB 企业级 IM 产品中学习技术选型和架构 多端,全端 React React Native Flutter Electron Lark https://www.larksuite.com ...
- 手机web站点和手机app 技术选型的困惑于思考
今年一直在关注移动端技术的发展,自己也用博客园的rss接口玩了半年,关于技术选型的困惑和大家说说 一 趋势 随着手机硬件不断的升级,外加4g牌照的发放,不出2年时间移动端web站点和手机app一定会进 ...
- APP和服务端-架构设计(二)
1. App架构设计经验谈:接口的设计 App与服务器的通信接口如何设计得好,需要考虑的地方挺多的,在此根据我的一些经验做一些总结分享,旨在抛砖引玉. 1.1 安全机制的设计 现在,大部分App的接口 ...
- APP和服务端-架构设计(一)
架构因人而异,不同的架构师大多会有不同的看法:架构也因项目而异,不同的项目需求不同,相应的架构也会不同.然而,有些东西还是通用的,是所有架构师都需要考虑的,也是所有项目都会有的需求,比如API如何设计 ...
- CynosDB技术详解——架构设计
本文由腾讯云数据库发表 前言 CynosDB是新一代分布式数据库,100%兼容MySQL和PostgreSQL,支持存储弹性扩展,一主多从共享数据,性能更是超越社区原生MySQL和PostgreSQL ...
- APP技术选型
- 升讯威微信营销系统开发实践:(1)功能概要与架构设计( 完整开源于 Github)
GitHub:https://github.com/iccb1013/Sheng.WeixinConstruction因为个人精力时间有限,不会再对现有代码进行更新维护,不过微信接口比较稳定,经测试至 ...
- Android架构设计之插件化、组件化
如今移动app市场已经是百花齐放,其中有不乏有很多大型公司.巨型公司都是通过app创业发展起来的:app类型更加丰富,有电子商务.有视频.有社交.有工具等等,基本上涵盖了各行各业每个角落,为了更加具有 ...
- Java生鲜电商平台-生鲜系统中微服务架构设计与分析实战
Java生鲜电商平台-生鲜系统中微服务架构设计与分析实战 说明: Java生鲜系统中微服务的拆分应该如何架构设计与分析呢?以下是我的实战中的设计与经验分析. 目录 1. 微服务简介2. 当前现状3. ...
随机推荐
- 分布式版本控制系统 Git 教程
简介 Git 是什么? Git 是一个开源的分布式版本控制系统. 什么是版本控制? 版本控制是一种记录一个或若干文件内容变化,以便将来查阅特定版本修订情况的系统. 什么是分布式版本控制系统? 介绍分布 ...
- java的基本知识导航
java基本知识 备注:本次主要是思维导图,就是简单的说一下,只会扩展导图中的java关键字,其他以后再写 1.思维导图 2.java关键字 关键字 描述 abstract 抽象方法,抽象类的修饰符 ...
- 基于Spring Aop实现类似shiro的简单权限校验功能
在我们的web开发过程中,经常需要用到功能权限校验,验证用户是否有某个角色或者权限,目前有很多框架,如Shiro Shiro有基于自定义登录界面的版本,也有基于CAS登录的版本,目前我们的系统是基于C ...
- 最近整理AI相关感想
前言 目前笔者致力于 在AI 开发研究,四大平台里,百度AI 提供 的开发者资料是最全,开发的友好度也是最高的,很多都已经集成在SDK中,支持许多语言体系. 其实 作为公司层面的考虑,针对技术的研究出 ...
- 智能合约语言 Solidity 教程系列3 - 函数类型
Solidity 教程系列第三篇 - Solidity 函数类型介绍. 写在前面 Solidity 是以太坊智能合约编程语言,阅读本文前,你应该对以太坊.智能合约有所了解,如果你还不了解,建议你先看以 ...
- SpringCloud Feign使用详解
添加依赖: <dependency> <groupId>org.springframework.cloud</groupId> <artifactId> ...
- 约瑟夫问题 小孩报数问题poj3750
小孩报数问题 Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 15228 Accepted: 6778 Descripti ...
- FreeCAD源码阅读笔记
本文目标在于记录在FreeCAD源码阅读中了解到的一些东西. FreeCAD编译 FreeCAD源码的编译最好使用官方提供的LibPack,否则第三方库难以找全,找到之后还需要自己编译,此外还不知道C ...
- uva 1378 - A Funny Stone Game(组合游戏)
题目链接:uva 1378 - A Funny Stone Game 题目大意:两个人玩游戏,对于一个序列,轮流操作.每次选中序列中的i,j,k三个位置要求i<j≤k,然后arr[i]减1,对应 ...
- Struts框架的国际化
本文将通过一个详细的实例来展示Struts框架的国际化,使用的版本号是struts1.1. 案例:在一个页面上有一个下拉框,下拉框中有3个国家的语言选项,各自是"中文简体".&qu ...