RPC實戰與核心原理之異步RPC


異步RPC:壓榨單機吞吐量

如何提升單機吞吐量

提升吞吐量,其實關鍵就兩個字:“異步”,提高CPU等資源的利用率

調用端如何異步

異步,最常用的方式就是返回 Future 對象的 Future 方式,或者入參為 Callback 對象的回調方式,而 Future 方式可以說是最簡單的一種異步方式了。我們發起一次異步請求並且從請求上下文中拿到一個 Future,之后我們就可以調用 Future 的 get 方法獲取結果。

對於 RPC 框架,無論是同步調用還是異步調用,調用端的內部實現都是異步的

調用端發送的每條消息都一個唯一的消息標識,實際上調用端向服務端發送請求消息之前會先創建一個 Future,並會存儲這個消息標識與這個 Future 的映射,動態代理所獲得的返回值最終就是從這個 Future 中獲取的;當收到服務端響應的消息時,調用端會根據響應消息的唯一標識,通過之前存儲的映射找到對應的 Future,將結果注入給那個 Future,再進行一系列的處理邏輯,最后動態代理從 Future 中獲得到正確的返回值。

  • 所謂的同步調用,不過是 RPC 框架在調用端的處理邏輯中主動執行了這個 Future 的 get 方法,讓動態代理等待返回值;而異步調用則是 RPC 框架沒有主動執行這個 Future 的 get 方法,用戶可以從請求上下文中得到這個 Future,自己決定什么時候執行這個 Future 的 get 方法。
  • Future示意圖

如何做到 RPC 調用全異步

服務端業務處理邏輯異步

  • 調大業務線程池的線程數,但是對於 RPC 框架來說,往往都會有多個服務共用一個線程池的情況,即使調大業務線程池,比較耗時的服務很可能還會影響到其它的服務。所以最佳的解決辦法是能夠讓業務線程池盡快地釋放,那么我們就需要 RPC 框架能夠支持服務端業務邏輯異步處理,這對提高服務的吞吐量有很重要的意義。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM