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

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

為什么需要時間輪?時間輪在RPC中的應(yīng)用

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

  為什么需要時間輪?

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

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

  時間輪原理

時間輪

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

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

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

槽位的單位時間

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

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

  Dubbo中的時間輪原理是如何實現(xiàn)?

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

  時間輪在RPC的應(yīng)用

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

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

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

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