總結:RPC主要用於公司內部服務調用,傳輸效率高(TCP,報文小),性能消耗低(高效的二進制傳輸、字節小、序列化耗時少),服務治理方便:
1、傳輸協議:
RPC:可以基於HTTP協議,也可以基於TCP協議
HTTP:基於HTTP協議
從網絡協議來說,Http協議與Rpc同屬於應用層, 他們的底層都是tcp協議。RPC(即Remote Procedure Call,遠程過程調用)和HTTP(HyperText Transfer Protocol,超文本傳輸協議)他們最本質的區別,就是RPC主要工作在TCP協議之上,而HTTP服務主要是工作在HTTP協議之上,我們都知道HTTP協議是在傳輸層協議TCP之上的,所以效率來看的話,RPC當然是要更勝一籌。
2、傳輸效率:
RPC:使用自定義的TCP協議,可以讓請求報文體積更小,或者使用HTTP2協議,也可以很好的減小報文體積,提高傳輸效率
HTTP:如果是基於http1.1的協議,請求中會包含很多無用的內容,如果是基於HTTP2.0,那么簡單的封裝下可以作為一個RPC來使用,這時標准的RPC框架更多的是服務治理。
http協議其實是屬於面向桌面瀏覽器的一個通信協議,對於緩存,冪等或者Cookies相關的方面做了很多的事情。但是對於服務器之間直接的交互,Rpc就能夠體現出來他的優勢了。自定義協議,減少數據傳輸:我們大概看一下http協議。請求行,請求頭部,請求數據,空行。很明顯對於遠程調用場景,我們對於請求行的依賴不是特別的強,那么這一部分在我們應用場景下,將會成為負擔,但是http協議又是固定的,我們也不可能隨便修改協議的格式。所以,通過rpc協議我們可以精簡請求的數據,來盡可能少的傳輸我們的數據。當前,rpc也可以通過http協議來進行傳輸。
3、性能消耗:
RPC:可以基於thrift實現高效的二進制傳輸
HTTP:大部分是基於json實現的,字節大小和序列化耗時都比thrift要更消耗性能
4、負載均衡:
RPC:基本自帶了負載均衡策略
HTTP:需要配置Nginx、HAProxy配置
5、服務治理:(下游服務新增,重啟,下線時如何不影響上游調用者)
RPC:能做到自動通知,不影響上游
HTTP:需要事先通知,如修改NGINX配置。
6、連接:
RPC:長連接
HTTP:短連接
rpc使用長連接:直接基於socket進行連接,不用每個請求都重新走三次握手的流程