2017年12月19日至20日,2017雲棲大會·北京峯會在國家會議中心召開,飛天智能是貫穿雲棲大會不變的主題,雲計算、大數據、人工智能、物聯網等熱門話題備受各方關注。其中阿里雲日誌服務發佈的嵌入式日誌採集客戶端(C Producer Library) 就是其中解決物聯網日誌採集、分析難的利器。html
背景
IoT(Internet of Things)正在高速增加,愈來愈多設備開始逐步走進平常生活(例如智能路由器、各類電視棒、天貓精靈、掃地機器人),讓咱們體驗到智能領域的便利。距Gartner預測,到2020年底預計會有200億智能設備,可見該領域的巨大市場。git
做爲IoT/嵌入式工程師,除了須要深厚的開發功底外,面對海量的設備,如何有能力管理、監控、診斷這些「黑盒」設備相當重要。咱們總結了嵌入式開發需求,主要有如下幾點:github
- 數據採集:如何實時採集分散在全球各地的百萬/千萬級設備上的數據?
- 調試:如何使用一套方案既知足線上數據採集以及開發時的實時調試?
- 線上診斷:某個線上設備出現錯誤,如何快速定位設備,查看引發該設備出錯的上下文是什麼?
- 監控:當前有多少個設備在線?工做狀態分佈如何?地理位置分佈如何?出錯設備如何實時告警?
- 數據實時分析:設備產生數據如何與實時計算、大數據倉庫對接,構建用戶畫像?
思考以上問題的解決方案,咱們發如今傳統軟件領域那一套手段面臨IoT領域基本所有失效,主要挑戰來自於IoT設備這些特色:緩存
- 數目多:在傳統運維領域管理1W臺服務器屬於一家大公司了,但10W在線對於IoT設備而言只是一個小門檻
- 分佈廣:硬件一旦部署後,每每會部署在全國、甚至全球各地
- 黑盒:難以登錄並調試,大部分狀況屬於不可知狀態
- 資源受限:出於成本考慮,IoT設備硬件較爲受限(例如總共只有32MB內存),傳統PC領域手段每每失效
針對不一樣端的數據採集
日誌服務(原SLS) 客戶端Logtail在X86服務器上有百萬級部署,能夠參見文章:Logtail技術分享 : 多租戶隔離技術+雙十一實戰效果,Polling + Inotify 組合下的日誌保序採集方案。除此以外咱們還有如下幾種方式:服務器
- 移動端SDK:Android/IOS平臺數據採集,一天已有千萬級DAU
- Web Tracking(JS):相似百度統計,Google Analytics 輕量級採集方式,無需簽名
在IoT領域,咱們從多年Logtail的開發經驗中,汲取其中精華的部分,並結合IoT設備針對CPU、內存、磁盤、網絡、應用方式等特色,開發出一套專爲IoT定製的日誌數據採集方案:C Producer網絡
C Producer特色
C Producer Library 繼承Logtail穩定、邊界特色,能夠定位是一個「輕量級Logtail」,雖沒有Logtail實時配置管理機制,但具有除此以外70%功能,包括:併發
- 提供多租戶概念:能夠對多種日誌(例如Metric,DebugLog,ErrorLog)進行優先級分級處理,同時配置多個客戶端,每一個客戶端可獨立配置採集優先級、目的project/logstore等
- 支持上下文查詢:同一個客戶端產生的日誌在同一上下文中,支持查看某條日誌先後相關日誌
- 併發發送,斷點續傳:支持緩存上線可設置,超過上限後日志寫入失敗
還有一些專門爲IoT準備功能,例如:運維
- 本地調試:支持將日誌內容輸出到本地,並支持輪轉、日誌數、輪轉大小設置
- 細粒度資源控制:支持針對不一樣類型數據/日誌設置不一樣的緩存上線、聚合方式
- 日誌壓縮緩存:支持將未發送成功的數據壓縮緩存,減小設備內存佔用
功能優點
C-Producer是量身爲IoT定製的方案,所以會有一些特定考慮:異步
- 客戶端高併發寫入:可配置的發送線程池,支持每秒數十萬條日誌寫入,詳情參見性能測試
- 低資源消耗:每秒20W日誌寫入只消耗70% CPU;同時在低性能硬件(例如樹莓派)上,每秒產生100條日誌對資源基本無影響
- 客戶端日誌不落盤:既數據產生後直接經過網絡發往服務端
- 客戶端計算與 I/O 邏輯分離:日誌異步輸出,不阻塞工做線程
- 支持多優先級:不通客戶端可配置不一樣的優先級,保證高優先級日誌最早發送。
- 本地調試:支持設置本地調試,便於您在網絡不通的狀況下本地測試應用程序。
在以上場景中,C Producer Library 會簡化您程序開發的步驟,您無需關心日誌採集細節實現、也不用擔憂日誌採集會影響您的業務正常運行,大大下降數據採集門檻。高併發
爲了有一個感性認識,咱們對C-Producer 方案與其餘嵌入式採集方案作了一個對比,以下:
總體解決方案
C-Producer + 日誌服務能夠給IoT帶來什麼?答案是:IoT日誌解決方案:
規模大
- 支持億級別客戶端實時寫入
- 支持 PB/Day 數據量
速度快
採集快:0延遲:寫入0延遲,寫入便可消費
- 查詢快:一秒內,複雜查詢(5個條件)可處理10億級數據
- 分析快:一秒內,複雜分析(5個維度聚合+GroupBy)可聚合億級別數據
對接廣
- 與阿里雲各種產品無縫打通
- 各類開源格式存儲、計算、可視化系統完美兼容
如何使用
一個應用可建立多個producer,每一個producer可包含多個client,每一個client可單獨配置目的地址、日誌level、是否本地調試、緩存大小、自定義標識、topic等信息。
性能測試
環境配置:傳統X86服務器,樹莓派(低功耗環境),配置分別以下:
C-Producer配置
ARM(樹莓派)
- 緩存:10MB
- 聚合時間:3秒 (聚合時間、聚合數據包大小、聚合日誌數任一知足即打包發送)
- 聚合數據包大小:1MB
- 聚合日誌數:1000
- 發送線程:1
- 自定義tag : 5
X86
- 緩存:10MB
- 聚合時間:3秒 (聚合時間、聚合數據包大小、聚合日誌數任一知足即打包發送)
- 聚合數據包大小:3MB
- 聚合日誌數:4096
- 發送線程:4
- 自定義tag : 5
日誌樣例
- 10個鍵值對,總數據量約爲600字節
- 9個鍵值對,數據量約爲350字節
測試結果
X86平臺結果
- C Producer能夠輕鬆到達90M/s的發送速度,每秒上傳日誌20W,佔用CPU只有70%,內存140M
- 服務器在200條/s,發送數據對於cpu基本無影響(下降到0.01%之內)
- 客戶線程發送一條數據(輸出一條log)的平均耗時爲:1.2us
樹莓派平臺結果
- 在樹莓派的測試中,因爲CPU的頻率只有600MHz,性能差很少是服務器的1/10左右,最高每秒可發送2W條日誌
- 樹莓派在20條/s的時候,發送數據對於cpu基本無影響(下降到0.01%之內)
- 客戶線程發送一條數據(輸出一條log)的平均耗時爲:12us左右(樹莓派經過USB鏈接到PC共享網絡)
一些典型場景能夠參見雲棲論壇 和最佳實踐。