教育行業(yè)A股IPO第一股(股票代碼 003032)

全國咨詢/投訴熱線:400-618-4000

為什么需要時間輪?時間輪在RPC中的應用

更新時間:2022年07月28日10時15分 來源:傳智教育 瀏覽次數:

  為什么需要時間輪?

  在Dubbo中,為增強系統(tǒng)的容錯能力,會有相應的監(jiān)聽判斷處理機制。在Dubbo最開始的實現中,是將所有的返回結果(DefaultFuture)都放入集合中,并且通過定時任務掃描所有的 future,逐個判斷是否超時。

  但這樣效率低下,Dubbo借鑒 Netty,引入了時間輪算法,減少無意義的輪詢判斷操作。

  時間輪原理

時間輪

  時鐘輪的實質上是參考了生活中的時鐘跳動的原理。

  在時鐘輪機制中,有時間槽和時鐘輪的概念,時間槽就相當于時鐘的刻度;而時鐘輪就相當于指針跳動的一個周期。

  如果時鐘輪有10個槽位,而時鐘輪一輪的周期是10秒,那么我們每個槽位的單位時間就是1秒,而下一層時間輪的周期就是100秒,每個槽位的單位時間也就是10秒。

槽位的單位時間

  假設現在我們有 3 個任務,分別是任務 A(0.9秒之后執(zhí)行)、任務 B(2.1秒后執(zhí)行)與任務 C(12.1秒之后執(zhí)行),我們將這 3 個任務添加到時鐘輪中,任務 A 被放到第 0 槽位,任務 B 被放到第 2槽位,任務 C 被放到下一層時間輪的第2個槽位,如下圖所示:

  通過這個場景我們可以了解到,每個任務會按要求只掃描執(zhí)行一次, 這樣就能夠很好的解決 CPU 浪費的問題。

  Dubbo中的時間輪原理是如何實現?

  主要是通過 Timer,Timeout,TimerTask 幾個接口定義了一個定時器的模型,再通過 HashedWheelTimer 這個類實現了一個時間輪定時器。通過該定時器,Dubbo 實現了高效的任務調度。

  時間輪在RPC的應用

  調用超時: 在高并發(fā)、高訪問量的情況下,時鐘輪每次只輪詢一個時間槽位中的任務,這樣會節(jié)省大量的 CPU。

  啟動加載:比如服務啟動完成之后要去加載緩存,執(zhí)行定時任務等, 都可以放在時鐘輪里。

  定時心跳檢測:可以將心跳的邏輯封裝為一個心跳任務,放到時鐘輪里。

0 分享到:
和我們在線交談!