異數OS 織夢師 水母(一) 訊息佇列篇

2021-09-19 17:52:35 字數 2916 閱讀 9842

github:

異數os社群qq群: 652455784

異數os-織夢師(訊息中介軟體)群: 476260389

這是乙個使用異數os技術實做的輕量級的訊息中介軟體,和他的名字一樣,重在表演,他不是乙個功能複雜齊全的訊息佇列,使用者需要根據自己需求按照水母的原理去製作自己的超級**,整個框架,協議,測試等**算下來僅僅1000行,但已經是乙個比較完整可用的訊息佇列了(topic沒做,由nameserver去做吧),持久化方便測試使用虛完成,下一階段會接入織夢師-水桶 ram網盤儲存方案,由於效能足夠,單broker相當於10-100臺傳統的訊息佇列,所以也不需要特意去製作集群方案,簡單即優美,簡單即可用,織夢師-水母作為異數os的example放在git test目錄下

1.生產者惰性qos控制,在開啟該特性後,生產者執行緒在佇列滿載後會被阻塞掛起,在佇列可用時恢復並嘗試重新入隊,此特性在佇列壓力較大時可大大降低錯誤重試的網路io需求,大大增加佇列高負載時的可用性

2.低延遲低佇列深度可用,織夢師-水母的延遲極低,內網生產者入隊僅需10us延遲(82599),佇列無壓力時到消費者延遲20us,因此只要消費者滿足需要,一般佇列深度128即可穩定工作(異數os系產品本身並不需要訊息佇列做削峰填谷,這是給老舊落後的產品做的

3.海量生產者特性,每broker最大可接入1000w鏈結生產者(阻塞io執行緒),因此有望直接在公網接受使用者生產者檢驗,而不需要系統前端加lvs或者nginx分流出多生產者。

4.高效能的訊息佇列,dpdk 82599雙口 單cpu核環境,128生產者下,非批量訊息,最大入隊峰值4m每秒,到消費者最大2m峰值,批量則再根據批量規模和頻寬來計算放大倍率,1200w鏈結最大160w訊息入隊,到消費者最大80w,後面會支援rss 單broker多佇列聚合,成倍擴充單broker效能。

織夢師-水母使用阻塞執行緒模型,因此相比非同步io的架構,結構非常簡單輕量穩定可靠,**和框架是對生產者,消費者模型的高度對應,你看到的框架圖就是**。

cpu1 作為日誌監控核,cpu3作為經紀人broker,cpu5建立生產者消費者,成績為10位元組10個訊息批量模式,批量僅供參考。

日誌中引數可自己查閱git中**做分析參考。

以下成績都是1 borker下得到的效能,其他產品資料來自網路的大概參考資料。

測試特性

異數os虛擬交換機128生產者

異數os虛擬交換機600w生產者

異數os-dpdk 128生產者

異數os-dpdk 600w生產者

kafka

rocketmq

僅入隊效能

4m2m

3.3m

160w

12w12w

入隊出隊效能

2m1m

1.6m

80w6w

6w僅入隊延遲

<1us

<1us

10us

10us

10ms

10ms

入隊到出隊延遲

<1us

<1us

20us

20us

10ms

10ms

10位元組訊息批量入隊出隊,織夢師-水母測試用批量規模為10個訊息批量

測試特性

異數os虛擬交換機128生產者

異數os虛擬交換機600w生產者

異數os-dpdk 128生產者

異數os-dpdk 600w生產者

kafka

rocketmq

僅入隊效能

40m20m

33m1600w

200w

12w(不支援批量)

入隊出隊效能

20m10m

16m800w

100w

6w僅入隊延遲

<1us

<1us

10us

10us

10ms

10ms

入隊到出隊延遲

<1us

<1us

20us

20us

10ms

10ms

rss方案已經可以正常使用,雙核echo 8m io的樣子,dpdk在異數os負優化下,在海量鏈結環境中,終於不丟包,但代價是慘烈的,相對netmap方案,效能損失30%,實踐推測這是由於dpdk polling在需要訪存延遲較高的情況下,網絡卡無法利用mbuf進行資料傳輸,因此你開再多的mbuf都不濟於事,而netmap由於使用驅動的硬體中斷,因此即便不polling,網絡卡中斷也能完成和netmap ring的資料傳輸,所以netmap的polling實際上反而更高效,有削峰填谷作用,為了拯救dpdk polling導致的網絡卡飢餓,異數os做了更加細粒度的任務排程,並為dpdk網絡卡驅動做了ns精度級別的任務排程,動態控制dpdk tx發包規模,從而實現了600w(1200w)鏈結的0丟包。

異數OS 織夢師 水母(一) 訊息佇列篇

github 異數os社群qq群 652455784 異數os 織夢師 訊息中介軟體 群 476260389 這是乙個使用異數os技術實做的輕量級的訊息中介軟體,和他的名字一樣,重在表演,他不是乙個功能複雜齊全的訊息佇列,使用者需要根據自己需求按照水母的原理去製作自己的超級 整個框架,協議,測試等 ...

異數OS 織夢師 纖手(二) LPC RPC篇

github 異數os社群qq群 652455784 異數os 織夢師 訊息中介軟體 rpc技術 群 476260389 纖手主要用於異數os 之上效能級應用系統設計,他並不支援序列化等需要cpu密集型功能,因此他也不支援其他非c 語言平台,要求cpu同構 大端,小端 相比傳統rpc 技術,提供10...

織夢模板頂一下踩一下呼叫方法

織夢仿站時,在內容頁模板經常會用到頂一下踩一下呼叫,呼叫方法很簡單,主要就是js和dede 呼叫方法如下 需要呼叫 1 在 中呼叫js 如下 src include dedeajax2.js 2016 01 16 21 23 00 error page dede login.php error in...