壓測背景:
LPWAN是當前物聯網行業中最重要的技術之一,以年復合增長率90%的驚人速度增長。NB-IOT、LoRa、ZETA 以及Sigfox是當前市場上主流的幾種LPWAN通信技術。
ZETA LPWAN 協議以超窄帶、低功耗雙向通信和多跳組網的特點,徹底改善了傳統的LPWAN協議不足之處,大大增加了LPWAN技術在物聯網應用的空間。
ZETag云標簽 是縱行科技基于ZETA 技術開發的傳感柔性標簽,具有公里級超廣覆蓋,低功耗特性等優勢,與同類技術相比,成本可降低至1/3-1/10,并能支持大容量并發,使用壽命最長可達5年。與此同時,ZETag云標簽通過減小尺寸和功耗并改善性能來消除常規有源標簽的閑置,除卻物流倉儲和貨物追蹤,還可作為一次性標簽廣泛應用在資產定位和危化、危廢管理的萬億級市場。
目前,ZETag云標簽 已在京東物流、中國郵政、日郵物流、上海睿池、上海派鏈等上下游物流企業物流載具及貴重包裹上實現應用,也是全球首例在速遞郵件上實現實時軌跡跟蹤的服務的物聯網云標簽。
數蛙科技是工業物聯網千萬級設備接入與管理的專業平臺提供商,目前業務場景已覆蓋電力、交通、物流、工業制造等多領域的商業應用。
濤思時序數據庫TDengine是目前針對時序數據庫的性能最優的開源數據庫平臺,廣泛運用于工業、電力、車聯網、大數據領域。
數蛙科技結合縱行科技的ZETag云標簽與濤思數據的高容量時序數據庫,為物流領域未來高增長、高并發的物流標簽場景,進行了1000萬接入、百億級時序數據的運營級全業務模擬壓力測試。
ZETag物流標簽組網如下:
壓測目的:
本次壓力測試通過模擬1萬ZETA AP、千萬ZETA TAG標簽的在線運行,精準高效完成ZETA AP、ZETA TAG的在線協議解析、解析數據實時入庫、海量數據在線查詢與展示等流程。同時,對真實物流業務場景進行抽象,實現批次ZETA TAG在不同線路上發生軌跡改變,移動過程中利用不同的ZETA AP實現定位。ZETA TAG在線運行過程中,每隔15分鐘發送心跳包,被臨近的單個或者多個ZETA AP報送至服務端。服務端會按照策略選擇信號最好的上報數進行存庫,并利用上報信號最好的AP對ZETA TAG進行定位。
通過壓力測試,判斷當前應用環境情況下系統的負載能力,為今后應用范圍擴大,用戶量上升后,服務器擴容、升級等提供必要的技術支撐,及服務器規劃等。
本次測試目的是為了驗證基于數蛙連接與設備管理平臺的ZETA物流跟蹤管理能夠實現千萬級ZETA TAG標簽同時在線穩定運行、數據及時回傳、正常入庫、高效查庫。
本次測試場景的壓力與復雜度遠高于真實場景,在保障ZETA物流跟蹤當前業務可以正常開展的同時,也可以有效支撐ZETA相關業務應用的拓展與深化應用。
壓測環境:
由于壓力測試是對系統負載能力的測試,無法通過真實的環境來進行獲取相關指標,因此通過測試機與測試服務,模擬1萬AP、千萬ZETA TAG與服務器高頻數據交互,利用算法虛擬真實業務場景下實際的操作來進行測試。
測試機部署虛擬云設備服務,及進行壓力測試的客戶端機器,一般采用高配置的機器來進行測試。在壓力測試過程中,一般忽略測試機對壓力測試結果的影響。
壓測場景 :
ZETA設備運行模擬:
ZETA AP :每10s主動連接服務端,連續30min未連上等待2min再次連接;連接狀態下1min一次心跳交互;連續三次未收到ACK,發起重連。
ZETA TAG :每15分鐘上報一次心跳包;心跳報文被不同AP接收上報后,服務端會比較后保留首次 收到TAG心跳后3s內RSSI最強上報的AP位置信息作為TAG的當前位置。
客戶端場景模擬描述:
運輸、配送線路 :本次場景模擬線路總計200條,線路可以配置。
運輸車輛 :本次場景模擬運輸車輛50000部,貨車會模擬真實物流場景在既定線路上進行移動,車上ZETAG標簽隨之移動。
ZETA AP :本次模擬10000臺,每條線路上分布500臺ZETA AP
ZETA TAG數量 :本次模擬在運ZETAG1000萬個,ZETAG隨運輸車輛移動,每隔15分鐘的心跳報文被相鄰的2-3個ZETA AP接收。
服務端業務描述:
每15分鐘內完成千萬在運ZETAG標簽心跳數據包解析(加上冗余報文,每15分鐘內解析心跳報文數量2000多萬條);
完成ZETA TAG心跳數據比較與冗余數據過濾;
完成解析出的海量TAG位置信息實時分類入庫;
4、支持ZETA TAG最新位置更新與軌跡查詢;
5、每分鐘完成1萬ZETA AP的心跳報文解析、存儲;
6、完成ZETA AP運行狀態信息的接收與存儲;
7、支持ZETA AP運行狀態信息查詢。
根據測試系統中消息的業務場景情況,選取以下指標作為場景壓力測試情況判斷依據:
A、ZETA AP在線情況統計
B、ZETA AP在線率
C、在線ZETAG標簽數量
D、ZETA標簽解析包數量
E、1/5/15分鐘CPU平均負載
F、內存使用量
壓測技術:
系統監控
服務端與客戶端系統監控和業務數據監控采用Prometheus&Grafana做統計與展示
時序數據監控 --- Grafana&TDengine監控插件(監控TDengine數據總量、丟包數以及增長速率)
系統指標監控 --- Grafana&&Prometheus監控插件,用node_exporter采集數據(監控CPU,內存,網絡、存儲四大指標)
業務消息監控 --- Grafana&Prometheus監控插件,業務層通過Prometheus client實時統計各個消息路由節點上發包數、收包數以及丟包數等指標,業務層主要指標如下:
時序數據
ZETag物流標簽的地址域是4個字節,最高的一個字節是保留字節,本次壓測的ZETag物流標簽的實際地址域是3個字節,所以ZETag地址為FF XX XX XX,總計16,777,215個標簽的地址,如果按照一個標簽設備一個子表的方式設計,需要1600多萬個子表。根據實測結果,Tdengine 1.6.3單機版本子表數量超過49萬就極不穩定,很容易崩潰,但子表數量在10萬以下具有良好的性能。所以子表設計采用了一種虛擬分組設計,將最低兩個字節(總計65,535個子表)作為子表空間,每個子表存儲一個字節(總計255個標簽)的標簽時序數據。
時序數據模型設計 :
240億數據存儲空間占用230G磁盤空間
數據存儲目錄
時序數據入庫示例:
時序數據入庫策略:
本次模擬了1300多萬的物流標簽15分鐘一個心跳,平均1.4萬多的QPS,峰值QPS很容易超過Tdengine的入庫QPS閥值,導致Tdengine崩潰。在消息路由層設計了一個基于令牌桶算法的消息緩存層進行削峰處理,在保證時序數據的順序性的同時,也能讓時序數據以比較平穩的速率批量入庫。由于Tdengine沒有提供erlang的連接池程序,最開始用默認的http客戶端來入庫,長時間運行不穩定,最后我們把Tdengine原生的c語言的連接池程序進行了改造,添加了mqtt訂閱功能,通過mqtt協議來轉發批量存庫時序數據。
時序數據出庫策略:
由于對子表進行虛擬分組設計,查找任何一個物流標簽數據的物流軌跡數據都有非常便捷的尋址算法,快速查找到用戶層期望的時序數據,在百億級數據規模的情況下,查詢速度也可以到毫秒級。
ZetaEtag即時數據查詢接口 :/zeta/etag/{tag}
超時時間為5秒
隨機讀tag,數據庫內數據58169933條
tag 生成方式:FF開頭后六位隨機生成
* 返回status code為200(找到目標tag)或404(找不到目標tag)兩者都視為調用成功
ZetaEtag歷史數據接口 :zeta/etag/history/{tag}
超時時間為5秒
對所有tag隨機讀,limit值為100,日期范圍在合理范圍內隨機產生,數據庫內數據58169933條
tag生成方式:FF開頭后六位隨機生成
日期生成方式:1569558137——1569579737間隨機數
2019年10月份做壓測報告時,沒有記錄240億時的API統計,把去年的壓測鏡像恢復回來,240億標簽數據時的查詢速度如下
消息路由
ZETag物流標簽數據從數據產生到數據落庫,1300多萬ZETag標簽 =》5萬卡車進程=》1萬AP基站客戶端連接進程=》1萬AP的服務端連接進程=》65535虛擬分組進程=》消息緩存調度進程 =》Tdengine的mqtt客戶端=》Tdengine連接池存儲進程,消息需要經過7次轉發,每一跳都需要小心處理內存釋放和消息堵塞問題。每15分鐘有將近3000萬-4500萬消息的生產和消費,需要有非常好的GC處理機制。其中1萬AP的服務端連接進程--》65535虛擬分組進程,這一跳消息轉發速率沒有固定的對應關系,兩點之間QPS波動非常大,用開源的mqtt消息轉發和消費組策略也非常容易導致消息堵塞和內存持續上漲。這里也還是得益于之前的虛擬分組設計,通過虛擬分組比較好的解決了這一跳的高效消息路由,同時也把這兩點之間的消息轉發的QPS峰值削的比較平。
影子設備
本次測試模擬的是類似雙11這樣的物流標簽軌跡最繁忙的場景,模擬了5萬臺卡車裝滿(200多件貼上ZETag標簽的快遞件)快遞件,在200多條線路上飛奔,在行駛過程中不停切換AP基站,上報ZETag標簽軌跡數據,滿懷期望的用戶時不時登錄快遞網站查看一下自己購買的貨物到了何處。我們在系統中設計了5萬個卡車影子設備,1萬的AP基站影子設備和65535虛擬分組影子設備來處理這一較為復雜的業務場景。卡車影子設備承載了ZETA標簽信息,線路位置信息和線路沿途的AP基站信息的交互,AP基站影子設備承載了ZEtag通信協議處理,虛擬分組影子設備承擔了1300萬ZETag標簽的邊緣計算和時序數據存儲處理。
任務調度
每15分鐘有將近3000萬-4500萬ZETag標簽消息的生產和消費除了需要良好的GC機制,同時也需要一個良好的任務調度機制。治大國如烹小鮮,每一個影子設備上面的任務調度處理細節非常關鍵,每一個小的偏差都會被乘以一個3000-45000萬的系數放大,對任務調度質量要求是零缺陷。合理的分組策略(也即合理的影子設備設計)非常關鍵,可以從宏觀上對系統資源進行削峰,在單個影子設備上進行完美的微操作,讓每一個影子設備的任務調度策略達到零缺陷。
壓測結果:
(新媒體責編:syhz0808)
聲明:
1、凡本網注明“人民交通雜志”/人民交通網,所有自采新聞(含圖片),如需授權轉載應在授權范圍內使用,并注明來源。
2、部分內容轉自其他媒體,轉載目的在于傳遞更多信息,并不代表本網贊同其觀點和對其真實性負責。
3、如因作品內容、版權和其他問題需要同本網聯系的,請在30日內進行。電話:010-67683008
人民交通24小時值班手機:17801261553 商務合作:010-67683008轉602 E-mail:zzs@rmjtzz.com
Copyright 人民交通雜志 All Rights Reserved 版權所有 復制必究 百度統計 地址:北京市豐臺區南三環東路6號A座四層
增值電信業務經營許可證號:京B2-20201704 本刊法律顧問:北京京師(蘭州)律師事務所 李大偉
京公網安備 11010602130064號 京ICP備18014261號-2 廣播電視節目制作經營許可證:(京)字第16597號