日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

远程过程调用RPC简介

發布時間:2023/11/27 生活经验 45 豆豆
生活随笔 收集整理的這篇文章主要介紹了 远程过程调用RPC简介 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

RPC(Remote Procedure Call, 遠程過程調用):是一種通過網絡從遠程計算機程序上請求服務,而不需要了解底層網絡技術的思想

RPC是一種技術思想而非一種規范或協議常見RPC技術和框架有

(1). 應用級的服務框架:阿里的 Dubbo/Dubbox、Google gRPC、Spring Boot/Spring Cloud。

(2). 遠程通信協議:RMI、Socket、SOAP(HTTP XML)、REST(HTTP JSON)。

(3). 通信框架:MINA和Netty。

目前流行的開源RPC框架主要有阿里巴巴的Dubbo、Facebook的Thrift、Google的gRPC、Twitter的Finagle等。

RPC框架的重要組成

(1). 客戶端(Client):服務調用方。

(2). 客戶端存根(Client Stub):存放服務端地址信息,將客戶端的請求參數數據信息打包成網絡消息,再通過網絡傳輸發送給服務端。

(3). 服務端存根(Server Stub):接收客戶端發送過來的請求消息并進行解包,然后再調用本地服務進行處理。

(4). 服務端(Server):服務的真正提供者。

(5). Network Service:底層傳輸,可以是TCP或HTTP。

一次RPC調用流程如下

(1). 服務消費者(Client客戶端)通過本地調用的方式調用服務。

(2). 客戶端存根(Client Stub)接收到調用請求后負責將方法、入參等信息序列化(組裝)成能夠進行網絡傳輸的消息體。

(3). 客戶端存根(Client Stub)找到遠程的服務地址,并且將消息通過網絡發送給服務端。

(4). 服務端存根(Server Stub)收到消息后進行解碼(反序列化操作)。

(5). 服務端存根(Server Stub)根據解碼結果調用本地的服務進行相關處理

(6). 服務端(Server)本地服務業務處理。

(7). 處理結果返回給服務端存根(Server Stub)。

(8). 服務端存根(Server Stub)序列化結果。

(9). 服務端存根(Server Stub)將結果通過網絡發送至消費方。

(10). 客戶端存根(Client Stub)接收到消息,并進行解碼(反序列化)。

(11). 服務消費方得到最終結果。

RPC要解決的兩個問題

(1). 解決分布式系統中,服務之間的調用問題。

(2). 遠程調用時,要能夠像本地調用一樣方便,讓調用者感知不到遠程調用的邏輯。

RPC的核心并不在于使用什么協議。RPC的目的是讓你在本地調用遠程的方法,而對你來說這個調用是透明的,你并不知道這個調用的方法是部署哪里。通過RPC能解耦服務,這才是使用RPC的真正目的。RPC的原理主要用到了動態代理模式,至于HTTP協議,只是傳輸協議而已。在RPC中可選的網絡傳輸方式有多種,可以選擇TCP協議、UDP協議、HTTP 協議。

簡單的說,RPC就是從一臺機器(客戶端)上通過參數傳遞的方式調用另一臺機器(服務器)上的一個函數或方法(可以統稱為服務)并得到返回的結果。RPC會隱藏底層的通訊細節(不需要直接處理Socket通訊或Http通訊),RPC 是一個請求響應模型??蛻舳税l起請求,服務器返回響應(類似于Http的工作方式),RPC在使用形式上像調用本地函數(或方法)一樣去調用遠程的函數(或方法)

RPC采用客戶機/服務器模式:請求程序就是一個客戶機,而服務提供程序就是一個服務器。首先,客戶機調用進程發送一個有進程參數的調用信息到服務進程,然后等待應答信息。在服務器端,進程保持睡眠狀態直到調用信息到達為止。當一個調用信息到達,服務器獲得進程參數,計算結果,發送答復信息,然后等待下一個調用信息,最后,客戶端調用進程接收答復信息,獲得進程結果,然后調用執行繼續進行。

RPC是指遠程過程調用,也就是說兩臺服務器A,B,一個應用部署在A服務器上,想要調用B服務器上應用提供的函數/方法,由于不在一個內存空間,不能直接調用,需用通過網絡來表達調用的語義和傳達調用的數據,執行過程如下圖所示,無法在一個進程內,甚至一個計算機內通過本地調用的方式完成的需求,比如不同的系統間的通訊,甚至不同的組織間的通訊。由于計算能力需要橫向擴展,需要在多臺機器組成的集群上部署應用時需要使用RPC。

進程間通信(IPC,Inter-Process Communication),指至少兩個進程或線程間傳送數據或信號的一些技術或方法。進程是計算機系統分配資源的最小單位。每個進程都有自己的一部分獨立的系統資源,彼此是隔離的。為了能使不同的進程互相訪問資源并進行協調工作,才有了進程間通信。這些進程可以運行在同一計算機上或網絡連接的不同計算機上。進程間通信技術包括消息傳遞、同步、共享內存和遠程過程調用。IPC是一種標準的Unix通信機制。有兩種類型的進程間通信(IPC):

(1). 本地過程調用(LPC):用在多任務操作系統中,使得同時運行的任務能互相會話。這些任務共享內存空間使任務同步和互相發送信息。

(2). 遠程過程調用(RPC):RPC類似于LPC,只是在網上工作。

RPC主要用于公司內部的服務調用,性能消耗低,傳輸效率高,實現復雜。HTTP主要用于對外的異構環境,瀏覽器接口調用,App接口調用,第三方接口調用等。

RPC使用場景(大型的網站,內部子系統較多、接口非常多的情況下適合使用RPC):

(1). 長鏈接:不必每次通信都要像HTTP一樣去3次握手,減少了網絡開銷。

(2). 注冊發布機制:RPC框架一般都有注冊中心,有豐富的監控管理;發布、下線接口、動態擴展等,對調用方來說是無感知、統一化的操作。

(3). 安全性:沒有暴露資源操作。

(4). 微服務支持:就是最近流行的服務化架構、服務化治理,RPC框架是一個強力的支撐。

注:以上內容均來自網絡整理,主要參考:

1.?https://mp.weixin.qq.com/s/UYL8yD9lusl3ELPSiIDk_A

2.?https://www.zhihu.com/question/25536695

3.?https://www.jianshu.com/p/b0343bfd216e

4.?https://www.cs.rutgers.edu/~pxk/417/notes/03-rpc.html

以下是使用python3實現的簡單的客戶端、服務器簡單測試代碼:

test_server_1.py內容如下:

from xmlrpc.server import SimpleXMLRPCServerclass MyFuncs:def add(self, a, b):return a + bif __name__ == "__main__":s = SimpleXMLRPCServer(("localhost", 8000))s.register_instance(MyFuncs())print("server is online ...")s.serve_forever()

test_client_1.py內容如下:

import xmlrpc.clients = xmlrpc.client.ServerProxy("http://localhost:8000")
print("sum:", s.add(2, 3))

執行結果如下:

GitHub:https://github.com/fengbingchun/Python_Test

總結

以上是生活随笔為你收集整理的远程过程调用RPC简介的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。