天天看點

全面提升-SLS移動端SDK2.0釋出背景SLS 資料采集系列從1.0到2.0多端SDK統一平台斷點續傳全球加速性能測試快速接入總結

背景

随着移動網際網路的高速發展,智能手機得到了快速的普及,《2020全球移動市場報告》中預測,2023年,全球智能手機使用者或将突破40億,而中國使用者将占到其中的1/4,其中5G智能手機數量占比将達到43%。這也就意味着未來中國幾乎人手一個智能機,每個人的生活都和智能機上的APP相關。并且随着5G技術的普及,流量紅利即将全面打開,APP的多媒體豐富性将達到一個新的層次。

這些發展的背後,也将帶來很多挑戰,其中之一就是如何保證逐漸複雜的APP如何被更好的收集和分析。目前資料分析的能力相對都比較成熟,但收集幾乎都需要每個公司自己開發,其中可能會涉及到各種各樣的問題,例如:

  • 應用已有的工具是否可以支援采集海量的資料。
  • 日志上報不及時,無法實時監控可能出現的問題。
  • 出現問題,依靠零散的日志,定位問題的成本增加。
  • 想對于某些型号或版本的統計分析耗時耗力,很難建構使用者畫像。
  • 日志上報需要占用APP額外的CPU、記憶體、網絡等資源,低劣的方案可能會對應用性能産生影響。

SLS 資料采集系列

全面提升-SLS移動端SDK2.0釋出背景SLS 資料采集系列從1.0到2.0多端SDK統一平台斷點續傳全球加速性能測試快速接入總結
日志服務(SLS)

作為一個綜合的資料采集、分析、可視化、監控平台,支援各種類型資料的統一接入,目前端上資料接入主要有:

  • 用戶端Logtail在X86/ARM伺服器上有數百萬的部署,服務阿裡/螞蟻經濟體、各行業雲上客戶,每天采集資料10PB+
  • 移動端SDK:Android/IOS平台資料采集,每天已有上億的DAU
  • Web Tracking(JS):類似百度統計,Google Analytics 輕量級采集方式,無需簽名
  • 嵌入式SDK:支援各類IoT裝置資料采集,資源占用極少,支援各類嵌入式平台

從1.0到2.0

SLS移動端SDK(Android、IOS)1.0的釋出已經有5-6年,目前已經積累了衆多的使用者,DAU已經上億。然而随着智能機、4G的普及以及未來5G的發展,移動端SDK的1.0版本已經逐漸暴露出一些問題,例如:

  • 同步資料發送:使用者需要基于SDK再次封裝異步發送邏輯,實作複雜度較高。
  • 不支援日志上下文:沒辦法追蹤某個裝置資料發送的資料上下文資訊,問題排查較為複雜。
  • 資源占用問題:SDK基于很多三方庫來實作,性能較低而且資源占用率很高。
  • 離線緩存:隻有Android SDK支援離線緩存,而且實作效率較低,開啟後會影響應用性能。

借助于SLS在服務端、嵌入式端等積累的資料采集經驗,我們充分吸取各個端上的優勢開發了移動端SDK2.0版本,在支援衆多進階功能的情況下依然能夠保持高性能與低資源占用。

多端SDK統一平台

全面提升-SLS移動端SDK2.0釋出背景SLS 資料采集系列從1.0到2.0多端SDK統一平台斷點續傳全球加速性能測試快速接入總結

2.0架構下SLS的端上SDK基于共同的基座C Core SDK适配,C Core部分代碼使用純C語言編寫,且對性能進行了極端的優化(包括緩存管理、檔案管理、PB序列化等),能夠适用于服務端、IOT、移動端等各種場景。同時C Core部分的代碼提供了多種配置方式,可以通過配置決定是否打開某項功能。目前2.0版本的Android IOS SDK均基于C Core提供的統一接口适配實作,具備C Core SDK的各類進階功能,包括:

  • 異步
    • 異步寫入,用戶端線程無阻塞
  • 聚合&壓縮 上傳
    • 支援按逾時時間、日志數、日志size聚合資料發送
    • 支援lz4壓縮
  • 多執行個體
    • 可同時建立多個執行個體分别發送到不同的目标,每個用戶端可獨立配置采集優先級、緩存上限、目的project/logstore、聚合參數等 (多用戶端,斷點續傳檔案路徑不能相同)
  • 緩存
    • 支援緩存上限可設定
    • 超過上限後日志寫入失敗
  • 自定義辨別
    • 支援設定自定義tag、topic
  • 斷點續傳功能
    • 每次發送前會把日志儲存到本地的binlog檔案,隻有發送成功才會删除,保證日志上傳At Least Once
  • 檢視日志上下文
    • 支援檢視某條日志的上下文呢,可以更好的定位問題

斷點續傳

此次2.0版本的一個巨大提升是完美支援了斷點續傳功能,在移動端,應用的生命周期不可控,是以絕大部分情況下無法實作優雅退出,應用可能在任意時刻、任意階段被強制終止,而這時如果産生的日志沒有被發送出去則會丢失掉。針對這種場景,我們設計了一套保證At Least Once的斷點續傳機制:每次發送日志前會把資料強制刷盤,隻有在發送成功後才會把盤上的資料檔案清空。為了盡可能減少IO,我們在斷點續傳中使用了WAL+RingFile的磁盤管理方式,每次以Append形式寫入,盡量減少随機Seek,CheckPoint和資料清理也是聚合執行,以進一步減少IO的負載。

全面提升-SLS移動端SDK2.0釋出背景SLS 資料采集系列從1.0到2.0多端SDK統一平台斷點續傳全球加速性能測試快速接入總結

全球加速

針對以上問題,日志服務聯合阿裡雲CDN推出了一款

全球資料上傳自動加速

方案:“基于阿裡雲CDN硬體資源,全球資料就近接入邊緣節點,通過内部高速通道路由至LogHub,大大降低網絡延遲和抖動 ”。 該方案有如下特點:

  • 全網邊緣節點覆寫:全球1000+節點,國内700+節點,分布60多個國家和地區,覆寫六大洲
  • 智能路由技術:實時探測網絡品質,自動根據營運商、網絡等狀況選擇最近接入
  • 傳輸協定優化:CDN節點之間走私有協定、高效安全
  • 使用便捷:隻需1分鐘即可開通加速服務,隻需切換到專屬加速域名即可獲得加速效果
全面提升-SLS移動端SDK2.0釋出背景SLS 資料采集系列從1.0到2.0多端SDK統一平台斷點續傳全球加速性能測試快速接入總結

在我們的日志上傳基準測試中,全球7個區域對比整體延時下降50%,在中東,歐洲、澳洲和新加坡等效果明顯。除了平均延時下降外,整體穩定性也有較大提升(參見最下圖,幾乎沒有任何抖動,而且逾時請求基本為0)。確定無論在全球的何時何地,隻要通路這個加速域名,就能夠高效、便捷将資料采集到期望Region内。

關于全球采集加速的更多内容,可參考我們的文章:

資料采集新形态-全球加速

性能測試

下面是1.0和2.0版本的性能測試結果,可以看到由于采集的是和IoT SDK一緻的C語言核心,Android IOS SDK在資源控制上會更加的高效,性能也更高。

全面提升-SLS移動端SDK2.0釋出背景SLS 資料采集系列從1.0到2.0多端SDK統一平台斷點續傳全球加速性能測試快速接入總結

測試環境如下:

  • 每個緩存的日志包的大小上限,為1Mb
  • 每個緩存的日志包中包含日志數量的最大值,為1024
  • 被緩存日志的發送逾時時間,為3秒
  • 單個Producer Client執行個體可以使用的記憶體的上限,為64Mb
  • 發送線程數為1
  • 每條資料有10個鍵值對,約700位元組

快速接入

Android SDK

詳細接入方式:

https://github.com/aliyun/aliyun-log-android-sdk
  • Gradle配置
jcenter()
implementation 'com.aliyun.openservices:aliyun-log-android-sdk:2.3.0'           

IOS SDK

https://github.com/aliyun/aliyun-log-ios-sdk
  • Podfile
pod 'AliyunLogProducer', '~> 2.1.0'           

總結

移動端2.0 SDK使資料可以更便捷、更穩定、更高效地從移動端實時傳輸到SLS中,對于應用開發者來說使用SLS的2.0 SDK會更加簡單,無需關心異步、隊列、重試、可靠性等基礎問題。解決了通道問題後,未來我們會更加聚焦于移動端埋點、移動端資料分析、移動端/服務端全鍊路監控等場景,為大家帶來更加完備的解決方案。

大家在使用SLS過程中,如有任何問題, 可提工單, 或在使用者群中回報(見下放釘釘二維碼), 也歡迎關注我們的微信公衆号, 會推送實用的使用技巧和最佳實踐哦~

ps: SLS團隊長期招聘人才,歡迎對大資料、監控、可觀察性、前端可視化、移動端開發、機器學習等有興趣的同學前來聯系我,郵箱 [email protected],微信 davidzhang-zc。

全面提升-SLS移動端SDK2.0釋出背景SLS 資料采集系列從1.0到2.0多端SDK統一平台斷點續傳全球加速性能測試快速接入總結

繼續閱讀