作者:折松,阿裡雲解決方案架構師
前言
最近幾年,我們在一些商場、圖書館、機場或港口環境裡,經常可以看到一些機器人在轉來轉去,它們被大家熟知的作用是對客戶進行指引服務。不僅于此,事實上,一些先行的企業也會利用機器人來收集這些人流密集地的特征資料,通過上報這些特征資料,進行快速的清洗加工處理,進而提供有意義的應對梳導措施,或者指引資訊(廣告)投放決策等商業上的轉化。
其中有一個主要場景是統計區域的熱力圖,并開放給特定的系統(也在考慮開發給終端使用者)進行查詢加工處理。

這些機器人會在不同的時段進行按需投放,且會在采集資料有較大變化或某固定周期内進行上報。資料采集變化大的時候,上報會趨于頻繁,後面的資料清洗處理任務需求也會同步增加。
我們将在本篇文章裡探讨下如何在技術選型上更适合地對這類場景進行上報清洗與涉取的處理。
場景特點與要求:
1. 資料通道的連接配接能力:資料通道随着業務的擴充,機器人的投放也會同步增加,對于資料通道有足夠的擴充靈活性,可以按需進行擴充,同時連接配接的級别能夠支援10W+級别的擴充。
2. 簡潔資料清洗的能力:對于資料的處理,本質上就是對資料的歸納統計,邏輯實作上并不複雜。對于資料本身的峰谷變化,能有最簡單有效的比對擴縮處理能力即可,在清洗上不希望為此引入複雜的傳統大資料級别的笨重方案。
3. 彈性資料通路的能力:這裡提到的的熱力圖資訊,以後會考慮開放給終端使用者通路,通路量都是動态變化的,随着不同的時間、節日、突發事件等都會有不可預知的幅度變化,是以在此業務中要求有彈性的通路能力。業務方不希望通過限流方式來實作,因為會對業務量本身造成影響。
4. 性能優越的存儲能力:此場景下,資料寫入與讀取并發量都高,客戶希望使用NoSQL的方式進行存儲。NoSQL 類型能最好支援排序的功能,本文介紹的方案中使用Redis,不再做更多的分析介紹。
備選的技術方案分析
資料通道的連接配接能力
自建Kafka
優點:
- Kafka作為通用的資料收集資訊通道,使用面廣泛,接入方式多樣化。社群完善,學習成本低。
- Kafka本身搭建容易,與下遊的大資料處理産品協調方案成熟。
缺點:
- 動态處理Kafka的擴容複雜。
- 需要搭建額外處理叢集的穩定性配套方案。
- 外網網絡流量管理需要配合額外的方案。
- 主流方案是作為連接配接應用的收集能力,對于終端的連接配接能力沒有規模級别的案例驗證。
消息隊列MQTT方案
- 支援百萬級别的連接配接,完成可以覆寫業務發展的訴求,為業務留足了擴充空間。
- MQTT的協定非常簡潔,在端與服務間的傳輸中有優勢。支援各種消息觸達的QoS品質。
- 支援各種用戶端接入實作語言。
- 可實時觀測用戶端的連接配接情況,友善發現異常情況。
- 處理大資料的實踐沒有Kafka成熟,下遊産品選型受一定的限制。
彈性資料清洗的能力
大資料方案(Storm、Spark、Flink等)
- 開源的通用方案,資料衆多,方案成熟。
- 搭建運維複雜,需要提供額外的監控與恢複手段。
- 需要學習接受各種元件方式(下圖是以Storm為例)。
- 提前評估資源使用情況,無法按照實時資料量進行相應的擴縮使用。


函數計算方案
- 按需進行擴縮,百毫秒級的伸縮能力,适合資料量的脈沖峰谷變化。
- 不需要進行清洗環境的管理。
- 概念簡單,學習成本低。
- 其它優點參考下圖:

- 函數計算是各個雲廠商的産品。要求一定需要在雲上運作。
彈性資料通路的能力
傳統應用的方案
- 作為業務的一部分嵌在某個應用實作中,技術成熟,學習成本低。
- 需要自實作根據業務請求量來進行彈縮處理,或者很多時候采用評估的方式進行資源備援處理。
API Gateway+函數計算方案
- 根據客戶的請求量實時進行彈縮處理。按需使用,不為高峰時段煩惱,不會閑置付費。
- 自動附帶專業的通路監控大盤。
- 需要少量的學習成本。
綜述
在這個熱力圖資訊收集清選與通路業務中,可以參考使用下圖的解決方案完美實作。

重點接入步驟
MQTT到函數計算的介紹
請參考函數計算的
微消息隊列MQTT服務內建方案。

API網關通過函數計算提取資料的介紹
詳情請參考
API網關函數觸發執行個體以Node.js為例:
module.exports.handler = function(event, context, callback) {
var event = JSON.parse(event);
var content = {
path: event.path,
method: event.method,
headers: event.headers,
queryParameters: event.queryParameters,
pathParameters: event.pathParameters,
body: event.body
// 您可以在這裡編寫您自己的邏輯。
// 從Redis提取資料的邏輯
}
var response = {
isBase64Encoded: false,
statusCode: '200',
headers: {
'x-custom-header': 'header value'
},
body: content
};
callback(null, response)
};
後注
在目前DT時代,各種脈沖資料上報的儀器非常多,例如新能源汽車的傳感器,公交位置上報,智能物管的開鎖,智慧停車場的車位管理,無人店鋪的銷售等等。在各類場景中,關于上報資料的處理無處不在,而以上提到的場景都可以通過本方案的MQTT+FC+API Gateway的方式參考優化來實作。
掃碼了解更多技術幹貨與客戶案例: