- Spring Cloud Alibaba微服務架構設計與開發實戰
- 鄭天民
- 2294字
- 2024-10-29 18:40:53
1.1.3 微服務架構的核心組件
對于開發人員而言,學習微服務架構的主體內容就是學習它的技術體系。同樣,不同的開發工具和框架都會基于自身的設計理念給出對應的技術體系及其實現方式。拋開這些具體的工具和框架,我們可以基于目前業界主流的微服務實現技術提煉出一組技術組件,本節將對這組技術組件展開討論。
1.服務治理
在微服務架構中,服務治理可以說是最為關鍵的一個技術組件,因為各個微服務需要通過服務治理實現自動化的注冊和發現。
試想一下,如果系統中服務數量不是很多,那么我們有很多辦法可以獲取這些服務的IP地址、端口等信息,管理起來也不是很復雜。但當服務數量達到一定量級時,可能連開發人員自己都不知道系統中到底存在多少個服務,也不知道系統中當前到底哪些服務已經變得不可用。這時候,我們就需要引入獨立的媒介來管理服務的實例,這個媒介一般被稱為服務注冊中心。圖1-3展示了服務注冊中心的作用。

圖1-3 服務注冊中心的作用
服務注冊中心是保存服務調用所需路由信息的存儲倉庫,也是服務提供者和服務消費者進行交互的媒介,充當著服務注冊和發現服務器的作用。諸如Dubbo、Spring Cloud/Spring Cloud Alibaba等主流的微服務框架都基于Zookeeper、Nacos等分布式系統協調工具構建了服務注冊中心。
2.服務路由
現在,我們已經通過注冊中心構建了一個多服務的集群化環境,當客戶端請求到達該環境時,如何確定由哪一臺服務器對請求做出響應就是服務路由問題。可以認為負載均衡是最常見的一種路由方案,常見的客戶端/服務端負載均衡技術都可以完成服務路由。在Spring Cloud/Spring Cloud Alibaba等主流的微服務框架中也都內置了客戶端負載均衡組件。圖1-4展示了注冊中心和負載均衡器之間的交互關系。

圖1-4 注冊中心與負載均衡器之間的交互關系
另外,負載均衡的出發點更多是提供服務分發而不是只解決路由問題,常見的靜態、動態負載均衡算法也無法實現精細化的路由管理,這時候我們就可以采用路由規則。路由規則常見的實現方案是白名單或黑名單,即把需要路由的服務地址信息(如服務IP)放入可以控制是否可見的路由池中進行路由。同樣,路由規則也是微服務開發框架的一項常見功能。
3.服務容錯
對于微服務架構中的服務而言,服務自身會出現失敗,還會因為依賴其他服務而導致失敗。除了比較容易想到和實現的超時、重試和異步解耦等手段之外,我們還需要考慮針對各種場景的容錯機制。圖1-5展示了服務容錯的常見技術。
業界存在一批與服務容錯相關的實現策略,包括以失效轉移為代表的集群容錯策略,以線程隔離、進程隔離為代表的服務隔離機制,以滑動窗口、令牌桶算法為代表的服務限流機制,以及服務熔斷機制。而從技術實現方式上看,在Spring Cloud中,這些機制部分包含在下面要介紹的服務網關中,而另一部分則被提煉成單獨的開發框架,例如專門用于實現服務熔斷的Spring Cloud Circuit Breaker。而在Spring Cloud Alibaba中也內置了專用的服務可用性框架Sentinel。

圖1-5 服務容錯的常見技術
4.服務網關
服務網關也叫API(應用程序編程接口)網關,它封裝了系統內部架構,為每個客戶端提供一個定制的API。在微服務架構中,服務網關的核心要點在于:所有的客戶端和消費端都通過統一的網關接入微服務,在網關層處理所有的非業務功能。圖1-6展示了服務網關的常見功能。
在功能設計上,服務網關在完成客戶端與服務端報文格式轉換的同時,可能還具有身份驗證、監控、緩存、請求管理、靜態響應處理等功能。另外,開發人員也可以在網關層制定靈活的路由策略。針對一些特定的API,我們需要設置白名單、路由規則等各類限制。業界主流的網關系統有很多,例如Spring家族的Spring Cloud Gateway就是其中的代表性實現框架。

圖1-6 服務網關的常見功能
5.服務配置
在微服務架構中,考慮到服務數量和配置信息的分散性,一般都需要引入配置中心的設計思想和相關工具。與注冊中心一樣,配置中心也是微服務架構中的基礎組件,其目的也是對服務進行統一管理,區別在于配置中心管理的對象是配置信息而不是服務的實例信息。圖1-7展示了配置中心與注冊中心之間的交互關系。
為了滿足實現要求,配置中心通常需要依賴分布式協調機制,即通過一定的方法確保配置信息在分布式環境的各個服務中都能得到實時、一致的管理。我們可以采用諸如Zookeeper等主流的開源分布式協調框架來構建配置中心。當然,Spring Cloud和Spring Cloud Alibaba也分別提供了專門的配置中心實現工具Spring Cloud Config和Nacos。

圖1-7 配置中心與注冊中心之間的交互關系
6.服務安全
一般意義上的訪問安全性,都是圍繞認證和授權這兩個核心概念來展開的。也就是說,我們首先需要確定用戶身份,然后再確定這個用戶是否具備訪問指定資源的權限。站在單個微服務的角度,我們希望每次服務訪問都能與授權服務器進行集成以便獲取訪問Token。而站在多個服務交互的角度,我們需要確保Token在各個微服務之間的有效傳播。另外,在服務內部,我們可以使用不同的訪問策略限制服務資源的訪問。圖1-8展示了基于Token機制的服務安全實現方案。

圖1-8 基于Token機制的服務安全實現方案
為了實現對微服務的安全訪問,我們通常使用OAuth2協議來實現對服務訪問的授權機制,使用JWT技術來構建輕量級的認證體系。Spring家族也提供了Spring Security和Spring Cloud Security框架來簡化這些組件的構建過程。
7.服務跟蹤
在微服務架構中,當服務數量達到一定量級時,我們難免會遇到兩個核心問題:一個是如何管理服務之間的調用關系;另一個是如何跟蹤業務流的處理過程和結果。這就需要構建分布式服務跟蹤機制。圖1-9展示了分布式服務跟蹤機制的核心功能。
分布式服務跟蹤機制的建立需要完成調用鏈數據的生成、采集、存儲及查詢,同時需要對這些調用鏈數據進行運算和可視化管理。這些工作不是一個簡單的工具和框架就能全部完成的,因此,在開發微服務系統時,我們通常會整合多個開發框架來完成整個鏈路跟蹤。例如,在Spring Cloud中,就提供了Spring Cloud Sleuth與Zipkin的集成方案。

圖1-9 分布式服務跟蹤機制的核心功能
- Mastering AWS Lambda
- Spring Boot開發與測試實戰
- Debian 7:System Administration Best Practices
- OpenNI Cookbook
- Java面向對象程序開發及實戰
- Securing WebLogic Server 12c
- Microsoft Dynamics GP 2013 Reporting, Second Edition
- Python高效開發實戰:Django、Tornado、Flask、Twisted(第3版)
- HTML5+CSS3網站設計基礎教程
- Learning Selenium Testing Tools(Third Edition)
- Python忍者秘籍
- Python機器學習算法: 原理、實現與案例
- Java實戰(第2版)
- 持續輕量級Java EE開發:編寫可測試的代碼
- Spring Boot+MVC實戰指南