FISCO BCOS流量控制實現

買賣虛擬貨幣
引言區塊鏈系統作為分散式系統,面對大資料量突發請求場景,暴漲的請求容易引起區塊鏈服務或介面不可用,嚴重時可能導致整個區塊鏈系統陷入雪崩狀態。為了提供更穩定可靠、柔性可用的服務,FISCO BCOS v2.5版本引入了流量控制功能,從節點和群組兩個維度進行限流,一方面,面對大資料量突發請求時對區塊鏈系統進行保護,保證系統能正常執行,提升系統可用性;另一方面降低區塊鏈節點間、群組間的資源干擾,提升區塊鏈系統的服務質量。為什麼引入流量控制FISCO BCOS引入流量控制,旨在:· 應對大資料量突發請求
· 降低區塊鏈節點間、群組間的資源干擾· 降低模組間的相互影響

· 應對大資料量突發請求

上圖對比了無流量控制功能和帶有流量控制功能的區塊鏈系統面對大資料量突發請求時的處理情況。

假設該區塊鏈系統處理能力為2W,當業務以20W請求速率訪問區塊鏈節點時:

· 無流量控制的場景下,系統對業務請求照單全收,導致內部積壓的請求數目越來越多,區塊鏈節點響應速度越來越慢,若業務持續以高於系統處理能力的速率發起請求,最終整個系統可能會陷入雪崩狀態,無法響應任何業務請求。

· 加入了流量控制功能後,流量控制模組會根據系統處理能力過濾業務請求。在業務請求速率超出系統處理能力時,流量控制模組會拒絕剩餘的處理請求,使系統維持"收支平衡"的健康狀態;並將請求過載的資訊返回給業務,業務可根據該資訊自適應地調整請求速率,對區塊鏈系統進行保護。

簡而言之,引入流量控制模組就是給區塊鏈系統加上一層安全保護罩,讓系統在接收大資料量突發請求的場景下可以健壯工作,正常響應業務請求。

· 降低區塊鏈節點間/群組間資源干擾

如上圖,當多個區塊鏈節點部署於同一臺機器時,會出現資源競爭的問題,某些節點佔用過多系統資源會影響到其他節點的正常服務。

· t1時刻,業務1持續以1W的請求速率請求左邊節點,該節點流量激增,系統接收並處理請求後,使用了90%的CPU
· 經過t時間間隔,業務2以5000的請求速率請求右邊節點,該節點資源匱乏,只能搶佔到10%的CPU,響應速度很慢

上述場景中,左邊節點因佔用過多系統資源影響了右邊節點的服務質量。引入流量控制後,可限制每個節點接收請求的速率,控制每個區塊鏈節點的資源佔用,避免因區塊鏈節點資源競爭導致的服務質量下降或服務不可用問題。

仍以上圖為例:

· t1時刻,業務1持續以1W的請求速率請求節點1,節點1流量控制模組根據配置的請求閾值拒絕多餘的請求(這裡設閾值為5000),機器CPU佔用率維持在50%

· 業務1收到"流量過載"的響應後,可將其請求速率調整到5000

· 經過t時間間隔,業務2以5000的請求速率請求節點2,此時機器還剩餘50%的 CPU,足以處理5000個請求,業務2的請求得到正常響應

類似於一臺機器上執行多個區塊鏈節點時會發生資源競爭,多群組架構下,群組間也存在資源競爭,某個群組佔用過多資源同樣會影響到其他群組的服務質量,採用群組級別的流量控制是解決群組間資源競爭的良方。

· 降低模組間相互影響

同一個節點或群組內的不同模組,也存在資源競爭問題,主要是網路資源競爭,存在網路資源競爭的模組包括:

· 共識模組
· 交易同步模組
· 區塊同步模組
· AMOP模組

其中共識模組、交易同步模組是決定區塊鏈系統服務質量的關鍵模組,其他模組過多佔用網路資源,會影響這些關鍵模組,進而影響系統可用性。

FISCO BCOS實現了模組級別的流量控制,透過控制非關鍵的網路流量,優先保證關鍵模組服務質量,提升系統健壯性。

流量控制的功能

FISCO BCOS從節點和群組兩個維度實現了業務到節點的請求速率限制和模組粒度的網路流量限制。前者限制業務到節點的請求速率,以應對大資料量突發請求,保證區塊鏈節點的柔性服務;後者透過限制區塊同步、AMOP等非關鍵模組的網路流量,優先保證共識、交易同步等關鍵模組的效能和穩定性。

· 節點級別請求速率限制:限制業務到節點的總請求速率,當請求速率超過指定閾值後,節點會拒絕業務請求,避免節點過載,防止過多的請求導致節點異常;控制節點資源使用量,降低區塊鏈節點之間的資源競爭 

· 節點級別的流量控制:限制節點的平均出頻寬,當節點平均出頻寬超過設定閾值後,節點收到區塊同步請求後會暫緩傳送區塊、拒絕收到的AMOP請求,避免區塊同步、AMOP訊息包傳送對節點共識的影響

群組維度上,主要功能包括:

· 群組級別請求速率限制:限制業務到群組的請求速率,當請求速率超過閾值後,群組會拒絕業務請求,該功能可在大資料量突發請求的場景下保護區塊鏈節點,控制群組資源使用量,降低群組間的資源競爭

· 群組級別的流量控制:限制每個群組的平均出頻寬,當群組平均出頻寬流量超過設定閾值後,該群組會暫停區塊傳送和AMOP請求包轉發邏輯,優先將網路流量提供給共識模組使用

當節點和群組都開啟請求速率限制時:

節點收到業務傳送的請求包時,首先呼叫節點級別請求速率限制模組判斷是否接收該請求,如請求被接收,則進入群組級別請求速率限制模組,透過該模組檢查後的請求才會被轉發到相應群組,進行處理。

當節點和群組都開啟網路流量控制功能時:

1、節點收到客戶端AMOP請求,首先呼叫節點級流量控制模組判斷是否接收該AMOP請求
2、當某個群組收到其他節點對應群組的區塊請求後,群組在回覆區塊之前,需要:

· 呼叫節點級流量控制模組,判斷節點平均出頻寬是否超過設定閾值
· 呼叫群組級流量控制模組,判斷群組出頻寬是否超過設定閾值,當且僅當節點級和群組級平均出頻寬均未超過設定閾值時,該群組才會回覆區塊請求

如何使用流量控制功能

流量控制配置分別位於config.ini和group.i.ini配置檔案的[flow_control]配置項中,分別對應為節點級別流量控制配置和群組級別流量控制。這裡向大家介紹如何啟用、關閉、配置流量控制。

· 節點級流量控制

節點級別的網路流量控制配置項均位於config.ini配置檔案中,主要包括:

請求速率限制

節點級別的請求速率限制位於配置項[flow_control].limit_req中,用於限制業務每秒到節點的最大請求數目,當請求數目超過設定閾值時,請求會被拒絕。該配置項預設關閉,若要開啟,請將limit_req配置項前面的;去掉。

開啟請求速率限制並設計節點每秒可接受2000個業務請求的示例如下:

[flow_control]
  ; restrict QPS of the node
  limit_req=2000

網路流量限制

· [flow_control].outgoing_bandwidth_limit:節點出頻寬限制,單位為Mbit/s,當節點出頻寬超過該值時,會暫緩區塊傳送,也會拒絕客戶端傳送的AMOP請求,但不會限制區塊共識和交易廣播的流量。該配置項預設關閉,若要開啟,請將outgoing_bandwidth_limit配置項前面的;去掉。

開啟節點出頻寬流量限制,並將其設定為5MBit/s的配置示例如下:

[flow_control]
  ; Mb, can be a decimal
  ; when the outgoing bandwidth exceeds the limit, the block synchronization operation will not proceed
  outgoing_bandwidth_limit=5

· 群組級流量控制

群組級別的網路流量控制配置項均位於group.i.ini配置檔案中,主要包括:

請求速率限制

群組i的請求速率限制位於group.i.ini的配置項[flow_control].limit_req中,限制業務每秒到群組的最大請求數目,當請求數目超過配置項的值時,請求會被拒絕。該配置項預設關閉,若要開啟,請將limit_req配置項前面的;去掉。

開啟請求速率限制並配置群組每秒可接受1000個業務請求的示例如下:

[flow_control]
  ; restrict QPS of the group
  limit_req=1000

群組內網路流量限制

[flow_control].outgoing_bandwidth_limit:群組出頻寬限制,單位為Mbit/s,當群組出頻寬超過該值時,會暫緩傳送區塊,但不會限制區塊共識和交易廣播的流量。該配置項預設關閉,若要開啟,請將outgoing_bandwidth_limit配置項前面的;去掉。

開啟群組出頻寬流量限制,並將其設定為2MBit/s的配置示例如下:

[flow_control]
  ; Mb, can be a decimal
  ; when the outgoing bandwidth exceeds the limit, the block synchronization operation will not proceed
  outgoing_bandwidth_limit=2

總結

隨著區塊鏈技術的發展,越來越多應用部署於區塊鏈系統中,對區塊鏈系統服務質量的要求也日漸提升,區塊鏈系統的柔性可用、穩定健壯變得更加重要。

FISCO BCOS v2.5引入流量控制功能,是FISCO BCOS對區塊鏈柔性服務探索的重要一步。

社羣將持續打磨,最佳化區塊鏈系統服務質量,希望未來能為海量業務場景提供更好的、高可用的柔性服務。

如何做好流量控制的同時,又不影響原本系統效能?敬請關注社羣後續文章,為您詳解流量控制策略的具體實現原理。

歡迎大家共同探討交流,積極反饋使用的體驗與改進建議。

免責聲明:

  1. 本文版權歸原作者所有,僅代表作者本人觀點,不代表鏈報觀點或立場。
  2. 如發現文章、圖片等侵權行爲,侵權責任將由作者本人承擔。
  3. 鏈報僅提供相關項目信息,不構成任何投資建議

推荐阅读

;