高併發下RPC通訊優化路徑

2021-10-05 16:42:31 字數 1241 閱讀 4365

選擇合適的通訊協議

基於 tcp 協議實現的 socket 通訊是有連線的,而傳輸資料是要通過三次握手來實現資料

傳輸的可靠性,且傳輸資料是沒有邊界的,採用的是位元組流模式。

基於 udp 協議實現的 socket 通訊,客戶端不需要建立連線,只需要建立乙個套接字傳送

資料報給服務端,這樣就不能保證資料報一定會達到服務端,所以在傳輸資料方面,基於

udp 協議實現的 socket 通訊具有不可靠性。udp 傳送的資料採用的是資料報模式,每個

udp 的資料報都有乙個長度,該長度將與資料一起傳送到服務端。

優化方法:

為了保證資料傳輸的可靠性,通常情況下我們會採用

tcp 協議。如果在區域網且對資料傳輸的可靠性沒有要求的情況下,我們也可以考慮使用

udp 協議,畢竟這種協議的效率要比 tcp 協議高。

使用單一長連線

優化socket網路通訊

傳統的socket網路通訊存在i/o阻塞、執行緒模型缺陷、記憶體拷貝(使用者空間–》核心空間–》 核心空間–》網路io)兩次拷貝,等問題缺陷,可以考慮使用成熟的通訊框架:netty。

1️⃣實現非阻塞i/o:使用select的多路復用器實現非阻塞i/o

2️⃣高效的reactor模型:使用乙個主線程進行接收客戶端和服務端連線請求,建立成功後進行監聽此連線,同時建立乙個鏈路請求註冊到具體的工作執行緒中,由工作執行緒負責後續的i/o操作,這樣實現了,乙個執行緒監聽多個客戶端連線請求。

3️⃣序列設計:netty使用無鎖化的鏈路操作,使用pipeline進行各個通道的鏈路操作。

4️⃣零拷貝:資料從記憶體發布到網路,需要經過兩次拷貝動作,從使用者空間-》核心空間 核心空間-》網路io,為了減少操作,netty提供了bytebuffer,使用direct buffers模式,開闢一塊非堆記憶體空間,直接可以將資料避免緩衝區操作,直接拷貝到核心空間。

量身定做報文格式

報文是用來描述具體的校驗、操作、傳輸資料等內容,根據自己功能需要,設定報體小、滿足功能,易解析等特性。

編碼解碼

對於乙個好的網路協議,能夠相容優秀的序列化框架是非常重要的,資料傳輸過程中,優秀的資料序列化編碼解碼過程可以提高網路通訊能力,我們可以採用protobuf序列化。

Linux 高併發下效能優化

ulimit用於shell啟動程序所占用的資源,暫時地,適用於通過 ulimit 命令登入 shell 會話期間 vi etc profile 儲存後執行 source etc profile 使其生效 ulimit 顯示 或設定 使用者可以使用的資源的限制 limit 這限制分為軟限制 當前限制 ...

高併發下的nginx優化

網際網路分布式架構設計,提高系統併發能力的方式主要有兩種 垂直擴充套件 scale up 與水平擴充套件 scale out 垂直擴充套件 提公升單機處理能力。垂直擴充套件的方式又有兩種。增強單機硬體效能 提公升單機架構效能 水平擴充套件 增加伺服器,集群。在網際網路業務發展非常迅猛的早期,如果預算...

高併發下投標過程進行優化

業務流程 對於乙個融資標的invest表,標的id,標的總融資金額 total money 已投資金額 invested money 滿標時間 finish invest time 標的狀態 status 假如有多個使用者user同時投標,投資金額為m,為保證資料一致性,以下步聚在同乙個事務當中 1...