欧美一区二区三区,国内熟女精品熟女A片视频小说,日本av网,小鲜肉男男GAY做受XXX网站

如何實現一個分布式RPC框架

劉姿婷2年前16瀏覽0評論

如何實現一個分布式RPC框架?

1.定義:

明確下RPC是什么?PRC全稱是Remote Procedure Call,是進程間的一種通信方式。

2.解決的問題

進程間調用就像本地調用函數一樣簡單,而業務層不需要去關心通信的細。

3.組成

在Nelson的論文Implementing Remote Procedurr Calls有論述,見圖1

User 調用方

User-Stub 消息拼裝,編解碼

RPCRuntime 發送,接受消息

Service-Stub 消息拼裝,編解碼

Server 服務方

4.核心實現

從圖中可以看出我們需要實現Stub和RPCRuntime的功能。

Stub:主要功能是消息格式怎么定義和編解碼。

消息格式:一般需要設計消息頭和消息體,當然越簡潔越好,提高傳輸效率

編解碼:二進制最高效,可以使用Protocol Buffers,Thrift。當然也可以使用可讀性比較好的JSON,XML。

RPCRuntime主要負責通信,這里涉及到選擇什么IO模型,BIO,NIO還是AIO,可以使用netty來實現NIO功能。

5.開源實現

了解開源實現,更能促進自研的成熟穩定。當然看需求是否需要自研,一般開源就可以滿足需求了。

比較好的開源實現有Dubbo,brpc,grpc,Thrift,Hessian等

6.小結

雖然RPC說起來只是進程間的通信,但是RPC服務怎么注冊,發現,路由這些都還是需要考慮的。再者畢竟是網絡傳輸,就有可能出現延遲,丟包的情況,容錯性也需要多考慮考慮。這里再把RPC調用描述的全一點,見圖2。圖中的clinet,sever只和agent交互,agent就包含了Stub和RPCRuntime的功能,一般這里的agent實現為一個jar包,和應用程序部署在一起。

現在Service Mesh也越來越成熟了,Service Mesh把agent獨立為一個進程部署(必須和業務同一機器),這樣降低了耦合性,同時業務和平臺獨立,開發迭代速度也更快。提到Service Mesh的開源實現必提Istio。圖3是Istio官網的架構圖。

希望回答對你有幫助,記得點個贊哦,謝謝。也可以關注我,后面會分享一些架構的知識。

java thrift,如何實現一個分布式RPC框架