javascript
01 | 顶层设计:微服务生态与 Spring Cloud Alibaba
通用的微服務架構應包含哪些組件
相對于單體式架構的簡單粗暴,微服務架構將應用打散,形成多個微服務進行獨立開發、測試、部署與運維。雖然從管理與邏輯上更符合業務需要,但微服務架構也帶來了諸多急需解決的核心問題:
可以發現,上述這些問題并不是針對某種語言或某種技術的,任何軟件廠商要構建微服務架構就必須面對這些問題,要么獨立開發要么將已有多種技術整合形成整體解決方案。好在經過多年沉淀,業內已經有了標準答案,下圖清晰的說明微服務架構需要的標準組件。
下面我來介紹每種組件的職責。
-
注冊中心(Service Registry):注冊中心是微服務架構最核心的組件。它起到新服務節點的注冊與狀態維護的作用,通過注冊中心解決了上述問題 1。微服務節點在啟動時會將自身的服務名稱、IP、端口等信息在注冊中心中進行登記,注冊中心會定時檢查該節點的運行狀態。注冊中心通常會采用心跳機制最大程度保證其持有的服務節點列表都是可用的。
-
負載均衡(Load Balance):負載均衡器解決了問題 2。通常在微服務彼此調用時并不是直接通過IP、端口直接訪問,而是首先通過服務名在注冊中心查詢該服務擁有哪些可用節點,然后注冊中心將可用節點列表返回給服務調用者,這個過程稱為“服務發現”。因服務高可用的要求,服務調用者會接收到多個可用節點,必須要從中進行選擇,因此在服務調用者一端必須內置負載均衡器,通過負載均衡策略選擇適合的節點發起實質的通信請求。
-
服務通信(Communication):服務通信組件解決了問題 3。在微服務定義中闡述服務間通信采用輕量級協議,通常是 HTTP RESTful 風格。但因 RESTful 風格過于靈活,必須加以約束,通常在應用時對其進行上層封裝,例如在 Spring Cloud 中就提供了 Feign 和 RestTemplate 兩種技術屏蔽底層實現 RESTful 通信細節,所有開發者是基于封裝后統一的SDK進行開發,這有利于團隊間協作。
-
API 服務網關(API Gateway):服務網關解決問題 4。對于最終用戶來說,微服務的通信與各種實現細節應該是透明的,用戶只需關注他要使用的 API 接口即可。因此微服務架構引入服務網關控制用戶的訪問權限。服務網關是外部環境訪問內部微服務的唯一途徑,在這個基礎上還可以擴展出其他功能,例如:用戶認證與授權、容錯限流、動態路由、A/B測試、灰度發布等。
-
配置中心(Config Management):配置中心解決問題 5。微服務架構下,微服務節點都包含自己的各種配置文件,如JDBC地址、自定義配置、環境配置等。要知道互聯網公司微服務節點可能是成千上萬個,如果這些配置信息分散存儲在節點上,如發生配置變更就必須逐個調整,這必將給運維人員帶來巨大的工作量。配置中心便因此而生,通過部署配置中心服務器,將原本分散的配置文件從應用中剝離,集中轉存到配置中心。一般配置中心會提供 UI 界面,可以方便快捷的實現大規模集群的配置調整。
-
集中式日志管理(Centralized Logging):集中式日志解決問題 6。因為微服務架構默認將應用日志分散保存在每一個微服務節點上,當系統進行用戶行為分析、數據統計時必須收集所有節點日志數據。那如何有效收集所有節點的運行日志,并對其進行分析匯總呢?業內常見的方案有 ELK、EFK,通過搭建獨立的日志收集系統,定時抓取增量日志形成有效的統計報表,為決策提供數據支撐。
-
分布式鏈路追蹤(Distributed Tracing):分布式追蹤解決問題 7。一個復雜的業務流程可能需要連續調用多個微服務,我們需要記錄一個完整業務邏輯涉及的每一個微服務的運行狀態,再通過可視化鏈路圖展現,幫助軟件工程師在系統出錯時分析解決問題。
-
服務保護(Service Protection):服務保護解決問題 8。在服務間通信過程中,如果某個微服務出現響應高延遲可能會導致線程池滿載,嚴重時會引起系統崩潰。這里就需要引入服務保護組件實現高延遲服務的快速降級,避免系統崩潰。
以上是在微服務架構過程中派生的新問題以及對應的解決方案,這些組件是微服務架構設計時必須考慮的事情。在實現層面,Java 是目前對微服務生態支持最好的編程語言,下面我們就來介紹在Java中如何實現微服務架構的。
Spring Cloud 是如何支撐微服務架構的
下面這張圖很好地詮釋了 Spring、Spring Boot、Spring Cloud 它們之間的關系。Spring Cloud 提供了完整的微服務架構的技術生態,像剛才我們提到的微服務架構標準組件,在 Spring Cloud 中都有著對應的實現。
不過這里有一點需要注意,Spring Cloud 并不是完全由 Spring 機構自主開發的,秉持不重復造輪子的理念,Spring 機構整合了多家廠商的優秀開源產品,比如注冊中心就選用了 Netflix 的 Eureka,在此基礎上進行整合形成了完整的 Java 微服務架構解決方案。剛才我們列舉出來的 8 個微服務的標準組件在 Spring Cloud 中都有對應的具體實現,值得注意的是同一類組件 Spring Cloud 可能給出多種不同的開源產品供我們選擇,這些產品在 Spring Cloud 下是彼此兼容的。
以上是 Spring Cloud 的主要組成部分,這里還有許多沒有提到的功能組件,如果你對此感興趣,可以到 Spring Cloud 官網了(https://spring.io/projects/spring-cloud)解更詳細的內容。
功能更強大的國產微服務生態Spring Cloud Alibaba
Spring Cloud Alibaba是直接隸屬于 Spring Cloud 的子項目。官網是:https://spring.io/projects/spring-cloud-alibaba#overview
Spring Cloud Alibaba是國產的微服務開發一站式解決方案,與原有 Spring Cloud 兼容的同時對微服務生態進行擴展,通過添加少量的配置注解,便可實現更符合國情的微服務架構。
下面是 Spring Cloud 與 Spring Cloud Alibaba 的對比表格。
我將兩者從不同維度進行比對,可以發現相比 Spring Cloud,Spring Cloud Alibaba 對服務注冊、配置中心與負載均衡功能都整合進 Nacos,這樣簡化了微服務架構的復雜度,出問題的概率也會降低。原有的服務保護組件也調整為 Sentinel,相較Hystrix功能更強大,使用也更加友好。在表格最下方也可看到 Spring Cloud Alibaba 基于阿里云強大的能力提供了更多的新特性,很多復雜的應用場景通過 Spring Cloud Alibaba 結合阿里云便可輕松實現。在后面的內容,我們以這個表格作為主線對組件進行逐一講解,讓你輕松掌握各組件用法與設計原理。
總結
以上是生活随笔為你收集整理的01 | 顶层设计:微服务生态与 Spring Cloud Alibaba的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Java对象间的转化
- 下一篇: 批量插入SQL数据