欧美经典成人在观看线视频_嫩草成人影院_国产在线精品一区二区中文_国产欧美日韩综合二区三区

當前位置:首頁 > 軟件開發 > 正文

rpc與普通api接口的區別?為什么rpc比http快

rpc與普通api接口的區別?為什么rpc比http快

大家好,感謝邀請,今天來為大家分享一下rpc與普通api接口的區別的問題,以及和為什么rpc比http快的一些困惑,大家要是還不太明白的話,也沒有關系,因為接下來將為大...

大家好,感謝邀請,今天來為大家分享一下rpc與普通api接口的區別的問題,以及和為什么rpc比http快的一些困惑,大家要是還不太明白的話,也沒有關系,因為接下來將為大家分享,希望可以幫助到大家,解決大家的問題,下面就開始吧!

rpc服務的可用性

RPC(RemoteProcedureCall)是遠程過程調用,它是一種通過網絡從遠程計算機程序上請求服務,而不需要了解底層網絡技術的協議。簡單的理解是一個節點請求另一個節點提供的服務

RPC協議假定某些傳輸協議的存在,如TCP或UDP,為通信程序之間攜帶信息數據。在OSI網絡通信模型中,RPC跨越了傳輸層和應用層。RPC使得開發包括網絡分布式多程序在內的應用程序更加容易。

微服務架構實踐中,服務是如何通信的

微服務之間的通信,一般都是借助于微服務框架完成,一般有REST風格的api通信,和微服務框架結合的RPC.

REST風格的api通信

所謂的REST風格的api通常來講就是HTTP結合來使用,但是要遵循REST規范的HTTP有如下特征.

統一接口

無狀態

緩存

客戶端-服務器

分層系統

按需代碼(可選)

RPC通信

RPC(RemoteProcedureCall)遠程過程調用是一個計算機通信協議。我們一般的程序調用是本地程序內部的調用,RPC允許你像調用本地函數一樣去調用另一個程序的函數,這中間會涉及網絡通信和進程間通信,但你無需知道實現細節,RPC框架為你屏蔽了底層實現。RPC是一種服務器-客戶端(Client/Server)模式,經典實現是一個通過「發送請求-接受回應」進行信息交互的系統。

RPC通信通常和微服務框架結合,框架會定于消息的序列化格式,比如谷歌的gRPC框架就是利用protobuff序列化,來序列化消息之后通信。

常見的微服務框架有:

Dubbo

是阿里巴巴公司開源的一個Java高性能優秀的服務框架,使得應用可通過高性能的RPC實現服務的輸出和輸入功能,可以和Spring框架無縫集成。ApacheDubbo|?d?b??|是一款高性能、輕量級的開源JavaRPC框架,它提供了三大核心能力:面向接口的遠程方法調用,智能容錯和負載均衡,以及服務自動注冊和發現。2011年末對外開源,僅支持Java語言。

官網:http://dubbo.apache.org/zh-cn/

Dubbo架構圖|圖片來源dubbo.apache.org

Tars

騰訊內部使用的微服務架構TAF(TotalApplicationFramework)多年的實踐成果總結而成的開源項目。僅支持C++語言,目前在騰訊內部應用也非常廣泛。2017年對外開源,僅支持C++語言。

源碼:https://github.com/TarsCloud/Tars/

TARS架構圖|來源github.com/TarsCloud

「本命鵝廠TARS框架介紹PPT已下載,不想自己麻煩去找的同學,在我公眾號「后端技術學堂」回復「tars」獲取。」

Motan

是新浪微博開源的一個Java框架。Motan在微博平臺中已經廣泛應用,每天為數百個服務完成近千億次的調用。于2016年對外開源,僅支持Java語言。

官方指南:https://github.com/weibocom/motan/wiki/zh_userguide

Motan框架|圖片來源github.com/weibocom/motan

gRPC

是Google開發的高性能、通用的開源RPC框架,其由Google主要面向移動應用開發并基于HTTP/2協議標準而設計,基于ProtoBuf(ProtocolBuffers)序列化協議開發。本身它不是分布式的,所以要實現上面的框架的功能需要進一步的開發。2015年對外開源的跨語言RPC框架,支持多種語言。

中文教程:https://doc.oschina.net/grpc?t=58008

gRPC架構圖|圖片來源www.grpc.io

thrift

最初是由Facebook開發的內部系統跨語言的高性能RPC框架,2007年貢獻給了Apache基金,成為Apache開源項目之一,跟gRPC一樣,Thrift也有一套自己的接口定義語言IDL,可以通過代碼生成器,生成各種編程語言的Client端和Server端的SDK代碼,支持多種語言。

thrift架構|圖片來源wikimedia

創作不易,看到這里動動手指,點贊「三連」是對我持續創作的最大支持,我們下篇文章再見!

文章每周持續更新,可以微信搜索公眾號「后端技術學堂」提前看,或在公眾號回復「資料」有我給你準備的各種編程學習資料,我們下期見!

Windows下進程間通訊的幾個比較

1進程與進程通信

進程是裝入內存并準備執行的程序,每個進程都有私有的虛擬地址空間,由代碼、數據以及它可利用的系統資源(如文件、管道等)組成。多進程/多線程是Windows操作系統的一個基本特征。MicrosoftWin32應用編程接口(ApplicationProgrammingInterface,API)提供了大量支持應用程序間數據共享和交換的機制,這些機制行使的活動稱為進程間通信(InterProcessCommunication,IPC),進程通信就是指不同進程間進行數據共享和數據交換。

正因為使用Win32API進行進程通信方式有多種,如何選擇恰當的通信方式就成為應用開發中的一個重要問題,下面本文將對Win32中進程通信的幾種方法加以分析和比較。

2進程通信方法

2.1文件映射

文件映射(Memory-MappedFiles)能使進程把文件內容當作進程地址區間一塊內存那樣來對待。因此,進程不必使用文件I/O操作,只需簡單的指針操作就可讀取和修改文件的內容。

Win32API允許多個進程訪問同一文件映射對象,各個進程在它自己的地址空間里接收內存的指針。通過使用這些指針,不同進程就可以讀或修改文件的內容,實現了對文件中數據的共享。

應用程序有三種方法來使多個進程共享一個文件映射對象。

(1)繼承:第一個進程建立文件映射對象,它的子進程繼承該對象的句柄。

(2)命名文件映射:第一個進程在建立文件映射對象時可以給該對象指定一個名字(可與文件名不同)。第二個進程可通過這個名字打開此文件映射對象。另外,第一個進程也可以通過一些其它IPC機制(有名管道、郵件槽等)把名字傳給第二個進程。

(3)句柄復制:第一個進程建立文件映射對象,然后通過其它IPC機制(有名管道、郵件槽等)把對象句柄傳遞給第二個進程。第二個進程復制該句柄就取得對該文件映射對象的訪問權限。

文件映射是在多個進程間共享數據的非常有效方法,有較好的安全性。但文件映射只能用于本地機器的進程之間,不能用于網絡中,而開發者還必須控制進程間的同步。

2.2共享內存

Win32API中共享內存(SharedMemory)實際就是文件映射的一種特殊情況。進程在創建文件映射對象時用0xFFFFFFFF來代替文件句柄(HANDLE),就表示了對應的文件映射對象是從操作系統頁面文件訪問內存,其它進程打開該文件映射對象就可以訪問該內存塊。由于共享內存是用文件映射實現的,所以它也有較好的安全性,也只能運行于同一計算機上的進程之間。

2.3匿名管道

管道(Pipe)是一種具有兩個端點的通信通道:有一端句柄的進程可以和有另一端句柄的進程通信。管道可以是單向-一端是只讀的,另一端點是只寫的;也可以是雙向的一管道的兩端點既可讀也可寫。

匿名管道(AnonymousPipe)是在父進程和子進程之間,或同一父進程的兩個子進程之間傳輸數據的無名字的單向管道。通常由父進程創建管道,然后由要通信的子進程繼承通道的讀端點句柄或寫端點句柄,然后實現通信。父進程還可以建立兩個或更多個繼承匿名管道讀和寫句柄的子進程。這些子進程可以使用管道直接通信,不需要通過父進程。

匿名管道是單機上實現子進程標準I/O重定向的有效方法,它不能在網上使用,也不能用于兩個不相關的進程之間。

2.4命名管道

命名管道(NamedPipe)是服務器進程和一個或多個客戶進程之間通信的單向或雙向管道。不同于匿名管道的是命名管道可以在不相關的進程之間和不同計算機之間使用,服務器建立命名管道時給它指定一個名字,任何進程都可以通過該名字打開管道的另一端,根據給定的權限和服務器進程通信。

命名管道提供了相對簡單的編程接口,使通過網絡傳輸數據并不比同一計算機上兩進程之間通信更困難,不過如果要同時和多個進程通信它就力不從心了。

2.5郵件槽

郵件槽(Mailslots)提供進程間單向通信能力,任何進程都能建立郵件槽成為郵件槽服務器。其它進程,稱為郵件槽客戶,可以通過郵件槽的名字給郵件槽服務器進程發送消息。進來的消息一直放在郵件槽中,直到服務器進程讀取它為止。一個進程既可以是郵件槽服務器也可以是郵件槽客戶,因此可建立多個郵件槽實現進程間的雙向通信。

通過郵件槽可以給本地計算機上的郵件槽、其它計算機上的郵件槽或指定網絡區域中所有計算機上有同樣名字的郵件槽發送消息。廣播通信的消息長度不能超過400字節,非廣播消息的長度則受郵件槽服務器指定的最大消息長度的限制。

郵件槽與命名管道相似,不過它傳輸數據是通過不可靠的數據報(如TCP/IP協議中的UDP包)完成的,一旦網絡發生錯誤則無法保證消息正確地接收,而命名管道傳輸數據則是建立在可靠連接基礎上的。不過郵件槽有簡化的編程接口和給指定網絡區域內的所有計算機廣播消息的能力,所以郵件槽不失為應用程序發送和接收消息的另一種選擇。

2.6剪貼板

剪貼板(ClippedBoard)實質是Win32API中一組用來傳輸數據的函數和消息,為Windows應用程序之間進行數據共享提供了一個中介,Windows已建立的剪切(復制)-粘貼的機制為不同應用程序之間共享不同格式數據提供了一條捷徑。當用戶在應用程序中執行剪切或復制操作時,應用程序把選取的數據用一種或多種格式放在剪貼板上。然后任何其它應用程序都可以從剪貼板上拾取數據,從給定格式中選擇適合自己的格式。

剪貼板是一個非常松散的交換媒介,可以支持任何數據格式,每一格式由一無符號整數標識,對標準(預定義)剪貼板格式,該值是Win32API定義的常量;對非標準格式可以使用RegisterClipboardFormat函數注冊為新的剪貼板格式。利用剪貼板進行交換的數據只需在數據格式上一致或都可以轉化為某種格式就行。但剪貼板只能在基于Windows的程序中使用,不能在網絡上使用。

2.7動態數據交換

動態數據交換(DDE)是使用共享內存在應用程序之間進行數據交換的一種進程間通信形式。應用程序可以使用DDE進行一次性數據傳輸,也可以當出現新數據時,通過發送更新值在應用程序間動態交換數據。

DDE和剪貼板一樣既支持標準數據格式(如文本、位圖等),又可以支持自己定義的數據格式。但它們的數據傳輸機制卻不同,一個明顯區別是剪貼板操作幾乎總是用作對用戶指定操作的一次性應答-如從菜單中選擇Paste命令。盡管DDE也可以由用戶啟動,但它繼續發揮作用一般不必用戶進一步干預。DDE有三種數據交換方式:

(1)冷鏈:數據交換是一次性數據傳輸,與剪貼板相同。

(2)溫鏈:當數據交換時服務器通知客戶,然后客戶必須請求新的數據。

(3)熱鏈:當數據交換時服務器自動給客戶發送數據。

DDE交換可以發生在單機或網絡中不同計算機的應用程序之間。開發者還可以定義定制的DDE數據格式進行應用程序之間特別目的IPC,它們有更緊密耦合的通信要求。大多數基于Windows的應用程序都支持DDE。

2.8對象連接與嵌入

應用程序利用對象連接與嵌入(OLE)技術管理復合文檔(由多種數據格式組成的文檔),OLE提供使某應用程序更容易調用其它應用程序進行數據編輯的服務。例如,OLE支持的字處理器可以嵌套電子表格,當用戶要編輯電子表格時OLE庫可自動啟動電子表格編輯器。當用戶退出電子表格編輯器時,該表格已在原始字處理器文檔中得到更新。在這里電子表格編輯器變成了字處理器的擴展,而如果使用DDE,用戶要顯式地啟動電子表格編輯器。

同DDE技術相同,大多數基于Windows的應用程序都支持OLE技術。

2.9動態連接庫

Win32動態連接庫(DLL)中的全局數據可以被調用DLL的所有進程共享,這就又給進程間通信開辟了一條新的途徑,當然訪問時要注意同步問題。

雖然可以通過DLL進行進程間數據共享,但從數據安全的角度考慮,我們并不提倡這種方法,使用帶有訪問權限控制的共享內存的方法更好一些。

2.10遠程過程調用

Win32API提供的遠程過程調用(RPC)使應用程序可以使用遠程調用函數,這使在網絡上用RPC進行進程通信就像函數調用那樣簡單。RPC既可以在單機不同進程間使用也可以在網絡中使用。

由于Win32API提供的RPC服從OSF-DCE(OpenSoftwareFoundationDistributedComputingEnvironment)標準。所以通過Win32API編寫的RPC應用程序能與其它操作系統上支持DEC的RPC應用程序通信。使用RPC開發者可以建立高性能、緊密耦合的分布式應用程序。

2.11NetBios函數

Win32API提供NetBios函數用于處理低級網絡控制,這主要是為IBMNetBios系統編寫與Windows的接口。除非那些有特殊低級網絡功能要求的應用程序,其它應用程序最好不要使用NetBios函數來進行進程間通信。

2.12Sockets

WindowsSockets規范是以U.C.Berkeley大學BSDUNIX中流行的Socket接口為范例定義的一套Windows下的網絡編程接口。除了BerkeleySocket原有的庫函數以外,還擴展了一組針對Windows的函數,使程序員可以充分利用Windows的消息機制進行編程。

現在通過Sockets實現進程通信的網絡應用越來越多,這主要的原因是Sockets的跨平臺性要比其它IPC機制好得多,另外WinSock2.0不僅支持TCP/IP協議,而且還支持其它協議(如IPX)。Sockets的唯一缺點是它支持的是底層通信操作,這使得在單機的進程間進行簡單數據傳遞不太方便,這時使用下面將介紹的WM_COPYDATA消息將更合適些。

2.13WM_COPYDATA消息

WM_COPYDATA是一種非常強大卻鮮為人知的消息。當一個應用向另一個應用傳送數據時,發送方只需使用調用SendMessage函數,參數是目的窗口的句柄、傳遞數據的起始地址、WM_COPYDATA消息。接收方只需像處理其它消息那樣處理WM_COPYDATA消息,這樣收發雙方就實現了數據共享。

WM_COPYDATA是一種非常簡單的方法,它在底層實際上是通過文件映射來實現的。它的缺點是靈活性不高,并且它只能用于Windows平臺的單機環境下。

rpc是什么意思

RPC是指遠程過程調用(RemoteProcedureCall),是一種計算機網絡技術,用于實現分布式系統中不同計算機上的進程之間的通信與調用。

通過RPC,客戶端可以請求遠程服務器上的一個指定的函數或方法,并等待結果返回,使用起來非常方便。它適用于各種類型的應用程序,包括在線游戲、電子商務和金融系統等。RPC最早由SunMicrosystems開發,現在已經成為了大量分布式應用程序的基礎。它可以充分利用網絡資源,提高應用程序的性能和可擴展性,是計算機網絡領域中的一項重要技術。

rpc原理及實現

RPC(RemoteProcedureCall,遠程過程調用)是一種通過網絡在不同計算機之間調用函數或方法的技術。它允許一個程序通過網絡調用另一個程序中的函數或方法,就像調用本地函數一樣。

RPC的原理如下:

定義接口:定義遠程過程接口,包括函數名、參數和返回值等信息。

實現接口:在本地計算機上實現遠程過程接口,并將其編譯為二進制格式。

服務器端:將遠程過程接口發布到網絡上,以便其他計算機可以調用它。

客戶端:通過網絡調用遠程過程接口。客戶端需要知道遠程過程接口的地址和端口號,以及函數名和參數等信息。

實現調用:客戶端通過網絡將調用請求發送給服務器端,服務器端接收請求并執行遠程過程,然后將結果返回給客戶端。

RPC的實現方式有很多種,常見的包括:

基于HTTP的RPC:通過HTTP協議傳輸RPC請求和響應。例如,RESTfulAPI就是一種基于HTTP的RPC實現方式。

基于TCP的RPC:通過TCP協議傳輸RPC請求和響應。例如,gRPC就是一個基于TCP的RPC框架。

基于UDP的RPC:通過UDP協議傳輸RPC請求和響應。例如,Ice和Nanomsg都是基于UDP的RPC實現方式。

基于WebSocket的RPC:通過WebSocket協議傳輸RPC請求和響應。例如,WebSocketRPC就是一種基于WebSocket的RPC實現方式。

基于其他協議的RPC:除了上述常見的協議外,還有一些其他的協議可以用于實現RPC,例如,FTP、SMTP等。

總之,RPC的原理是通過網絡在不同計算機之間調用函數或方法,實現方式有很多種,常見的包括基于HTTP、TCP、UDP、WebSocket等協議的RPC。

OK,關于rpc與普通api接口的區別和為什么rpc比http快的內容到此結束了,希望對大家有所幫助。