成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

RPC是什么?為什么要學習RPC?

開發 開發工具
隨著近幾年分布式、微服務架構的火熱,RPC在開發工作中使用的越來越多,也變的越來越重要。今天我們來看RPC是什么,為什么要了解RPC,通過學習RPC我們能掌握什么內容?

隨著近幾年分布式、微服務架構的火熱,RPC在開發工作中使用的越來越多,也變的越來越重要。

今天我們來看RPC是什么,為什么要了解RPC,通過學習RPC我們能掌握什么內容?

什么是「RPC」

RPC 全稱 Remote Procedure Call, wikipedia的部分說明:

RPC is a request–response protocol. An RPC is initiated by the client , which sends a request message to a known remote server to execute a specified procedure with supplied parameters. The remote server sends a response to the client, and the application continues its process.

首先這里的重點是「protocol」,其次是 RPC中的R -「Remote」。所以這里的RPC的意義是一個調用執行遠程方法的協議。我們對于方法的調用一般類似這樣

 

  1. Echo echo = child.say("Hello World"); 

這種一般是指調用自己本地的方法,比如 Java 應用是指調用在同一個 JVM 內的方法。

如果上述的代碼要換成我們以RPC的形式去調用,寫法有什么區別呢?

其實是沒有的。

我們在調用時仍然按這個形式,僅需要在配置中指定這個方法對應的「遠程地址」即可。

再舉個生活化的例子。

假設你是招攬游客的小販。每次集齊了游客你都在賣力的吆喝,在各種神奇的網站的搜索,找對應景點的導游。后來有一天,你和街邊多個打印店談了合作。符合條件可以導對應景點的都可以在打印店「登記」,你下次來的時候根據記錄,直接「聯系」對應的人即可,省力不少哇。

這里我們看到兩種RPC的使用形式:

  • 直接在配置中固定寫好遠程方法的地址,請求是一步到位
  • 在配置中提供的「注冊處」的地址,方法請求時先到注冊處查方法地址再執行

看到這里,你不禁要說,調用個遠程方法嘛,又不難,有啥看的。

那我們繼續這個生活化的例子。

在你集齊了游客聯系經常合作的導游時,他生病了。你要找誰? 你說我有「備份」嘛,登記處記錄了好多呢。

那好,這好多個導游里,你「選哪一個」?

你說,靠,我那管那么多,隨便挑一個打電話就是了。好,這時你就已經在用到了RPC中的「負載均衡LoadBalance」了,只不過你的策略是用的「隨機」。

如果在導游登記的時候每個提供了照片和歷史認證評級,那你可能不會隨便挑一個打,可能會看看照片,哪個感覺更靠譜,哪個評級更高。此時這些項都做為你聯系他的一個「權重」。在多個導游間,這個權重決定了被聯系次數的多少。此時你的LB不再是簡單隨機,而是根據「權重」進行。

再比如你們合作多次,固定的幾個景點就是固定的幾個導游,老相識,每次帶人來都找他。此時你的策略又變成了「一致性Hash」。

后來,有導游和你說,最近像他們這類自找生意的導游,被發現在主動拉生意,可能會罰款,下次聯系他的時候別說那么多。于是你們訂了個簡單「協議」:先說「0或1」,代表是否空閑,再說「1到100」代表你們所帶游客游覽的景點。再說「0或1」代表是否可以帶購物。

你會發現,此時你們的協議里有「編碼」,有壓縮,每個人在聽到對方信息時,需要再在你這里解碼,還原成真實的信息。在 RPC 里也一樣,在方法調用前,需要將對應的參數序列化,以指定的「格式」傳遞,到達后再對應的還原回去執行方法。

過了一段時間,你的業務發展壯大,一個景區附近的導游們自動組隊。在你請求到達時,這個景區的導游里自動根據上面的權重選一個人出來,這些導游組成的,就是一個「Cluster」

業務發展的同時,你成立了一個秘書團,這些人負責過一段時間聯系一下各個導游組,判斷這個景區是否能提供,這個時候,秘書團就在進行「監控」。

(一口老血,編不下去了……)

接下來要說的是,我們為什么要學習 RPC。

為什么要學習 RPC

為什么要學習 RPC呢? 我們開頭時也提到,微服務、分布式應用的開發越來越常見, RPC 是其中相當重要的組件。通過 RPC 的學習,可以更好的理解和進行較大型應用的設計與開發。

同時, RPC 中涉及到的各類技術,也會使學習者知識面更寬廣,每個方面,都值得深入。而對于技術,特別是源碼的學習,又會返過來促使更好的理解 RPC,你寫出更好的代碼。

學習 RPC 我們能掌握什么

我們上面的生活化例子中,提到了這些技術

  • 注冊處
  • 集群
  • 負載均衡
  • 協議
  • 序列化編碼、解碼
  • 一致性Hash
  • 監控
  • ……

這些技術,也是 RPC 中很重要的一些內容。 我們看 Dubbo 的源碼中,從代碼的組織上,也能一窺究竟。

這張圖里,比我們在上面例子里提到的技術,多一些「Filter」,「Config」還有「Remoting」,包含了更完整的 RPC 的配置管理,請求過濾,多協議支持等內容。

而對 RPC 學習,例如負載均衡,除技術之外,還可以學習一種思想,是一種可遷移的東西。這種負載均衡的使用和實現,在 Nginx、Apache 做反向代理,在 應用服務器做集群搭建時,都會用的到。

像一致性Hash,對于通過 Hash思想來實現請求均衡的實現中,一致性 Hash 的思路,能更大程度的保證請求 Hash到原來的服務器上,在增減服務器時,影響減小。

再比如「注冊處」Registry 中,我們可以了解到通過 zk, redis,甚至廣播 的注冊處實現。這種注冊處的學習,可以在我們后續的微服務,分布式應用中常用的「注冊中心」提供實現的思路。

再比如 我們遠程調用時參數、信息的序列化,我們 Java 默認的序列化在性能上不能滿足 RPC 這種高頻序列化的應用場景,那有什么好的辦法來提升序列化性能呢?

你會發現 Dubbo 中集成了 kryo,hessian2,fastjson等支持,可以比較學習這些不同的序列化實現,在自己的業務場景中有需要時,就發現你的技能工具箱中又多了一件工具。

類似的內容還有很多,學習這些都能讓我們更好的成長。

【本文為51CTO專欄作者“侯樹成”的原創稿件,轉載請通過作者微信公眾號『Tomcat那些事兒』獲取授權】

戳這里,看該作者更多好文

責任編輯:趙寧寧 來源: 51CTO專欄
相關推薦

2022-06-07 08:39:35

RPCHTTP

2016-09-22 16:06:21

微服務架構RPC框架

2020-11-25 09:36:17

HTTPRPC遠程

2023-10-23 11:07:37

HTTPRPC

2022-07-19 08:01:32

HTTP協議RPC

2023-09-07 08:07:56

goHTTP網絡

2017-04-05 18:10:05

R語言開發Ross

2012-06-18 14:51:09

Python

2015-05-12 11:04:42

Java EE學習Java EE

2010-01-22 15:14:37

學習C++

2010-01-20 14:03:12

C++程序

2021-03-08 11:28:59

人工智能深度學習Python

2020-11-30 15:40:40

技術資訊

2020-12-11 07:39:37

RPC MQ架構

2015-05-25 15:31:56

C語言學習和使用 C 語言

2010-01-21 10:34:08

SUN-JAVA認證

2015-08-06 10:14:15

造輪子facebook

2022-08-15 08:27:02

基站網絡

2013-03-12 14:30:09

Ubuntu操作系統

2023-12-07 12:21:04

GCJVM垃圾
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 精品视频一二区 | 欧美一区二区久久 | 自拍亚洲 | 国产精品毛片av一区 | 亚洲一区二区三区免费在线观看 | 羞羞的视频免费观看 | 99久久婷婷国产综合精品电影 | 国产精品theporn | 国产中文字幕网 | 国产传媒在线播放 | 毛片免费在线 | 日本精品视频在线观看 | 丁香婷婷综合激情五月色 | 在线播放中文字幕 | 欧美亚洲一区二区三区 | 亚洲一区二区精品视频 | 亚洲一区二区视频在线播放 | 国产午夜视频 | 日韩高清电影 | 日韩在线观看视频一区 | 久久综合伊人 | 日韩欧美精品 | 范冰冰一级做a爰片久久毛片 | 一区免费视频 | 久久成人18免费网站 | 日韩在线播放av | 亚洲精品乱码久久久久久黑人 | 国产亚洲精品美女久久久久久久久久 | 久草在线影 | 国产精品99久久久久久宅男 | 国产精品视频一二三区 | 国产视频在线观看一区二区三区 | 999久久久 | 亚洲最大看片网站 | 午夜影院 | 日韩一区二区在线播放 | 欧州一区二区三区 | 久久久久久久久蜜桃 | aaa在线 | 欧美精品在线一区二区三区 | 日韩在线一区二区 |