基礎知識篇
理論篇
俗話說,沒有最好的架構,只有最合適的架構。
微服務架構也是隨著信息產業的發展而出現的最有普遍適用性的一套架構模式。
通常來說,我們認為架構發展歷史經歷了這樣一個過程:單體架構 -> SOA 面向服務架構 -> 微服務架構
單體架構
MVC 架構以及由此衍生出來各種多層架構如下圖所示:
優點
在程序規模不大,開發人員很少的時候,下面的幾點是非常顯著的:
- 開發簡單。單體應用的結構,天然決定了所有代碼都集中在一起,開發者不需要在多個應用之間來回跳轉來尋找其中的調用邏輯。
- 測試簡單。所有代碼都在一個應用里,測試人員可以很方便的做到端到端的測試(當然,很多時候測試人員就是開發者自己)。
- 部署簡單。因為一個應用就是產品功能的全集,所以在部署的時候,只需要不是一款應用即可。即使是集群部署,也不會增加多少復雜度:只需要將應用部署多份即可。
- 開發迅速。上面的各種簡單,帶來的就是軟件功能可以快速實現。很多時候,實現需求的速度是項目成功與否的決定性因素。
所以,在開發簡單和獨立的產品時,單體架構依然是第一優先選擇。
弊端
隨著功能的持續增加、團隊規模的不斷擴大,我們很快就會發現單體應用的弊端:
- 應用膨脹。所有代碼都在一個應用里,導致應用的代碼量迅速上升,對于開發者來說,經常需要在海量的代碼里找到自己需要維護的哪一行,這種體驗往往是令人崩潰的。同時,對于 IDE 來說,一個應用內大量代碼也會嚴重拖慢其運行效率。
- 團隊合作沖突。這種沖突會體現在多個方面:開發階段,很容易由于修改相同的代碼導致代碼沖突。部署階段,又會因為“運行環境里跑的是誰的分支”而造成新的沖突。所有的這些沖突將會嚴重影響到團隊的合作效率。
- 運行效率 & 穩定性。單體應用,由于邏輯都集中在一起,啟動時需要完成所有的初始化工作;同時單一功能的問題也會因為運行在一個進程內,從而導致整個應用宕機。
SOA 架構
SOA 是 Service-Oriented Architecture 的簡寫,直譯為“面向服務的架構”。
核心思想是:將系統的功能解構為一系列服務。
與單體架構按照技術職責進行水平拆分不同,SOA 會按照業務領域對應用進行粗粒度的垂直拆分
垂直拆分帶來的問題
應用從單體應用做了垂直拆分以后,就會變成一些相對獨立的應用。此時,應用間的依賴、調用等相關問題自然而然的就會浮現出來。此時就需要下面這些技術方案來解決這些問題:
- XML – 一種標記語言,用于以文檔格式描述消息中的數據。
- SOAP(Simple Object Access Protocol)-- 在計算機網絡上交換基于 XML 的消息的協議,通常是用 HTTP。
- WSDL(Web Services Description Language,Web 服務描述語言)-- 基于 XML 的描述語言,用于描述與服務交互所需的服務的公共接口,協議綁定,消息格式。
- UDDI(Universal Description, Discovery, and Integration,是統一描述、發現和集成) – 基于 XML 的注冊協議,用于發布 WSDL 并允許第三方發現這些服務。
- ESB(Enterprise Service Bus, 企業服務總線)-- 支持異構環境中的服務、消息,以及基于事件的交互,并且具有適當的服務級別和可管理性。
典型 SOA 架構模式圖:
弊端以及不足
- 高門檻。ESB 本身就是一套非常復雜的系統,通過 ESB 落地 SOA ,對開發人員的要求很高。甚至還會需要廠商參與;
- 廠商綁定。由于缺乏統一保準,不同廠商的解決方案之間很難做切換。
- 不適應云環境。在如今的互聯網時代,速度就是一切。由此誕生了敏捷開發、持續集成等在不同節點提升業務上線速度的辦法。但是方向是不一致的。
- 中心化。雖然應用本身實現了分布式與水平擴展,但是 ESB 卻成了系統的中樞神經。
微服務架構
直接從【SOA、微服務】這兩者的區別入手來理解到底什么是微服務:
傳統 SOA | 微服務 | |
---|---|---|
通信方式 | 基于 ESB,SOAP、W SDL 等重協議 | 點對點通信,開放式協議,如 RESTful、gR PC、或者是輕量級的二進制協議。 |
數據管理 | 全局數據模型以及共享存儲 | 每個服務獨立模型和存儲 |
服務粒度 | 較粗 | 較細 |
誕生的背景 | 企業級應用 | 互聯網 |
解決的問題 | 面向企業內,系統集成 | 面向最終產品,解決擴展,維護的問題 |
通信手段、數據等的不同只是表象,其本質區別還是由于兩者誕生于不同歷史時期,需要解決的問題域不同。
- SOA 解決的核心問題是復用,
- 而微服務解決的核心問題是擴展。
微服務的幾個重要概念
- 一套小服務
- 獨立進程
- 輕量級通信協議
- 可獨立部署
- 多語言 & 不同儲技術
微服務架構圖
要考慮的問題(主要包括但不限于):
- 通過服務實現組件化
- 根據業務組織系統
- 做產品而不是做項目
- 簡單高效的通信協議
- 自動化基礎設施
- 面向失敗的設計
- 具備進化能力的設計
今天我們所說的【微服務】是一個龐大且復雜的概念集合,它既是一種架構模式,也是實現這種架構模式時所使用的技術方案的集合。
框架篇
Spring
在 Spring 框架的早期,大家都喜歡稱其為【輕量化】框架,【輕量】是相對于 EJB 等企業級開發框架而言的。
其【輕】的特性體現在:
- 框架本身的大小很小,早期版本的 jar 包不超過 1MB;
- 同時不依賴于運行容器,也是說任何容器里都可以運行 Spring 框架;
- 更加重要的是 Spring 是非侵入的,使用 Spring 開發的應用可以不完全依賴 Spring 的類。
SpringBoot
使用 Spring Boot 可以大大簡化 Spring 應用的開發工作。
在 Spring Boot 中無論是官方組件還是第三方框架都會提供各種【starter
】來方便開發者進行依賴和集成。
由于采用了 “約定大于配置” 的思想,開發者在引入 “stater
” 以后只需要做少量的配置工作就可以完成框架集成工作。
往往開發者只需要很少量的代碼就可以實現以前大量配置文件才能做到的功能。
Spring 官方對 Spring Boot 特色定義如下:
- 創建獨立的 Spring 應用程序
- 直接嵌入 Tomcat,Jetty 或 Undertow(無需部署 WAR 文件)
- 提供自以為是的 “
starter
” 依賴項,以簡化構建配置 - 盡可能自動配置 Spring 和三方類庫
- 提供可用于生產的功能,例如指標,運行狀況檢查和外部化配置
- 完全沒有代碼生成,也不需要 XML 配置
Spring Cloud
“分布式系統中的常見模式” 給了 Spring Cloud 一個清晰的定位,即“模式”。也就是說 Spring Cloud 是針對分布式系統開發所做的通用抽象,是標準模式的實現。
Spring 官方給出的一個 Height Light 的架構圖:
結論:Spring Cloud 是以微服務為核心的分布式系統的一個構建標準。
Spring Cloud Alibaba
既然說 Spring Cloud 是標準,那么自然少不了針對標準的實現。
參與這個標準的實現有很多,比如:
- Google 的 Spring Cloud GCP
- Netflix 的 Spring Cloud Netflix
- Microsoft 的 Spring Cloud Azure
- 阿里巴巴的 Spring Cloud Alibaba
介紹圖
圖中深色的部分,其實它就是 Spring Cloud 標準,一共有 3 層。
- 中間顏色最深的部分就是及整個微服務最核心的內容,包括了 “RPC 調用” 以及 “服務注冊與發現”。
- 第二層,也就是圍繞著核心的這一圈,是一些輔助微服務更好的工作功能,包括了負載均衡、路由、網關、斷路器,還有就是追蹤等等這些內容。
- 再外層的話,主要是些分布式云環境里的通用能力。
最外面這一圈,是 Spring Cloud Alibaba 對 Spring Cloud 的實現。
- 右上部分是 對于 Spring Cloud 標準的實現。例如,我們通過 Dubbo 實現了 RPC 調用功能,通過 Nacos 實現了“服務注冊與發現”、“分布式配置”,通過 Sentinel 實現了斷路器等等。
- 左下部分是我們 Spring Cloud Alibaba 對阿里云各種服務的集成。
為什么要加上【集成】這一部分呢?
因為在實際生產過程中,單獨使用微服務框架其實并不足以支撐我們去構建一個完整的系統。所以這部分是用阿里幫助開發者完成微服務以外的云產品集成的功能。
包含組件
目前,Spring Cloud Alibaba 包含如下組件:
開源部分
- Sentinel:把流量作為切入點,從流量控制、熔斷降級、系統負載保護等多個維度保護服務的穩定性。
- Nacos:一個更易于構建云原生應用的動態服務發現、配置管理和服務管理平臺。
- RocketMQ:一款開源的分布式消息系統,基于高可用分布式集群技術,提供低延時的、高可靠的消息發布與訂閱服務。
- Dubbo:Apache Dubbo 是一款高性能 Java RPC 框架。
- Seata:阿里巴巴開源產品,一個易于使用的高性能微服務分布式事務解決方案。
平臺服務部分
- Alibaba Cloud OSS: 阿里云對象存儲服務(Object Storage Service,簡稱 OSS),是阿里云提供的海量、安全、低成本、高可靠的云存儲服務。您可以在任何應用、任何時間、任何地點存儲和訪問任意類型的數據。
- Alibaba Cloud SchedulerX: 阿里中間件團隊開發的一款分布式任務調度產品,提供秒級、精準、高可靠、高可用的定時(基于 Cron 表達式)任務調度服務。
- Alibaba Cloud SMS: 覆蓋全球的短信服務,友好、高效、智能的互聯化通訊能力, 幫助企業迅速搭建客戶觸達通道。
工具篇
Java 工程腳手架
訪問地址:云原生應用腳手架
Sandbox 沙箱環境
Sandbox 沙箱環境,為開發者帶來一套快速上手、免除任何環境依賴、免費、便捷的 開發&運行環境。允許開發者在上面查看、修改、部署示例代碼,并且由平臺提供相關運行資源。
觸達通道。
工具篇
Java 工程腳手架
訪問地址:云原生應用腳手架
Sandbox 沙箱環境
Sandbox 沙箱環境,為開發者帶來一套快速上手、免除任何環境依賴、免費、便捷的 開發&運行環境。允許開發者在上面查看、修改、部署示例代碼,并且由平臺提供相關運行資源。