分散式架構推播,每分鐘10萬筆,直逼LINE API最大上限

Roger Huang
Aiii
Published in
3 min readAug 16, 2019
Aiii Line Bot 平台 Line 自訂推播流程

身為一個程式人,將紙本中抽象需求一項一項化為可以互動和作用的實體,實有說不出的感動。內部進行大量測試確認沒問題後,便興沖沖走出新手村帥氣地上戰場。哎呀~當開始面對挑戰後,現實總是殘酷的。

正式上線後,第一個難關來了。明明設定好今天10點推播,為什麼等到11點多才推播完畢?測試時對 Team 內的人推播都很準時呀?

團隊內部進行 Log 分析後發現,一個容器發出請求處理推播的速度大約為1秒3筆,而推播名單約有1.5萬筆。1分鐘平均推180筆,一個小時也不過1萬。若推播對象有幾十萬筆,豈不是要等到地老天荒?

設定目標

從 Line 官方的文件可以得知,一個 Chat Bot 推播頻率的硬上限是1分鐘1萬個請求。所以平台這端只要想辦法達到這上限即可。
官方帳號的上限是一分鐘10萬

簡單粗暴的解決方案:分散式處理

分身術!!大夥兒送信囉~

利用 Google Cloud Functions 無伺服器架構彈性拓展的特性,將發送訊息的程序分配到數十個容器至數百個容器上進行推播。在多個節點協力合作下,大量的推播請求便能在短時間內處理完畢,輕易地接近 Line 官方1分鐘1萬筆上限的門檻,LINE官方帳號1分鐘10萬筆的上限!

測試比較 10 a.m. 開始的推播,此圖僅表示 API 端的處理請求,User 實際接收到訊息的時間可能因Line官方平台繁忙程度或 Line User 端的軟硬體環境而有所影響。

結論:

軟體設計上在處理大量資料/請求時,若主線程不需要取得子線程處理結果(單向處理),在資源及環境許可的狀況下,採用分散式處理的方式,可顯著地改善效能。

建構完整的無伺服器應用程式

Google Cloud 的無伺服器平台能讓您用自己的方式撰寫程式碼,不需要擔心基礎架構。將函式或應用程式部署為原始碼或容器。使用 Google Cloud 的儲存空間、資料庫、機器學習技術等服務,建構完整的無伺服器應用程式。透過來自 Google 或第三方服務整合功能的事件運算,輕鬆擴充應用程式。您甚至可以選擇移動您的無伺服器工作負載到內部部署環境或雲端。

https://cloud.google.com/serverless/?hl=zh-tw

--

--

Roger Huang
Aiii
Editor for

任職於 AIII.AI 全端工程師,關注 Chat Bot 及 AI 運用發展,喜歡鑽研雲端架構及程式開發技術。目前主要使用 NodeJS 、Angular 、Firebase 、GCP 及 Protractor E2E 開發網站。聯絡方式:ranger@aiii.ai