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

開發(fā)中的坑2:MQ 也能做 RPC 調(diào)用?

開發(fā) 項目管理
用 MQ 代替 RPC 只是一種理論,但是高可用無法保障,而且對業(yè)務(wù)開發(fā)來說就更加黑盒了,出現(xiàn)問題就只能干瞪眼了,不建議業(yè)務(wù)開發(fā)實踐。

[[409473]]

本文轉(zhuǎn)載自微信公眾號「HHFCodeRv」,作者h(yuǎn)aohongfan。轉(zhuǎn)載本文請聯(lián)系HHFCodeRv公眾號。

hi, 大家好,我是 haohongfan。

最近瀏覽 帖子[1] 的時候看到一個有意思的吐槽。

大概意思是架構(gòu)師沒有選用 RPC 框架來做服務(wù)間調(diào)用,而選擇用 MQ 來代替。是不是很意外?

當(dāng)然不出意外的,評論區(qū)炸了!

 

現(xiàn)在提出一些疑問:

  • 這個架構(gòu)師的做法對嗎 ?
  • MQ 是否能做 RPC 調(diào)用 ?

RPC 框架的職責(zé)

回答上面問題之前,稍微捋一下 RPC 框架。目前市面上比較流行的 RPC 框架其實并不多。

  • Java: SpringCloud,Dubbo 等
  • Go: Dubbogo,go-micro,rpcx,go-zero 等
  • 其他:Thrift,gRPC 等

當(dāng)然還有其他的一些框架,這里就不再羅列。雖說 RPC 多如牛毛,但是大家干的事情基本都差不多,都是穩(wěn)定,高效、準(zhǔn)確的進(jìn)行服務(wù)間遠(yuǎn)程調(diào)用。

說起 RPC 應(yīng)該大部分人下意識會聯(lián)想到 gRPC,不過 gRPC 只提供的了服務(wù)間通信的能力,但卻沒有開源對應(yīng)的服務(wù)治理的能力,需要進(jìn)行二次開發(fā)。Thrift 也是同樣的問題。

下面以 Dubbogo 為例,大概介紹下 Dubbogo 實現(xiàn)的功能。

Dubbo-go 還有下面這些特點:

  • 傳輸支持 http2
  • 雙向流模式 rpc
  • 應(yīng)用級服務(wù)發(fā)現(xiàn)

跟 Dubbo(Java) 版本對齊,互相之間能穩(wěn)定通信,同時也打通與其他微服務(wù)框架的通信,如:SpringCloud、gRPC

綜上,Dubbo-go 為了保證數(shù)據(jù)準(zhǔn)確、高效、穩(wěn)定傳輸,做了各種各樣的架構(gòu)設(shè)計。隨著 dubbo 3.0 的發(fā)布,在易用性、超大規(guī)模微服務(wù)實踐、云原生基礎(chǔ)設(shè)施適配等幾大方向上進(jìn)行了全面升級。

MQ 代替 RPC ?

接著說 MQ 是否能替代 RPC。先看看 MQ 被寫進(jìn)八股文里面的幾大特性:

  • 服務(wù)間解耦
  • 最終一致性
  • 流量削峰
  • 異步消費(fèi)

MQ 是微服務(wù)框架中必不可少的一環(huán),上面的特性是我們?nèi)粘i_發(fā)中最常用的。這些特性確實能讓系統(tǒng)的穩(wěn)定性得到增強(qiáng),同時也讓系統(tǒng)的構(gòu)建出現(xiàn)更多的可能性。

但是是否能讓 MQ 來代替 RPC,做服務(wù)間的調(diào)用?回答這個問題之前,我們再來看看 RPC 是如何工作的。

大概流程(資料節(jié)選 dubbogo website[2])

  • 類似本地調(diào)用,Client 調(diào)用遠(yuǎn)程服務(wù)
  • Client stub 收到調(diào)用,把調(diào)用方法、參數(shù)序列化
  • Client 通過 socket 把消息發(fā)送到服務(wù)端
  • Server stub 收到消息后,將消息對象反序列化
  • Server stub 根據(jù)解碼結(jié)果調(diào)用本地的服務(wù),并將結(jié)果返回給 Server stub
  • Server stub 將返回結(jié)果序列化,通過 sockets 將消息發(fā)送到客戶端
  • Client stub 接收到結(jié)果消息,對返回消息反序列化
  • 客戶端得到最終結(jié)果

簡單概括下 RPC 調(diào)用就是 Client 通過 TCP 調(diào)用 Server 的一個函數(shù),得到一個返回結(jié)果。

再簡單點,是不是可以拆分下面兩個過程:

  1. Client 發(fā)起一個調(diào)用到 Server
  2. Server 返回一個結(jié)果到 Client

那么是不是可以用 MQ 模擬這個過程。

當(dāng)然這個流程并不是我瞎寫的,這是 RabbitMQ 的官方教程 Remote procedure call (RPC)[3],有興趣的可以看文末的參考鏈接。

RabbitMQ tutorial 這篇文章基本就是 MQ 代替 RPC 的理論支持,所以文章開篇帖子提到的 Java 架構(gòu)師的方案也不算無的放矢,也不算是錯的。

MQ 代替 RPC 的真實情況

正常情況有點規(guī)模互聯(lián)網(wǎng)公司內(nèi)部都是會有一套 RPC 框架的,要么是基于開源版本的二次開發(fā)版本,要么完全自研的,使用過或者維護(hù)公司框架的都會被各種問題折磨到死,比如:限流、熔斷、重試、服務(wù)注冊發(fā)現(xiàn)、網(wǎng)絡(luò)問題,SDK 升級等。

如果能用 MQ 代替 RPC 做服務(wù)間調(diào)用,那是不是只用維護(hù)一套 MQ 基礎(chǔ)組件就可以了,既減少了人力的配置,又能將問題歸納。

理想很豐滿,真相往往卻很殘酷。

如果你下意識去搜一下:用 MQ 代替 RPC 進(jìn)行服務(wù)間通信,你會發(fā)現(xiàn)網(wǎng)上只有寥寥幾個 Demo 而已,并沒有太多真實實踐。

沒有太多實踐 并不代表沒有人在項目中實戰(zhàn)過,比如那個 Java 架構(gòu)師。曾經(jīng)專門向朋友請教過這個設(shè)計,話說某大廠曾經(jīng)在某個項目做了 MQ 代替 RPC 的實踐,但是三個月不到這個項目就被斃了。所以你看不到這個設(shè)計方案的缺點:因為很多人不能把失敗的案例放出來而已。

簡單說下這個方案的缺點吧:

  • 本來 一次 TCP 通信就搞定的事情,用 MQ 后會被拆分成 四次 TCP,耗時增加不少。
  • 目前 MQ 大部分消費(fèi)端是 Pull 模型,有一定的耗時成本
  • 服務(wù)間調(diào)用完全依賴于 MQ 的穩(wěn)定性。從目前使用 MQ 經(jīng)驗來看,MQ 穩(wěn)定性的維護(hù)成本比 RPC 復(fù)雜太多了。如果做異步調(diào)用還能容忍出錯、延時,做同步調(diào)用的話,這些都是不能忽略的問題
  • 如果用 MQ 代替 RPC,那些 RPC 框架做的服務(wù)治理的事情,MQ 都需要實現(xiàn)一遍,工作量并沒有減少
  • 。。。

現(xiàn)在說一下統(tǒng)一結(jié)論:

 

用 MQ 代替 RPC 只是一種理論,但是高可用無法保障,而且對業(yè)務(wù)開發(fā)來說就更加黑盒了,出現(xiàn)問題就只能干瞪眼了,不建議業(yè)務(wù)開發(fā)實踐。

 

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

2021-07-15 11:31:22

遞歸匹配參數(shù)

2021-12-28 08:17:41

循環(huán) forgo

2015-04-13 17:39:11

移動IM開發(fā)

2020-12-11 07:39:37

RPC MQ架構(gòu)

2012-03-16 17:19:28

2021-06-30 07:19:35

微服務(wù)業(yè)務(wù)MySQL

2011-02-28 10:01:00

芯片有機(jī)塑料

2017-03-02 13:32:36

Android開發(fā)開發(fā)者

2017-09-28 15:07:37

全局字體反射

2021-11-15 14:02:27

RPCSpringBootRabbitMQ

2021-04-22 07:47:47

JavaJDKMYSQL

2011-07-14 11:28:16

360安全瀏覽器

2017-08-08 11:15:29

筆記本Titan XpQuadro

2021-03-31 11:53:30

人工智能整形美容

2020-03-30 09:22:36

C語言結(jié)構(gòu)體

2024-05-31 08:45:24

2014-09-02 10:43:45

RedisRPC

2021-01-28 08:03:44

程序員 finallyreturn

2022-05-15 08:13:50

Mysql數(shù)據(jù)庫Mycat

2022-06-30 08:58:09

時鐘輪RPC框架
點贊
收藏

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

主站蜘蛛池模板: 精品亚洲一区二区 | 国产精品一区二区三 | 久久精品亚洲精品国产欧美 | 婷婷桃色网 | 欧美久久精品一级黑人c片 91免费在线视频 | 日韩电影免费在线观看中文字幕 | 国产欧美一区二区精品久导航 | 久久久人 | 国产精品久久久久久久7电影 | 超级碰在线| 日日天天 | 欧美a√| 欧美区在线观看 | 一区二区三区中文字幕 | 欧美男人天堂 | 亚洲视频免费在线观看 | 国产一级在线视频 | 欧美二区乱c黑人 | 中文字幕高清免费日韩视频在线 | 欧美激情一区 | 欧美精品a∨在线观看不卡 欧美日韩中文字幕在线播放 | 四虎永久免费在线 | 激情国产在线 | 一区二区三区不卡视频 | 免费的色网站 | 老司机久久 | 在线免费亚洲视频 | 欧美成人a∨高清免费观看 欧美日韩中 | av香港经典三级级 在线 | 黄色毛片网站在线观看 | 三极网站 | 午夜av成人 | 欧美涩涩网| 在线看av网址 | 一区在线观看 | 91精品国产综合久久久久蜜臀 | 日韩免费高清视频 | 97人人澡人人爽91综合色 | 精品一区国产 | 成人免费观看网站 | 91在线电影 |