News
您的位置:
傳統處理方法用戶注冊後,一般係統需要(yào)發送注冊郵件和(hé)短信通知,以告(gào)知用戶(hù)注冊成功。通常的做法為:隻有以上三(sān)個任務(注冊+郵件通知+短信通知)全部完成後,才返回注冊結果到客戶端,用戶才能使用賬號登(dēng)錄。假設每個任務耗(hào)時分別為(wéi)50ms,則用戶需要在注冊頁麵等待總共150ms才能登錄。同時由於注冊係統強(qiáng)依(yī)賴於郵件和短(duǎn)信發(fā)送係統,一旦發送係統異(yì)常,注冊係統(tǒng)將受到連鎖影響,降低了係統的可用(yòng)性。使用了消息隊列的異(yì)步解耦的處理方法對於用戶來說(shuō),注(zhù)冊功能實(shí)際隻需要注冊係統(tǒng)存儲用戶的賬戶信息後(hòu),該用戶便可以登錄,後續的注(zhù)冊短信(xìn)和郵件不是即時需(xū)要關注(zhù)的步驟。對於注(zhù)冊係統而言,發送注冊成功的短信和郵件通知(zhī)並不一定要綁定在一起同步完成,所以實際當數據寫入注冊係統後,注冊係統就可以把其他的操作(zuò)放入對應的消息(xī)隊列中然後馬上返回用戶結果,由(yóu)消息隊列MQ異步地(dì)進行這些操作。由此,用戶隻需在注冊頁麵等待(dài)注冊數據(jù)寫入(rù)注冊係統和消息隊列的時間,等待55ms即可登錄。同時注冊流程也不會受郵件係統和短信係統的可用性影響,從而提升了整體的穩定性。穩定性(xìng)提升實踐消(xiāo)息隊列的應用場景非常豐富(fù),在支持順序消息、事務消息、延時消息,在削峰(fēng)填穀、海量消息(xī)存儲(chǔ)等方麵都能起(qǐ)到重要的作用。但是往往越底層的應用,其穩定(dìng)性要求也越高,作為應(yīng)用之間連接的橋梁,一旦消息(xī)隊列(liè)發生故障,整個業務係統都可能會癱瘓。首先看下WhaleDI-MQ的高可用部署架(jià)構,其包含服務端組件和客戶端組件兩大部(bù)分,其中服務端組件包含Namesrv、Broker和Zookeeper,客戶(hù)端組件包(bāo)含生產(chǎn)組producer和(hé)消費者Consumer,架構如下(xià)圖所示:Namesrv為無狀態(tài)服務,是WhaleDI-MQ的注冊中心,用於收集和更新路由信息;WhaleDI-MQ通過部署多個(gè)Namesrv節點保障高可用,當一個Namesrv異常退出後,客戶端能(néng)夠自動重連到其他的Namesrv節點。Broker為實際對外提供消息發送和消費服(fú)務(wù)的節點,消息會輪詢發(fā)送到各個主(zhǔ)節點Broker中,主備之間通過同步雙寫保障數據的可靠性(xìng);單個Broker master節點(diǎn)異常時(shí),備節點會自動切換(huàn)為master節點,繼續提(tí)供(gòng)服(fú)務;當一組Broker的master、slave節點全部異常時,其他的Broker節點仍然可以提供服務,保證了(le)服務的可用性(xìng)。WhaleDI-MQ利用ZK特性監控Broker的主備狀態,實現(xiàn)了Broker的自動切換功能。Zookeeper自身采(cǎi)用多節點(奇數個)部署(shǔ)的方式,利用ZAB協議特性保證自身組件的(de)高可用。Producer為生產者客戶端,采用多節點集群部署模式(shì),具備極強的擴展能力,某個Producer異常,不影響其它(tā)Producer節點發送消息。Consumer為消費者客戶端,和Producer一樣采用多節點集群部署模式,當某個Consumer節點異常時,WhaleDI-MQ根據負載策略動態再平衡,重(chóng)新調整隊列路(lù)由。下麵,我們將從Namesrv、Broker、異地容災等幾個方麵給大家(jiā)講解穩定性提升實踐。01Namesrv穩定性提升Namesrv是Rocketmq的無狀態注冊服務,主要作用(yòng)為:作為Broker的注冊中心,維護Broker的服務地址和(hé)路由信息客戶端通過Namesrv獲取以及更新路由信息Rocketmq是通過部署多(duō)個Namesrv節點來保證高可用,每個Namesrv的節(jiē)點維護的(de)數據都是相同的,客戶端初始化時僅(jǐn)會選擇其中的一個Namesrv節點建(jiàn)立網絡鏈接,若建鏈失敗,則根據異常條件重新(xīn)選擇其他的(de)Namesrv節點。>>>>故(gù)障場景:若連接的Namesrv節點cpu hang死,由於客戶端已經和故障的Namesrv節點建立連接,因而不(bú)會再(zài)選擇其他的Namesrv節點連接,由於當前的Namesrv故障,導致後(hòu)續的(de)路由更新、狀態通(tōng)知等全部超時失敗,進而無法進行(háng)正常發送和消費消息,導致(zhì)業(yè)務應用異常。>>>>解決方案:WhaleDI-MQ增加(jiā)了Namesrv鏈接自我檢測機製,對(duì)於(yú)netty異常鏈接定期(qī)檢測,若發現鏈接不可用則進行異常斷鏈,重新選(xuǎn)擇其他(tā)的Namesrv進行連接。>>>>應用成果:即便客戶端已經和故障的Namesrv節點建立了連接,但是若後續的路由獲取、心跳上報(bào)等服務在一定時間內異常次(cì)數(shù)超(chāo)過(guò)閾值,客(kè)戶端依然(rán)會和(hé)當(dāng)前的故障節點主動斷鏈,重新選擇其他正常(cháng)的Namesrv節(jiē)點。02Broker支持主備模式(shì)自動切換Rocketmq4.5之前的版本Broker采用的是M-S的部署模式,主節點異常後(hòu),程序缺乏狀態調度手段,必須人工介入才能進行主備切換,無法滿足電信行業的高(gāo)可用要求。傳統M-S部署方式消息寫入模式如下:Producer客戶端發送消息到Broker master節點(diǎn) Master節點同步寫入到Slave從節點Slave通知(zhī)Maser節點消息寫入(rù)成功Master節點返回成功寫入狀態至(zhì)消(xiāo)息客戶端Rocketmq自4.5版本起引入了Dledger多副本框架,基於raft共識(shí)算法(分布式數據一致性協(xié)議paxos),是一種強一致性、去中心化、高(gāo)可用的(de)分布式協議,確(què)保集群中的每個節(jiē)點都同意一係列相同(tóng)的狀態轉換。Leader選舉:Leader異常或(huò)者服務初期啟動(dòng),通過多(duō)數派共識算法,決策出主節點(diǎn);數據同步:領導者確(què)認後,由Leader接受客戶端的請求,寫入node log(此時數據沒有提交,因而不會更新節點數據),並同步到從節點(diǎn),當收到多數的從節點應(yīng)答後,更新本地數據(jù),響應客戶端數據寫入成功,並通知其他的節點更新數據。>>>>痛點描述:利用raft的(de)特性,Dledger天然支持(chí)自動選主和切換,但是也正是由於多數派原則,防止腦裂風險,Broker節點(diǎn)至少需要3副本,相(xiàng)較於原(yuán)來的主備模式,至少需要額外增加一個Broker節點,增大了部署硬件資源的成本。>>>>解決方案:国产亚洲熟妇在线视频科(kē)技WhaleDI-MQ引入Zookeeper協同主備狀態控製,仍(réng)采用一主一備(bèi)模式實現主從自動切換的能力,減少了部署的節點數,又(yòu)滿足了電信行業的高可(kě)用的要求。由於ZK的作用僅僅為Broker主備狀態控製,其資(zī)源(yuán)占用非常少,可以和Dubbo或者其他的業務應用共用(yòng)zk,甚至可以將zk部署到WhaleDI-MQ的服(fú)務器上,從(cóng)而節省了硬件部署資源。>>>>應用成果:WhaleDI-MQ部署時(shí)仍采用一主一備的模(mó)式,利用zk做狀態控製(zhì),就可以實(shí)現主備自動切(qiē)換的功能,降低了消息組件(jiàn)部署的主機(jī)數量,給(gěi)客戶節省(shěng)了(le)成(chéng)本。03異地容災>>>>痛點(diǎn)描述:一般的消息隊列隻支持主備部署模式,即便采用異地部署,主(zhǔ)備節點仍在一個大集群中,若異地距離比較遠網絡時延較大(dà)時,將極大的影響消息發送的性能,不滿足(zú)国产亚洲熟妇在线视频科(kē)技電信級商用項(xiàng)目的要求(qiú)。若MQ部署在同一個機房中,一旦遭遇火災、地震等不可抗力的災難時,難以(yǐ)快速(sù)恢複消息服務(wù),導致業務長時間中斷,並可能丟失大量的業務消息(xī)。>>>>解決方案:WhaleDI-MQ通過異(yì)地構建(jiàn)一套消息(xī)容災集群,不間(jiān)斷地從(cóng)主站點(diǎn)同(tóng)步消息數據,當(dāng)主節點(diǎn)遭受意外情況且係統無法恢複時,可以在兩分(fèn)鍾之內將容災集群切換為主站點(diǎn)集群,快速恢複業務,減少中(zhōng)斷時長,從而(ér)降低客戶的損(sǔn)失。異地(dì)消(xiāo)息容災集(jí)群能夠自動(dòng)感知主站點的Broker節點狀(zhuàng)態,並建立數據複製通道,即便主站點發生主備切換或者同步鏈路(lù)斷開,容災(zāi)節點也能夠根據名(míng)服務重新獲取路由信息,建鏈續傳(chuán)。容災消息複製支持同步和異步兩種數據複製模式,業務可以根據實際需(xū)要配置複製模式:同步複製:保證數據零丟失;異步複製:容災複製對主站(zhàn)點自身的消息(xī)寫入服務影響比較小,數據複製(zhì)會有稍許的(de)延時(秒級)。應用成果:WhaleDI-MQ容災站(zhàn)點可以在主站點異常不可用時,進行(háng)一鍵容災切換,將容災站點切換為主站點,快速地恢複服務(wù)。04消息發送穩定性提升Producer發送消息的時(shí)候,默認會輪詢所有的message queue發送,以達到(dào)讓消息平(píng)均落在不同的queue上。由於queue散(sàn)落在不同的Broker,所以消息就發送到不同的Broker上,如下圖:>>>>故(gù)障場景:當BrokerA出現以下情(qíng)況時:BrokerA磁盤阻塞(sāi)或寫入超時生產者和BrokerA之間網絡超時、丟包等BrokerA cpu、內存等使用率超過100%由於發(fā)生上述故障時,BrokerA的(de)進(jìn)程正(zhèng)常,並不會使namesrv剔除BrokerA的路由(yóu)數據,導致每當消息發送輪詢到故障BrokerA節點時便會發生超時(默(mò)認5秒),超時(shí)後客戶端輪詢到BrokerB節點則又正常發送(sòng)消息,等下次再輪(lún)詢到BrokerA節點時,又會觸發5秒的超時(shí),導致tps驟降,引(yǐn)起業務異常。>>>>解決(jué)方案:發(fā)送客戶端引(yǐn)入(rù)故障熔(róng)斷機製資(zī)源隔離:單個Broker的異(yì)常不會影響其他Broker的(de)消息發送超時(shí)熔(róng)斷(duàn):當前的Broker在一定的時(shí)間內超時達到了一定的次(cì)數,並執行服務降級,並使用異步的機製探測恢複的情況失敗熔斷(duàn):當發送失敗(bài)的調用次數達到一定閾(yù)值,如system busy、io滿載等則自動降級,並使用進(jìn)行異步機製(zhì)探測恢複的情況>>>>應用成果:BrokerA故障期間,消息不再往故障節點發送消息(xī),而是轉而路由到其他正常的Broker節(jiē)點(diǎn),保(bǎo)證了消息(xī)發送的成功率。同時異步的檢測故(gù)障節點的恢複情況,若(ruò)節點恢(huī)複,則(zé)消息會重新往此節點發送。05服務節點自愈>>>>痛點描述:一般的消息服務(wù)組件不具備(bèi)應用自(zì)愈的(de)能力,當MQ部署主機異常重啟時,需(xū)要人工介入,手動重啟服務組件。從異常發(fā)生(shēng),到(dào)告警係統捕(bǔ)獲到集群異常信息通知(zhī)到運維人員,再(zài)到運(yùn)維人員上(shàng)線分析告警原因,逐個登錄到MQ的各個主機上重啟Namesrv和Broker,往往至少需要耗費一個小時修複周期,導(dǎo)致在分秒必(bì)爭的電信級生產環境中,給客戶造成極大的損失。>>>>方(fāng)案描述:WhaleDI-MQ提供統一的健康狀態監(jiān)控+調度(dù)的功能,定時檢查各個服務節點的運行情況,當檢測到節點異常時,統(tǒng)一調度將會自動拉起故障節點。>>>>應用成果:利用統一調度功能,WhaleDI-MQ的Namesrv、Broker和ZK皆具備了服務自愈的能力,進程異常退出後(hòu),無需人工介入,自動(dòng)恢複消息服務組件,修複的時間由原來的至少1小時降低到2分(fèn)鍾(zhōng);同時程序自愈的能力也降低了人工介入誤操作的(de)概率,保障了生產係統的安全。實踐總結(jié)国产亚洲熟妇在线视频科技具有數百個行業穩定落地的實踐經驗,同時基於HATT混(hún)沌(dùn)工程,我們從網絡、內存、IO、磁盤、cpu等多個(gè)維度,編寫了上(shàng)百個測試(shì)用例,充(chōng)分驗(yàn)證了WhaleDI-MQ穩定性能力,並對相關的不足點進行了優化提升,使得SLA可用性達(dá)到了99.99%。WhaleDI分布式消息產品已經有效支撐了国产亚洲熟妇在线视频科技眾多電信級的項目平穩運行,全麵助力客戶(hù)應用數字化轉型。隨著業務應用(yòng)雲原生化的不斷深入,需要(yào)MQ進一步加強產品(pǐn)的穩定性,如故障(zhàng)數據檢查同步算法、磁盤壞道數據mock、主容站點數據同步壓縮加速、主備切換時長、客戶(hù)端縮短感知等方(fāng)麵(miàn),針對(duì)這些場景(jǐng),我們會繼續深入技術研究,力爭在未來企業應用的各(gè)種複雜場景(jǐng)下,更好地保障係統應用高效平穩運行。
傳統處理方法
使用了消息隊列的異(yì)步解耦的處理方法
Namesrv為無狀態(tài)服務,是WhaleDI-MQ的注冊中心,用於收集和更新路由信息;WhaleDI-MQ通過部署多個(gè)Namesrv節點保障高可用,當一個Namesrv異常退出後,客戶端能(néng)夠自動重連到其他的Namesrv節點。
Broker為實際對外提供消息發送和消費服(fú)務(wù)的節點,消息會輪詢發(fā)送到各個主(zhǔ)節點Broker中,主備之間通過同步雙寫保障數據的可靠性(xìng);單個Broker master節點(diǎn)異常時(shí),備節點會自動切換(huàn)為master節點,繼續提(tí)供(gòng)服(fú)務;當一組Broker的master、slave節點全部異常時,其他的Broker節點仍然可以提供服務,保證了(le)服務的可用性(xìng)。
WhaleDI-MQ利用ZK特性監控Broker的主備狀態,實現(xiàn)了Broker的自動切換功能。Zookeeper自身采(cǎi)用多節點(奇數個)部署(shǔ)的方式,利用ZAB協議特性保證自身組件的(de)高可用。
Producer為生產者客戶端,采用多節點集群部署模式(shì),具備極強的擴展能力,某個Producer異常,不影響其它(tā)Producer節點發送消息。
Consumer為消費者客戶端,和Producer一樣采用多節點集群部署模式,當某個Consumer節點異常時,WhaleDI-MQ根據負載策略動態再平衡,重(chóng)新調整隊列路(lù)由。
作為Broker的注冊中心,維護Broker的服務地址和(hé)路由信息
客戶端通過Namesrv獲取以及更新路由信息
故(gù)障場景:
解決方案:
應用成果:
Producer客戶端發送消息到Broker master節點(diǎn)
Master節點同步寫入到Slave從節點
Slave通知(zhī)Maser節點消息寫入(rù)成功
Master節點返回成功寫入狀態至(zhì)消(xiāo)息客戶端
痛點描述:
痛點(diǎn)描述:
同步複製:保證數據零丟失;異步複製:容災複製對主站(zhàn)點自身的消息(xī)寫入服務影響比較小,數據複製(zhì)會有稍許的(de)延時(秒級)。
應用成果:WhaleDI-MQ容災站(zhàn)點可以在主站點異常不可用時,進行(háng)一鍵容災切換,將容災站點切換為主站點,快速地恢複服務(wù)。
BrokerA磁盤阻塞(sāi)或寫入超時
生產者和BrokerA之間網絡超時、丟包等
BrokerA cpu、內存等使用率超過100%
解決(jué)方案:
資(zī)源隔離:單個Broker的異(yì)常不會影響其他Broker的(de)消息發送
超時(shí)熔(róng)斷(duàn):當前的Broker在一定的時(shí)間內超時達到了一定的次(cì)數,並執行服務降級,並使用異步的機製探測恢複的情況
失敗熔斷(duàn):當發送失敗(bài)的調用次數達到一定閾(yù)值,如system busy、io滿載等則自動降級,並使用進(jìn)行異步機製(zhì)探測恢複的情況
方(fāng)案描述:
浩(hào)鯨雲計(jì)算科(kē)技股份有限公司 版權所有 2003-2023
蘇ICP備10224443號(hào)-6 蘇公網(wǎng)安備 32011402011374號(hào)