欧美AA视频在线播放a,久久综合九色综,欧美日韩一区二区三区自拍,日本久久精品视频

當(dāng)前位置: 首頁 > 資訊 > 生活 >

解讀 RocketMQ 5.0 全新的高可用設(shè)計

時間:2023-06-29 16:21:52

作者:斜陽

高可用架構(gòu)演進背景

在分布式系統(tǒng)中不可避免的會遇到網(wǎng)絡(luò)故障,機器宕機,磁盤損壞等問題,為了向用戶不中斷且正確的提供服務(wù),要求系統(tǒng)有一定的冗余與容錯能力。RocketMQ 在日志,統(tǒng)計分析,在線交易,金融交易等豐富的生產(chǎn)場景中發(fā)揮著至關(guān)重要的作用,而不同環(huán)境對基礎(chǔ)設(shè)施的成本與可靠性提出了不同的訴求。在 RocketMQ v4 版本中有兩種主流高可用設(shè)計,分別是主備模式的無切換架構(gòu)和基于 Raft 的多副本架構(gòu)(圖中左側(cè)和右側(cè)所示)。生產(chǎn)實踐中我們發(fā)現(xiàn),兩副本的冷備模式下備節(jié)點資源利用率低,主宕機時特殊類型消息存在可用性問題;而 Raft 高度串行化,基于多數(shù)派的確認機制在擴展只讀副本時不夠靈活,無法很好的支持兩機房對等部署,異地多中心等復(fù)雜場景。RocketMQ v5 版本融合了上述方案的優(yōu)勢,提出 DLedger Controller 作為管控節(jié)點(中間部分所示),將選舉邏輯插件化并優(yōu)化了數(shù)據(jù)復(fù)制的實現(xiàn)。

如何實現(xiàn)高可用系統(tǒng)

副本組與數(shù)據(jù)分片

在 Primary-Backup 架構(gòu)的分布式系統(tǒng)中,一份數(shù)據(jù)將被復(fù)制成多個副本來避免數(shù)據(jù)丟失。處理相同數(shù)據(jù)的一組節(jié)點被稱為副本組(ReplicaSet),副本組的粒度可以是單個文件級別的(例如 HDFS),也可以是分區(qū)級 / 隊列級的(例如 Kafka),每個真實存儲節(jié)點上可以容納若干個不同副本組的副本,也可以像 RocketMQ 一樣粗粒度的獨占節(jié)點。獨占能夠顯著簡化數(shù)據(jù)寫入時確保持久化成功的復(fù)雜度,因為每個副本組上只有主副本會響應(yīng)讀寫請求,備機一般配置只讀來提供均衡讀負載,選舉這件事兒等價于讓副本組內(nèi)一個副本持有獨占的寫鎖。


(資料圖)

RocketMQ 為每個存儲數(shù)據(jù)的 Broker 節(jié)點配置 ClusterName,BrokerName 標識來更好的進行資源管理。多個 BrokerName 相同的節(jié)點構(gòu)成一個副本組。每個副本還擁有一個從 0 開始編號,不重復(fù)也不一定連續(xù)的 BrokerId 用來表示身份,編號為 0 的節(jié)點是這個副本組的 Leader / Primary / Master,故障時通過選舉來重新對 Broker 編號標識新的身份。例如 BrokerId = {0, 1, 3},則 0 為主,其他兩個為備。

一個副本組內(nèi),節(jié)點間共享數(shù)據(jù)的方式有多種,資源的共享程度由低到高來說一般有 Shared Nothing,Shared Disk,Shared Memory,Shared EveryThing。典型的 Shared Nothing 架構(gòu)是 TiDB 這類純分布式的數(shù)據(jù)庫,TiDB 在每個存儲節(jié)點上使用基于 RocksDB 封裝的 TiKV 進行數(shù)據(jù)存儲,上層通過協(xié)議交互實現(xiàn)事務(wù)或者 MVCC。相比于傳統(tǒng)的分庫分表策略來說,TiKV 易用性和靈活程度很高,更容易解決數(shù)據(jù)熱點與伸縮時數(shù)據(jù)打散的一系列問題,但實現(xiàn)跨多節(jié)點的事務(wù)就需要涉及到多次網(wǎng)絡(luò)的通信。另一端 Shared EveryThing 的案例是 AWS 的 Aurora,Aliyun 的 PolarStore,旁路 Kernal 的方式使應(yīng)用完全運行于用戶態(tài),以最大程度的存儲復(fù)用來減少資源消耗,一主多備完全共用一份底層可靠的存儲,實現(xiàn)一寫多讀,快速切換。

大多數(shù) KV 操作都是通過關(guān)鍵字的一致性哈希來計算所分配的節(jié)點,當(dāng)這個節(jié)點所在的主副本組產(chǎn)生存儲抖動,主備切換,網(wǎng)絡(luò)分區(qū)等情況下,這個分片所對應(yīng)的所有鍵都無法更新,局部會有一些操作失敗。消息系統(tǒng)的模型有所不同,流量大但跨副本組的數(shù)據(jù)交互極少,無序消息發(fā)送到預(yù)期分區(qū)失敗時還可以向其他副本組(分片)寫入,一個副本組的故障不影響全局,這在整體服務(wù)的層面上額外提供了跨副本組的可用性。此外,考慮到 MQ 作為 Paas 層產(chǎn)品,被廣泛部署于 Windows,Linux on Arm 等各種環(huán)境,只有減少和 Iaas 層產(chǎn)品的深度綁定,才能提供更好的靈活性。這種局部故障隔離和輕依賴的特性是 RocketMQ 選則 Shared Nothing 模型重要原因。

副本組中,各個節(jié)點處理的速度不同,也就有了日志水位的概念。Master 和與其差距不大的 Slave 共同組成了同步副本集(SyncStateSet)。如何定義差距不大呢?衡量的指標可以是日志水位(文件大小)差距較小,也可以是備落后的時間在一定范圍內(nèi)。在主宕機時,同步副本集中的其余節(jié)點有機會被提升為主,有時需要對系統(tǒng)進行容災(zāi)演練,或者對某些機器進行維護或灰度升級時希望定向的切換某一個副本成為新主,這又產(chǎn)生了優(yōu)先副本(PriorityReplica)的概念。選擇優(yōu)先副本的原則和策略很多,可以動態(tài)選擇水位最高,加入時間最久或 CommitLog 最長的副本,也可以支持機架,可用區(qū)優(yōu)先這類靜態(tài)策略。

從模型的角度來看,RocketMQ 單節(jié)點上 Topic 數(shù)量較多,如果像 kafka 以 topic / partition 粒度維護狀態(tài)機,節(jié)點宕機會導(dǎo)致上萬個狀態(tài)機切換,這種驚群效應(yīng)會帶來很多潛在風(fēng)險,因此 v4 版本時 RocketMQ 選擇以單個 Broker 作為切換的最小粒度來管理,相比于其他更細粒度的實現(xiàn),副本身份切換時只需要重分配 Broker 編號,對元數(shù)據(jù)節(jié)點壓力最小。由于通信的數(shù)據(jù)量少,可以加快主備切換的速度,單個副本下線的影響被限制在副本組內(nèi),減少管理和運維成本。這種實現(xiàn)也一些缺點,例如存儲節(jié)點的負載無法以最佳狀態(tài)在集群上進行負載均衡,Topic 與存儲節(jié)點本身的耦合度較高,水平擴展一般會改變分區(qū)總數(shù),這就需要在上層附加額外的處理邏輯。

為了更規(guī)范更準確的衡量副本組的可用性指標,學(xué)術(shù)上就引入了幾個名詞:

  • RTO(Recovery Time Objective)恢復(fù)時間目標,一般表示業(yè)務(wù)中斷到恢復(fù)的時間。
  • RPO(Recovery Point Object)恢復(fù)點目標,用于衡量業(yè)務(wù)連續(xù)性。例如某個硬盤每天備份,故障時丟失最近備份后的所有更新。
  • SLA(Service-Level Agreement)服務(wù)等級協(xié)議,廠商以合約的形式對用戶進行服務(wù)質(zhì)量承諾,SLA 越高通常成本也越高。

節(jié)點數(shù)量與可靠性關(guān)系密切,根據(jù)不同生產(chǎn)場景,RocketMQ 的一個副本組可能會有 1,2,3,5 個副本。

  1. 單副本成本最低,維護最簡單,宕機時其他副本組接管新消息的寫入,但已寫入的數(shù)據(jù)無法讀取,造成部分消息消費延遲。底層硬件故障還可能導(dǎo)致數(shù)據(jù)永久丟失,一般用于非關(guān)鍵日志,數(shù)據(jù)采集等低可靠性成本訴求較強的場景。
  2. 兩副本較好的權(quán)衡了數(shù)據(jù)冗余的成本與性能,RocketMQ 跨副本組容災(zāi)的特性使得兩副本模式適用于絕大部分 IOPS 比較高的場景。此時備機可以分攤一定的讀壓力(尤其是主副本由于內(nèi)存緊張或者產(chǎn)生冷讀時)。兩副本由于不滿足多數(shù)派(quorum)原則,沒有外部系統(tǒng)的參與時,故障時無法進行選舉切換。
  3. 三副本和五副本是業(yè)界使用最為廣泛的,精心設(shè)計的算法使得多數(shù)情況下系統(tǒng)可以自愈。基于 Paxos / Raft 屬于犧牲高可用性來保證一致性的 CP 型設(shè)計,存儲成本很高,容易受到 IO 分布不均勻和水桶效應(yīng)的影響。每條數(shù)據(jù)都需要半數(shù)以上副本響應(yīng)的設(shè)計在需要寫透(write through)多副本的消息場景下不夠靈活。

日志復(fù)制還是消息復(fù)制

如何保證副本組中數(shù)據(jù)的最終一致性?那肯定是通過數(shù)據(jù)復(fù)制的方式實現(xiàn),我們該選擇邏輯復(fù)制還是物理復(fù)制呢?

邏輯復(fù)制:使用消息來進行同步的場景也很多,各種 connector 實現(xiàn)本質(zhì)上就是把消息從一個系統(tǒng)挪到另外一個系統(tǒng)上,例如將數(shù)據(jù)導(dǎo)入導(dǎo)出到 ES,F(xiàn)link 這樣的系統(tǒng)上進行分析,根據(jù)業(yè)務(wù)需要選擇特定 Topic / Tag 進行同步,靈活程度和可擴展性非常高。這種方案隨著 Topic 增多,系統(tǒng)還會有服務(wù)發(fā)現(xiàn),位點和心跳管理等上層實現(xiàn)造成的性能損失。因此對于消息同步的場景,RocketMQ 也支持以消息路由的形式進行數(shù)據(jù)轉(zhuǎn)移,將消息復(fù)制作為業(yè)務(wù)消費的特例來看待。

物理復(fù)制:大名鼎鼎的 MySQL 對于操作會記錄邏輯日志(bin log)和重做日志(redo log)兩種日志。其中 bin log 記錄了語句的原始邏輯,比如修改某一行某個字段,redo log 屬于物理日志,記錄了哪個表空間哪個數(shù)據(jù)頁改了什么。在 RocketMQ 的場景下,存儲層的 CommitLog 通過鏈表和內(nèi)核的 MappedFile 機制抽象出一條 append only 的數(shù)據(jù)流。主副本將未提交的消息按序傳輸給其他副本(相當(dāng)于 redo log),并根據(jù)一定規(guī)則計算確認位點(confirm offset)判斷日志流是否被提交。這種方案僅使用一份日志和位點就可以保證主備之間預(yù)寫日志的一致性,簡化復(fù)制實現(xiàn)的同時也提高了性能。

為了可用性而設(shè)計的多副本結(jié)構(gòu),很明顯是需要對所有需要持久化的數(shù)據(jù)進行復(fù)制的,選擇物理復(fù)制更加節(jié)省資源。RocketMQ 在物理復(fù)制時又是如何保證數(shù)據(jù)的最終一致性呢?這就涉及到數(shù)據(jù)的水位對齊。對于消息和流這樣近似 FIFO 的系統(tǒng)來說,越近期的消息價值越高,消息系統(tǒng)的副本組的單個節(jié)點不會像數(shù)據(jù)庫系統(tǒng)一樣,保留這個副本的全量數(shù)據(jù),Broker 一方面不斷的將冷數(shù)據(jù)規(guī)整并轉(zhuǎn)入低頻介質(zhì)來節(jié)約成本,同時對熱數(shù)據(jù)盤上的數(shù)據(jù)也會由遠及近滾動刪除。如果副本組中有副本宕機較久,或者在備份重建等場景下就會出現(xiàn)日志流的不對齊和分叉的復(fù)雜情況。在下圖中我們將主節(jié)點的 CommitLog 的首尾位點作為參考點,這樣就可以劃分出三個區(qū)間。在下圖中以藍色箭頭表示。排列組合一下就可以證明備機此時的 CommitLog 一定滿足下列 6 種情況之一。

下面對每種情況進行討論與分析:

  • 1-1 情況下滿足備 Max <= 主 Min,一般是備新上線或下線較久,備跳過存量日志,從主的 Min 開始復(fù)制。
  • 1-2,2-2 兩種情況下滿足 主 Min < 備 Max <= 主 Max,一般是由于備網(wǎng)絡(luò)閃斷導(dǎo)致日志水位落后,通過 HA 連接追隨主即可。
  • 1-3,2-3 兩種情況下備 Max > 主 Max,可能由于主異步寫磁盤宕機后又成為主,或者網(wǎng)絡(luò)分區(qū)時雙主寫入造成 CommitLog 分叉。由于新主落后于備,少量未確認的消息丟失,非正常模式的選舉(RocketMQ 將這種情況稱為 unclean 選舉)是應(yīng)該盡量避免的。
  • 3-3 理論上不會出現(xiàn),備的數(shù)據(jù)長于主,原因可能是主節(jié)點數(shù)據(jù)丟失又疊加了非正常選舉,因此這種情況需要人工介入處理。

租約與節(jié)點身份變更

前文提到 RocketMQ 每個副本組的主副本才接受外部寫請求,節(jié)點的身份又是如何決定的呢?

分布式系統(tǒng)一般分為中心化架構(gòu)和去中心化架構(gòu)。對于 MultiRaft,每個副本組包含三個或者五個副本,副本組內(nèi)可以通過 Paxos / Raft 這樣的共識協(xié)議來進行選主。典型的中心化架構(gòu),為了節(jié)省數(shù)據(jù)面資源成本會部署兩副本,此時依賴于外部 ZK,ETCD,或者 DLedger Controller 這樣的組件作為中心節(jié)點進行選舉。由外置組件裁決成員身份涉及到分布式中兩個重要的問題:1. 如何判斷節(jié)點的狀態(tài)是否正常。2. 如何避免雙主問題。

對于第一個問題,kubernetes 的解決方案相對優(yōu)雅,k8s 對與 Pod 的健康檢查包括存活檢測(Liveness probes)和就緒檢測(Readiness probes),Liveness probes 主要是探測應(yīng)用是否還活著,失敗時重啟 Pod。Readiness probes 來判斷探測應(yīng)用是否接受流量。簡單的心跳機制一般只能實現(xiàn)存活檢測,來看一個例子:假設(shè)有副本組中有 A、B、C 三個副本,另有一個節(jié)點 Q(哨兵) 負責(zé)觀測節(jié)點狀態(tài),同時承擔(dān)了全局選舉與狀態(tài)維護的職責(zé)。節(jié)點 A、B、C 周期性的向 Q 發(fā)送心跳,如果 Q 超過一段時間(一般是兩個心跳間隔 )收不到某個節(jié)點的心跳則認為這個節(jié)點異常。如果異常的是主副本,Q 將副本組的其他副本提升為主并廣播告知其他副本。

在工程實踐中,節(jié)點下線的可能性一般要小于網(wǎng)絡(luò)抖動的可能性。我們假設(shè)節(jié)點 A 是副本組的主,節(jié)點 Q 與節(jié)點 A 之間的網(wǎng)絡(luò)中斷。節(jié)點 Q 認為 A 異常。重新選擇節(jié)點 B 作為新的 Master,并通知節(jié)點 A、B、C 新的 Master 是節(jié)點 B。節(jié)點 A 本身工作正常,與節(jié)點 B、C 之間的網(wǎng)絡(luò)也正常。由于節(jié)點 Q 的通知事件到達節(jié)點 A、B、C 的順序是未知的,假如先達到 B,在這一時刻,系統(tǒng)中同時存在兩個工作的主,一個是 A,另一個是 B。假如此時 A、B 都接收外部請求并與 C 同步數(shù)據(jù),會產(chǎn)生嚴重的數(shù)據(jù)錯誤。上述 "雙主" 問題出現(xiàn)的原因在于雖然節(jié)點 Q 認為節(jié)點 A 異常,但節(jié)點 A 自己不認為自己異常,在舊主新主都接受寫入的時候就產(chǎn)生了日志流的分叉,其問題的本質(zhì)是由于網(wǎng)絡(luò)分區(qū)造成的系統(tǒng)對于節(jié)點狀態(tài)沒有達成一致。

租約是一種避免雙主的有效手段,租約的典型含義是現(xiàn)在中心節(jié)點承認哪個節(jié)點為主,并允許節(jié)點在租約有效期內(nèi)正常工作。如果節(jié)點 Q 希望切換新的主,只需等待前一個主的租約過期,則就可以安全的頒發(fā)新租約給新 Master 節(jié)點,而不會出現(xiàn)雙主問題。這種情況下系統(tǒng)對 Q 本身的可用性訴求非常高,可能會成為集群的性能瓶頸。生產(chǎn)中使用租約還有很多實現(xiàn)細節(jié),例如依賴時鐘同步需要頒發(fā)者的有效期設(shè)置的比接收者的略大,頒發(fā)者本身的切換也較為復(fù)雜。

在 RocketMQ 的設(shè)計中,希望以一種去中心化的設(shè)計降低中心節(jié)點宕機帶來的全局風(fēng)險,(這里認為中心化和是否存在中心節(jié)點是兩件事)所以沒有引入租約機制。在 Controller (對應(yīng)于 Q )崩潰恢復(fù)期間,由于 Broker 對自己身份會進行永久緩存,每個主副本會管理這個副本組的狀態(tài)機,RocketMQ Dledger Controller 這種模式能夠盡量保證在大部分副本組在哨兵組件不可用時仍然不影響收發(fā)消息的核心流程。而舊主由于永久緩存身份,無法降級導(dǎo)致了網(wǎng)絡(luò)分區(qū)時系統(tǒng)必須容忍雙主。產(chǎn)生了多種解決方案,用戶可以通過預(yù)配置選擇 AP 型可用性優(yōu)先,即允許系統(tǒng)通過短時分叉來保障服務(wù)連續(xù)性(下文還會繼續(xù)談?wù)劄槭裁聪⑾到y(tǒng)中分叉很難避免),還是 CP 型一致性優(yōu)先,通過配置最小副本 ack 數(shù)超過集群半數(shù)以上節(jié)點。此時發(fā)送到舊主的消息將因為無法通過 ha 鏈路將數(shù)據(jù)發(fā)送給備,向客戶端返回超時,由客戶端將發(fā)起重試到其他分片。客戶端經(jīng)歷一個服務(wù)發(fā)現(xiàn)的周期之后,客戶端就可以正確發(fā)現(xiàn)新主。

特別的,在網(wǎng)絡(luò)分區(qū)的情況下,例如舊主和備,Controller 之間產(chǎn)生網(wǎng)絡(luò)分區(qū),此時由于沒有引入租約機制,舊主不會自動降級,舊主可以配置為異步雙寫,每一條消息需要經(jīng)過主備的雙重確認才能向客戶端返回成功。而備在切換為主時,會設(shè)置自己只需要單個副本確認的同步寫盤模式。此時,客戶端短時間內(nèi)仍然可以向舊主發(fā)送消息,舊主需要兩副本確認才能返回成功,因此發(fā)送到舊主的消息會返回 SLAVE_NOT_AVAILABLE 的超時響應(yīng),通過客戶端重試將消息發(fā)往新的節(jié)點。幾秒后,客戶端從 NameServer / Controller 獲取新的路由時,舊主從客戶端緩存中移除,此時完成了備節(jié)點的提升。

外置的組件可以對節(jié)點身份進行分配,上圖展示了一個兩副本的副本組上線流程:

  1. 多個 Controller 通過選舉和對 Broker 的請求進行重定向,最終由一個 Controller 做為主節(jié)點進行身份分配。
  2. 如果 RocketMQ 副本組存在多個副本且需要選主,節(jié)點默認以備的身份啟動,備節(jié)點會將自己注冊到 Controller。
  3. 節(jié)點從 Controller 獲取 BrokerMemberGroup,包含了這個副本組的描述和連接信息。
    1. 若分配的身份為備,解析出主節(jié)點的對外服務(wù)的地址并連接,完成日志截斷后進行 HA 同步。
    2. 若分配的身份為主,等待備機連接到自身的 HA 端口,并向 NameServer 再次宣告自己是主節(jié)點。
  1. 主節(jié)點維護整個副本組的信息,向備發(fā)起數(shù)據(jù)復(fù)制,周期性的向 Controller 匯報主備之間水位差距,復(fù)制速度等。

RocketMQ 弱依賴 Controller 的實現(xiàn)并不會打破 Raft 中每個 term 最多只有一個 leader 的假設(shè),工程中一般會使用 Leader Lease 解決臟讀的問題,配合 Leader Stickiness 解決頻繁切換的問題,保證主的唯一性。

  • Leader Lease: 租約,上一任 Leader 的 Lease 過期后,等待一段時間再發(fā)起 Leader 選舉。
  • Leader Stickiness:Leader Lease 未過期的 Follower 拒絕新的 Leader 選舉請求。

注:Raft 認為具有最新已提交的日志的節(jié)點才有資格成為 Leader,而 Multi-Paxos 無此限制。

對于日志的連續(xù)性問題,Raft 在確認一條日志之前會通過位點檢查日志連續(xù)性,若檢查到日志不連續(xù)會拒絕此日志,保證日志連續(xù)性,Multi-Paxos 允許日志中有空洞。Raft 在 AppendEntries 中會攜帶 Leader 的 commit index,一旦日志形成多數(shù)派,Leader 更新本地的 commit index(對應(yīng)于 RocketMQ 的 confirm offset)即完成提交,下一條 AppendEntries 會攜帶新的 commit index 通知其它節(jié)點,Multi-Paxos 沒有日志連接性假設(shè),需要額外的 commit 消息通知其它節(jié)點。

計算日志分叉位點

除了網(wǎng)絡(luò)分區(qū),很多情況導(dǎo)致日志數(shù)據(jù)流分叉。有如下案例:三副本采用異步復(fù)制,異步持久化,A 為舊主 B C 為備,切換瞬間 B 日志水位大于 C,此時 C 成為新主,B C 副本上的數(shù)據(jù)會產(chǎn)生分叉,因為 B 還多出了一段未確認的數(shù)據(jù)。那么 B 是如何以一個簡單可靠的方法去判斷自己和 C 數(shù)據(jù)分叉的位點?

一個直觀的想法就是,直接將主備的 CommitLog 從前向后逐漸字節(jié)比較,一般生產(chǎn)環(huán)境下,主備都有數(shù)百 GB 的日志文件流,讀取和傳輸大量數(shù)據(jù)的方案費時費力。很快我們發(fā)現(xiàn),確定兩個大文件是否相同的一個好辦法就是比較數(shù)據(jù)的哈希值,需要對比的數(shù)據(jù)量一下子就從數(shù)百 GB 降低為了幾百個哈希值,對于第一個不相同的 CommitLog 文件,還可以采取局部哈希的方式對齊,這里仍然存在一些計算的代價。還有沒有優(yōu)化的空間呢,那就是利用任期 Epoch 和偏移量 StartOffset 實現(xiàn)一個新的截斷算法。這種 Epoch-StartOffset 滿足如下原則:

  1. 通過共識協(xié)議保證給定的一個任期 Epoch 只有一個Leader。
  2. 只有 Leader 可以寫入新的數(shù)據(jù)流,滿足一定條件才會被提交。
  3. Follower 只能從 Leader 獲取最新的數(shù)據(jù)流,F(xiàn)ollower 上線時按照選舉算法進行截斷。

下面是一個選舉截斷的具體案例,選舉截斷算法思想和流程如下:

主 CommitLog Min = 300,Max = 2500,EpochMap = {<6, 200>, <7, 1200>, <8,2500>}備 CommitLog Min = 300,Max = 2500,EpochMap = {<6, 200>, <7, 1200>, <8,2250>}

  1. 備節(jié)點連接到主節(jié)點進行 HA 協(xié)商,獲取主節(jié)點的 Epoch-StartOffset 信息并比較
  2. 備從后向前找到任期-起始點相同的那個點作為分叉任期,在上述案例里是 <8,2250>
  3. 選擇這個任期里主備結(jié)束位點的最小值(如果主副本沒有切換且為最大任期,則主副本的結(jié)束位點是無窮大)

實現(xiàn)的代碼如下:

public long findLastConsistentPoint(final EpochStore compareEpoch) {    long consistentOffset = -1L;    final Map descendingMap = new TreeMap<>(this.epochMap).descendingMap();    for (Map.Entry curLocalEntry : descendingMap.entrySet()) {      final EpochEntry compareEntry = compareEpoch.findEpochEntryByEpoch(curLocalEntry.getKey());      if (compareEntry != null &&        compareEntry.getStartOffset() == curLocalEntry.getValue().getStartOffset()) {        consistentOffset = Math.min(curLocalEntry.getValue().getEndOffset(), compareEntry.getEndOffset());      break;      }    }    return consistentOffset;}

數(shù)據(jù)回發(fā)與日志截斷

故障發(fā)生后,系統(tǒng)將會對分叉數(shù)據(jù)進行修復(fù),有很多小小細節(jié)值得深究與探討。

在實現(xiàn)數(shù)據(jù)截斷的過程中,有一個很特殊的動作,當(dāng)備切主的時候要把 ConsumeQueue 的 Confirm Offset 提升到 CommitLog 的 MaxPhyOffset,即使這一部分數(shù)據(jù)在主上是否被提交是未知的?;叵肫饚啄昵翱?Raft 的時候,當(dāng)一條日志被傳輸?shù)?Follower,F(xiàn)ollower 確認收到這條消息,主再把這條日志應(yīng)用到自己的狀態(tài)機時,通知客戶端和通知所有的 follower 去 commit 這條日志這兩件事是并行的,假如 leader 先回復(fù) client 處理成功,此時 leader 掛了,由于其他 follower 的確認位點 confirm offset 一般會略低于 leader,中間這段未決日志還沒應(yīng)用到 follower 的狀態(tài)機上,這時就出現(xiàn)了狀態(tài)機不一致的情況,即已經(jīng)寫入 leader 的數(shù)據(jù)丟失了。讓我們來舉一個具體的案例,假設(shè)兩副本一主一備:

  1. 主的 max offset = 100,主向備發(fā)送當(dāng)前 confirm offset = 40 和 message buffer = [40-100] 的數(shù)據(jù)
  2. 備向主回復(fù) confirm offset = 100 后主需要同時做幾件事
    1. 本地提交(apply) [40-100] 區(qū)間的數(shù)據(jù),用后臺的 dispatch 線程異步構(gòu)建這段數(shù)據(jù)的索引
    2. 向 producer 響應(yīng) [40-100] 這段數(shù)據(jù)是發(fā)送成功的。
    3. 向多個備機異步的提交,實際上是發(fā)送了 confirm offset = 100
  1. 此時主突然宕機,備機的 confirm offset 可能是 [40-100] 中的值

所以當(dāng)備切換為主的時候,如果直接以 40 進行截斷,意味著客戶端已經(jīng)發(fā)送到服務(wù)端的消息丟失了,正確的水位應(yīng)該被提升至 100。但是備還沒有收到 2.3 的 confirm = 100 的信息,這個行為相當(dāng)于要提交了未決消息。事實上新 leader 會遵守 "Leader Completeness" 的約定,切換時任何副本都不會刪除也不會更改舊 leader 未決的 entry。新 leader 在新的 term 下,會直接應(yīng)用一個較大的版本將未決的 entry 一起提交,這里副本組主備節(jié)點的行為共同保證了復(fù)制狀態(tài)機的安全性。

那么備切換成功的標志是什么,什么時候才能接收 producer 新的流量呢?對于 Raft 來說一旦切換就可以,對于 RocketMQ 來說這個階段會被稍稍推遲,即索引已經(jīng)完全構(gòu)建結(jié)束的時候。RocketMQ 為了保證構(gòu)建 consume queue 的一致性,會在 CommitLog 中記錄 consume queue offset 的偏移量,此時 confirm offset 到 max offset 間的數(shù)據(jù)是副本作為備來接收的,這部分消息在 consume queue 中的偏移量已經(jīng)固定下來了,而 producer 新的流量時由于 RocketMQ 預(yù)計算位點的優(yōu)化,等到消息實際放入 CommitLog 的再真實的數(shù)據(jù)分發(fā)(dispatch)的時候就會發(fā)現(xiàn)對應(yīng)位置的 consume queue 已經(jīng)被占用了,此時就造成了主備索引數(shù)據(jù)不一致。本質(zhì)原因是 RocketMQ 存儲層預(yù)構(gòu)建索引的優(yōu)化對日志有一些侵入性,但切換時短暫等待的代價遠遠小于正常運行時提速的收益。

消息中間件場景

a. 元數(shù)據(jù)變更是否依賴于日志

目前 RocketMQ 對于元數(shù)據(jù)是在內(nèi)存中單獨管理的,備機間隔 5 秒向當(dāng)前的主節(jié)點同步數(shù)據(jù)。例如當(dāng)前主節(jié)點上創(chuàng)建了一個臨時 Topic 并接受了一條消息,在一個同步周期內(nèi)這個 Topic 又被刪除了,此時主備節(jié)點元數(shù)據(jù)可能不一致。又比如位點更新的時候,對于單個隊列而言,多副本架構(gòu)中存在多條消費位點更新鏈路,Consumer 拉取消息時更新,Consumer 主動向 broker 更新,管控重置位點,HA 鏈路更新,當(dāng)副本組發(fā)生主備切換時,consumer group 同時發(fā)生 consumer 上下線,由于路由發(fā)現(xiàn)的時間差,還可能造成同一個消費組兩個不同 consumer 分別消費同一副本組主備上同一個隊列的情況。

原因在于備機重做元數(shù)據(jù)更新和消息流這兩件事是異步的,這有一定概率會造成臟數(shù)據(jù)。由于 RocketMQ 單個節(jié)點上 Topic / Group 數(shù)量較多,通過日志的實現(xiàn)會導(dǎo)致持久化的數(shù)據(jù)量很大,在復(fù)雜場景下基于日志做回滾依賴 snapshot 機制也會增加計算開銷和恢復(fù)時間。這個問題和數(shù)據(jù)庫很像,MySQL 在執(zhí)行 DDL 修改元數(shù)據(jù)時通過會創(chuàng)建 MDL 鎖,阻塞用戶其他操作訪問表空間的訪問。備庫同步主庫也會加鎖,元數(shù)據(jù)修改開始點和結(jié)束點所代表的兩個日志并不是一個原子操作,這意味著主庫上在修改元數(shù)據(jù)的過程中如果宕機了,備庫上持有的 MDL 鎖就無法釋放。MySQL 的解決方案是在主庫每次崩潰恢復(fù)后,都寫一條特殊的日志,通知所有連接的備庫釋放其持有的所有 MDL 排他鎖。對所有操作都走日志流進行狀態(tài)機復(fù)制要求存儲層有多種日志類型,實現(xiàn)也更加復(fù)雜。RocketMQ 選擇以另一種同步的模式操作,即類似 ZAB 這樣二階段協(xié)議,例如位點更新時的可以選擇配置 LockInStrictMode 讓備都同步這條修改。事實上 RocketMQ 為了優(yōu)化上述位點跳躍的現(xiàn)象,客戶端在未重啟時,遇到服務(wù)端主備切換還會用優(yōu)先采納本地位點的方式獲取消息,進一步減少重復(fù)消費。

b. 同步復(fù)制與異步復(fù)制

同步復(fù)制的含義是用戶的一個操作在多個副本上都已經(jīng)提交。正常情況下,假設(shè)一個副本組中的 3 個副本都要對相同一個請求進行確認,相當(dāng)于數(shù)據(jù)寫透 3 個副本(簡稱 3-3 寫),3-3 寫提供了非常高的數(shù)據(jù)可靠性,但是把所有從節(jié)點都配置為同步復(fù)制時任何一個同步節(jié)點的中斷都會導(dǎo)致整個副本組處理請求失敗。當(dāng)?shù)谌齻€副本是跨可用區(qū)時,長尾也會帶來一定的延遲。

異步復(fù)制模式下,尚未復(fù)制到從節(jié)點的寫請求都會丟失。向客戶端確認的寫操作也無法保證被持久化。異步復(fù)制是一種故障時 RPO 不為 0的配置模式,由于不用考慮從節(jié)點上的狀態(tài),總是可以繼續(xù)響應(yīng)寫請求,系統(tǒng)的延遲更低,吞吐性能更好。為了權(quán)衡兩者,通常只有其中一個從節(jié)點是同步的,而其他節(jié)點是異步的模式。只要同步的從節(jié)點變得不可用或性能下降,則將另一個異步的從節(jié)點提升為同步模式。這樣可以保證至少有兩個節(jié)點(即主節(jié)點和一個同步從節(jié)點)擁有最新的數(shù)據(jù)副本。這種模式稱為 2-3 寫,能幫助避免抖動,提供更好的延遲穩(wěn)定性,有時候也叫稱為半同步。

在 RocketMQ 的場景中,異步復(fù)制也被廣泛應(yīng)用在消息讀寫比極高,從節(jié)點數(shù)量多或者異地多副本場景。同步復(fù)制和異步復(fù)制是通過 Broker 配置文件里的 brokerRole 參數(shù)進行設(shè)置的,這個參數(shù)可以被設(shè)置成 ASYNC_MASTER、SYNC_MASTER、SLAVE 三個值中的一個。實際應(yīng)用中要結(jié)合業(yè)務(wù)場景合理設(shè)置持久化方式和主從復(fù)制方式,通常,由于網(wǎng)絡(luò)的速度高于本地 IO 速度,采用異步持久化和同步復(fù)制是一個權(quán)衡性能與可靠性的設(shè)置。

c. 副本組自適應(yīng)降級

同步復(fù)制的含義是一條數(shù)據(jù)同時被主備確認才返回用戶操作成功,可以保證主宕機后消息還在備中,適合可靠性要求較高的場景,同步復(fù)制還可以限制未同步的數(shù)據(jù)量以減少 ha 鏈路的內(nèi)存壓力,缺點則是副本組中的某一個備出現(xiàn)假死就會影響寫入。異步復(fù)制無需等待備確認,性能高于同步復(fù)制,切換時未提交的消息可能會丟失(參考前文的日志分叉)。在三副本甚至五副本且對可靠性要求高的場景中無法采用異步復(fù)制,采用同步復(fù)制需要每一個副本確認后才會返回,在副本數(shù)多的情況下嚴重影響效率。關(guān)于一條消息需要被多少副本確認這個問題,RocketMQ 服務(wù)端會有一些數(shù)量上的配置來進行靈活調(diào)整:

  • TotalReplicas:全部副本數(shù)
  • InSyncReplicas:每條消息至少要被這個數(shù)量的 Broker 確認(如果主為 ASYNC_MASTER 或者 AllAck 模式則該參數(shù)不生效)
  • MinInSyncReplicas:最小的同步副本數(shù),如果 InSyncReplicas < MinInSyncReplicas 會對客戶端快速失敗
  • AllAckInSyncStateSet:主確認持久化成功,為 true 表示需要 SyncStateSet 中所有備確認。

因此,RocketMQ 提出了副本組在同步復(fù)制的模式下,也可以支持副本組的自適應(yīng)降級(參數(shù)名稱為 enableAutoInSyncReplicas)來適配消息的特殊場景。當(dāng)副本組中存活的副本數(shù)減少或日志流水位差距過大時進行自動降級,最小降級到 minInSyncReplicas 副本數(shù)。比如在兩副本下配置 。對于正常情況下,兩個副本會處于同步復(fù)制,當(dāng)備下線或假死時,會進行自適應(yīng)降級,保證主節(jié)點還能正常收發(fā)消息,這個功能為用戶提供了一個可用性優(yōu)先的選擇。

d. 輕量級心跳與快速隔離

在 RocketMQ v4.x 版本的實現(xiàn)中,Broker 周期性的(間隔 30 秒)將自身的所有 Topic 序列化并傳輸?shù)?NameServer 注冊進行?;睢S捎?Broker 上 Topic 的元數(shù)據(jù)規(guī)模較大,帶來了較大的網(wǎng)絡(luò)流量開銷,Broker 的注冊間隔不能設(shè)置的太短。同時 NameServer 對 Broker 是采取延遲隔離機制,防止 NameServer 網(wǎng)絡(luò)抖動時可能瞬間移除所有 Broker 的注冊信息,引發(fā)服務(wù)的雪崩。默認情況下異常主宕機時超過 2 分鐘,或者備切換為主重新注冊后才會替換。容錯設(shè)計的同時導(dǎo)致 Broker 故障轉(zhuǎn)移緩慢,RocketMQ v5.0 版本引入輕量級心跳(參數(shù)liteHeartBeat),將 Broker 的注冊行為與 NameServer 的心跳進行了邏輯拆分,將心跳間隔減小到 1 秒。當(dāng) NameServer 間隔 5 秒(可配置)沒有收到來自 Broker 的心跳請求就對 Broker 進行移除,使異常場景下自愈的時間從分鐘級縮短到了秒級。

RocketMQ 高可用架構(gòu)演進路線

無切換架構(gòu)的演進

最早的時候,RocketMQ 基于 Master-Slave 模式提供了主備部署的架構(gòu),這種模式提供了一定的高可用能力,在 Master 節(jié)點負載較高情況下,讀流量可以被重定向到備機。由于沒有選主機制,在 Master 節(jié)點不可用時,這個副本組的消息發(fā)送將會完全中斷,還會出現(xiàn)延遲消息、事務(wù)消息、Pop 消息等二級消息無法消費或者延遲。此外,備機在正常工作場景下資源使用率較低,造成一定的資源浪費。為了解決這些問題,社區(qū)提出了在一個 Broker 進程內(nèi)運行多個 BrokerContainer,這個設(shè)計類似于 Flink 的 slot,讓一個 Broker 進程上可以以 Container 的形式運行多個節(jié)點,復(fù)用傳輸層的連接,業(yè)務(wù)線程池等資源,通過單節(jié)點主備交叉部署來同時承擔(dān)多份流量,無外部依賴,自愈能力強。這種方式下隔離性弱于使用原生容器方式進行隔離,同時由于架構(gòu)的復(fù)雜度增加導(dǎo)致了自愈流程較為復(fù)雜。

切換架構(gòu)的演進

另一條演進路線則是基于可切換的,RocketMQ 也嘗試過依托于 Zookeeper 的分布式鎖和通知機制進行 HA 狀態(tài)的管理。引入外部依賴的同時給架構(gòu)帶來了復(fù)雜性,不容易做小型化部署,部署運維和診斷的成本較高。另一種方式就是基于 Raft 在集群內(nèi)自動選主,Raft 中的副本身份被透出和復(fù)用到 Broker Role 層面去除外部依賴,然而強一致的 Raft 版本并未支持靈活的降級策略,無法在 C 和 A 之間靈活調(diào)整。兩種切換方案都是 CP 設(shè)計,犧牲高可用優(yōu)先保證一致性。主副本下線時選主和路由定時更新策略導(dǎo)致整個故障轉(zhuǎn)移時間依然較長,Raft 本身對三副本的要求也會面臨較大的成本壓力,RocketMQ 原生的 TransientPool,零拷貝等一些用來避免減少 IO 壓力的方案在 Raft 下無法有效使用。

RocketMQ DLedger 融合模式

RocketMQ DLedger 融合模式是 RocketMQ 5.0 演進中結(jié)合上述兩條路線后的一個系統(tǒng)的解決方案。核心的特性有以下幾點:

  1. 利用可內(nèi)嵌于 NameServer 的 Controller 進行選主,無外部依賴,對兩副本支持友好。
  2. 引入 Epoch-StartOffset 機制來計算日志分叉位點。
  3. 消息在進行寫入時,提供了靈活的配置來協(xié)調(diào)系統(tǒng)對于可用性還是一致性優(yōu)先的訴求。
  4. 簡化日志復(fù)制協(xié)議使得日志復(fù)制為高效。

幾種實現(xiàn)對比表如下:

與其他消息系統(tǒng)的對比

控制節(jié)點

  1. 是否強制要求選主Kafka 的 Controller 是 Broker 選舉產(chǎn)生,這需要有一個存儲節(jié)點間的服務(wù)發(fā)現(xiàn)機制。RocketMQ 的 Controller 可以作為管控節(jié)點單獨存在。對 Kafka,Pulsar 而言必須選擇主副本進行寫入,隨著時間的運行節(jié)點之間負載需要通過復(fù)雜的方案進行再均衡。對 RocketMQ 的融合架構(gòu)而言,由于選主是可選的,靜態(tài)布局的方案(例如無需依賴復(fù)雜的動態(tài)調(diào)度就可以較為均衡的實現(xiàn)跨機架跨可用區(qū)),并且無切換與切換架構(gòu)可以相互轉(zhuǎn)換。
  2. Controller 的邏輯復(fù)雜度RocketMQ Controller 相比 Kafka Controller 更加輕量,Kafka 的 Controller 承擔(dān) Partition 粒度的 ISR 維護和選舉等功能,而RocketMQ 的 Controller 維護的數(shù)據(jù)是副本組粒度的,對于元數(shù)據(jù)只維護節(jié)點身份,更加簡單。RocketMQ Controller 可以獨立部署,也可以內(nèi)嵌 NameServer 運行。
  3. Controller 依賴程度RocketMQ Broker 的同步副本集維護是 Master Broker 節(jié)點上報,由于不強依賴中心節(jié)點來提供租約,controller 宕機時雖然無法為同時有主故障的副本組選舉,但不影響絕大部分副本組可用性。Pulsar 中通過 fencing 機制防止有多個 writer(pulsar 中的計算節(jié)點稱為 broker)同時寫同一個 partition,是對外部有依賴的。

數(shù)據(jù)節(jié)點

  1. 副本存儲結(jié)構(gòu)的抽象與最小粒度不同,在這一點上其實三者的設(shè)計各有優(yōu)勢
    • Kafka 的存儲抽象粒度是 Partition,對每個分區(qū)進行維護多副本,擴容需要進行數(shù)據(jù)復(fù)制,對于冷讀支持更好。
    • RocketMQ 的日志流是 Broker 粒度的,順序?qū)懕P效率更高,在磁盤空間不足時一般選擇水平擴容,只需復(fù)制元數(shù)據(jù)。
    • Pulsar 其實抽象了一個分布式日志流 Journal,分區(qū)被進一步分成分片,根據(jù)配置的時間或大小進行滾動,擴容只需復(fù)制元數(shù)據(jù)。
  1. 復(fù)雜的參數(shù)配置被收斂至服務(wù)端Kafka 和 RocketMQ 都支持靈活的配置單條消息的 ack 數(shù),即權(quán)衡數(shù)據(jù)寫入靈活性與可靠性。RocketMQ 在向云原生演進的過程希望簡化客戶端 API 與配置,讓業(yè)務(wù)方只需關(guān)心消息本身,選擇在服務(wù)端配置統(tǒng)一配置這個值。
  2. 副本數(shù)據(jù)的同步方式不同Pulsar 采用星型寫:數(shù)據(jù)直接從 writer 寫到多個 bookeeper。適合客戶端與存儲節(jié)點混部場景。數(shù)據(jù)路徑只需要 1 跳,延遲更低。缺點是當(dāng)存儲計算分離時,星型寫需要更多的存儲集群和計算集群間網(wǎng)絡(luò)帶寬。RocketMQ 和 Kafka 采用 Y 型寫:client 先寫到一個主副本,由其再轉(zhuǎn)發(fā)給另外 Broker 副本。雖然服務(wù)端內(nèi)部帶寬充裕,但需要 2 跳網(wǎng)絡(luò),會增加延遲。Y 型寫利于解決文件多客戶端寫的問題,也更容易利用 2-3 寫克服毛刺,提供更好的延遲穩(wěn)定性。

高可用架構(gòu)的未來

仔細閱讀 RocketMQ 的源碼,其實大家也會發(fā)現(xiàn) RocketMQ 在各種邊緣問題處理上細節(jié)滿滿,節(jié)點失效,網(wǎng)絡(luò)抖動,副本一致性,持久化,可用性與延遲之間存在各種細微的權(quán)衡,這也是 RocketMQ 多年來在生產(chǎn)環(huán)境下所積累的核心競爭力之一。隨著分布式技術(shù)的進一步發(fā)展,更多更有意思的技術(shù),如基于 RDMA 網(wǎng)絡(luò)的復(fù)制協(xié)議也呼之欲出。RocketMQ 將與社區(qū)協(xié)同進步,發(fā)展為 “消息,事件,流” 一體化的融合平臺。

參考文檔:

  1. Paxos design

https://lamport.azurewebsites.net/pubs/paxos-simple.pdf

  1. SOFA-JRaft

https://github.com/sofastack/sofa-jraft

  1. Pulsar Geo Replication

https://pulsar.apache.org/zh-CN/docs/next/concepts-replication

  1. Pulsar Metadata

https://pulsar.apache.org/zh-CN/docs/next/administration-metadata-store

  1. Kafka Persistence

https://kafka.apache.org/documentation/#persistence

  1. Kafka Balancing leadership

https://kafka.apache.org/documentation/#basic_ops_leader_balancing

  1. Windows Azure Storage:A Highly Available Cloud Storage Service with Strong Consistency

https://azure.microsoft.com/en-us/blog/sosp-paper-windows-azure-storage-a-highly-available-cloud-storage-service-with-strong-consistency/

  1. PolarDB Serverless: A Cloud Native Database for Disaggregated Data Centers

https://www.cs.utah.edu/~lifeifei/papers/polardbserverless-sigmod21.pdf

RocketMQ 學(xué)習(xí)社區(qū)體驗地址

RocketMQ 學(xué)習(xí)社區(qū)重磅上線!AI 互動,一秒了解 RocketMQ 功能源碼。RocketMQ 學(xué)習(xí)社區(qū)是國內(nèi)首個基于 AIGC 提供的知識服務(wù)社區(qū),旨在成為 RocketMQ 學(xué)習(xí)路上的“貼身小二”。

PS:RocketMQ 社區(qū)以 RocketMQ 5.0 資料為主要訓(xùn)練內(nèi)容,持續(xù)優(yōu)化迭代中,回答內(nèi)容均由人工智能模型生成,其準確性和完整性無法保證,且不代表 RocketMQ 學(xué)習(xí)社區(qū)的態(tài)度或觀點。

點擊此處,立即體驗 RocketMQ 學(xué)習(xí)社區(qū)(建議 PC 端體驗完整功能)

標簽:

來源: 博客園 編輯: FN008
相關(guān)閱讀
  • 2023-06-29 16:21:52解讀 RocketMQ 5.0 全新的高可用設(shè)計
  • 2023-06-29 15:55:01世界播報:田沖_關(guān)于田沖介紹
  • 2023-06-29 15:33:55漫威新劇《秘密入侵》AI制作片頭引眾怒,業(yè)界群起抵制|環(huán)球今熱點
  • 2023-06-29 14:56:44伴讀 | 不擅長的事,不要做!|每日聚焦
  • 2023-06-29 14:19:54家長變身“跨界教師”登錄東師坪實課堂,帶領(lǐng)孩子們探索多重領(lǐng)域未知世界
  • 2023-06-29 13:46:30【環(huán)球快播報】偷偷藏不??!10萬人彈幕告白,優(yōu)酷成年輕人暗戀樹洞
  • 2023-06-29 13:12:12一片土是一幅畫,一座山是一首詩!信陽文旅局長邀你譜寫“詩與遠方”
  • 2023-06-29 12:51:12B站成立一級部門“交易生態(tài)中心” 原“電商事業(yè)部”更名為“會員購事業(yè)部” 精選
  • 2023-06-29 12:16:33賽爾號機械塔克林來襲(賽爾號機械塔克林)
  • 2023-06-29 11:43:38注意:強對流突襲申城!今天下午開始!
  • 2023-06-29 16:30:32環(huán)球時訊:環(huán)氧樹脂地面涂層材料標準規(guī)范jct1015-2006(環(huán)氧樹脂地面)
  • 2023-06-29 16:22:37長葛市:出真招實招為中小企業(yè)紓困解難
  • 2023-06-29 16:21:52解讀 RocketMQ 5.0 全新的高可用設(shè)計
  • 2023-06-29 16:16:20Talented Jiangsu youth overcomes adversity to score big on
  • 2023-06-29 16:12:36微速訊:蘇州“小修小補”探索經(jīng)營新模式
  • 2023-06-29 16:11:49麒盛科技: 麒盛科技股份有限公司前次募集資金使用情況專項報告_天天熱議
  • 2023-06-29 16:09:32內(nèi)賬怎么做_黑糯米粥怎么做_熱推薦
  • 2023-06-29 16:07:58池州移動:守護“銀發(fā)族”數(shù)字生活-當(dāng)前熱門
  • 2023-06-29 16:04:10今日聚焦!大和:予中遠??刭I入評級 管理層預(yù)計現(xiàn)貨運費低企不可持續(xù)
  • 2023-06-29 16:03:01Summer Davos: China sends fresh signals for cooperation amid global challenges
  • 2023-06-29 16:02:52全球?qū)崟r:貴池區(qū)牌樓鎮(zhèn):“黨建+” 壯大建強基層黨組織
  • 2023-06-29 16:02:04快看:生態(tài)環(huán)境部:力爭年內(nèi)盡早啟動全國溫室氣體自愿減排交易市場
  • 2023-06-29 15:59:02徐州這里建成“養(yǎng)老助殘友好智慧城市環(huán)境應(yīng)用示范點”-每日速訊
  • 2023-06-29 15:58:44天天滾動:泰興年內(nèi)無害化衛(wèi)生戶廁普及率90%以上
  • 2023-06-29 15:57:16通訊!凝聚干部人才合力 賦能美麗鄉(xiāng)村振興——寶雞市干部人才考察團走進渭濱區(qū)高家鎮(zhèn)上川村
  • 2023-06-29 15:55:56收評:三大指數(shù)小幅收跌 機器人概念全天活躍
  • 2023-06-29 15:55:01世界播報:田沖_關(guān)于田沖介紹
  • 2023-06-29 15:54:50多家高校發(fā)公告將暫停使用微信支付
  • 2023-06-29 15:50:27豺去掉才是什么字_奔去掉大是什么字_全球視點
  • 2023-06-29 15:48:07西安市新城區(qū)西一路街道開展燃氣安全宣傳暨隱患排查專項整治活動 熱點聚焦
  • 2023-06-29 15:47:33世界速讀:女子找工作發(fā)現(xiàn)“被坐牢” 律師:當(dāng)事人可向侵權(quán)人提民事訴訟
  • 2023-06-29 15:44:38《消失的她》破13億 創(chuàng)影史懸疑片暑期檔票房紀錄
  • 2023-06-29 15:42:53撬砸店鋪搬走保險柜 兩慣偷過境玉山落網(wǎng)
  • 2023-06-29 15:41:02世界報道:大雨、暴雨、大暴雨!陜西發(fā)布重要天氣預(yù)報,西安……
  • 2023-06-29 15:40:34咸陽市生態(tài)環(huán)境局彬州分局組織召開紀律教育學(xué)習(xí)宣傳月專題學(xué)習(xí)會 天天快看
  • 2023-06-29 15:33:55漫威新劇《秘密入侵》AI制作片頭引眾怒,業(yè)界群起抵制|環(huán)球今熱點
  • 2023-06-29 15:32:56內(nèi)容正在升級改造,請稍后再試! 世界視訊
  • 2023-06-29 15:28:37全球熱點評!你以為的兼職掙錢,可能在幫人“洗錢”
  • 2023-06-29 15:25:12世界熱推薦:北京石油化工學(xué)院領(lǐng)導(dǎo)班子赴昌平集體調(diào)研
  • 2023-06-29 15:17:06【聚看點】維宏股份(300508)6月29日主力資金凈買入586.68萬元
  • 2023-06-29 15:15:57數(shù)字化賦能鎮(zhèn)江茶產(chǎn)業(yè)高質(zhì)量發(fā)展 每日速看
  • 2023-06-29 15:12:19江蘇無錫發(fā)現(xiàn)6000多年前陶豬丨新華網(wǎng)
  • 2023-06-29 15:08:56卓創(chuàng)資訊:三季度供需有望雙增 雞蛋價格或?qū)㈤_啟季節(jié)性上漲
  • 2023-06-29 15:07:17宿遷泗洪:優(yōu)質(zhì)早熟梨“酥脆一號”嘗鮮上市 畝產(chǎn)效益超20000元
  • 2023-06-29 15:05:18Kindle中國電子書店明起正式停業(yè) 你還在連夜下載嗎 每日觀察
  • 2023-06-29 15:03:35河南一女子,誤養(yǎng)了4種“害人花”,網(wǎng)友:太沒有常識了 世界通訊
  • 2023-06-29 15:02:50觀察:拜登政府?dāng)M撥款20億美元用于美國電動汽車轉(zhuǎn)型
  • 2023-06-29 15:02:28湖北四地人事調(diào)動-每日速訊
  • 2023-06-29 14:59:42【環(huán)球聚看點】鎮(zhèn)江市區(qū)高中階段招生錄取第二批次分數(shù)線劃定
  • 2023-06-29 14:56:44伴讀 | 不擅長的事,不要做!|每日聚焦
  • 2023-06-29 14:55:05世界快報:小米10怎么給別的手機充電
  • 2023-06-29 14:52:47江蘇鹽城:開展禁毒健步走活動丨中國禁毒網(wǎng)-天天新要聞
  • 2023-06-29 14:50:28當(dāng)前熱議!西安去年房屋維修資金分戶計息完成 綜合利息收益率為3.30%
  • 2023-06-29 14:48:38全球播報:2999元的小米迷你主機值得買嗎 實測數(shù)據(jù)告訴你
  • 2023-06-29 14:48:20上海男子殺妻后網(wǎng)購冰柜欲藏尸 被害者家屬:行兇男子一審被判死刑
  • 2023-06-29 14:46:12當(dāng)前信息:吳蓉:用心守護“歷史的記憶”
  • 2023-06-29 14:44:48總額延續(xù)恢復(fù)態(tài)勢 今年前五個月物流運行數(shù)據(jù)來啦
  • 2023-06-29 14:44:14西安:單位和職工住房公積金繳存比例下限為5% 上限為12%
  • 2023-06-29 14:36:57末那眾合丨烏爾善《封神三部曲》之“九尾狐”概念模型分享 世界熱資訊
  • 2023-06-29 14:23:13四川天府新區(qū)西工大先進動力研究院成立!
  • 2023-06-29 14:19:54家長變身“跨界教師”登錄東師坪實課堂,帶領(lǐng)孩子們探索多重領(lǐng)域未知世界
  • 2023-06-29 14:15:49環(huán)球短訊!淮北大部分地區(qū)今天有高溫,新一輪降水在路上!
  • 2023-06-29 14:15:23如何提升旅游市場服務(wù)質(zhì)量?文化和旅游部答封面新聞|環(huán)球通訊
  • 2023-06-29 14:15:09環(huán)球今日報丨全市首創(chuàng)!管城法院推行“公益清算”制度,助力優(yōu)化營商好環(huán)境
  • 2023-06-29 14:10:42BIM技術(shù)節(jié)成本 快速拆撐促工期
  • 2023-06-29 14:06:3664歲的麥當(dāng)娜因細菌感染住進ICU搶救 入院前一天還在漂發(fā)
  • 2023-06-29 14:04:23盧卡申科證實:普里戈任已抵達白俄羅斯
  • 2023-06-29 13:59:00【全球時快訊】騰訊等游戲廠商發(fā)通知:未成年人暑假只能在周五六日打游戲
  • 2023-06-29 13:58:30月底截止抓緊辦!個稅匯算這些高頻問題看過來→
  • 2023-06-29 13:56:255G、通信概念股午后拉升 天天快播報
  • 2023-06-29 13:55:06世界微資訊!特斯拉 Cyber??truck 配備滑動遮陽板 駕駛艙內(nèi)沒有把手
  • 2023-06-29 13:54:56今日最新!中國總裝的空客飛機首次交付歐洲客戶
  • 2023-06-29 13:54:27文旅部:暑期汛期來臨,旅游須提升安全意識 每日消息
  • 2023-06-29 13:53:38今亮點!遙感數(shù)據(jù)更精準!我國地理空間信息技術(shù)取得新突破
  • 2023-06-29 13:52:45選購夏季皮涼席 關(guān)鍵把握這三點_全球即時
  • 2023-06-29 13:48:05鄰苯二甲酸酐商品報價動態(tài)(2023-06-29)_天天新資訊
  • 2023-06-29 13:47:13精選!胡錫進炒股第三日:賬戶綠了 稱小蜜月結(jié)束 又轉(zhuǎn)入10萬元
  • 2023-06-29 13:47:06全國多地地鐵列車推分區(qū)控溫 “強冷”“弱冷”車廂差2℃|天天看點
  • 2023-06-29 13:46:30【環(huán)球快播報】偷偷藏不?。?0萬人彈幕告白,優(yōu)酷成年輕人暗戀樹洞
  • 2023-06-29 13:43:13貨值突破1億元!海南章雄魚苗2023年出口收關(guān)-世界熱資訊
  • 2023-06-29 13:38:24技術(shù)不斷變革,亞馬遜云科技中國峰會引領(lǐng)企業(yè)重塑業(yè)務(wù)
  • 2023-06-29 13:17:56外賣員健康證造假被重罰是一記警鐘|看熱訊
  • 2023-06-29 13:17:10紅旗HS3有望7月中旬上市,起售價或低至10萬元-前沿?zé)狳c
  • 2023-06-29 13:13:53每日短訊:連續(xù)22年!江陰累計放流近1.8億余尾
  • 2023-06-29 13:12:12一片土是一幅畫,一座山是一首詩!信陽文旅局長邀你譜寫“詩與遠方”
  • 2023-06-29 13:12:11世界觀速訊丨152米高空直擊 全球首臺16兆瓦海上風(fēng)機實現(xiàn)了這些突破→
  • 2023-06-29 13:11:38省內(nèi)外高校走進直播間 幫你選大學(xué)|2023荔枝高校大會
  • 2023-06-29 13:09:11【焦點熱聞】“男子駕車碾死妻子”雙方均系二婚 案發(fā)前1小時曾激烈爭吵
  • 2023-06-29 13:08:47精進電動,年產(chǎn)10W套車用精密齒輪,已推出減速器產(chǎn)品!-當(dāng)前訊息
  • 2023-06-29 13:08:44新資訊:通訊:感謝中國援助帶來溫暖和希望——記中企援助阿富汗民眾宰牲節(jié)過節(jié)物資
  • 2023-06-29 13:02:47江蘇等地強降雨持續(xù)“營業(yè)”
  • 2023-06-29 13:01:04陜西西安中院探索“行政調(diào)解+司法確認”工作機制 讓知識產(chǎn)權(quán)司法協(xié)同保護更有力|世界要聞
  • 2023-06-29 12:54:02環(huán)球報道:【透視】美國財政部前高官:維系美國經(jīng)濟強韌的四大支柱,三根已動搖
  • 2023-06-29 12:51:12B站成立一級部門“交易生態(tài)中心” 原“電商事業(yè)部”更名為“會員購事業(yè)部” 精選
  • 2023-06-29 12:49:13環(huán)球焦點!性疾病潛伏期能不能檢查的出來_性病潛伏期
  • 2023-06-29 12:42:31海南環(huán)島旅游公路主線路基段即將完工:12月底通車 串聯(lián)全省景點-短訊
  • 2023-06-29 12:40:53余杭此地驚現(xiàn)!黑色軟體,長著多只腳!網(wǎng)友抱怨:總是大片出現(xiàn),密密麻麻...... 天天短訊
  • 2023-06-29 12:39:51精選!多種前沿警用裝備 亮相成都公安大運安保誓師大會
  • 2023-06-29 12:35:52端午租車市場有多火?一嗨租車:端午節(jié)訂單與營收同比增長400%_天天熱資訊
  • 2023-06-29 12:19:35數(shù)實融合 智引潤州——2023阿里云創(chuàng)峰會暨長三角(鎮(zhèn)江)數(shù)字經(jīng)濟高峰論壇在潤州區(qū)舉辦
  • 2023-06-29 12:18:32PTF職業(yè)格斗冠軍賽落幕,中方戰(zhàn)隊6比0大勝國外聯(lián)軍! 每日資訊
  • 2023-06-29 12:16:44人社部探索推進社會保障卡加載數(shù)字人民幣支付功能,意味著什么|世界新動態(tài)
  • 2023-06-29 12:16:33賽爾號機械塔克林來襲(賽爾號機械塔克林)
  • 2023-06-29 12:10:02計劃總投資規(guī)模100億元!南都智慧儲能項目在揚州奠基開工
  • 2023-06-29 12:09:13全球看點:45個超億美元外資產(chǎn)業(yè)項目落戶江蘇 總投資額117億美元
  • 2023-06-29 12:08:182023廣東以色列理工學(xué)院中外合作辦學(xué)學(xué)費多少錢一年-各專業(yè)收費標準
  • 2023-06-29 12:08:14這位新羅“百世之師”曾留學(xué)大唐!丨《中國智慧中國行》
  • 2023-06-29 12:06:06男孩負氣離家出走 警民接力及時救助
  • 2023-06-29 12:04:50全球頭條:江蘇明日高溫來襲!暴雨緊隨其后!
  • 2023-06-29 12:03:01全國第一!連云港恒瑞醫(yī)藥上榜中國醫(yī)藥工業(yè)百強榜單-觀天下
    • 蘇州
    • 江蘇
    • 財經(jīng)
    • 娛樂
    • 旅游
    • 時尚

    連日降雨致居民樓污水

    環(huán)球時訊:環(huán)氧樹脂地

    天天滾動:泰興年內(nèi)無

    全球?qū)崟r:貴池區(qū)牌樓

    九寨溝國慶遇冷7天迎

    世界速讀:女子找工作

    最新資訊

  • 最早將在4月底發(fā)射 龍飛船有望成首個載人商業(yè)航天器
  • 又見高空墜物 這次扔下來的竟然是玻璃茶幾
  • 蘇州軌道交通3號線今起空載試運行 將于12月底試運營
  • 十四臺高水準音樂演出 江南之聲,以音樂節(jié)的名義致敬古典
  • 2019江蘇省“長江經(jīng)濟帶”全民健身大聯(lián)動暨“舞動江蘇”無錫賽區(qū)啟動儀式舉行
  • 以合作致共贏 江蘇日本開放創(chuàng)新合作交流會在東京舉行
  • 走進江蘇各地博物館 尋找文物上的“萌娃”們
  • 新沂城市水環(huán)盡顯生態(tài)活力:碧水繞城 綠蔭滿城
  • “強網(wǎng)”擬態(tài)防御國際精英挑戰(zhàn)賽:29支“白帽黑客”戰(zhàn)隊誰能突防?
  • 南京樓市上半年推房或超去年全年
  • 江蘇省教育考試院部署做好2023年普通高校招生錄取工作
  • 西安高新區(qū):招商任務(wù)“雙過半” 下半年多場活動加碼發(fā)力
  • 短時強降水和9~11級雷雨陣風(fēng),局部小冰雹即將來襲!青島發(fā)布雷雨大風(fēng)黃色預(yù)警
  • 江蘇首個!無錫江陰這個項目獲3.4億元投資款
  • 東契奇砍25分_男籃世預(yù)賽斯洛文尼亞男籃104-83大勝愛沙尼亞-焦點速看
  • 晉江華僑職校錄取專業(yè)(晉江華僑職校)-環(huán)球熱推薦
  • 全球視點!【基層有辦法】四級聯(lián)賽 打破壁壘……江蘇一體化推進足球青少年后備人才建設(shè)
  • 揚州一14歲學(xué)生被單獨關(guān)教室八天?當(dāng)?shù)嘏沙鏊簳o答復(fù)
  • 【世界播資訊】正在公示!商洛2所學(xué)校入選
  • 武宿海關(guān)助力“6·18大促”再創(chuàng)新紀錄
  • 像燈籠一樣的花_刺花的燈罩
  • Woj:快船裁掉戈登 戈登成為完全自由球員-環(huán)球熱聞
  • 首屆中招特色學(xué)校展7月8日舉辦!
  • 注意:強對流突襲申城!今天下午開始!
  • 阿達尼:股價波動性還是韌性,投資決策關(guān)鍵要點
  • 學(xué)習(xí)貫徹全會精神丨內(nèi)江市經(jīng)濟和信息化局:緊扣“做大工業(yè)”目標 堅定實施工業(yè)倍增計劃-熱點聚焦
  • 世界動態(tài):河南文旅推“建”官|萬捷:國風(fēng)國潮正當(dāng)時,三方面發(fā)力盤活博物館
  • 海普瑞:6月28日融資買入82.19萬元,融資融券余額2.64億元|今日熱聞
  • 養(yǎng)老保險可以退保嗎?退保一般能拿回幾成?
  • 今日聚焦!中央網(wǎng)信辦:即日起開展暑期未成年人網(wǎng)絡(luò)環(huán)境整治專項行動
  • 【播資訊】東吳和蜀漢面對曹魏威脅都是以攻為守, 兩者有何區(qū)別
  • 房產(chǎn)證寫孩子名字屬于夫妻共同財產(chǎn)嗎?夫妻共同買房離婚后房子歸誰?
  • 子彈殼為什么不能撿起來?撿到子彈殼需要上交嗎?
  • 環(huán)球視訊!湖面“美容師”
  • 天天快資訊丨四天兩艘!外高橋邊檢站助力新一代中型集裝箱船首航
  • 家暴離婚小孩歸誰撫養(yǎng)?有兩個孩子離婚會怎么判?
  • 湖北女子因身份證重號“被離婚” 石首警方這樣回應(yīng)
  • 夏天的熱情擋不住
  • 全球百事通!尼日利亞安徽商會舉辦端午節(jié)活動
  • 全球熱消息:教育部印發(fā)通知部署做好2023年暑期校外培訓(xùn)治理工作
  • 【強信心 穩(wěn)經(jīng)濟 促發(fā)展】甘肅省屬企業(yè)助推強工業(yè)行動提速加力
  • 播報:對接創(chuàng)新資源!常州市長盛蕾帶隊赴大連開展產(chǎn)學(xué)研交流
  • 央媒看四川丨成都舉辦大運會倒計時30天系列活動 聚焦
  • “喵星人”寄養(yǎng)期間感染貓瘟 寵物店要擔(dān)責(zé)嗎?
  • 學(xué)校旁文具店售賣“處女證” 律師:可向監(jiān)管部門舉報
  • 酒后駕車撞死人逃逸判多少年?無責(zé)撞死人一般賠多少?
  • 江城多嬌
  • 抓!鎮(zhèn)江警方嚴打非法捕撈水產(chǎn)品違法犯罪 環(huán)球看點
  • 綠色低碳產(chǎn)業(yè)再添新軍!聯(lián)科熙和新能源總部項目簽約落戶蘇州
  • 焦點播報:男孩負氣離家出走 警民接力及時救助
  • 拜登臉頰出現(xiàn)勒痕?白宮證實:他在使用呼吸機
  • 焦點播報:【智匯瀟湘·英才耀湖湘】張曉潔:守護“生物銀行” 護航人類健康
  • 【天天速看料】景良東:黃金連陰測1900,日內(nèi)仍是空看破位!
  • 應(yīng)該從哪里尋找賺錢商機呢?垃圾郵件也能淘金!
  • 豐澤區(qū)毅達新村老舊小區(qū)改造后 路面沒有全部硬化 未設(shè)道閘車輛亂停
  • 滬深股通|淮北礦業(yè)6月28日獲外資賣出18.52萬股
  • 環(huán)球精選!【新時代 新征程 新偉業(yè)】界頭廟鎮(zhèn):“小庭院”激發(fā)鄉(xiāng)村振興新活力
  • 全球即時:號稱“養(yǎng)膚美白”,片仔癀雪融霜真的可以美白嗎?
  • 長江以北強降雨持續(xù)“營業(yè)” 華北平原40℃極端高溫返場
  • 「新聞特寫」路演大廳里的“創(chuàng)新大戲”
  • “令”行禁止 還靜于民
  • 環(huán)球今日訊!前5個月湖北爭取中央預(yù)算內(nèi)投資等各類資金創(chuàng)新高
  • 伊斯特本網(wǎng)球賽張之臻挺進八強 快資訊
  • 以賽促學(xué)強技能 省輔助器具服務(wù)技能大賽在徐州圓滿落幕-世界新視野
  • [ROSEKOOK]殺念 first 今日快看
  • 鐵嶺推出54項舉措持續(xù)優(yōu)化營商環(huán)境
  • 縱橫股份:6月28日融資買入211萬元,融資融券余額5436.1萬元_今日熱議
  • 世界觀速訊丨遼寧省為世界技能大賽特別賽金牌選手及專家團隊頒獎提高技能人才榮譽感
  • 武漢414個潮汐點位 通過“一點一方案”調(diào)度滿足市民出行需求_頭條焦點
  • 車違規(guī)查詢app_汽車違規(guī)記錄查詢
  • 被錄取到不喜歡的專業(yè)怎么辦?這份轉(zhuǎn)專業(yè)攻略請收好
  • 世界熱推薦:助力跨境電商合規(guī)高效發(fā)展 “跨境擎天助”平臺在寧上線
  • 高樓起火向上還是向下跑?趕緊看看 關(guān)鍵時候可以救命!_熱點
  • 缺斤短兩不可以! 武漢將開展為期三個月電子計價秤整治_每日速遞
  • 今日最新!旅法大熊貓幼仔“圓夢”將于7月25日回國
  • 當(dāng)前熱文:泉州?鄂州!鄂州花湖機場第14條航線開通
  • 【時快訊】高級動臥乘坐一站8分鐘420元?12306客服:鐵路局統(tǒng)一定價
  • 天鎮(zhèn)縣:鞏固拓展脫貧攻堅成果 全面推進鄉(xiāng)村振興
  • 規(guī)模超1.2萬億元 工業(yè)互聯(lián)網(wǎng)加速向全產(chǎn)業(yè)鏈延伸
  • “京滬大戰(zhàn)”蘇亞雷斯要打防反?
  • 60萬股股份全部拍出 全國首例大宗股權(quán)精細拆分處置_當(dāng)前關(guān)注
  • 環(huán)球關(guān)注:司法部:刪減保全、學(xué)歷、證書等公證證明材料116項
  • 郵儲銀行攜手中國銀聯(lián)推出郵儲信用卡APP5.0 (云閃付版) 激發(fā)消費市場新活力 世界看點
  • 抓!鎮(zhèn)江警方嚴打非法捕撈水產(chǎn)品違法犯罪
  • 炎炎夏日如何防曬?專家:“硬防曬”不可少
  • 扎實推進“15分鐘醫(yī)保服務(wù)圈”落地落實,郵儲銀行南京市分行讓金融服務(wù)零距離-新消息
  • 不思議迷宮寄生體1號怎么樣(寄生體1號怎么得)-視焦點訊
  • 【環(huán)球速看料】武漢住房公積金管理中心發(fā)布最新通告
  • 科學(xué)辟謠進行時:刮了腋毛就沒有狐臭了嗎?
  • 長安街東延長線景觀照明工程完工,多圖搶先看
  • 熱門看點:辰美兩屆畢業(yè)生收獲25封藝術(shù)界的“哈佛”——倫藝UAL錄取offer
  • 劉強東擬出售價值約2790萬美元京東股票 天天速看
  • 速凍食品企業(yè)大“建”快上,未來或強者愈強
  • 卓兆點膠北交所IPO獲受理
  • 今日熱議:鹽城濱海:張秀云入選“中國好人榜”
  • 徐州睢寧:光伏發(fā)電鋪就鄉(xiāng)村振興“陽光路”
  • 銀川經(jīng)開區(qū):項目建設(shè)多點開花 產(chǎn)業(yè)活力競相迸發(fā)|環(huán)球觀點
  • 華泰證券:中國叉車行業(yè)得到產(chǎn)品結(jié)構(gòu)改善的窗口期-今日快看
  • 【天天新要聞】網(wǎng)民發(fā)帖稱被民警強奸 揚州警方凌晨通報!
  • 日照市制造業(yè)數(shù)字化轉(zhuǎn)型大會召開
  • 當(dāng)前速看:揚州10家企業(yè)現(xiàn)場簽約“數(shù)智”轉(zhuǎn)型
  • 國金證券:機器人0-1在即,汽車精密齒輪有望迎來雙擊 天天日報
  • 陜西省教育考試院提醒:招生信息一定要通過正規(guī)渠道查詢核實|當(dāng)前短訊
  • 環(huán)球快資訊丨共話發(fā)展新招 對接優(yōu)勢項目!世界500強共赴“南京之約”
  • 播報:win7正版系統(tǒng)官網(wǎng)(win7正版系統(tǒng))
  • 全球即時看!暗黑破壞神4怎么聯(lián)機暗黑4聯(lián)機組隊詳解
  • 河南考生,軍隊、公安、司法、消防類院校面試、體檢控制線分數(shù)線公布
  • 天天實時:唐紅的戀歌百度云資源(唐紅的戀歌百度云)
  • 全球?qū)崟r:全球單機容量最大海上風(fēng)電機組成功吊裝
  • 長江以北強降雨持續(xù)“營業(yè)” 華北平原40℃極端高溫返場