亚洲视频二区_亚洲欧洲日本天天堂在线观看_日韩一区二区在线观看_中文字幕不卡一区

公告:魔扣目錄網(wǎng)為廣大站長(zhǎng)提供免費(fèi)收錄網(wǎng)站服務(wù),提交前請(qǐng)做好本站友鏈:【 網(wǎng)站目錄:http://www.430618.com 】, 免友鏈快審服務(wù)(50元/站),

點(diǎn)擊這里在線咨詢客服
新站提交
  • 網(wǎng)站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會(huì)員:747

隨著企業(yè) IT 服務(wù)的不斷發(fā)展,單臺(tái)服務(wù)器逐漸無(wú)法承受用戶日益增長(zhǎng)的請(qǐng)求壓力時(shí),就需要多臺(tái)服務(wù)器聯(lián)合起來(lái)構(gòu)成「服務(wù)集群」共同對(duì)外提供服務(wù)。同時(shí)業(yè)務(wù)服務(wù)會(huì)隨著產(chǎn)品需求的增多越來(lái)越腫,架構(gòu)上必須進(jìn)行服務(wù)拆分,一個(gè)完整的大型服務(wù)會(huì)被打散成很多很多獨(dú)立的小服務(wù),每個(gè)小服務(wù)會(huì)由獨(dú)立的進(jìn)程去管理來(lái)對(duì)外提供服務(wù),這就是「微服務(wù)」。

當(dāng)用戶的請(qǐng)求到來(lái)時(shí),我們需要將用戶的請(qǐng)求分散到多個(gè)服務(wù)去各自處理,然后又需要將這些子服務(wù)的結(jié)果匯總起來(lái)呈現(xiàn)給用戶。么服務(wù)之間該使用何種方式進(jìn)行交互就是需要解決的核心問(wèn)題。RPC 就是為解決服務(wù)之間信息交互而發(fā)明和存在的。

什么是 RPC ?

RPC (Remote Procedure Call)即遠(yuǎn)程過(guò)程調(diào)用,是分布式系統(tǒng)常見(jiàn)的一種通信方法,已經(jīng)有 40 多年歷史。當(dāng)兩個(gè)物理分離的子系統(tǒng)需要建立邏輯上的關(guān)聯(lián)時(shí),RPC 是牽線搭橋的常見(jiàn)技術(shù)手段之一。除 RPC 之外,常見(jiàn)的多系統(tǒng)數(shù)據(jù)交互方案還有分布式消息隊(duì)列、HTTP 請(qǐng)求調(diào)用、數(shù)據(jù)庫(kù)和分布式緩存等。

最通俗的語(yǔ)言講清楚RPC和HTTP

 

其中 RPC 和 HTTP 調(diào)用是沒(méi)有經(jīng)過(guò)中間件的,它們是端到端系統(tǒng)的直接數(shù)據(jù)交互。HTTP 調(diào)用其實(shí)也可以看成是一種特殊的 RPC,只不過(guò)傳統(tǒng)意義上的 RPC 是指長(zhǎng)連接數(shù)據(jù)交互,而 HTTP 一般是指即用即走的短鏈接。

RPC 在我們熟知的各種中間件中都有它的身影。Nginx/redis/MySQL/Dubbo/Hadoop/Spark/Tensorflow 等重量級(jí)開(kāi)源產(chǎn)品都是在 RPC 技術(shù)的基礎(chǔ)上構(gòu)建出來(lái)的,我們這里說(shuō)的 RPC 指的是廣義的 RPC,也就是分布式系統(tǒng)的通信技術(shù)。RPC 在技術(shù)中的地位好比我們身邊的空氣,它無(wú)處不在,但是又有很多人根本不知道它的存在。

Nginx 與 RPC

Ngnix 是互聯(lián)網(wǎng)企業(yè)使用最為廣泛的代理服務(wù)器。它可以為后端分布式服務(wù)提供負(fù)載均衡的功能,它可以將后端多個(gè)服務(wù)地址聚合為單個(gè)地址來(lái)對(duì)外提供服務(wù)。如圖,Django 是 Python 技術(shù)棧最流行的 Web 框架。

最通俗的語(yǔ)言講清楚RPC和HTTP

 

Nginx 和后端服務(wù)之間的交互在本質(zhì)上也可以理解為 RPC 數(shù)據(jù)交互。也許你會(huì)爭(zhēng)辯說(shuō) Nginx 和后端服務(wù)之間使用的是 HTTP 協(xié)議,走的是短連接,嚴(yán)格上不能算是 RPC 調(diào)用。

最通俗的語(yǔ)言講清楚RPC和HTTP

 

你說(shuō)的沒(méi)錯(cuò),不過(guò) Nginx 和后端服務(wù)之間還可以走其它的協(xié)議,比如 uwsgi 協(xié)議、fastcgi 協(xié)議等,這兩個(gè)協(xié)議都是采用了比 HTTP 協(xié)議更加節(jié)省流量的二進(jìn)制協(xié)議。如上圖所示,uWSGI 是著名的 Python 容器,使用它可以啟動(dòng) uwsgi 協(xié)議的服務(wù)器對(duì)外提供服務(wù)。

uwsgi 通訊協(xié)議在 Python 語(yǔ)言體系里使用非常普遍,如果一個(gè)企業(yè)內(nèi)部使用 Python 語(yǔ)言棧搭建 Web 服務(wù),那么他們?cè)谏a(chǎn)環(huán)境部署 Python 應(yīng)用的時(shí)候不是在使用 HTTP 協(xié)議就是在使用 uwsgi 協(xié)議來(lái)和 Nginx 之間建立通訊。

最通俗的語(yǔ)言講清楚RPC和HTTP

 

Fastcgi 協(xié)議在 php 語(yǔ)言體系里非常常見(jiàn),Nginx 和 PHP-fpm 進(jìn)程之間一般較常使用 Fastcgi 協(xié)議進(jìn)行通訊。

Hadoop 與 RPC

在大數(shù)據(jù)技術(shù)領(lǐng)域,RPC 也占據(jù)了非常重要的地位。大數(shù)據(jù)領(lǐng)域廣泛應(yīng)用了非常多的分布式技術(shù),分布式意味著節(jié)點(diǎn)的物理隔離,隔離意味著需要通信,通信意味著 RPC 的存在。大數(shù)據(jù)需要通信的量比業(yè)務(wù)系統(tǒng)更加龐大,所以在數(shù)據(jù)通信優(yōu)化上做的更深。

最通俗的語(yǔ)言講清楚RPC和HTTP

 

比如最常見(jiàn)的 Hadoop 文件系統(tǒng) hdfs,一般包括一個(gè) NameNode 和多個(gè) DataNode,NameNode 和 DataNode 之間就是通過(guò)一種稱為 Hadoop RPC 的二進(jìn)制協(xié)議進(jìn)行通訊。

TensorFlow 與 RPC

在人工智能領(lǐng)域,RPC 也很重要,著名的 TensorFlow 框架如果需要處理上億的數(shù)據(jù),就需要依靠分布式計(jì)算力,需要集群化,當(dāng)多個(gè)分布式節(jié)點(diǎn)需要集體智慧時(shí),就必須引入 RPC 技術(shù)進(jìn)行通訊。Tensorflow Cluster 的 RPC 通訊框架使用了 google 內(nèi)部自研的 gRPC 框架。

最通俗的語(yǔ)言講清楚RPC和HTTP

 

HTTP 調(diào)用其實(shí)也是一種特殊的 RPC

HTTP1.0 協(xié)議時(shí),HTTP 調(diào)用還只能是短鏈接調(diào)用,一個(gè)請(qǐng)求來(lái)回之后連接就會(huì)關(guān)閉。HTTP1.1 在 HTTP1.0 協(xié)議的基礎(chǔ)上進(jìn)行了改進(jìn),引入了 KeepAlive 特性可以保持 HTTP 連接長(zhǎng)時(shí)間不斷開(kāi),以便在同一個(gè)連接之上進(jìn)行多次連續(xù)的請(qǐng)求,進(jìn)一步拉近了 HTTP 和 RPC 之間的距離。

最通俗的語(yǔ)言講清楚RPC和HTTP

 

當(dāng) HTTP 協(xié)議進(jìn)化到 2.0 之后,Google 開(kāi)源了一個(gè)建立在 HTTP2.0 協(xié)議之上的通信框架直接取名為 gRPC,也就是 Google RPC,這時(shí) HTTP 和 RPC 之間已經(jīng)沒(méi)有非常明顯的界限了。所以在后文我們不再明確強(qiáng)調(diào) RPC 和 HTTP 請(qǐng)求調(diào)用之間的細(xì)微區(qū)別了,直接統(tǒng)一稱之為 RPC。

最通俗的語(yǔ)言講清楚RPC和HTTP

 

HTTP VS RPC (普通話 VS 方言)

HTTP 與 RPC 的關(guān)系就好比普通話與方言的關(guān)系。要進(jìn)行跨企業(yè)服務(wù)調(diào)用時(shí),往往都是通過(guò) HTTP API,也就是普通話,雖然效率不高,但是通用,沒(méi)有太多溝通的學(xué)習(xí)成本。但是在企業(yè)內(nèi)部還是 RPC 更加高效,同一個(gè)企業(yè)公用一套方言進(jìn)行高效率的交流,要比通用的 HTTP 協(xié)議來(lái)交流更加節(jié)省資源。整個(gè)中國(guó)有非常多的方言,正如有很多的企業(yè)內(nèi)部服務(wù)各有自己的一套交互協(xié)議一樣。雖然國(guó)家一直在提倡使用普通話交流,但是這么多年過(guò)去了,你回一趟家鄉(xiāng)探個(gè)親什么的就會(huì)發(fā)現(xiàn)身邊的人還是流行說(shuō)方言。

如果再深入一點(diǎn)說(shuō),普通話本質(zhì)上也是一種方言,只不過(guò)它是官方的方言,使用最為廣泛的方言,相比而言其它方言都是小語(yǔ)種,小語(yǔ)種之中也會(huì)有幾個(gè)使用比較廣泛比較特色的方言占比也會(huì)比較大。這就好比開(kāi)源 RPC 協(xié)議中 Protobuf 和 Thrift 一樣,它們兩應(yīng)該是 RPC 協(xié)議中使用最為廣泛的兩個(gè)。

RPC 與分布式系統(tǒng)交互方案

如果兩個(gè)子系統(tǒng)沒(méi)有在網(wǎng)絡(luò)上進(jìn)行分離,而是運(yùn)行在同一個(gè)操作系統(tǒng)實(shí)例之上的兩個(gè)進(jìn)程時(shí),它們之間的通信手段還可以更加豐富。除了以上提到的幾種分布式解決方案之外,還有共享內(nèi)存、信號(hào)量、文件系統(tǒng)、內(nèi)核消息隊(duì)列、管道等,本質(zhì)上都是通過(guò)操作系統(tǒng)內(nèi)核機(jī)制來(lái)進(jìn)行數(shù)據(jù)和消息的交互而無(wú)須經(jīng)過(guò)網(wǎng)絡(luò)協(xié)議棧。

但在現(xiàn)代企業(yè)服務(wù)中,這種單機(jī)應(yīng)用已經(jīng)非常少見(jiàn)了,因?yàn)閱螜C(jī)應(yīng)用意味著單點(diǎn)故障 —— “一人摔跤全家跌倒”。業(yè)務(wù)子系統(tǒng)往往都需要經(jīng)物理網(wǎng)絡(luò)棧進(jìn)行隔離,因此分布式解決方案在要求高可用無(wú)間斷服務(wù)的企業(yè)環(huán)境里便大有作為,這也讓 RPC 迎來(lái)自己大放異彩的時(shí)代。

前文提到的分布式子系統(tǒng)交互方案,除了 RPC 技術(shù)之外還有數(shù)據(jù)庫(kù)、消息隊(duì)列和緩存。但其實(shí)這三者本質(zhì)上是 RPC 技術(shù)的一個(gè)應(yīng)用組合。我們可以將數(shù)據(jù)庫(kù)服務(wù)理解為下面這張圖:

最通俗的語(yǔ)言講清楚RPC和HTTP

 

可以看出,子系統(tǒng)和數(shù)據(jù)庫(kù)之間的交互也是通過(guò) RPC 進(jìn)行的,只不過(guò)這里是三個(gè)子系統(tǒng)之間復(fù)雜的組合消息交互罷了。如果再深入進(jìn)去,你會(huì)發(fā)現(xiàn),這里的數(shù)據(jù)庫(kù)不是那種單機(jī)數(shù)據(jù)庫(kù),而是具備主從復(fù)制功能的數(shù)據(jù)庫(kù),比如 MySQL。在互聯(lián)網(wǎng)企業(yè)里一般都會(huì)使用這種主從讀寫(xiě)分離的數(shù)據(jù)庫(kù)。一個(gè)業(yè)務(wù)子系統(tǒng)將數(shù)據(jù)寫(xiě)往主庫(kù),主庫(kù)再將數(shù)據(jù)同步到從庫(kù),然后另一個(gè)業(yè)務(wù)子系統(tǒng)又從庫(kù)里將數(shù)據(jù)取出來(lái)。這時(shí)又可以進(jìn)一步將它們看成是四個(gè)子系統(tǒng)之間進(jìn)行的更加復(fù)雜的 RPC 數(shù)據(jù)交互。

最通俗的語(yǔ)言講清楚RPC和HTTP



 

分享到:
標(biāo)簽:HTTP
用戶無(wú)頭像

網(wǎng)友整理

注冊(cè)時(shí)間:

網(wǎng)站:5 個(gè)   小程序:0 個(gè)  文章:12 篇

  • 51998

    網(wǎng)站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會(huì)員

趕快注冊(cè)賬號(hào),推廣您的網(wǎng)站吧!
最新入駐小程序

數(shù)獨(dú)大挑戰(zhàn)2018-06-03

數(shù)獨(dú)一種數(shù)學(xué)游戲,玩家需要根據(jù)9

答題星2018-06-03

您可以通過(guò)答題星輕松地創(chuàng)建試卷

全階人生考試2018-06-03

各種考試題,題庫(kù),初中,高中,大學(xué)四六

運(yùn)動(dòng)步數(shù)有氧達(dá)人2018-06-03

記錄運(yùn)動(dòng)步數(shù),積累氧氣值。還可偷

每日養(yǎng)生app2018-06-03

每日養(yǎng)生,天天健康

體育訓(xùn)練成績(jī)?cè)u(píng)定2018-06-03

通用課目體育訓(xùn)練成績(jī)?cè)u(píng)定