1. 程式人生 > 其它 >Dubbo 的設計思想

Dubbo 的設計思想

在java遠端呼叫多年的沉澱

《1》首先是socket呼叫。在orderService中開放socket服務,在userService中進行遠端呼叫。

  • 優點:解決了單機呼叫的問題。
  • 缺點:程式碼複雜,不易於擴充套件。

在java的物件是不可以直接通過socket進行傳輸的,需要有一個序列化的過程。而且java的預設的序列化,是無法被其他語言解析的。這樣導致如果有其他語言提供的服務,是無法通過java呼叫。因此對於socket進行了升級,通過http+xml進行資訊的傳輸。這就出現了webservice

《2》Web Service技術, 能使得執行在不同機器上的不同應用無須藉助附加的、專門的第三方軟體或硬體, 就可相互交換資料或整合。依據Web Service規範實施的應用之間, 無論它們所使用的語言、 平臺或內部協議是什麼, 都可以相互交換資料。

《3》內部呼叫協議

http協議是應用層的一種協議,對於開放給外部系統時,是一個很好的選擇,它可以實現跨語言呼叫。如果是自己的java服務內部呼叫時,使用http協議,就有點浪費資源。

====》

http協議在互動之前需要進行tcp三次握手,握手成功之後進行資料傳輸。一個http互動下來,有請求頭、請求體、響應頭、響應體。這些資料,在內部呼叫時,很多無關緊要的資料。也許可以自定義協議,簡化傳輸資料。這就出現了dubbo協議,一種內部呼叫的協議。

dubbo協議追求的是資料量小,小則快,協議的設計也符合dubbo框框架的理念,適用與內部服務之間的資料互動。安全性就沒有https做的那麼好,但是也不需要,畢竟dubbo協議設計的初衷就是內部使用的。

spring cloud的feign元件內部使用http協議,內部呼叫可能有一些資源的浪費,但是http協議可以實現跨語言呼叫。

RPC框架

為了實現動態的機器新增與移除。最終,添加了一個機器的協調者,所有開放服務的機器在這個協調者中新增自己的開放服務的資訊,這個協調者中會有哪些機器開放了哪些服務。這樣看來這個協調者類似一個"通訊錄"。我們稱這個"通訊錄"為註冊中心

  1. 服務提供者啟動之後向註冊中心,提交自己提供服務的資訊。
  2. 服務消費者,在消費時,去註冊中心查詢是否有機器提供對應的服務
  3. 在有服務上線或者下線時,註冊中心可以對修改的資訊進行通知。

註冊中心的選擇

作為協調者的註冊中心,佔據著一個重要地位。這樣來看,註冊中心主要實現了臨時資料儲存的功能。可以有多種選擇資料庫、redis、zookeeper、eureka、nacos、或者自己實現

期初dubbo框架官方推薦使用zookeeper為註冊中心,出現nacos之後,逐漸從zookeeper轉為nacos。

結論為:zookeeper在大資料計算時做註冊中心是一個好的選擇,但是在服務呼叫時,也許資料不需要超強的一致性。nacos是目前來說很友好的一個註冊中心,他提供了CP+AP。還有視覺化介面,還有配置中心等功能。功能相當完善。

於springboot在大大開發了開發的速度,而且springcloud的各個元件都比較完善,feign、閘道器、配置中心、熔斷等等。spring、springcloud和springboot明顯是一家人。這讓一個孤身的dubbo有點不好立足,一些公司從dubbo框架轉為springcloud全家桶。

  • nacos:註冊中心。
  • dubbo:一個基於Java的高效能開源RPC框架。
  • seata:一種高效能且易於使用的分散式事務解決方案,可用於微服務架構。

nacos是一個新推出的註冊中心,其中最亮眼的功能是提供了視覺化介面,而且還附帶配置中心。瞬間dubbo就找到了家人。這些元件的出現讓dubbo又崛起了起來。而且dubbo本來擴充套件性就很好。可以進行協議擴充套件、呼叫攔截擴充套件、引用監聽擴充套件、叢集擴充套件等等。

另外dubbo3.0主力使用Triple協議。完整相容 gRPC over HTTP/2。推薦使用protobuf作為預設序列化,在效能和跨語言上的效果都會更好。