一起玩轉微服務(2)——框架與工具

一、微服務架構有哪些優勢?

  • 獨立開發 – 所有微服務都可以根據各自的功能輕鬆開發·
  • 獨立部署 – 基於其服務,可以在任何應用程序中單獨部署它們·
  • 故障隔離 – 即使應用程序的一項服務不起作用,系統仍可繼續運行· 混合技術堆棧 – 可以使用不同的語言和技術來構建同一應用程序的不同服務·
  • 粒度縮放 – 單個組件可根據需要進行縮放,無需將所有組件縮放在一起

二、微服務有哪些特點?

  • 解耦 – 系統內的服務很大程度上是分離的。因此,整個應用程序可以輕鬆構建,更改和擴展·
  • 組件化 – 微服務被視為可以輕鬆更換和升級的獨立組件·
  • 業務能力 – 微服務非常簡單,專註於單一功能·
  • 自治 – 開發人員和團隊可以彼此獨立工作,從而提高速度·
  • 持續交付 – 通過軟件創建,測試和批準的系統自動化,允許頻繁發布軟件·
  • 責任 – 微服務不關注應用程序作為項目。相反,他們將應用程序視為他們負責的產品·
  • 分散治理 – 重點是使用正確的工具來做正確的工作。這意味着沒有標準化模式或任何技術模式。開發人員可以自由選擇最有用的工具來解決他們的問題·
  • 敏捷 – 微服務支持敏捷開發。任何新功能都可以快速開發並再次丟棄

三、微服務架構如何運作?

微服務架構具有以下組件:

 

 

 

  • 客戶端 – 來自不同設備的不同用戶發送請求。·
  • 身份提供商 – 驗證用戶或客戶身份並頒發安全令牌。·
  • API 網關 – 處理客戶端請求。·
  • 靜態內容 – 容納系統的所有內容。·
  • 管理 – 在節點上平衡服務並識別故障。·
  • 服務發現 – 查找微服務之間通信路徑的指南。·
  • 內容交付網絡 – 代理服務器及其數據中心的分佈式網絡。·
  • 遠程服務 – 啟用駐留在 IT 設備網絡上的遠程訪問信息。

四、什麼是 REST / RESTful 以及它的用途是什麼?

Representational State Transfer(REST)/ RESTful Web 服務是一種幫助計算機系統通過 Internet 進行通信的架構風格。這使得微服務更容易理解和實現。微服務可以使用或不使用 RESTful API 實現,但使用 RESTful API 構建鬆散耦合的微服務總是更容易。

五、什麼是不同類型的微服務測試?

在使用微服務時,由於有多個微服務協同工作,測試變得非常複雜。因此,測試分為不同的級別。·

  • 在底層,我們有面向技術的測試,如單元測試和性能測試。這些是完全自動化的。·
  • 在中間層面,我們進行了諸如壓力測試和可用性測試之類的探索性測試。·
  • 在頂層, 我們的 驗收測試數量很少。這些驗收測試有助於利益相關者理解和驗證軟件功能。

六、常用的微服務框架

各種語言都有自己的微服務框架,主要包括:

  • 主流微服務框架:SpringCloud、Dubbo、spring cloud alibaba
  • 新銳微服務框架:Istio

下面一起看一下常用的微服務框架體系。

1. Spring 頂級項目

首先,我們一起來看一下Spring的頂級項目都包括哪些:

  • Spring IO platform:用於系統部署,是可集成的,構建現代化應用的版本平台,具體來說當你使用maven dependency引入Spring jar包時它就在工作了。
  • Spring Boot:旨在簡化創建產品級的 Spring 應用和服務,簡化了配置文件,使用嵌入式web服務器,含有諸多開箱即用微服務功能,可以和Spring Cloud聯合部署。
  • Spring Framework:即通常所說的Spring 框架,是一個開源的Java/Java EE全功能棧應用程序框架,其它Spring項目如Spring Boot也依賴於此框架。
  • Spring Cloud:微服務工具包,為開發者提供了在分佈式系統的配置管理、服務發現、斷路器、智能路由、微代理、控制總線等開發工具包。
  • Spring XD:是一種運行時環境(服務器軟件,非開發框架),組合Spring技術,如Spring batch、Spring Boot、Spring data,採集大數據並處理。
  • Spring Data:是一個數據訪問及操作的工具包,封裝了很多種數據及數據庫的訪問相關技術,包括:jdbc、Redis、MongoDB、Neo4j等。
  • Spring Batch:批處理框架,或說是批量任務執行管理器,功能包括任務調度、日誌記錄/跟蹤等。
  • Spring Security:是一個能夠為基於Spring的企業應用系統提供聲明式的安全訪問控制解決方案的安全框架。
  • Spring Integration:面向企業應用集成(EAI/ESB)的編程框架,支持的通信方式包括HTTP、FTP、TCP/UDP、JMS、RabbitMQ、Email等。
  • Spring Social:一組工具包,一組連接社交服務API,如Twitter、Facebook、LinkedIn、GitHub等,有幾十個。
  • Spring AMQP:消息隊列操作的工具包,主要是封裝了RabbitMQ的操作。
  • Spring HATEOAS:是一個用於支持實現超文本驅動的 REST Web 服務的開發庫。
  • Spring Mobile:是Spring MVC的擴展,用來簡化手機上的Web應用開發。
  • Spring for Android:是Spring框架的一個擴展,其主要目的在乎簡化Android本地應用的開發,提供RestTemplate來訪問Rest服務。
  • Spring Web Flow:目標是成為管理Web應用頁面流程的最佳方案,將頁面跳轉流程單獨管理,並可配置。
  • Spring LDAP:是一個用於操作LDAP的Java工具包,基於Spring的JdbcTemplate模式,簡化LDAP訪問。
  • Spring Session:session管理的開發工具包,讓你可以把session保存到redis等,進行集群化session管理。
  • Spring Web Services:是基於Spring的Web服務框架,提供SOAP服務開發,允許通過多種方式創建Web服務。
  • Spring Shell:提供交互式的Shell可讓你使用簡單的基於Spring的編程模型來開發命令,比如Spring Roo命令。
  • Spring Roo:是一種Spring開發的輔助工具,使用命令行操作來生成自動化項目,操作非常類似於Rails。
  • Spring Scala:為Scala語言編程提供的Spring框架的封裝(新的編程語言,Java平台的Scala於2003年底/2004年初發布)。
  • Spring BlazeDS Integration:一個開發RIA工具包,可以集成Adobe Flex、BlazeDS、Spring以及Java技術創建RIA。
  • Spring Loaded:用於實現java程序和web應用的熱部署的開源工具。
  • Spring REST Shell:可以調用Rest服務的命令行工具,敲命令行操作Rest服務。

2. 背景

對於使用java技術更多的團隊來說,dubbo,Spring Cloud的知名度相對較高,而且在業界的影響力非常高。那麼我們就來一起討論一下這兩種框架,做一個綜合的評比。
Dubbo
Dubbo是阿里出品的服務化組件,應用於多個部門,後來開源之後,也衍生出像dubbox這樣的框架,對其進行了進一步的增強。Dubbo 是一個分佈式服務框架,是國內互聯網公司開源做的比較不錯的阿里開放的微服務化治理框架,致力於提供高性能和透明化的RPC遠程服務調用方案,以及SOA服務治理方案。目前Dubbo已經正式進入Apache孵化器。

現在可以再apache 下面找到dubbo

http://dubbo.apache.org/zh-cn/

 

其核心部分包含:

  • 遠程通訊: 提供對多種基於長連接的NIO框架抽象封裝,包括多種線程模型,序列化,以及“請求-響應”模式的信息交換方式;
  • 集群容錯: 提供基於接口方法的透明遠程過程調用,包括多協議支持,以及軟負載均衡,失敗容錯,地址路由,動態配置等集群支持;
  • 自動發現: 基於註冊中心目錄服務,使服務消費方能動態的查找服務提供方,使地址透明,使服務提供方可以平滑增加或減少機器。

 

Spring Cloud
Spring Cloud從其命名中就可以知道,是Spring Source的產物,可以說Spring的出現整個改變了企業級開發,Spring Cloud,除了具有 Spring 社區的強大背景外,還有 Netflix 強大的後盾與技術輸出。Netflix 作為一家成功實踐微服務架構的互聯網公司,在幾年前就把幾乎整個微服務框架棧開源貢獻給了社區,這些框架開源的整套微服務架構套件是 Spring Cloud 的核心。

  • Eureka: 服務註冊發現框架;
  • Zuul: 服務網關;
  • Karyon: 服務端框架;
  • Ribbon: 客戶端框架;
  • Hystrix: 服務容錯組件;
  • Archaius: 服務配置組件;
  • Servo: Metrics組件;
  • Blitz4j: 日誌組件。

從背景上來看,前者在國內的影響力比較大,後者在國外的影響力比較大,使用的公司也更多一些。

spring-cloud-alibaba

地址:

https://spring.io/projects/spring-cloud-alibaba

服務限流降級:默認支持 WebServlet、WebFlux, OpenFeign、RestTemplate、Spring Cloud Gateway, Zuul, Dubbo 和 RocketMQ 限流降級功能的接入,可以在運行時通過控制台實時修改限流降級規則,還支持查看限流降級 Metrics 監控。
服務註冊與發現:適配 Spring Cloud 服務註冊與發現標準,默認集成了 Ribbon 的支持。
分佈式配置管理:支持分佈式系統中的外部化配置,配置更改時自動刷新。
消息驅動能力:基於 Spring Cloud Stream 為微服務應用構建消息驅動能力。
分佈式事務:使用 @GlobalTransactional 註解, 高效並且對業務零侵入地解決分佈式事務問題。。
阿里雲對象存儲:阿里雲提供的海量、安全、低成本、高可靠的雲存儲服務。支持在任何應用、任何時間、任何地點存儲和訪問任意類型的數據。
分佈式任務調度:提供秒級、精準、高可靠、高可用的定時(基於 Cron 表達式)任務調度服務。同時提供分佈式的任務執行模型,如網格任務。網格任務支持海量子任務均勻分配到所有 Worker(schedulerx-client)上執行。
阿里雲短信服務:覆蓋全球的短信服務,友好、高效、智能的互聯化通訊能力,幫助企業迅速搭建客戶觸達通道。

Istio
Istio 作為用於微服務服務聚合層管理的新銳項目,是 Google、IBM、Lyft(海外共享出行公司、Uber勁敵) 首個共同聯合開源的項S目,提供了統一的連接,安全,管理和監控微服務的方案。
目前首個測試版是針對 Kubernetes 環境的,社區宣稱在未來幾個月內會為虛擬機和 Cloud Foundry 等其他環境增加支持。 Istio 將流量管理添加到微服務中,併為增值功能(如安全性,監控,路由,連接管理和策略)創造了基礎。

  • HTTP、gRPC 和 TCP 網絡流量的自動負載均衡;
  • 提供了豐富的路由規則,實現細粒度的網絡流量行為控制;
  • 流量加密、服務間認證,以及強身份聲明;
  • 全範圍(Fleet-wide)的策略執行;
  • 深度遙測和報告。

3. 社區活躍度

我們選擇一個開源框架,社區的活躍度是我們極為關注的一個要點。社區越活躍,解決問題的速度越快,框架也會越來越完善,不然當我們碰到問題,就不得不自己解決。
先看一下dubbo和dubbox,
下圖是dubbo目前的情況,在2017年,阿里已經宣布有團隊重新維護dubbo項目,可以看到dubbo項目已經重新開始修復裡邊的一些bug,並且進入不斷的完善的過程中了。Dubbo 目前在 GitHub 上有超過 16000 個 star 和超過 12000 的 fork 數,是國內影響力最大的開源項目之一。

 

 

反倒是繼承而來的dubbox,已經有很長時間沒有進行維護了。

 

 

再看Spring Cloud,沿襲着Spring一慣的風格,更新非常及時,響應的速度也非常快,社區非常活躍。

4. 架構完整度

根據微服務架構在各方面的要素,看看Spring Cloud和Dubbo都提供了哪些支持。表N展示了Dubbo和Spring Cloud的區別。

 

其實單純從提供的數量上來比較,有一些不公平,因為dubbo是幾年前出來的,極大的改變了人們對於分佈式系統的認知。而上邊寫無的部分其實也可以整合其它的框架,所以,對於這一點的評比上來說,選用何種框架取決於團隊目前的情況,而不是一下子就全部轉型,要階梯式的實現整個應用架構。

5. 總結

使用Dubbo構建的微服務架構就像組裝電腦,各環節我們的選擇自由度很高,但是最終結果很有可能因為一條內存質量不行就點不亮了,總是讓人不怎麼放心,但是如果你是一名高手,那這些都不是問題;而Spring Cloud就像品牌機,在Spring Source的整合下,做了大量的兼容性測試,保證了機器擁有更高的穩定性,但是如果要在使用非原裝組件外的東西,就需要對其基礎有足夠的了解。

最後呢,說一下工具,個人偏好是eclipse派!
https://spring.io/tools

 

本站聲明:網站內容來源於博客園,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

※為什麼 USB CONNECTOR 是電子產業重要的元件?

網頁設計一頭霧水該從何著手呢? 台北網頁設計公司幫您輕鬆架站!

※台北網頁設計公司全省服務真心推薦

※想知道最厲害的網頁設計公司"嚨底家"!

※推薦評價好的iphone維修中心

您可能也會喜歡…