1. 程式人生 > >架構個人學習(一)

架構個人學習(一)

程服務呼叫RPC框架介紹,微服務架構介紹和RPC框架對比,dubbo、SpringClound對比

遠端服務呼叫RPC框架介紹,RPC簡單的來說就是像呼叫本地服務一樣呼叫遠端服務。

分散式RPC需要解決哪些問題呢?

protocol:傳輸協議

proxy:client代理,服務引用方呼叫方法通過代理髮送遠端訊息

codec:協議編解碼壓縮等

transport:協議傳輸

registry:註冊中心,服務註冊服務發現

cluster:負載均衡,服務容錯策略

其他:服務降級,服務隔離,服務治理

--------------------

RPC:遠端呼叫。通過RPC框架,使得我們可以像呼叫本地方法一樣地呼叫遠端機器上的方法:

1、本地呼叫某個函式方法

2、本地機器的RPC框架把這個呼叫資訊封裝起來(呼叫的函式、入參等),序列化(json、xml等)後,通過網路傳輸傳送給遠端伺服器

3、遠端伺服器收到呼叫請求後,遠端機器的RPC框架反序列化獲得呼叫資訊,並根據呼叫資訊定位到實際要執行的方法,執行完這個方法後,序列化執行結果,通過網路傳輸把執行結果傳送回本地機器

4、本地機器的RPC框架反序列化出執行結果,函式return這個結果

服務呼叫端(本地機器):

服務提供端(遠端機器):

Java Netty 是在TCP(Socket)層對nio進行封裝的框架,在RPC框架中可用於解決網路傳輸問題。

現在流行的微服務框架DUBBO,實際上就是各種各樣的RPC框架。

DUBBO只支援RPC呼叫。使得服務提供方與呼叫方在程式碼上產生了強依賴,服務提供者需要不斷將包含公共程式碼的jar包打包出來供消費者使用。一旦打包出現問題,就會導致服務調用出錯。DUBBOX,提供了更高效的RPC序列化方式和REST呼叫方式。

 作為新一代的服務框架,Spring Cloud提出的口號是開發“面向雲環境的應用程式”,它為微服務架構提供了更加全面的技術支援。
結合我們一開始提到的微服務的訴求,我們把Spring Cloud與DUBBO進行一番對比:

Spring Cloud拋棄了Dubbo的RPC通訊,採用的是基於HTTP的REST方式。這兩種方式各有優劣。雖然從一定程度上來說,後者犧牲了服務呼叫的效能,但也避免了上面提到的原生RPC帶來的問題。而且REST相比RPC更為靈活,服務提供方和呼叫方的依賴只依靠一紙契約,不存在程式碼級別的強依賴,這在強調快速演化的微服務環境下,顯得更加合適。   Spring Cloud的功能比DUBBO更加強大,涵蓋面更廣,而且作為Spring的拳頭專案,它也能夠與Spring Framework、Spring Boot、Spring Data、Spring Batch等其他Spring專案完美融合,這些對於微服務而言是至關重要的。前面提到,微服務背後一個重要的理念就是持續整合、快速交付,而在服務內部使用一個統一的技術框架,顯然比把分散的技術組合到一起更有效率。更重要的是,相比於Dubbo,它是一個正在持續維護的、社群更加火熱的開源專案,這就保證使用它構建的系統,可以持續地得到開源力量的支援。
Spring Cloud Netflix的核心是用於服務註冊與發現的Eureka,Eureka、Ribbon、Hystrix、Feign這些是Spring Cloud Netflix主要元件。

1.微服務架構

1.1 特徵

自動化部署,端點智慧化,語言和資料的去中心化控制。

1.2架構

一種將一個單一應用程式開發為一組小型服務的方法,每個服務執行在自己的程序中,服務間通訊採用輕量級通訊機制(通常用HTTP資源API)。可通過全自動部署機制獨立部署,共用一個最小型的集中式的管理。服務可用不同的語言開發,使用不同的資料儲存技術。

  • 去中心化基礎設施

  • 去中心化資料庫

1.3微服務設計模式

  • 聚合式(推薦)

  • 代理(推薦)

  • 鏈式

  • 分支

  • 非同步訊息

1.4微服務實現

1.4.1  通訊方式

REST和RPC

1.4.2  RPC框架

  • Dubbo/ Dubbox

      阿里巴巴公司開源的一個Java高效能優秀的服務框架,可以和Spring框架無縫整合,相關資料很豐富。

遺憾的是已經停止維護了,相關的依賴類比如Spring,Netty還是很老的版本。倒是噹噹網之類的再繼續維維護,即Dubbox,並且實現了REST的支援。

Dubbo主要實現了服務治理,其他為保證叢集安全、可維護、可測試等特性方面都沒有很好的實現,但是幾乎大部分關鍵元件都能找到第三方開源來實現。

      所以,如果選擇Dubbo請務必在各個環節做好整套解決方案的準備,不然很可能隨著服務數量的增長,整個團隊都將疲於應付各種架構上不足引起的困難,不能讓各環節人員真正的專注於業務邏輯。

  • Motan

      新浪微博的服務治理框架,2016年5月開源,Motan是一個小而精的 RPC 框架,它的特點是簡單、易用,是一個輕量級 RPC框架。

      與Dubbo相比,Motan在功能方面並沒有那麼全面,也沒有實現特別多的擴充套件。用的人比較少,功能和穩定性有待觀望。對跨語言呼叫支援較差,主要支援java。

  • Spring Cloud(推薦)

      Spring Cloud 完全基於Spring Boot,是一個非常新的專案,2016年才 1.0 release。版本提升非常迅速,發展勢頭良好。

Spring Cloud依然發揚了Spring Source整合一切的作風,以標準化的姿態將一些微服務架構的成熟產品與框架揉為一體,並繼承了Spring Boot簡單配置、快速開發、輕鬆部署的特點,讓原本複雜的架構工作變得相對容易上手一些。服務呼叫方式是基於REST API的。

       缺點是專案很年輕,很少見到國內業界有人在生產上成套使用,一般都是隻有其中一兩個元件。相關的技術文件大部分是英文的,案例也相對較少,使用的話需要摸索的時間會長一些。

  • gRPC

      Google釋出的開源RPC框架,高效能、開源、將移動和HTTP/2放在首位的通用的RPC框架,基於HTTP/2, netty4.1, proto3, 擁有非常豐富而實用的特性,堪稱RPC 框架的典範。

      但它本身它不是分散式的,所以要實現上面的框架的功能需要進一步的開發。