自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

如何通俗易懂的向面試官解釋什么是 RPC 框架

開發(fā) 架構(gòu)
RPC是指遠(yuǎn)程過程調(diào)用,也就是說兩臺服務(wù)器A,B,一個(gè)應(yīng)用部署在A服務(wù)器上,想要調(diào)用B服務(wù)器上應(yīng)用提供的函數(shù)/方法,由于不在一個(gè)內(nèi)存空間,不能直接調(diào)用,需要通過網(wǎng)絡(luò)來表達(dá)調(diào)用的語義和傳達(dá)調(diào)用的數(shù)據(jù)。

 關(guān)于RPC

首先了解什么叫RPC,為什么要RPC,RPC是指遠(yuǎn)程過程調(diào)用,也就是說兩臺服務(wù)器A,B,一個(gè)應(yīng)用部署在A服務(wù)器上,想要調(diào)用B服務(wù)器上應(yīng)用提供的函數(shù)/方法,由于不在一個(gè)內(nèi)存空間,不能直接調(diào)用,需要通過網(wǎng)絡(luò)來表達(dá)調(diào)用的語義和傳達(dá)調(diào)用的數(shù)據(jù)。

比如說,一個(gè)方法可能是這樣定義的:

Employee getEmployeeByName(String fullName)

那么:

  • 首先,要解決通訊的問題,主要是通過在客戶端和服務(wù)器之間建立TCP連接,遠(yuǎn)程過程調(diào)用的所有交換的數(shù)據(jù)都在這個(gè)連接里傳輸。連接可以是按需連接,調(diào)用結(jié)束后就斷掉,也可以是長連接,多個(gè)遠(yuǎn)程過程調(diào)用共享同一個(gè)連接。
  • 第二,要解決尋址的問題,也就是說,A服務(wù)器上的應(yīng)用怎么告訴底層的RPC框架,如何連接到B服務(wù)器(如主機(jī)或IP地址)以及特定的端口,方法的名稱名稱是什么,這樣才能完成調(diào)用。比如基于Web服務(wù)協(xié)議棧的RPC,就要提供一個(gè)endpoint URI,或者是從UDDI服務(wù)上查找。如果是RMI調(diào)用的話,還需要一個(gè)RMI Registry來注冊服務(wù)的地址。
  • 第三,當(dāng)A服務(wù)器上的應(yīng)用發(fā)起遠(yuǎn)程過程調(diào)用時(shí),方法的參數(shù)需要通過底層的網(wǎng)絡(luò)協(xié)議如TCP傳遞到B服務(wù)器,由于網(wǎng)絡(luò)協(xié)議是基于二進(jìn)制的,內(nèi)存中的參數(shù)的值要序列化成二進(jìn)制的形式,也就是序列化(Serialize)或編組(marshal),通過尋址和傳輸將序列化的二進(jìn)制發(fā)送給B服務(wù)器。
  • 第四,B服務(wù)器收到請求后,需要對參數(shù)進(jìn)行反序列化(序列化的逆操作),恢復(fù)為內(nèi)存中的表達(dá)方式,然后找到對應(yīng)的方法(尋址的一部分)進(jìn)行本地調(diào)用,然后得到返回值。
  • 第五,返回值還要發(fā)送回服務(wù)器A上的應(yīng)用,也要經(jīng)過序列化的方式發(fā)送,服務(wù)器A接到后,再反序列化,恢復(fù)為內(nèi)存中的表達(dá)方式,交給A服務(wù)器上的應(yīng)用

 

(圖片來源:https://www.cs.rutgers.edu/~pxk/417/notes/03-rpc.html)

為什么RPC呢?就是無法在一個(gè)進(jìn)程內(nèi),甚至一個(gè)計(jì)算機(jī)內(nèi)通過本地調(diào)用的方式完成的需求,比如比如不同的系統(tǒng)間的通訊,甚至不同的組織間的通訊。由于計(jì)算能力需要橫向擴(kuò)展,需要在多臺機(jī)器組成的集群上部署應(yīng)用,

RPC的協(xié)議有很多,比如最早的CORBA,Java RMI,Web Service的RPC風(fēng)格,Hessian,Thrift,甚至Rest API。

關(guān)于Netty

而Netty框架不局限于RPC,更多的是作為一種網(wǎng)絡(luò)協(xié)議的實(shí)現(xiàn)框架,比如HTTP,由于RPC需要高效的網(wǎng)絡(luò)通信,就可能選擇以Netty作為基礎(chǔ)。除了網(wǎng)絡(luò)通信,RPC還需要有比較高效的序列化框架,以及一種尋址方式。如果是帶會(huì)話(狀態(tài))的RPC調(diào)用,還需要有會(huì)話和狀態(tài)保持的功能。

大體上來說,Netty就是提供一種事件驅(qū)動(dòng)的,責(zé)任鏈?zhǔn)?也可以說是流水線)的網(wǎng)絡(luò)協(xié)議實(shí)現(xiàn)方式。網(wǎng)絡(luò)協(xié)議包含很多層次,很多部分組成,如傳輸層協(xié)議,編碼解碼,壓縮解壓,身份認(rèn)證,加密解密,請求的處理邏輯,怎么能夠更好的復(fù)用,擴(kuò)展,業(yè)界通用的方法就是責(zé)任鏈,

一個(gè)請求應(yīng)答網(wǎng)絡(luò)交互通常包含兩條鏈,一條鏈(Upstream)是從傳輸層,經(jīng)過一系列步驟,如身份認(rèn)證,解密,日志,流控,***到達(dá)業(yè)務(wù)層,一條鏈(DownStream)是業(yè)務(wù)層返回后,又經(jīng)過一系列步驟,如加密等,又回到傳輸層。

 

如何通俗易懂的向面試官解釋什么是 RPC 框架

 

(圖片來源:ChannelPipeline (The Netty Project API Reference (3.2.6.Final)))

這樣每一層都有一個(gè)處理接口,都可以進(jìn)行不同的操作,比如身份認(rèn)證,加解密,日志,流控,將不同的處理實(shí)現(xiàn)像拼積木那樣插接起來就可以實(shí)現(xiàn)一個(gè)網(wǎng)絡(luò)協(xié)議了(快速開發(fā))。每一層都有自己的實(shí)現(xiàn),上層不需要關(guān)注面向網(wǎng)絡(luò)的操作(可維護(hù))。Netty已經(jīng)提供了很多實(shí)現(xiàn)。

 

如何通俗易懂的向面試官解釋什么是 RPC 框架

 

(圖片來源:http://docs.jboss.org/netty/3.1/guide/html/architecture.html)

當(dāng)然Netty還有許多好處,比如對非阻塞IO(NIO)的支持,比如在鏈上傳遞時(shí)***程度的減少buffer的copy(高性能)。

責(zé)任編輯:武曉燕 來源: 今日頭條
相關(guān)推薦

2018-01-17 22:36:46

區(qū)塊鏈數(shù)字貨幣比特幣

2019-04-08 20:20:37

2018-03-05 08:23:40

物聯(lián)網(wǎng)互聯(lián)網(wǎng)網(wǎng)絡(luò)技術(shù)

2021-05-26 16:12:20

區(qū)塊鏈加密貨幣比特幣

2011-10-26 19:57:33

2023-11-14 11:23:39

計(jì)算自動(dòng)駕駛

2021-12-26 15:19:39

HTTPS網(wǎng)絡(luò)協(xié)議網(wǎng)絡(luò)傳輸

2019-06-19 08:30:47

網(wǎng)絡(luò)協(xié)議IPTCP

2019-01-17 10:02:48

2023-01-06 09:40:20

項(xiàng)目性能

2020-06-08 10:50:58

前端TypeScript代碼

2022-06-28 07:31:11

哨兵模式redis

2022-09-23 08:32:53

微服務(wù)架構(gòu)服務(wù)

2021-09-07 10:44:33

Java 注解開發(fā)

2021-11-04 08:16:50

MySQL SQL 語句數(shù)據(jù)庫

2022-07-06 08:17:50

C 語言函數(shù)選型

2019-05-20 07:37:00

TCPIP網(wǎng)絡(luò)協(xié)議

2023-10-28 09:13:32

系統(tǒng)面試官架構(gòu)

2022-08-01 08:18:58

網(wǎng)絡(luò)網(wǎng)絡(luò)協(xié)議

2021-02-19 10:02:57

HTTPSJava安全
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號