日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不

當前位置:首頁 > 科技  > 軟件

MQ消息積壓,把我整吐血了

來源: 責編: 時間:2024-05-16 09:07:42 211觀看
導讀前言我之前在一家餐飲公司待過兩年,每天中午和晚上用餐高峰期,系統的并發量不容小覷。為了保險起見,公司規定各部門都要在吃飯的時間輪流值班,防止出現線上問題時能夠及時處理。我當時在后廚顯示系統團隊,該系統屬于訂單的

前言

我之前在一家餐飲公司待過兩年,每天中午和晚上用餐高峰期,系統的并發量不容小覷。為了保險起見,公司規定各部門都要在吃飯的時間輪流值班,防止出現線上問題時能夠及時處理。ad128資訊網——每日最新資訊28at.com

我當時在后廚顯示系統團隊,該系統屬于訂單的下游業務。ad128資訊網——每日最新資訊28at.com

用戶點完菜下單后,訂單系統會通過發kafka消息給我們系統,系統讀取消息后,做業務邏輯處理,持久化訂單和菜品數據,然后展示到劃菜客戶端。ad128資訊網——每日最新資訊28at.com

這樣廚師就知道哪個訂單要做哪些菜,有些菜做好了,就可以通過該系統出菜。系統自動通知服務員上菜,如果服務員上完菜,修改菜品上菜狀態,用戶就知道哪些菜已經上了,哪些還沒有上。這個系統可以大大提高后廚到用戶的效率。ad128資訊網——每日最新資訊28at.com

圖片圖片ad128資訊網——每日最新資訊28at.com

這一切的關鍵是消息中間件:kafka,如果它出現問題,將會直接影響到后廚顯示系統的用戶功能使用。ad128資訊網——每日最新資訊28at.com

這篇文章跟大家一起聊聊,我們當時出現過的消息積壓問題,希望對你會有所幫助。ad128資訊網——每日最新資訊28at.com

1 第一次消息積壓

剛開始我們的用戶量比較少,上線一段時間,mq的消息通信都沒啥問題。ad128資訊網——每日最新資訊28at.com

隨著用戶量逐步增多,每個商家每天都會產生大量的訂單數據,每個訂單都有多個菜品,這樣導致我們劃菜系統的劃菜表的數據越來越多。ad128資訊網——每日最新資訊28at.com

在某一天中午,收到商家投訴說用戶下單之后,在平板上出現的菜品列表有延遲。ad128資訊網——每日最新資訊28at.com

廚房幾分鐘之后才能看到菜品。ad128資訊網——每日最新資訊28at.com

我們馬上開始查原因。ad128資訊網——每日最新資訊28at.com

出現這種菜品延遲的問題,必定跟kafka有關,因此,我們先查看kafka。ad128資訊網——每日最新資訊28at.com

果然出現了消息積壓。ad128資訊網——每日最新資訊28at.com

通常情況下,出現消息積壓的原因有:ad128資訊網——每日最新資訊28at.com

  1. mq消費者掛了。
  2. mq生產者生產消息的速度,大于mq消費者消費消息的速度。

我查了一下監控,發現我們的mq消費者,服務在正常運行,沒有異常。ad128資訊網——每日最新資訊28at.com

剩下的原因可能是:mq消費者消費消息的速度變慢了。ad128資訊網——每日最新資訊28at.com

接下來,我查了一下劃菜表,目前不太多只有幾十萬的數據。ad128資訊網——每日最新資訊28at.com

看來需要優化mq消費者的處理邏輯了。ad128資訊網——每日最新資訊28at.com

我在代碼中增加了一些日志,把mq消息者中各個關鍵節點的耗時都打印出來了。ad128資訊網——每日最新資訊28at.com

發現有兩個地方耗時比較長:ad128資訊網——每日最新資訊28at.com

  1. 有個代碼是一個for循環中,一個個查詢數據庫處理數據的。
  2. 有個多條件查詢數據的代碼。

于是,我做了有針對性的優化。ad128資訊網——每日最新資訊28at.com

將在for循環中一個個查詢數據庫的代碼,改成通過參數集合,批量查詢數據。ad128資訊網——每日最新資訊28at.com

有時候,我們需要從指定的用戶集合中,查詢出有哪些是在數據庫中已經存在的。ad128資訊網——每日最新資訊28at.com

實現代碼可以這樣寫:ad128資訊網——每日最新資訊28at.com

public List<User> queryUser(List<User> searchList) {    if (CollectionUtils.isEmpty(searchList)) {        return Collections.emptyList();    }    List<User> result = Lists.newArrayList();    searchList.forEach(user -> result.add(userMapper.getUserById(user.getId())));    return result;}

這里如果有50個用戶,則需要循環50次,去查詢數據庫。我們都知道,每查詢一次數據庫,就是一次遠程調用。ad128資訊網——每日最新資訊28at.com

如果查詢50次數據庫,就有50次遠程調用,這是非常耗時的操作。ad128資訊網——每日最新資訊28at.com

那么,我們如何優化呢?ad128資訊網——每日最新資訊28at.com

具體代碼如下:ad128資訊網——每日最新資訊28at.com

public List<User> queryUser(List<User> searchList) {    if (CollectionUtils.isEmpty(searchList)) {        return Collections.emptyList();    }    List<Long> ids = searchList.stream().map(User::getId).collect(Collectors.toList());    return userMapper.getUserByIds(ids);}

提供一個根據用戶id集合批量查詢用戶的接口,只遠程調用一次,就能查詢出所有的數據。ad128資訊網——每日最新資訊28at.com

多條件查詢數據的地方,增加了一個聯合索引,解決了問題。ad128資訊網——每日最新資訊28at.com

這樣優化之后, mq消費者處理消息的速度提升了很多,消息積壓問題被解決了。ad128資訊網——每日最新資訊28at.com

2 第二次消息積壓

沒想到,過了幾個月之后,又開始出現消息積壓的問題了。ad128資訊網——每日最新資訊28at.com

但這次是偶爾會積壓,大部分情況不會。ad128資訊網——每日最新資訊28at.com

這幾天消息的積壓時間不長,對用戶影響比較小,沒有引起商家的投訴。ad128資訊網——每日最新資訊28at.com

我查了一下劃菜表的數據只有幾百萬。ad128資訊網——每日最新資訊28at.com

但通過一些監控,和DBA每天發的慢查詢郵件,自己發現了異常。ad128資訊網——每日最新資訊28at.com

我發現有些sql語句,執行的where條件是一模一樣的,只有條件后面的參數值不一樣,導致該sql語句走的索引不一樣。ad128資訊網——每日最新資訊28at.com

比如:order_id=123走了索引a,而order_id=124走了索引b。ad128資訊網——每日最新資訊28at.com

有張表查詢的場景有很多,當時為了滿足不同業務場景,加了多個聯合索引。ad128資訊網——每日最新資訊28at.com

MySQL會根據下面幾個因素選擇索引:ad128資訊網——每日最新資訊28at.com

  1. 通過采樣數據來估算需要掃描的行數,如果掃描的行數多那可能io次數會更多,對cpu的消耗也更大。
  2. 是否會使用臨時表,如果使用臨時表也會影響查詢速度;
  3. 是否需要排序,如果需要排序則也會影響查詢速度。

綜合1、2、3以及其它的一些因素,MySql優化器會選出它自己認為最合適的索引。ad128資訊網——每日最新資訊28at.com

MySQL優化器是通過采樣來預估要掃描的行數的,所謂采樣就是選擇一些數據頁來進行統計預估,這個會有一定的誤差。ad128資訊網——每日最新資訊28at.com

由于MVCC會有多個版本的數據頁,比如刪除一些數據,但是這些數據由于還在其它的事務中可能會被看到,索引不是真正的刪除,這種情況也會導致統計不準確,從而影響優化器的判斷。ad128資訊網——每日最新資訊28at.com

上面這兩個原因導致MySQL在執行SQL語句時,會選錯索引。ad128資訊網——每日最新資訊28at.com

明明使用索引a的時候,執行效率更高,但實際情況卻使用了索引b。ad128資訊網——每日最新資訊28at.com

為了解決MySQL選錯索引的問題,我們使用了關鍵字force index,來強制查詢sql走索引a。ad128資訊網——每日最新資訊28at.com

這樣優化之后,這次小范圍的消息積壓問題被解決了。ad128資訊網——每日最新資訊28at.com

3 第三次消息積壓

過了半年之后,在某個晚上6點多鐘。ad128資訊網——每日最新資訊28at.com

有幾個商家投訴過來,說劃菜系統有延遲,下單之后,幾分鐘才能看到菜品。ad128資訊網——每日最新資訊28at.com

我查看了一下監控,發現kafka消息又出現了積壓的情況。ad128資訊網——每日最新資訊28at.com

查了一下MySQL的索引,該走的索引都走了,但數據查詢還是有些慢。ad128資訊網——每日最新資訊28at.com

此時,我再次查了一下劃菜表,驚奇的發現,短短半年表中有3千萬的數據了。ad128資訊網——每日最新資訊28at.com

通常情況下,單表的數據太多,無論是查詢,還是寫入的性能,都會下降。ad128資訊網——每日最新資訊28at.com

這次出現查詢慢的原因是數據太多了。ad128資訊網——每日最新資訊28at.com

為了解決這個問題,我們必須:ad128資訊網——每日最新資訊28at.com

  1. 做分庫分表
  2. 將歷史數據備份

由于現階段做分庫分表的代價太大了,我們的商戶數量還沒有走到這一步。ad128資訊網——每日最新資訊28at.com

因此,我們當時果斷選擇了將歷史數據做備份的方案。ad128資訊網——每日最新資訊28at.com

當時我跟產品和DBA討論了一下,劃菜表只保留最近30天的數據,超過幾天的數據寫入到歷史表中。ad128資訊網——每日最新資訊28at.com

這樣優化之后,劃菜表30天只會產生幾百萬的數據,對性能影響不大。ad128資訊網——每日最新資訊28at.com

消息積壓的問題被解決了。ad128資訊網——每日最新資訊28at.com

4 第四次消息積壓

通過上面這幾次優化之后,很長一段時間,系統都沒有出現消息積壓的問題。ad128資訊網——每日最新資訊28at.com

但在一年之后的某一天下午,又有一些商家投訴過來了。ad128資訊網——每日最新資訊28at.com

此時,我查看公司郵箱,發現kafka消息積壓的監控報警郵件一大堆。ad128資訊網——每日最新資訊28at.com

但由于剛剛一直在開會,沒有看到。ad128資訊網——每日最新資訊28at.com

這次的時間點就有些特殊。ad128資訊網——每日最新資訊28at.com

一般情況下,并發量大的時候,是中午或者晚上的用餐高峰期,而這次出現消息積壓問題的時間是下午。ad128資訊網——每日最新資訊28at.com

這就有點奇怪了。ad128資訊網——每日最新資訊28at.com

剛開始查詢這個問題一點頭緒都沒有。ad128資訊網——每日最新資訊28at.com

我問了一下訂單組的同事,下午有沒有發版,或者執行什么功能?ad128資訊網——每日最新資訊28at.com

因為我們的劃菜系統,是他們的下游系統,跟他們有直接的關系。ad128資訊網——每日最新資訊28at.com

某位同事說,他們半小時之前,執行了一個批量修改訂單狀態的job,一次性修改了幾萬個訂單的狀態。ad128資訊網——每日最新資訊28at.com

而修改了訂單狀態,會自動發送mq消息。ad128資訊網——每日最新資訊28at.com

這樣導致,他們的程序在極短的時間內,產生了大量的mq消息。ad128資訊網——每日最新資訊28at.com

而我們的mq消費者根本無法處理這些消息,所以才會產生消息積壓的問題。ad128資訊網——每日最新資訊28at.com

我們當時一起查了kafka消息的積壓情況,發現當時積壓了幾十萬條消息。ad128資訊網——每日最新資訊28at.com

要想快速提升mq消費者的處理速度,我們當時想到了兩個方案:ad128資訊網——每日最新資訊28at.com

  1. 增加partion數量。
  2. 使用線程池處理消息。

但考慮到,當時消息已經積壓到幾個已有的partion中了,再新增partion意義不大。ad128資訊網——每日最新資訊28at.com

于是,我們只能改造代碼,使用線程池處理消息了。ad128資訊網——每日最新資訊28at.com

為了開始消費積壓的消息,我們將線程池的核心線程和最大線程數量調大到了50。ad128資訊網——每日最新資訊28at.com

這兩個參數是可以動態配置的。ad128資訊網——每日最新資訊28at.com

這樣調整之后,積壓了幾十萬的mq消息,在20分鐘左右被消費完了。ad128資訊網——每日最新資訊28at.com

這次突然產生的消息積壓問題被解決了。ad128資訊網——每日最新資訊28at.com

解決完這次的問題之后,我們還是保留的線程池消費消息的邏輯,將核心線程數調到8,最大線程數調到10。ad128資訊網——每日最新資訊28at.com

當后面出現消息積壓問題,可以及時通過調整線程數量,先臨時解決問題,而不會對用戶造成太大的影響。ad128資訊網——每日最新資訊28at.com

注意:使用線程池消費mq消息不是萬能的。該方案也有一些弊端,它有消息順序的問題,也可能會導致服務器的CPU使用率飆升。此外,如果在多線程中調用了第三方接口,可能會導致該第三方接口的壓力太大,而直接掛掉。ad128資訊網——每日最新資訊28at.com

總之,MQ的消息積壓問題,不是一個簡單的問題。ad128資訊網——每日最新資訊28at.com

雖說產生的根本原因是:MQ生產者生產消息的速度,大于MQ消費者消費消息的速度,但產生的具體原因有多種。ad128資訊網——每日最新資訊28at.com

我們在實際工作中,需要針對不同的業務場景,做不同的優化。ad128資訊網——每日最新資訊28at.com

我們需要對MQ隊列中的消息積壓情況,進行監控和預警,至少能夠及時發現問題。ad128資訊網——每日最新資訊28at.com

沒有最好的方案,只有最合適當前業務場景的方案。ad128資訊網——每日最新資訊28at.com

本文鏈接:http://m.www897cc.com/showinfo-26-88349-0.htmlMQ消息積壓,把我整吐血了

聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。郵件:2376512515@qq.com

上一篇: Google 內部 Go 的使用率有多少?

下一篇: 使用Springboot3.x結合美學與功能的設計實現藝術風格驗證碼

標簽:
  • 熱門焦點
Top 日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不
久久国产一区| 亚洲综合欧美| 亚洲电影免费观看高清完整版| 国产亚洲一区二区三区| 一区在线视频| 日韩视频亚洲视频| 亚洲欧美日本在线| 久久久91精品国产一区二区三区| 麻豆成人在线观看| 欧美三级视频| 国产香蕉久久精品综合网| 在线免费观看日本一区| 日韩亚洲欧美中文三级| 亚洲欧美色婷婷| 美国十次成人| 国产精品久久久久久影院8一贰佰| 国产综合在线视频| 99视频有精品| 久久久久女教师免费一区| 欧美另类极品videosbest最新版本| 国产精品综合不卡av| 亚洲高清不卡av| 亚洲男人av电影| 老司机aⅴ在线精品导航| 欧美午夜精品久久久久免费视| 国产日韩欧美精品| 日韩一二三区视频| 久久久人成影片一区二区三区| 欧美日韩一区二区三区| 韩国v欧美v日本v亚洲v| 一区二区三区国产精品| 久久久久在线观看| 国产精品五区| 亚洲看片网站| 久久婷婷一区| 国产精品羞羞答答xxdd| 亚洲免费高清| 久久视频一区| 国产精品最新自拍| 日韩一区二区免费看| 久久人人爽人人| 国产精品伦子伦免费视频| 91久久精品国产91久久| 久久高清免费观看| 欧美午夜精品理论片a级大开眼界| 亚洲韩国一区二区三区| 久久国产精品久久久久久| 欧美午夜精品一区| 亚洲精品视频一区| 美女福利精品视频| 国产在线高清精品| 亚洲欧美在线视频观看| 欧美色区777第一页| 亚洲人成小说网站色在线| 久久久久久久尹人综合网亚洲| 国产精品高清在线| 亚洲另类春色国产| 欧美高清在线一区二区| 影音先锋成人资源站| 欧美在线一区二区三区| 国产精品蜜臀在线观看| 一区二区三区 在线观看视| 欧美福利在线观看| 亚洲电影免费观看高清| 久久久久久九九九九| 国产日韩欧美91| 欧美一区二区日韩一区二区| 国产精品久久久久国产精品日日| aⅴ色国产欧美| 欧美精品在线免费播放| 亚洲人成亚洲人成在线观看图片 | 国产一区欧美| 欧美一区二区视频观看视频| 国产精品一区二区三区乱码| 亚洲综合精品自拍| 国产精品盗摄久久久| 中日韩美女免费视频网址在线观看| 欧美国产在线视频| 亚洲清纯自拍| 欧美理论片在线观看| 亚洲精品久久久久久久久久久久久| 欧美18av| 亚洲人被黑人高潮完整版| 欧美成人免费播放| 亚洲日本在线观看| 欧美精品一区在线发布| 日韩性生活视频| 欧美日韩免费| 亚洲一区二区免费看| 国产精品激情av在线播放| 亚洲一区三区电影在线观看| 国产精品亚洲片夜色在线| 午夜宅男欧美| 黄色成人免费网站| 欧美h视频在线| 99re8这里有精品热视频免费| 欧美日韩美女一区二区| 亚洲一区二区三区久久| 国产精品一区一区| 欧美在线91| 欲色影视综合吧| 欧美黄色一区二区| 一本色道久久88综合日韩精品 | 在线日韩中文字幕| 欧美成人精品1314www| 亚洲毛片播放| 国产精品久久一区主播| 久久精品国产亚洲高清剧情介绍| 狠狠色综合网| 欧美精品久久久久a| 亚洲一区二区网站| 国产一区二区三区在线观看免费| 老司机免费视频一区二区三区| 亚洲啪啪91| 国产精品视频xxxx| 久久噜噜噜精品国产亚洲综合| 亚洲国产精品久久精品怡红院| 欧美日韩三级| 欧美中文字幕在线视频| 亚洲激情偷拍| 国产精品―色哟哟| 玖玖国产精品视频| 一区二区电影免费观看| 国产亚洲一级| 欧美激情中文字幕在线| 亚洲欧美激情视频| 1000部精品久久久久久久久| 国产精品v欧美精品v日韩精品| 久久av老司机精品网站导航| 亚洲肉体裸体xxxx137| 国产精品日韩久久久久| 麻豆精品视频在线观看| 亚洲午夜精品一区二区| 一区二区视频欧美| 欧美色图首页| 久久久女女女女999久久| 99热在线精品观看| 国产一区视频在线观看免费| 欧美另类一区| 久久精品视频亚洲| 一区二区三欧美| 樱桃国产成人精品视频| 国产精品久久久久国产a级| 老司机凹凸av亚洲导航| 亚洲一区激情| 亚洲国产精品一区在线观看不卡| 国产精品嫩草影院一区二区| 欧美成人首页| 欧美尤物巨大精品爽| 99一区二区| 在线看国产一区| 国产精品日韩欧美| 欧美韩日一区二区三区| 久久精品最新地址| 亚洲午夜精品久久久久久app| 亚洲福利国产精品| 国产日产欧产精品推荐色 | 欧美国产日本高清在线| 欧美综合二区| 亚洲一二三区精品| 最新成人在线| 狠狠色综合网站久久久久久久| 国产精品免费视频xxxx| 欧美激情精品久久久久久变态| 久久精品五月婷婷| 亚洲欧美日韩国产精品| 日韩视频免费大全中文字幕| 在线播放日韩欧美| 国产视频一区在线观看一区免费| 欧美视频日韩| 欧美日本一区| 欧美黑人在线观看| 麻豆91精品| 久久久久久久一区二区| 亚洲欧美精品一区| 一区二区免费在线视频| 亚洲日本乱码在线观看| 亚洲高清在线观看| 精品二区久久| 国产亚洲欧洲997久久综合| 国产精品美女999| 欧美日韩一区二区欧美激情| 欧美乱大交xxxxx| 欧美国产一区二区| 欧美jizz19性欧美| 免费精品视频| 免费不卡欧美自拍视频| 久久久夜精品| 久久精品国产综合精品| 欧美尤物巨大精品爽| 欧美一区二区三区婷婷月色 | 国产精品性做久久久久久| 国产精品jizz在线观看美国| 欧美日韩国产123| 欧美精品一区在线观看| 欧美日韩国产999| 欧美人成网站| 欧美日韩国产一区| 欧美日韩国产va另类| 欧美日韩国产二区| 欧美日韩亚洲国产一区| 欧美三级视频在线播放| 欧美视频专区一二在线观看| 国产精品久久国产精麻豆99网站|