上一篇文章中咱們已經知道了什麼是 RPC 框架和爲何要作一個 RPC 框架了,這一章咱們來從宏觀上分析,怎麼來實現一個 RPC 框架,這個框架都有那些模塊以及這些模塊的做用。java
在咱們的整個框架裏比較重要的幾個模塊:
rpc-procotol: 既然是可插拔是框架,咱們須要支持選擇底層協議,這部分是通訊協議相關的模塊。
rpc-spring: 咱們的框架是基於 spring 開發的,這個模塊是將咱們的一些功能和 spring 整合起來,好比自動注入代理 bean,啓動服務端 server 等等。
rpc-register: 註冊中心模塊,負責服務發現和容錯。
rpc-monitor: 將註冊中心的信息顯示在網頁上。
rpc-consumer: 消費端模塊,用於測試。
rpc-provider: 服務端模塊,用於測試。git
咱們先提早來看看最後最後的效果,首先說明,性能表現測試根據不一樣的機器和不一樣的網絡環境可能會有所不一樣,下面的測試結果是基於我本身的機器的。 個人電腦最多起 2000 個併發線程,多了就 OOM 了,在公司的電腦嘗試過起 10000 個併發線程,沒有任何問題,下面看 2000 個併發線程的表現。github
測試類redis
public static void main(String[] args) throws Exception { ApplicationContext applicationContext = new ClassPathXmlApplicationContext("rpc.xml"); //並行度10000 int parallel = 2000; //開始計時 long a1 = System.currentTimeMillis(); CountDownLatch signal = new CountDownLatch(1); CountDownLatch finish = new CountDownLatch(parallel); for (int index = 0; index < parallel; index++) { CalcParallelRequestThread client = new CalcParallelRequestThread(signal, finish, index,applicationContext); new Thread(client).start(); } //n個併發線程瞬間發起請求操做 signal.countDown(); finish.await(); long a2 = System.currentTimeMillis(); String tip = String.format("RPC調用總共耗時: [%s] 毫秒", a2 - a1); System.out.println(tip); }
2000 併發 1秒多,仍是比較快的。感興趣的能夠試試在本身的電腦起 1w 或者 10w 加線程測試一下。spring