從零開始實現RPC架構 - RPC原理及實現

來源:互聯網
上載者:User
RPC概述

RPC(Remote Procedure Call)即遠端程序呼叫,允許一台電腦調用另一台電腦上的程式得到結果,而代碼中不需要做額外的編程,就像在本地調用一樣。

現在互連網應用的量級越來越大,單台電腦的能力有限,需要藉助可擴充的電腦叢集來完成,分布式的應用可以藉助RPC來完成機器之間的調用。 RPC架構原理

在RPC架構中主要有三個角色:Provider、Consumer和Registry。如下圖所示:

節點角色說明:
* Server: 暴露服務的服務提供者。
* Client: 調用遠程服務的服務消費方。
* Registry: 服務註冊與發現的註冊中心。 RPC調用流程

RPC基本流程圖:

一次完整的RPC調用流程(同步調用,非同步另說)如下:
1)服務消費方(client)調用以本地調用方式調用服務;
2)client stub接收到調用後負責將方法、參數等組裝成能夠進行網路傳輸的訊息體;
3)client stub找到服務地址,並將訊息發送到服務端;
4)server stub收到訊息後進行解碼;
5)server stub根據解碼結果調用本地的服務;
6)本地服務執行並將結果返回給server stub;
7)server stub將返回結果打包成訊息並發送至消費方;
8)client stub接收到訊息,並進行解碼;
9)服務消費方得到最終結果。

RPC架構的目標就是要2~8這些步驟都封裝起來,讓使用者對這些細節透明。 服務註冊&發現


服務提供者啟動後主動向註冊中心註冊機器ip、port以及提供的服務列表;
服務消費者啟動時向註冊中心擷取服務提供者地址清單,可實現軟負載平衡和Failover; 使用到的技術

1、動態代理
產生 client stub和server stub需要用到 Java 動態代理技術 ,我們可以使用JDK原生的動態代理機制,可以使用一些開源位元組碼工具架構 如:CgLib、Javassist等。

2、序列化
為了能在網路上傳輸和接收 Java對象,我們需要對它進行 序列化和還原序列化操作。
* 序列化:將Java對象轉換成byte[]的過程,也就是編碼的過程;
* 還原序列化:將byte[]轉換成Java對象的過程;

可以使用Java原生的序列化機制,但是效率非常低,推薦使用一些開源的、成熟的序列化技術,例如:protobuf、Thrift、hessian、Kryo、Msgpack

關於序列化工具效能比較可以參考:jvm-serializers

3、NIO
當前很多RPC架構都直接基於netty這一IO通訊架構,比如阿里巴巴的HSF、dubbo,Hadoop Avro,推薦使用Netty 作為底層通訊架構。

4、服務註冊中心
可選技術:
* Redis
* Zookeeper
* Consul
* Etcd 編程實踐

本人基於 Netty4 + Zookeeper + protostuff + Spring 實現了一個簡單、高效的RPC架構Mango:https://github.com/TiFG/mango,歡迎大家fork/star。 開源的優秀RPC架構 阿里巴巴 Dubbo:https://github.com/alibaba/dubbo 新浪微博 Motan:https://github.com/weibocom/motan gRPC:https://github.com/grpc/grpc rpcx :https://github.com/smallnest/rpcx Apache Thrift :https://thrift.apache.org/

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.