天天看點

急速上線 Serverless 釘釘機器人“防疫精靈”

新型冠狀病毒疫情肆虐的春節,大家都過得人心惶惶,作為被關在家的程式狗,總覺得要做點什麼。于是阿裡雲 IoT 事業部的幾個同學就開始了防疫精靈的開發之路。

從點子到防疫寶,隻花了一個下午時間;從防疫寶到釘釘全域機器人防疫精靈,隻花了 1.5 天時間完成開發,3 天灰階、全量,釋出 1 天半就突破 1 萬個群添加使用,即插即用,疫情實況、常見問題、健康打卡全都有:

急速上線 Serverless 釘釘機器人“防疫精靈”
如此緊急,toC海量客戶,如何快速開發又不失穩定、安全呢?

快速搭建

天下武功唯快不破,怎麼快?靠工具!

IoT Studio是阿裡雲 IoT 向物聯網開發者提供的應用開發工具,包括了可視化、邏輯編排、資料分析三大能力。該工具開發的應用執行個體運作于阿裡雲

函數計算

(FunctionCompute 簡稱 FC)之上,應用 serverless 化,以達到按量伸縮和免運維的效果。

機器人添加

原理:釘釘全域機器人添加/删除/更新時,會自動推送HTTP事件

搭建:

1.使用HTTP流來提供釘釘事件回調

2.使用路徑選擇節點,根據事件類型分流到對應的處理邏輯

3.使用 Node 腳本進行資料預處理,包括資料格式、敏感字段脫敏或加簽等

4.存入資料庫

急速上線 Serverless 釘釘機器人“防疫精靈”

聊天消息通路

原理:基本同上,at機器人的消息将發送到回調接口,轉發 NLP 接口

1.使用 HTTP 流來提供釘釘消息回調

2.使用 Node 腳本節點(此處可用 API 請求節點,但因為穩定性要求改用 Node 腳本來,詳見下文優化部分)

急速上線 Serverless 釘釘機器人“防疫精靈”

批量群推送

原理:每天 9 時、17 時定時推送最新疫情實況和打卡、咨詢快捷連結

// 觸發

1.使用定時節點,設定每日觸發

2.使用項目内API節點,調用同項目内的批量發送服務

急速上線 Serverless 釘釘機器人“防疫精靈”

// 發送

3.使用 HTTP 節點搭建發送入口

4.使用 Node.js 腳本節點拼裝消息發送的内容

5.使用 Node.js 腳本節點查詢資料庫的webhook資訊并解簽(此處後續會優化資料庫節點,無需寫腳本)

6.使用 Node.js 腳本節點,批量發送消息給釘釘的 OpenAPI 接口(此處是關鍵點,容量評估、并發、流控、異常處理都在此處)

急速上線 Serverless 釘釘機器人“防疫精靈”

疫情可視化

原理:使用可視化工具,利用庫中的疫情資料,展示實況、趨勢圖,借助函數計算部署 puppeteer 服務定時截圖

  1. 使用文字元件,配置資料源(業務邏輯編排接口,類似上文搭建方式,不贅述),使用過濾器標明展示字段
  2. 使用折線圖元件,配置資料源、資料系列。
    急速上線 Serverless 釘釘機器人“防疫精靈”
  3. 使用函數計算部署 puppeteer 截圖任務,詳見: Serverless 實戰 —— 快速開發一個分布式 Puppeteer 網頁截圖服務
    急速上線 Serverless 釘釘機器人“防疫精靈”

架構梳理

急速上線 Serverless 釘釘機器人“防疫精靈”

小結

  1. 好用的工具是絕對的生産力。 IoT Studio 拉近了想法和實作的距離,通過快速模闆化,1 天搭建原型,1 天完成了 V1 版本。
  2. Serverless 為後端的高并發、高可用保駕護航。由于疫情的發展,“防疫精靈”的通路量很快就大幅度提升,而且是非常典型的通路量峰谷類業務。Serverless 的按量付費和急速彈性(百毫秒級别)省去了業務量增長而引入的架構更新的工作。此外函數計算的快速部署和低運維特性,也讓開發疊代得更快,對系統的監控度感覺更容易。
阿裡巴巴雲原生 關注微服務、Serverless、容器、Service Mesh 等技術領域、聚焦雲原生流行技術趨勢、雲原生大規模的落地實踐,做最懂雲原生開發者的技術圈。”