SpringCloud升級之路2020.0.x版-1.背景


image

本系列為之前系列的整理重啟版,隨着項目的發展以及項目中的使用,之前系列里面很多東西發生了變化,並且還有一些東西之前系列並沒有提到,所以重啟這個系列重新整理下,歡迎各位留言交流,謝謝!~

image

Spring Cloud 官方文檔說了,它是一個完整的微服務體系,用戶可以通過使用 Spring Cloud 快速搭建一個自己的微服務系統。那么 Spring Cloud 究竟是如何使用的呢?他到底有哪些組件?

spring-cloud-commons組件里面,就有 Spring Cloud 默認提供的所有組件功能的抽象接口,有的還有默認實現。目前的 2020.0.x (按照之前的命名規則應該是 iiford),也就是spring-cloud-commons-3.0.x包括:

  • 服務發現DiscoveryClient,從注冊中心發現微服務。
  • 服務注冊ServiceRegistry,注冊微服務到注冊中心。
  • 負載均衡LoadBalancerClient,客戶端調用負載均衡。其中,重試策略spring-cloud-commons-2.2.6加入了負載均衡的抽象中。
  • 斷路器CircuitBreaker,負責什么情況下將服務斷路並降級
  • 調用 http 客戶端:內部 RPC 調用都是 http 調用

然后,一般一個完整的微服務系統還包括:

  1. 統一網關
  2. 配置中心
  3. 全鏈路監控與監控中心

Spring Cloud 一直處於非常活躍,非常快速迭代的過程,並且 Spring Cloud 高度依賴 Spring Boot,Spring Boot 與 Spring Cloud 相輔相成。但是,快速迭代帶來的不只是新功能的引入以及原有功能的優化,還有就是升級過程中帶來了很多兼容性,功能性,完整性,穩定性的煩惱。本系列旨在幫助廣大讀者了解不同大版本 Spring Boot & Spring Cloud 的特性功能以及底層原理的同時,使用這些組件實現一個具有完整功能的微服務體系,同時這個體系會適應目前最新的雲原生環境。

image

我們使用的是目前最流行的 Docker + Kubernetes 的組合。目前一般微服務架構,都不會直接使用物理機,因為現代的互聯網業務一般都具有這樣的特性(我們拿電子商城舉例):

  • 業務會在某一時刻開始突然開始快速增長,例如我們開始在各地投放廣告,用戶不斷進入網站,隨着口碑不斷變好,用戶增長速度越來越快。
  • 業務在一段時間內,有高峰有低谷。例如在一天內,白天一般都在上班,晚上訪問網站下單的人數比較多。
  • 業務在一段時間內,最高峰與最低峰之間的差距隨着業務增長越來越大。由於大部分用戶都在晚上訪問網站下單,導致白天和晚上的流量相差越來越大。
  • 會突然出現流量尖峰,並且很難預測這個時間點以及估計量。例如雙 11 促銷的時候,人們大量涌入,很難能估計的好會有多少流量。還有就是突然大家需要某個商品的時候,例如新冠剛開始的時候,口罩搶購一空。

對於這些特性,根據業務壓力,智能並且快速動態擴容縮容這個功能變得越來越重要,但是這個功能在直接部署業務到物理機上很難實現。這時候出現了虛擬機,將物理機虛擬化抽象成多個虛擬機,比如 vmware 和 openstack,我們可以使用虛擬機在我們的操作系統中模擬出多台子電腦,子電腦之間是相互隔離的,這樣可以更細致動態的分配物理機的資源。但是虛擬機對於開發和運維人員而言,還是太過於笨重了,存在啟動慢,占用空間大,不易遷移的缺點。
接着,容器化技術應運而生,它不需要虛擬出整個操作系統,只需要虛擬一個小規模的環境即可,而且啟動速度很快,除了運行其中應用以外,基本不消耗額外的系統資源。Docker 是應用最為廣泛的容器技術,通過打包鏡像,啟動容器來創建一個服務。但是隨着應用越來越復雜,容器的數量也越來越多,由此衍生了管理運維容器的這個重要場景。這個場景目前最流行的解決方案就是 Kubernetes(k8s)。

Kubernetes 能為我們提供如下功能:

  1. 容器編排與管理,機器資源管理以及存儲卷掛載
  2. 服務的健康檢查以及自愈
  3. 服務彈性擴容
  4. 配置中心
  5. 服務發現與調度
  6. 負載均衡

image

在我們公司中,項目團隊包括了運維團隊以及后端開發團隊。對於 Docker 鏡像打包與管理以及對於 K8s 的開發維護部署,主要交給運維團隊。微服務業務開發維護,實現微服務特性的框架的開發維護是交給后端開發團隊的。所以對於 K8s 的功能,我們只使用了前三個,對於配置中心服務發現與調度還有負載均衡,我們還是主要交給實現微服務特性的框架實現的,未來可能會將這三個功能使用起來。

微服務框架需要考慮與 K8s 的交互,主要是服務的健康檢查以及自愈以及服務彈性擴容

  • 服務的健康檢查以及自愈:K8s 可以通過檢查端口是否被監聽使用,調用 http 接口來檢查進程是否啟動以及進程的健康性,我們需要提供這種健康檢查接口。主要通過 spring boot 的 actuator 實現
  • 服務彈性擴容:K8s 需要獲取進程的監控指標來決定是否需要擴容,並且我們也需要監控中心采集這些指標。我們主要通過 grafana(監控中心) + prometheus(采集指標) + actuator(暴露接口) 實現。

image

本篇主要交代了我們使用 Spring Cloud 作為我們微服務框架的背景以及底層的雲組件和功能邊界,接下來我們會繼續介紹我們要使用微服務框架實現的功能,以及包含的組件和使用中要考慮的問題。

微信搜索“我的編程喵”關注公眾號,每日一刷,輕松提升技術,斬獲各種offer

image


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM