云函数给您拜年了!微信春节红包封面的 Serverless 架构实践

“ 恭喜你发财,恭喜你精彩;

最好的请过来,不好的请走开~”

每一年,当街头巷尾开始听到刘德华叔叔唱起这首歌的时候,这是春节要到了。但是今年有一些特别,人们减少了走街串巷采买年货,减少了走亲访友聚会拜年,尽量保持在祥和而克制中渡过这个中国最传统的节日。

不知道还有多少 “共克时艰” 尚未过去,但这一路走来,Serverless 云函数陪伴开发者们渡过了很多“快速上线、降本增效”的需求开发期,帮助开发者们做合理的成本把控,让开发者们可以用更便捷的部署方式,无需顾虑资源扩缩容等传统运维流程,只聚焦于自身的业务模块开发。

这是抱有技术情怀的 Serverless 云函数每一位工作人员,希望尽到的绵薄之力。在此春节来临之际,Serverless 云函数祝愿每一位开发者新春快乐、虎年好 “云”

01.

微信红包封面项目背景

微信自 2020 年上线红包封面开放平台以来,先后提供了企业和个人可定制春节红包封面的能力,不断打出节日流量爆款,频频登上微博热搜。

(微博话题阅读量超14亿)

春节红包封面的业务特点,与 Serverless 架构的应用场景完美契合:

流量波峰波谷明显,而且难以预测高并发提前部署服务器资源,很可能突然出现网红爆款激增服务器的响应压力。

同时,微信春节红包封面的活动生命周期具有较高的节日时效性,目标是“短、平、快”的上线业务。

面对以上需求特点,腾讯微信事业群基于云函数和云开发的解决方案,有效保障了春节红包封面创作活动的高效有序进行,仅用了数千元的成本解决了春节流量洪峰带来的巨大挑战,除夕期间云函数调用量单日峰值超亿次。

02.

云函数 + 云开发选型优势

(CGI 即 Common Gateway Interface,通用网关接口 )

云函数和云开发应用于微信春节红包活动的CGI层,后台服务使用 Svrkit 框架搭建,服务之间通过同步 RPC 进行通讯。

(春节红包封面架构图)

  • 无需关心部署,扩缩容等问题。在云开发模式下,无需为应对高并发而提前部署大量资源,开箱即用;
  • 服务调用链路全程可以享受微信私有链路免鉴权云调用微信开放接口的能力。在云函数中,可以免去繁琐的 Oauth 认证过程,便捷获取用户当前 OpenID ;
  • 无需自行搭建繁琐的监控体系,微信开发者工具已提供完备的监控工具,实时观测各个云函数的流量、耗时、失败率等,并且提供了与微信绑定的提醒机器人服务;
  • 无需管理证书、签名、秘钥,直接调用微信API,配备微信私有安全链路,有效保障了业务安全性。

03.

项目收益

  • 稳定承载亿级流量

基于云函数的小程序云开发方案帮助开发者解决了鉴权、部署、运维等问题,使得开发周期大大缩短,以微信春节红包封皮活动为例,实际开发时间不到两周,满足了春节除夕期间过亿的流量需求。

(往年微信红包封皮云函数调用监控图)

  • 降本增效,效果显著

以往年经验来看,在微信春节红包封面活动中,基于云函数的小程序云开发方案成本不到万元,即应对了全国亿级流量洪峰的巨大挑战。

( 微信生态优势之一:无需外网流量费用)

1. 微信承担小程序请求后台服务的公网流量,业务0流量支出;

2. 无需预采购服务器资源,根据业务流量动态扩容,对比传统模式资源成本至少优化 30%。

  • 成功出圈,技术助力业务飞速发展

微信业务的飞速发展有目共睹,伴随着喜人成绩而来的,是业务快速迭代和后台稳定性的压力。当功能迭代加快,CGI 量不断增多之后,每次大版本发布上线,从测试到灰度再到全面部署完毕,都是一个很漫长的过程。

而基于云函数的小程序云开发方案,满足了业务快速上线的需求,每年春节活动期间,微信红包封面多次成功出圈,成为各大品牌商、明星 KOL、网红 IP 的春节活动必争之地。

(微信游戏红包封面)

04.

基于云函数的小程序云开发调用示例

小程序云开发提供的基于云函数使用小程序开放接口的能力,在云函数中通过 wx-server-sdk 使用,支持在云函数调用服务端开放接口。

在云函数中调用服务端接口无需换取access_token,经过微信自动鉴权,可以在登记权限后直接调用开放接口,如发送订阅消息、客服消息等。

  • 接口方法
代码语言:javascript
复制
openapi.redpacketcover.getAuthenticationUrl
  • 请求参数
  • 返回值 

Object

返回的 JSON 数据

errCode 的合法值

  • 调用示例
代码语言:javascript
复制
const cloud = require('wx-server-sdk') cloud.init({   env: cloud.DYNAMIC_CURRENT_ENV,}) exports.main = async (event, context) => {       try {    const result = await cloud.openapi.redpacketcover.getAuthenticationUrl({              "openid": 'xxxxxxxxxxmTo5lAUQxxxxxxxxxx', "ctoken": 'xxxxxqpHPu1xxxxx'          })             return result             } catch (err) {               return err             }      }

不仅是春节期间的微信红包封面活动,基于云函数的小程序云开发已服务过众多客户和开发者,包括四川天府健康通、深圳机场小程序和 APP、央视中秋晚会抽奖活动等。

新的一年,我们将持续为广大客户和开发者带来更多更好的产品和服务。

2021 年,云函数与开发者们携手同行,既走过鲜花、也路过荆棘;

2022 年,金盔铁甲战场杀,我们整装再出发!