我在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技术选型及架构设计的更多相关文章

  1. 如何从 ToB 企业级 IM 产品中学习技术选型和架构

    如何从 ToB 企业级 IM 产品中学习技术选型和架构 多端,全端 React React Native Flutter Electron Lark https://www.larksuite.com ...

  2. 手机web站点和手机app 技术选型的困惑于思考

    今年一直在关注移动端技术的发展,自己也用博客园的rss接口玩了半年,关于技术选型的困惑和大家说说 一 趋势 随着手机硬件不断的升级,外加4g牌照的发放,不出2年时间移动端web站点和手机app一定会进 ...

  3. APP和服务端-架构设计(二)

    1. App架构设计经验谈:接口的设计 App与服务器的通信接口如何设计得好,需要考虑的地方挺多的,在此根据我的一些经验做一些总结分享,旨在抛砖引玉. 1.1 安全机制的设计 现在,大部分App的接口 ...

  4. APP和服务端-架构设计(一)

    架构因人而异,不同的架构师大多会有不同的看法:架构也因项目而异,不同的项目需求不同,相应的架构也会不同.然而,有些东西还是通用的,是所有架构师都需要考虑的,也是所有项目都会有的需求,比如API如何设计 ...

  5. CynosDB技术详解——架构设计

    本文由腾讯云数据库发表 前言 CynosDB是新一代分布式数据库,100%兼容MySQL和PostgreSQL,支持存储弹性扩展,一主多从共享数据,性能更是超越社区原生MySQL和PostgreSQL ...

  6. APP技术选型

  7. 升讯威微信营销系统开发实践:(1)功能概要与架构设计( 完整开源于 Github)

    GitHub:https://github.com/iccb1013/Sheng.WeixinConstruction因为个人精力时间有限,不会再对现有代码进行更新维护,不过微信接口比较稳定,经测试至 ...

  8. Android架构设计之插件化、组件化

    如今移动app市场已经是百花齐放,其中有不乏有很多大型公司.巨型公司都是通过app创业发展起来的:app类型更加丰富,有电子商务.有视频.有社交.有工具等等,基本上涵盖了各行各业每个角落,为了更加具有 ...

  9. Java生鲜电商平台-生鲜系统中微服务架构设计与分析实战

    Java生鲜电商平台-生鲜系统中微服务架构设计与分析实战 说明: Java生鲜系统中微服务的拆分应该如何架构设计与分析呢?以下是我的实战中的设计与经验分析. 目录 1. 微服务简介2. 当前现状3. ...

随机推荐

  1. strcmp函数

    strcmp函数用于c语言中两个字符串比较(只可以比较字符串,不可以比较数字) 规则 当s1>s2时,返回为正数: 当s1=s2时,返回值为0: 当s1<s2时,返回为负数: 两个字符串自 ...

  2. daemon 启动system V init 和 systemd 配置

    先试着写一个udpserver的daemon #include <stdio.h> #include <sys/socket.h> #include <sys/types ...

  3. CCF-201312-2-ISBN号码

    问题描述 试题编号: 201312-2 试题名称: ISBN号码 时间限制: 1.0s 内存限制: 256.0MB 问题描述: 问题描述 每一本正式出版的图书都有一个ISBN号码与之对应,ISBN码包 ...

  4. javascript设计模式——单例模式

    前面的话 单例模式是指保证一个类仅有一个实例,并提供一个访问它的全局访问点. 单例模式是一种常用的模式,有一些对象往往只需要一个,比如线程池.全局缓存.浏览器中的window对象等.在javaScri ...

  5. springCloud zuul网关服务

    第一步:编写application.properties文件 spring.application.name=api-gateway server.port=5555 zuul.routes.user ...

  6. Java VS .NET:Java与.NET的特点对比

    一.前言 为什么要写Java跟.NET对比? .NET出生之后就带着Java的影子.从模仿到创新,.NET平台也越来越成熟.他们不同的支持者也经常因为孰弱孰强的问题争论不休.但是本文并不是为了一分高下 ...

  7. JS 获取上传文件的内容

    <div> 上传文件 : <input type="file" name = "file" id = "fileId" / ...

  8. &quot;Insufficient RAM for Flash Algorithms&quot;出错原因及解决方式

    "Insufficient RAM for Flash Algorithms"错误通常会有一个"cannot load flash programming algorit ...

  9. 五、Spring Boot 事务

    spring Boot 使用事务非常简单,首先使用注解 @EnableTransactionManagement 开启事务支持后,然后在访问数据库的Service方法上添加注解 @Transactio ...

  10. 腾讯云开放云压测“黑科技“,产品上线从此不再“压力山大"

    商业转载请联系腾讯WeTest获得授权,非商业转载请注明出处. 能否解决"高并发"问题一直是检验一个产品后台是否稳定,架构是否合理,性能是否强大的核心标准.对于产品而言,多高的并发 ...