架構個人學習(一)
程服務呼叫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 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 框架的典範。
但它本身它不是分散式的,所以要實現上面的框架的功能需要進一步的開發。