社区/文章分享/云开发如何为「创造营2020」“撑腰”?

云开发如何为「创造营2020」“撑腰”?

前言

今年鹅厂的「创造营 2020」依然火爆,截至目前,节目累计播放量已达 4.1 亿次,“撑腰”(投票)数也已超 10 亿(数据来源:腾讯视频)。

image-20200721095121656

在如此大的流量洪峰下,云开发如何利用自身能力,为节目保驾护航?下文将详细介绍。

如何降低安全风险

为了配合节目运营,活动组特地策划和上线了一系列扫码抽奖、投票等基于小程序的营销互动活动。

image-20200721095606113

活动刚上线时 ,活动组的研发同学结合小程序 openid、ip 等信息对日志进行分析后发现:小程序可能存在被刷接口的风险。

image-20200817090730186

当时这一批扫码活动的调用链路如上图:小程序通过公网访问后端服务。虽然系统做了大量的防攻击安全措施,但风险仍未消除。

怎么办呢?

后来我们发现了云开发这一 Serverless 云端一体化产品方案很适合该应用场景,于是将架构升级,采用云开发作为接入层入口,改为了下图的架构。

  ![img](https://wyd-1301665037.cos.ap-guangzhou.myqcloud.com/640-20200721095635475.png)

从小程序 -> 微信后台 -> 云开发(云函数)这一段公网链路是私有协议,不仅保障了安全性,而且提高了传输性能。

“从小程序端无法抓包,接口处于封闭环境中,到扛过“秒杀”、小程序直播、节目直播等重要节点,改用云开发的效果超出预期,可以说是 100%安全无死角,”研发团队负责人如是说,“而且,这是云开发天然具备的特性,无需多写任何一行代码就能把羊毛党和黑客拒之门外”。

和旧架构的数据链路相比,云开发具有以下以下 3 个链路优势:

  • 防刷防攻击:小程序中调用后端云函数时,在公网上的数据传输都采用的微信的私有协议。能保证调用方一定来自于小程序端,防止信息在公网被窃取,而且能有效的防止重放攻击等。
  • 链路加密:C 端是微信的可信客户端,使用破解微信会被封号。公网的网络通讯过程走的加密链路,能对敏感信息做到全链路有效保护。
  • 网络优化:小程序的请求会首先接近接入到微信接入集群,然后微信后台通过专线走内网将请求转发给云开发中部署的后台服务。而且还能利用微信私有协议对各种网络环境的多年优化能力,极大得提升了《创造营》前后台交互的网络链路。

顶住流量洪峰

作为接入层,除了安全能力,还有一个艰巨的任务需要完成 —— 支撑投票场景。投票是《创造营 2020》的一个重要场景,但和普通的投票不同,《创造营》的投票更像是电商的**“秒杀”活动**。

具体来说,《创造营 2020》作为直播节目,拥有很强的互动性,而且用于投票的时间有限,当全网海量粉丝在同一时间瞬时涌入,瞬间的大流量和高并发,对系统的可用性提出了极高的要求。

而且,根据投票直接产生本届总冠军人选,是《创造营 2020》决胜之夜最关键的时刻,不能有任何差池,否则会对节目口碑造成重大损失。唯有努力与梦想不能被辜负,作为创造营学员们追梦路上的坚强后盾,面对流量洪峰当然要扛住!

image-20200721095954960

那么,在投票的关键时刻,云开发是如何顶住压力,顺利保障女团小姐姐 C 位出道呢?

云开发自带弹性扩缩容的特性,在云开发模式下,不需要为了应对高并发而提前部署大量资源,因为背靠腾讯云海量的资源能力,可以几乎无限自动水平扩容,支持海量并发请求。对开发者来说,使用云开发就是典型的 NoOps 实践。

随着请求量的不断增长,云开发可以进行自动扩容,确保在云开发上面的业务高性能、高可用。而当流量下来时,资源配置将自动缩减,用多少付多少,大大节约了资源成本。

“也就是我们不用写任何代码,就默认拥有了承载亿级流量的后端接口能力,我们只用专注与业务逻辑开发即可。有一种未来已至的感觉,听起来还真有点小激动。”研发团队成员说道。

“不过云开发毕竟是新生的开发模式,虽然已有很多成功案例,但为保证项目平稳运行,研发团队对云开发的核心接口进行了压测,从压测情况来看云开发不但能很好地承载“秒杀”场景,同时接口运行时长还非常稳定。”

image-20200721100025079

△ 后台接口平均运行时间(毫秒)

image-20200721100031819

△ 请求 QPS

结果显示,在「创造营 2020」成团之夜,云开发不但实现了 100%安全无死角,而且在投票“秒杀”场景下高性能地 hold 住全场,为节目的顺利进行保驾护航。

image-20200817090847118

「创造营 2020」研发团队表示:“经过此役,我们和云开发已经深深结缘。以后做活动,我们首选云开发!。”