RPC是什麼?
RPC概念及分類
RPC全稱為Remote Procedure Call,翻譯過來為“遠端過程呼叫”。目前,主流的平臺中都支援各種遠端呼叫技術,以滿足分散式系統架構中不同的系統之間的遠端通訊和相互呼叫。遠端呼叫的應用場景極其廣泛,實現的方式也各式各樣。
從通訊協議的層面,大致可以分為:
基於HTTP協議的(例如基於文字的SOAP(XML)、Rest(JSON),基於二進位制Hessian(Binary))
基於TCP協議的(通常會藉助Mina、Netty等高效能網路框架)
從不同的開發語言和平臺層面,分為:
單種語言或平臺特定支援的通訊技術(例如Java平臺的RMI、.NET平臺Remoting)
支援跨平臺通訊的技術(例如HTTP Rest、Thrift等)
從呼叫過程來看,分為:
同步通訊呼叫(同步RPC)
非同步通訊呼叫(MQ、非同步RPC)
常見的幾種通訊方式
1. 遠端資料共享(例如:共享遠端檔案,共享資料庫等實現不同系統通訊)
2. 訊息佇列
3. RPC(遠端過程呼叫)
序列化/反序列化
只有二進位制資料才能在網路中傳輸,序列化和反序列化的定義是:
將物件轉換成二進位制流的過程叫做序列化,
將二進位制流轉換成物件的過程叫做反序列化。
Java和.NET平臺中常見的通訊技術
Java中支援的包括:
技術 |
簡介 |
是否支援跨平臺 |
Corbra |
90年代產物,已被淘汰 |
不支援 |
RMI |
EJB時代產物,已逐漸被淘汰 |
不支援 |
WebService |
基於Http SOAP,效率低,逐漸被淘汰 |
支援 |
Hessain |
基於Http,二進位制序列化,效率高,使用廣泛 |
支援 |
Rest(spring mvc等) |
支援Http Rest,廣泛應用於無線API,開放平臺等 |
支援 |
JMS、開源MQ |
Java訊息服務(訊息中介軟體),使用廣泛 |
支援 |
Socket |
基於Mina、Netty(NIO、AIO高效通訊) |
理論上支援 |
.NET中包括:
技術 |
簡介 |
是否支援跨平臺 |
WebService |
基於Http SOAP,效率低,逐漸被WCF整合淘汰 |
支援 |
.NET Remoting |
通訊效率尚可,使用複雜,逐漸被WCF整合淘汰 |
不支援 |
WCF SOAP |
整合了原有的WebService,通訊效率低 |
支援 |
WCF NET.TCP |
通訊效率高,部分.NET專案內部服務在使用 |
不支援 |
WCF Rest |
使用較少,已經被Web Api逐漸取代 |
支援 |
Web Api |
支援Http Rest,廣泛應用於無線API,開放平臺等 |
支援 |
MSMQ、開源MQ |
微軟自己的訊息中介軟體或者其他開源MQ |
支援(MSMQ除外) |
Hessain .NET |
基於Http,二進位制序列化,效率高,使用較少 |
支援 |
Socket |
通過Socket網路程式設計方式實現系統通訊 |
理論上支援 |
網際網路時代常見的RPC技術和框架
應用級的服務框架:
Dubbo/Dubbox
ZeroICE
GRpc
Spring Boot/Spring Cloud
基礎通訊框架:
Protocol Buffers
Thrift
遠端通訊協議:
RMI
Socket
SOAP(HTTP XML)
REST(HTTP JSON)
RPC的注意事項
效能
影響RPC效能的主要在幾個方面:
1.序列化/反序列化的框架
2.網路協議,網路模型,執行緒模型等
安全
RPC安全的主要在於服務介面的鑑權和訪問控制支援。
跨平臺
跨不同的作業系統,不同的程式語言和平臺。
跨平臺RPC技術和常見框架介紹
SOAP WebService
Hessian
HTTP Rest
Thrift
GRpc(Protobuffer)
Zero ICE
訊息中介軟體
相關文章
- 什麼是rpc?RPC
- RPC是什麼RPC
- 什麼是RPC ? 用PHP如何實現?RPCPHP
- Spark RPC 到底是個什麼鬼?SparkRPC
- gRPC(一)入門:什麼是RPC?RPC
- 如何給女朋友解釋什麼是RPCRPC
- 什麼樣的RPC才是好用的RPCRPC
- 什麼是cookie,什麼是sessionCookieSession
- 什麼是DNS,什麼是HostsDNS
- 什麼是模式? 什麼是框架?模式框架
- 這是什麼這是什麼
- 什麼是WebAuthn、FIDO 是什麼?Web
- ITIL是什麼意思?ITIL是什麼?
- 什麼是跨域,什麼是同源跨域
- 為什麼有了 HTTP 還要 RPCHTTPRPC
- 什麼是.NET平臺、什麼是c#、什麼是ASP.NET。C#ASP.NET
- ftp是什麼,ftp是什麼東西?FTP
- Java是什麼_Java是做什麼的?Java
- 什麼是正向代理?什麼是反向代理?
- NLA是什麼?NLA的原理是什麼?
- ###什麼是Linux核心###什麼是MMULinux
- 為什麼要有 Servlet ,什麼是 Servlet 容器,什麼是 Web 容器?ServletWeb
- 什麼是塊元素?什麼是行內元素?
- 什麼是API介面,具體是什麼意思?API
- 什麼是框架?為什麼說 Angular 是框架?框架Angular
- 什麼是Unicode,什麼是UTF-8Unicode
- 什麼是藍海?什麼是紅海?什麼是網際網路思維?
- nginx 是什麼,能幹什麼?Nginx
- 什麼是Django?有什麼用途?Django
- AI三重問:什麼是AI?什麼是AI模型?什麼是AI大模型?AI大模型
- 什麼是重繪repaint?什麼是迴流reflow?AI
- DHCP是什麼?DHCP伺服器是什麼意思?伺服器
- 什麼是CDN?CDN的技術原理是什麼?
- 交換機是什麼,它的工作原理是什麼
- GNU是什麼?和Linux是什麼關係?Linux
- 域名是什麼?申請域名的流程是什麼?
- 什麼是雲端計算?什麼是公司網盤?
- 什麼是eval()?eval是用來幹什麼的?