雲函式給您拜年了!微信春節紅包封面的 Serverless 架構實踐

語言: CN / TW / HK

“ 恭喜你發財,恭喜你精彩;

最好的請過來,不好的請走開~”

每一年,當街頭巷尾開始聽到劉德華叔叔唱起這首歌的時候,這是春節要到了。但是今年有一些特別,人們減少了走街串巷採買年貨,減少了走親訪友聚會拜年,儘量保持在祥和而剋制中渡過這個中國最傳統的節日。

不知道還有多少 “ 共克時艱 ” 尚未過去,但這一路走來, 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 ,經過微信自動鑑權,可以在登記許可權後直接呼叫開放介面,如傳送訂閱訊息、客服訊息等。

  • 介面方法

openapi.redpacketcover.getAuthenticationUrl
  • 請求引數

  • 返回值 

Object

返回的 JSON 資料

errCode 的合法值

  • 呼叫示例

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 年,金盔鐵甲戰場殺,我們整裝再出發