精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

對 Pulsar 集群的壓測與優化

開發 前端
一鍵創建集群和執行測試用例比較簡單,利用了 helm 和 k8s client 的 SDK 把整個流程串起來即可。

前言

這段時間在做 MQ(Pulsar)相關的治理工作,其中一個部分內容關于消息隊列的升級,比如:

  • 一鍵創建一個測試集群。
  • 運行一批測試用例,覆蓋我們線上使用到的功能,并輸出測試報告。
  • 模擬壓測,輸出測試結果。

本質目的就是想直到新版本升級過程中和升級后對現有業務是否存在影響。

一鍵創建集群和執行測試用例比較簡單,利用了 helm 和 k8s client 的 SDK 把整個流程串起來即可。

壓測

其實稍微麻煩一點的是壓測,Pulsar 官方本身是有提供一個壓測工具;只是功能相對比較單一,只能對某批 topic 極限壓測,最后輸出測試報告。最后參考了官方的壓測流程,加入了一些實時監控數據,方便分析整個壓測過程中性能的變化。

客戶端 timeout

隨著壓測過程中的壓力增大,比如壓測時間和線程數的提高,客戶端會拋出發送消息 timeout 異常。

org.apache.pulsar.client.api.PulsarClientException$TimeoutException: 
The producer pulsar-test-212-20 can not send message to the topic persistent://my-tenant/my-ns/perf-topic-0 within given timeout : createdAt 82.964 seconds ago, firstSentAt 8.348 seconds ago, lastSentAt 8.348 seconds ago, retryCount 1

而這個異常在生產業務環境的高峰期偶爾也出現過,這會導致業務數據的丟失;所以正好這次被我復現出來后想著分析下產生的原因以及解決辦法。

源碼分析客戶端

既然是客戶端拋出的異常所以就先看從異常點開始看起,其實整個過程和產生的原因并不復雜,如下圖:

圖片

客戶端流程:

  1. 客戶端 producer 發送消息時先將消息發往本地的一個 pending 隊列。
  2. 待 broker 處理完(寫入 bookkeeper) 返回 ACK 時刪除該 pending 隊列頭的消息。
  3. 后臺啟動一個定時任務,定期掃描隊列頭(頭部的消息是最后寫入的)的消息是否已經過期(過期時間可配置,默認30s)。
  4. 如果已經過期(頭部消息過期,說明所有消息都已過期)則遍歷隊列內的消息依次拋出PulsarClientException$TimeoutException 異常,最后清空該隊列。

服務端 broker 流程:

  1. 收到消息后調用 bookkeeper API 寫入消息。
  2. 寫入消息時同時寫入回調函數。
  3. 寫入成功后執行回調函數,這時會記錄一條消息的寫入延遲,并通知客戶端 ACK。
  4. 通過 broker metric 指標pulsar_broker_publish_latency 可以獲取寫入延遲。

從以上流程可以看出,如果客戶端不做兜底措施則在第四步會出現消息丟失,這類本質上不算是 broker 丟消息,而是客戶端認為當時 broker 的處理能力達到上限,考慮到消息的實時性從而丟棄了還未發送的消息。

性能分析

通過上述分析,特別是 broker 的寫入流程得知,整個寫入的主要操作便是寫入 bookkeeper,所以 bookkeeper 的寫入性能便關系到整個集群的寫入性能。

極端情況下,假設不考慮網絡的損耗,如果 bookkeeper 的寫入延遲是 0ms,那整個集群的寫入性能幾乎就是無上限;所以我們重點看看在壓測過程中 bookkeeper 的各項指標。

CPU

首先是 CPU:

圖片

從圖中可以看到壓測過程中 CPU 是有明顯增高的,所以我們需要找到壓測過程中 bookkeeper 的 CPU 大部分損耗在哪里?

這里不得不吹一波阿里的 arthas 工具,可以非常方便的幫我們生成火焰圖。

圖片

分析火焰圖最簡單的一個方法便是查看頂部最寬的函數是哪個,它大概率就是性能的瓶頸。

在這個圖中的頂部并沒有明顯很寬的函數,大家都差不多,所以并沒有明顯損耗 CPU 的函數。

此時在借助云廠商的監控得知并沒有得到 CPU 的上限(limit 限制為 8核)。

圖片



使用 arthas 過程中也有個小坑,在 k8s 環境中有可能應用啟動后沒有成功在磁盤寫入 pid ,導致查詢不到 Java 進程。

$ java -jar arthas-boot.jar
[INFO] arthas-boot version: 3.6.7
[INFO] Can not find java process. Try to pass <pid> in command line.
Please select an available pid.

此時可以直接 ps 拿到進程 ID,然后在啟動的時候直接傳入 pid 即可。

$ java -jar arthas-boot.jar 1

通常情況下這個 pid 是 1。

磁盤

既然 CPU 沒有問題,那就再看看磁盤是不是瓶頸。

圖片

可以看到壓測時的 IO 等待時間明顯是比日常請求高許多,為了最終確認是否是磁盤的問題,再將磁盤類型換為 SSD 進行測試。

圖片

果然即便是壓測,SSD磁盤的 IO 也比普通硬盤的正常請求期間延遲更低。

既然磁盤 IO 延遲降低了,根據前文的分析理論上整個集群的性能應該會有明顯的上升,因此對比了升級前后的消息 TPS 寫入指標:

圖片


升級后每秒的寫入速率由 40k 漲到 80k 左右,幾乎是翻了一倍(果然用錢是最快解決問題的方式);

但即便是這樣,極限壓測后依然會出現客戶端 timeout,這是因為無論怎么提高服務端的處理性能,依然沒法做到沒有延遲的寫入,各個環節都會有損耗。

升級過程中的 timeout

還有一個關鍵的步驟必須要覆蓋:模擬生產現場有著大量的生產者和消費者接入收發消息時進行集群升級,對客戶端業務的影響。

根據官方推薦的升級步驟,流程如下:

  • Upgrade Zookeeper.
  • Disable autorecovery.
  • Upgrade Bookkeeper.
  • Upgrade Broker.
  • Upgrade Proxy.
  • Enable autorecovery.

其中最關鍵的是升級 Broker 和 Proxy,因為這兩個是客戶端直接交互的組件。

本質上升級的過程就是優雅停機,然后使用新版本的 docker 啟動;所以客戶端一定會感知到 Broker 下線后進行重連,如果能快速自動重連那對客戶端幾乎沒有影響。

圖片

在我的測試過程中,2000左右的 producer 以 1k 的發送速率進行消息發送,在 30min 內完成所有組件升級,整個過程客戶端會自動快速重連,并不會出現異常以及消息丟失。

而一旦發送頻率增加時,在重啟 Broker 的過程中便會出現上文提到的 timeout 異常;初步看起來是在默認的 30s 時間內沒有重連成功,導致積壓的消息已經超時。

經過分析源碼發現關鍵的步驟如下:

圖片


客戶端在與 Broker 的長連接狀態斷開后會自動重連,而重連到具體哪臺 Broker 節點是由 LookUpService 處理的,它會根據使用的 topic 獲取到它的元數據。

理論上這個過程如果足夠快,對客戶端就會越無感。

在元數據中包含有該 topic 所屬的 bundle 所綁定的  Broker 的具體 IP+端口,這樣才能重新連接然后發送消息。

bundle 是一批 topic 的抽象,用來將一批 topic 與 Broker 綁定。

而在一個 Broker 停機的時會自動卸載它所有的 bundle,并由負載均衡器自動劃分到在線的 Broker 中,交由他們處理。

這里會有兩種情況降低 LookUpSerive 獲取元數據的速度:

因為所有的 Broker 都是 stateful 有狀態節點,所以升級時是從新的節點開始升級,假設是broker-5,假設升級的那個節點的 bundle 切好被轉移 broker-4中,客戶端此時便會自動重連到 4 這個Broker 中。

此時客戶端正在講堆積的消息進行重發,而下一個升級的節點正好是 4,那客戶端又得等待 bundle 成功 unload 到新的節點,如果恰好是 3 的話那又得套娃了,這樣整個消息的重發流程就會被拉長,直到超過等待時間便會超時。

還有一種情況是 bundle 的數量比較多,導致上面講到的 unload 時更新元數據到 zookeeper 的時間也會增加。

所以我在考慮 Broker 在升級過程中時,是否可以將 unload 的 bundle 優先與 Broker-0進行綁定,最后全部升級成功后再做一次負載均衡,盡量減少客戶端重連的機會。

解決方案

如果我們想要解決這個 timeout 的異常,也有以下幾個方案:

  1. 將 bookkeeper 的磁盤換為寫入時延更低的 SSD,提高單節點性能。
  2. 增加 bookkeeper 節點,不過由于 bookkeeper 是有狀態的,水平擴容起來比較麻煩,而且一旦擴容再想縮容也比較困難。
  3. 增加客戶端寫入的超時時間,這個可以配置。
  4. 客戶端做好兜底措施,捕獲異常、記錄日志、或者入庫都可以,后續進行消息重發。
  5. 為 bookkeeper 的寫入延遲增加報警。
  6. Spring 官方剛出爐的 Pulsar-starter 已經內置了 producer 相關的 metrics,客戶端也可以對這個進行監控報警。

以上最好實現的就是第四步了,效果好成本低,推薦還沒有實現的都盡快 try catch 起來。

整個測試流程耗費了我一兩周的時間,也是第一次全方位的對一款中間件進行測試,其中也學到了不少東西;不管是源碼還是架構都對 Pulsar 有了更深入的理解。

責任編輯:姜華 來源: crossoverJie
相關推薦

2020-06-17 08:55:22

mysqlslapsysbenchMySQL

2022-11-25 18:49:11

云原生

2025-07-31 01:47:00

2014-11-25 11:37:17

壓測 軟件測試

2019-08-19 00:14:12

網絡測試帶寬網絡流量

2022-06-27 11:06:33

全鏈路影子庫影子表

2010-07-14 10:53:20

Web應用

2023-10-19 08:23:50

wrkOpenResty工具

2010-05-24 14:59:29

Hadoop集群

2016-08-08 18:11:50

服務器壓力測試

2018-01-10 14:08:34

阿里雙11壓測

2021-03-05 13:30:51

MySQL數據庫壓測工具

2020-12-03 09:57:34

MySQL壓測工具數據庫

2021-02-03 14:51:34

MySQL數據庫壓測工具

2023-02-22 08:15:13

壓測模擬計算

2022-01-17 09:18:28

JMeter分布式壓測

2021-11-29 11:20:27

塊存儲EBS Lens

2022-06-07 15:33:51

Android優化實踐

2024-03-21 10:39:24

CIOAI

2021-12-03 08:45:57

RocketMQ壓測性能
點贊
收藏

51CTO技術棧公眾號

国产又粗又长又大的视频| 国产伦精品一区| 91香蕉视频污在线观看| 国产麻豆一区二区三区| 亚洲一卡二卡三卡四卡无卡久久 | 婷婷激情成人| 亚洲一区二区综合| 欧美日韩一区二区三区在线视频 | 成人精品免费在线观看| 国产麻豆一区二区三区精品视频| 欧美日韩国产综合久久| 国产夫妻自拍一区| 国产一级免费在线观看| 国产精品一品二品| 欧美孕妇与黑人孕交| 国产真人真事毛片视频| 日韩视频一区二区三区四区| 一区二区三区在线观看国产| 国产亚洲一区在线播放| 中国一级片黄色一级片黄| 中文字幕一区二区三区欧美日韩| 精品美女一区二区三区| 日本www高清视频| 成人在线播放免费观看| 99这里都是精品| 国产欧美韩国高清| 日产精品久久久久久久| 大色综合视频网站在线播放| 日韩你懂的电影在线观看| 黄色a级片免费| 国产色在线观看| 99re热视频精品| 国产主播精品在线| 1级黄色大片儿| 一级毛片免费高清中文字幕久久网| 亚洲第一黄色网| 国产免费中文字幕| 婷婷电影在线观看| 一区二区三区av电影| 热re99久久精品国99热蜜月| 国产夫妻性生活视频| 蜜臀av性久久久久蜜臀aⅴ四虎| 欧美国产在线电影| 香蕉视频久久久| 第一区第二区在线| 91精品国产色综合久久ai换脸 | av无码一区二区三区| 国产激情久久| 91黄视频在线观看| 人妻少妇精品无码专区二区| 日本视频在线观看| 久久天堂av综合合色蜜桃网| 91观看网站| 久久久久女人精品毛片九一| 在线精品一区| 欧美日本高清视频| 永久免费看mv网站入口| 日韩欧美视频专区| 亚洲午夜av电影| 亚洲国产欧美视频| 久久a级毛片毛片免费观看| 日韩一区二区三区观看| 婷婷激情5月天| 97色婷婷成人综合在线观看| 欧美日韩亚洲国产综合| 久久精品网站视频| 亚洲欧洲自拍| 欧美色欧美亚洲高清在线视频| 精品免费久久久久久久| 国产激情小视频在线| 国产精品久久三区| 亚洲啪啪av| 国产小视频免费在线网址| 成人网男人的天堂| 成人av电影免费| 免费看黄色一级视频| 麻豆国产精品一区二区三区 | 亚洲美女尤物影院| 欧美日韩一区二区免费视频| 日韩欧美一区三区| free欧美| 欧美日韩www| 天天爽夜夜爽一区二区三区| 成人国产激情在线| 欧美日韩免费一区二区三区视频| wwwwxxxx日韩| 成人综合日日夜夜| 欧美大片在线观看一区二区| 美女伦理水蜜桃4| 亚洲三级网页| 在线视频欧美日韩精品| 成人信息集中地| 欧美国产先锋| 欧美亚洲视频一区二区| 免费观看日批视频| 久久精品国产亚洲一区二区三区| 91色精品视频在线| 丰满人妻一区二区三区无码av| 波多野结衣亚洲一区| 欧美日韩精品久久| 米奇777四色精品人人爽| 亚洲精品久久嫩草网站秘色| 成人午夜视频在线观看免费| 久久久一本精品| 欧美丰满一区二区免费视频| 亚洲精品乱码久久久久久蜜桃欧美| 精品按摩偷拍| 国产一区二区三区三区在线观看| 爱爱视频免费在线观看| 日韩视频久久| 国产精品亚洲激情| a在线观看视频| 99天天综合性| 影音先锋欧美在线| 天堂av中文在线观看| 欧美日韩五月天| 国产精品入口麻豆| 日韩av有码| 97久久精品人人澡人人爽缅北| 丰满少妇xoxoxo视频| 国产一区三区三区| 久久青青草原| 91福利国产在线观看菠萝蜜| 福利精品视频在线| 91网址在线观看精品| 日韩电影不卡一区| 欧美成人精品影院| 成人a v视频| 不卡av免费在线观看| 亚洲视频小说| 中文字幕乱码在线播放| 日韩视频一区二区三区在线播放 | 国产精品国产一区二区三区四区| 99久久精品免费看国产免费软件| 夜夜爽www精品| 自由日本语热亚洲人| 91精品欧美一区二区三区综合在| 无码h肉动漫在线观看| 红桃视频国产一区| 96精品久久久久中文字幕| 欧美孕妇孕交| 亚洲午夜精品在线| 欧美成人乱码一二三四区免费| 亚洲三级网址| 亚洲91精品在线观看| 国产熟女一区二区三区四区| 欧美国产激情二区三区| av免费观看网| 国产精品久久久久久久久久白浆| 久久综合久久88| 中文在线字幕免费观| 久久久无码精品亚洲日韩按摩| 精品久久久久久无码中文野结衣| 精品久久免费| 不卡av电影院| 国产精品羞羞答答在线| 国产亚洲精品aa| 久久爱另类一区二区小说| 91免费综合在线| 成人av毛片| 日韩欧美一区二区三区| 日韩成人av影院| 欧美激情 亚洲a∨综合| 成人免费激情视频| 婷婷视频在线| 欧美日韩大陆在线| 中文字幕xxx| 欧美精品成人| 91青青草免费在线看| 成人午夜在线影视| 日韩欧美一区在线| 青青青在线视频| 国产99一区视频免费| 亚洲 欧美 综合 另类 中字| 精品国产一区二| 欧美区在线播放| 欧洲成人一区二区三区| 亚洲va天堂va国产va久| 日本三级日本三级日本三级极| 国语精品一区| 精品一区2区三区| 女生影院久久| 日韩亚洲欧美成人| 999国产精品视频免费| 亚洲影院免费观看| 亚洲啪av永久无码精品放毛片| 亚洲高清资源| 欧美国产视频在线观看| 99久久久国产精品免费调教网站| 中文字幕久久亚洲| 亚洲字幕av一区二区三区四区| 国产精品国产三级国产aⅴ中文| 三年中文在线观看免费大全中国| 欧美三级第一页| 欧美黄色直播| 亚洲欧洲二区| 国模精品系列视频| 韩国免费在线视频| 欧美一区二区三区免费视频| 国产一级二级毛片| 久久久精品蜜桃| 日韩一区二区三区久久| 亚洲一区二区| 91成人免费看| 日韩电影毛片| 日韩综合中文字幕| 色窝窝无码一区二区三区| 日本精品一区二区三区高清| 日韩在线观看视频一区二区| aaa国产一区| 国产一二三区av| 欧美在线免费一级片| 精品高清视频| 国产欧美自拍| 97超级碰碰碰| 黄色成人影院| 亚洲欧美国产一本综合首页| 国产精品欧美亚洲| 欧美日韩另类在线| 日韩欧美国产成人精品免费| 91麻豆产精品久久久久久 | 四季av综合网站| 免播放器亚洲一区| 91丨porny丨探花| 日本激情一区| 精品在线不卡| 欧美黄色一级| 国产剧情日韩欧美| 都市激情国产精品| 日韩一区二区精品视频| 日韩二区三区| 精品国产乱码久久久久久久| 中文字幕 自拍偷拍| 红桃av永久久久| 欧美成人aaa片一区国产精品| 国产日韩欧美一区二区三区综合| 四虎永久免费观看| 国内精品免费**视频| 欧美精品第三页| 亚洲一卡久久| 免费毛片网站在线观看| 亚洲破处大片| 日韩欧美99| 综合色就爱涩涩涩综合婷婷| 国产日韩欧美自拍| 少妇精品视频一区二区免费看| 97视频在线观看视频免费视频 | 日本伊人色综合网| 丁香花在线影院观看在线播放| 欧美国产美女| 午夜视频久久久| 欧美日韩一区二区综合 | 99久久国产热无码精品免费| 欧美日韩综合不卡| 99久久久无码国产精品免费蜜柚| 欧美视频中文在线看| 国精产品一区一区二区三区mba| 91在线视频播放| 在线观看国产免费视频| 成人精品国产一区二区4080| 中文字幕第10页| 国产麻豆午夜三级精品| 免费在线观看污网站| 久久99精品国产91久久来源| 亚洲欧洲日本精品| 免费人成黄页网站在线一区二区| 91人人澡人人爽人人精品| 久久午夜影视| 污片在线免费看| 麻豆精品一二三| 国产九九热视频| 九色综合狠狠综合久久| 中文字幕久久av| 国内精品写真在线观看| 美女被爆操网站| www..com久久爱| av无码av天天av天天爽| 久久精品欧美一区二区三区不卡| 美女脱光内衣内裤| 久久亚洲二区三区| 国产亚洲精品熟女国产成人| 亚洲国产高清在线| 疯狂试爱三2浴室激情视频| 亚洲精品自拍动漫在线| 精品一区二区三区四| 懂色av一区二区三区| 亚洲天堂视频在线播放| 欧美精品欧美精品系列| 亚洲图片视频小说| 欧美高清性hdvideosex| 亚洲欧美激情国产综合久久久| 欧美日韩1234| 超碰人人人人人人| 精品久久人人做人人爱| 天堂成人在线| 日韩视频第一页| 岛国毛片av在线| 日韩女在线观看| 免费观看亚洲视频大全| 91黄色精品| 国产欧美一区二区三区精品观看| 亚洲一区不卡在线| 欧美日韩亚洲三区| 无遮挡又爽又刺激的视频 | 亚洲精品成人少妇| av黄色在线看| 制服视频三区第一页精品| 欧美在线 | 亚洲| 中文字幕精品网| a√中文在线观看| 国产在线高清精品| 欧美一区二区三区久久| 欧美在线视频二区| 国产精品久久久久久| 国产肥臀一区二区福利视频| 精品一区二区免费视频| 欧美肉大捧一进一出免费视频| 国产欧美日韩亚州综合 | 国产精品不卡| 黄色影院一级片| 国产成人在线免费观看| 男人舔女人下部高潮全视频| 亚洲午夜免费电影| 97超碰人人草| 亚洲人线精品午夜| japanese色国产在线看视频| 成人免费福利在线| jlzzjlzz亚洲女人| 国产96在线 | 亚洲| 天堂av在线一区| 精品人妻在线视频| 亚洲欧美日韩国产另类专区| 欧美a视频在线观看| 亚洲成av人乱码色午夜| 免费网站免费进入在线| 日韩美女视频中文字幕| 国产一区二区三区亚洲| 日本特级黄色大片| 日韩av在线播放中文字幕| 你懂得在线视频| 夜夜嗨av一区二区三区中文字幕| 亚洲av人无码激艳猛片服务器| 日韩成人av一区| 四虎亚洲成人| 91久久久久久久久久久久久| 不卡一区综合视频| 精品久久久久久久免费人妻| 99国产麻豆精品| 男女做暖暖视频| 日韩女优毛片在线| 中文字幕在线三区| 成人精品一区二区三区电影免费| 精品一区二区三区中文字幕老牛| 5月婷婷6月丁香| 91影院在线观看| 日韩在线视频免费播放| 亚洲成人1234| 国产免费拔擦拔擦8x高清在线人 | 九九精品视频在线看| 国产视频不卡在线| 欧美伊人久久大香线蕉综合69 | 精品小视频在线| 国产精品蜜臀| 国产精品视频免费一区| 在线观看一区| 波多野结衣一二三区| 亚洲精品国产a久久久久久| 制服.丝袜.亚洲.中文.综合懂色| 亚洲精品国精品久久99热一| 久草在线新免费首页资源站| 国产伦精品一区二区三区视频黑人 | 丰满少妇久久久久久久| 久久免费小视频| 精品久久人人做人人爰| 99色在线观看| 国产精品大全| 日韩亚洲国产精品| 巨乳女教师的诱惑| 亚洲一区av在线| 亚洲国产精品久久久久爰性色| 久久久久久久香蕉网| 牛牛影视久久网| 日日碰狠狠躁久久躁婷婷| 亚洲国产成人自拍| 国产精品国产一区二区三区四区| 久久久精品一区二区三区| 91麻豆精品国产91久久久久推荐资源| 精品丰满人妻无套内射| 2020国产成人综合网| 自拍偷拍色综合| 在线成人中文字幕| 精品一区二区三区亚洲| 男人日女人视频网站| 久久久电影一区二区三区| 一区二区久久精品66国产精品 | 永久av在线| 成人自拍视频网站| 久久久夜夜夜| 欧美做爰啪啪xxxⅹ性| 亚洲精品福利视频|