1. 程式人生 > >編寫自己rpc框架——java rpc的實現

編寫自己rpc框架——java rpc的實現

my-rpc

瞭解dubbo的一些原理後,想嘗試自己編寫rpc,加深瞭解。

個人對rpc原理的見解

rpc是一種遠端過程呼叫協議。rpc主要功能:異構分散式專案之間的通訊,使消費者只需要知道介面,遠端呼叫方法就像呼叫本地方法一樣。
要使得消費層只通過介面呼叫遠端實現方法,那麼其之間的傳輸資料肯定是:類、方法、引數、返回值,以及一些其它傳輸的資訊。
之間涉及到通訊,肯定要釋出服務供客戶端請求。客戶端要執行未知實現的方法,是通過動態代理實現的。
在瞭解動態代理的使用後,就會發現,在動態代理的方法執行過程中,可以不用去執行真實方法(invoke方法中),你可以獲取到上面所需要的類、方法、引數、返回值等執行方法的引數。
那麼把這些引數傳輸到遠端去。在提供層接收到消費層方法的傳參後,通過反射執行已經註冊的類方法。(提供層要把暴露介面的實現類的方法註冊到容器中,供查詢)

個人認為dubbo的優勢

  • 擁有豐富的通訊方式、多種協議。
  • 有完善的負載、叢集容錯、負載均衡機制。
  • 可搭配多種
    服務註冊中心

自己編寫rpc之前的所需的準備

瞭解了常用rpc框架dubbo的流程。複習了動態代理。複習了java io通訊。

模組說明

rpc-core

這個模組是rpc的核心部分包括網路通訊,客戶端動態代理,通訊資料結構

rpc-service

這個模組rpc提供層暴露的介面

rpc-provider

這個模組是rpc的提供層

rpc-consumer

這個模組是rpc的消費層

依賴關係

rpc-consumer、rpc-provider為rpc使用方,所以他們兩個都依賴 rpc-core 模組。
因為提供層要為消費層暴露介面,所以提取了公共介面,因此,它們兩個都依賴rpc-service

啟動除錯

使用HelloService介面進行除錯。首先執行zookeeper服務,預設本地ip。接著啟動提供層:在rpc-provider模組中執行top.yuyufeng.rpc.ServerApp.Main
然後啟動消費層:在rpc-consumer模組中執行top.yuyufeng.rpc.test.ClientApp.Main

缺陷

  • netty通訊過程中異常的解決\丟失有待完善(netty的應用優待改進)
  • 負載均衡有待增加
  • …(細節有待實現)

版本說明

專案隨著主幹進行下去
* master 在上個版本基礎上,增加使用Spring方式啟動服提供層
* v3 在上個版本基礎上,使用Netty4來操作NIO通訊,不再是原來的多執行緒BIO。改變了通訊方式,結構變化較大
* v2 在上個版本基礎上,增加zookeeper註冊發現,客戶端服務端無需互相知道對方。增加Protostuff序列化(序列化效率高)
* v1 原始版本(bio多執行緒通訊 客戶端服務端直連)

更新日誌

相關推薦

編寫自己rpc框架——java rpc實現

my-rpc 瞭解dubbo的一些原理後,想嘗試自己編寫rpc,加深瞭解。 個人對rpc原理的見解 rpc是一種遠端過程呼叫協議。rpc主要功能:異構分散式專案之間的通訊,使消費

Yar – 並行的RPC框架(Concurrent RPC framework)

Yar(yet another RPC framework, 教主問我為啥都是Ya打頭, 呵呵, 因為這樣名字好起)是我在3個多月前, 為了解決一個實際的問題, 而開發的一個PHP擴充套件的, RPC框架, 和現有的RPC框架(xml-rpc, soap)不同, 這是一個輕量級的框架

分散式服務架構學習(一):實現自己RPC框架(採用Java Socket)

RPC實現原理圖: 1、Service API對應服務介面。 HelloService.java程式碼如下: package com.shan.rpc.service; public interface HelloService { public String

分散式學習筆記1通過Java自己實現簡單的HTTP RPC框架

RPC基礎知識 什麼是RPC? RPC(Remote Procedure Call Protocol)——遠端過程呼叫協議,它是一種通過網路從遠端計算機程式上請求服務,而不需要了解底層網路技術的協議。 RPC協議假定某些傳輸協議的存在,如TCP或UDP,為通訊程式之間攜帶

Java編寫基於netty的RPC框架

-c shu resp pre 覆蓋 數據處理 ofo 核心 用兩個 一 簡單概念 RPC: ( Remote Procedure Call),遠程調用過程,是通過網絡調用遠程計算機的進程中某個方法,從而獲取到想要的數據,過程如同調用本地的方法一樣. 阻塞IO :當阻塞

Java實現RPC框架例項

一、RPC簡介 RPC,全稱為Remote Procedure Call,即遠端過程呼叫,它是一個計算機通訊協議。它允許像呼叫本地服務一樣呼叫遠端服務。它可以有不同的實現方式。如RMI(遠端方法呼叫)、Hessian、Http invoker等。另外,RPC是與語言無關的。 RPC示意圖

Java RPC 程式設計:Json-RPC 實現示例,Maven Webapp 框架

在多個伺服器程序之間的通訊,目前使用的技術一般是 RPC(Remote Procedure Call Protocol,遠端過程呼叫協議)。 使用 RPC 可以訪問遠端主機的程序服務,不需要清楚底層網路通訊機制,只需要關注服務本身即可。RPC 是目前分散式開發技術中一種常用的技術,其

JAVA通訊(2)--實現簡單的RPC框架

一、RPC簡介 RPC,全稱為Remote Procedure Call,即遠端過程呼叫,它是一個計算機通訊協議。它允許像呼叫本地服務一樣呼叫遠端服務。它可以有不同的實現方式。如RMI(遠端方法呼叫)、Hessian、Http invoker等。另外,RPC是

自己實現一個簡單的RPC框架

RPC的全稱是Remote Procedure Call,它是一種程序間的通訊方式。允許像呼叫本地服務一樣呼叫遠端服務。 對於RPC的總結: 簡單:RPC概念的語義十分簡單和清晰,這樣建立分散式計算更容易。 高效:過程呼叫看起來十分簡單而且十分高效。

使用Java實現簡易RPC框架

RPC其全程為Remote Process Call,即為遠端過程呼叫。RPC將傳統的本地呼叫轉換為呼叫遠端的伺服器的方法,給系統的處理能力和吞吐量帶來了極大的提升。 隨著專案的發展,業務越來越複雜,單個專案的話,會非常複雜,且不易維護,如果單個專案掛了

分布式架構的基石,簡單的 RPC 框架實現(JAVA)

測試 請求 消費 進制 runt trace 發布 @override etc   RPC架構   RPC 的全稱是 Remote Procedure Call,它是一種進程間通信方式。允許像調用本地服務一樣調用遠程服務。   1.RPC 框架原理   RPC

一個自己實現rpc框架

整合spring配置檔案頭部加入rpc的namespace;服務端:服務端標籤:<rpc:protocol port="8888"/><rpc:registry address="ifcc:2181,coco:2181,cc:2181" protocol="

解密Dubbo:自己動手編寫RPC框架

用,現在我們就來動手自己編寫一個RPC框架,通過這篇文章的學習,你將學習到 分散式系統的概念 RPC遠端方法呼叫的應用 Dubbo的原理深入理解 當然,如果要完全自己編寫一個RPC框架,我們需要掌握以下知識點 網路程式設計(網路通訊) 本文將使用netty4網路通訊框

Java實現一個簡單的RPC框架(三) 帶引數的本地呼叫

參考: 上面我們已經實現了通過我們指定的協議呼叫本地的其它類的函式來實現自己的功能,接下來我們要實現帶引數的RPC呼叫。 這裡我以add(a,b)為例子,為了實現這個功能,我們的請求方多了兩個引數a和b,那麼我們的RPC協議就要進行相應的修改:前面我們的請求方包含id和

Java 編寫基於 Netty 的 RPC 框架

一 簡單概念 RPC: ( Remote Procedure Call),遠端呼叫過程,是通過網路呼叫遠端計算機的程序中某個方法

GRPC 1.3.4 發布,Google 高性能 RPC 框架Java C++ Go)

框架 9.png 高性能 修復 git ogl arch bsp 版本 GRPC 1.3.4 發布了,GRPC 是一個高性能、開源、通用的 RPC 框架,面向移動和 HTTP/2 設計,是由谷歌發布的首款基於 Protocol Buffers 的 RPC 框架。 GRPC

JAVA中幾種常用的RPC框架介紹

github 不同的 target int https love num 分布 有一個 RPC是遠程過程調用的簡稱,廣泛應用在大規模分布式應用中,作用是有助於系統的垂直拆分,使系統更易拓展。Java中的RPC框架比較多,各有特色,廣泛使用的有RMI、Hessian、Du

BootNettyRpc:采用 Netty 實現RPC 框架

ofo 文件配置 RR 實現 端口 監控 ble tin cto 什麽是 BootNettyRpc?BootNettyRpc 是一個采用Netty實現的Rpc框架,適用於Spring Boot項目,支持Spring Cloud。 目前支持的版本為Spring Boot 1.

基於Netty的高性能JAVARPC框架

jvm 函數 stub request 客戶端 pda print 設計 最終 前言 今年7月份左右報名參加了阿裏巴巴組織的高性能中間件挑戰賽,這次比賽不像以往的比賽,是從一個工程的視角來比賽的。 這個比賽有兩個賽題,第一題是實現一個RPC框架,第二道題是實現一個Mom消息

一個簡單RPC框架是如何煉成的(IV)——實現RPC訊息的編解碼

之前我們制定了一個很簡單的RPC訊息 的格式,但是還遺留了兩個問題,上一篇解決掉了一個,還留下一個 我們並沒有實現相應的encode和decode方法,沒有基於可以跨裝置的字串傳輸,而是直接的記憶體變數傳遞。 現在的RPC request不支援帶引數的請求命令。如add(a,