冲顶大会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. ...
随机推荐
- 基于 HTML5 Canvas 的 3D 模型列表贴图
少量图片对于我们赋值是没有什么难度,但是如果图片的量大的话,我们肯定希望能很直接地显示在界面上供我们使用,再就是排放的位置等等,这些都需要比较直观的操作,在实际应用中会让我们省很多力以及时间.下面这个 ...
- 初识分布式计算:从MapReduce到Yarn&Fuxi
这些年,云计算.大数据的发展如火如荼,从早期的以MapReduce为代表的基于文件系统的离线数据计算,到以Spark为代表的内存计算,以及以Storm为代表的实时计算,还有图计算等等.只要数据规模 ...
- [转]git问题ERROR: Repository not found.的解决
原文地址:http://blog.csdn.net/u010154424/article/details/51233966 在github中新增了一个项目,按照git的提示添加了远程仓库,但是提交的时 ...
- Effective Java 第三版——4. 使用私有构造方法执行非实例化
Tips <Effective Java, Third Edition>一书英文版已经出版,这本书的第二版想必很多人都读过,号称Java四大名著之一,不过第二版2009年出版,到现在已经将 ...
- Android长按事件和点击事件问题处理,OnItemLongClickListener和OnItemClickListener冲突问题
今天在做demo时,须要设置ListView的item的长按和点击事件.OnItemLongClickListener和OnItemClickListener,然而点击事件能够实现,可是在长按操作时会 ...
- Android之不须要自己定义View(ViewfindView.java)最简单的二维码扫描
不废话,先爆照 watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/d ...
- C#开发微信门户及应用(48) - 在微信框架中整合CacheManager 缓存框架
在我们的很多框架或者项目应用中,缓存在一定程度上可以提高程序的响应速度,以及减轻服务器的承载压力,因此在一些地方我们都考虑引入缓存模块,这篇随笔介绍使用开源缓存框架CacheManager来实现数据的 ...
- SSM学习(一)搭建基础框架
不知不自觉,工作也两年多了,由于公司一直用的是ssh框架,所以所学也一直是ssh.直到有一天,服务器被攻击,tomcat目录下总有莫名其妙的一些文件,这些文件通过远程ftp下载了一些病毒和木马,服务器 ...
- 调用接口http封装
public static String httpHandler(String URL,String xml){ try { URL url=new URL(URL); URLConnection c ...
- WCF实现长连接
由于WCF的机制,连接池会在连接建立一定时间后超时,即使设置了超时时间非常长,也可能被服务端系统主动回收.之前做项目时碰到了这个问题,所以项目上考虑采用长连接,自动管理连接池,当连接超时后,自动重建, ...