在Java的整個學習過程中,大家勢必會聽見一些什么分布式-微服務、高并發、高可用這些專業術語,給人的感覺很高級,有一種高深莫測的感覺。可以看一下這篇博客對這些技術架構的演變有一個初步的認識:
服務端?并發分布式結構演進之路-CSDN博客文章瀏覽閱讀950次,點贊11次,收藏9次。在進行技術學習過程中,由于大部分讀者沒有經歷過一些中大型系統的實際經驗,導致無法從服務端?并發分布式結構演進之路-----在進行技術學習過程中,由于大部分讀者沒有經歷過一些中大型系統的實際經驗,導致無法從全局理解一些概念,所以本文以一個"電子商務"應用為例,介紹從一百個到千萬級并發情況下服務端的架構的演進過程,同時列舉出每個演進階段會遇到的相關技術,讓大家對架構的演進有一個整體的認知,方便大家對后續知識做深入學習時有一定的整體視野。https://blog.csdn.net/qq_45875349/article/details/139639760?spm=1001.2014.3001.5501在學習Spring Cloud 之前,我們先來了解下什么是微服務,以及微服務的發展史.在架構發展的過程中,項目開發遇到了哪些問題,以及Spring Cloud是用來解決什么問題的,這些概念上的有助于對后續發開的深刻理解。其實在上面的博客中已經敘述了關于架構的發展過程。
1. 什么是微服務?
1.1 單體架構
對于一個系統來說,將前端+后端+數據庫這些所有的業務都打包在一個項目中,就是單體架構。
比如大家都很熟悉的電商系統為例,電商系統包括:用戶管理,商品管理,訂單管理,支付管理,庫存管理,物流管理等等,項目早期我們會把這些模塊都寫在一個web項目中,然后統一部署到一個Web服務器中。
這種架構開發簡單,部署簡單,一個項目就包含了所有的功能,省去了多個項目之間的交互和調用消耗
直接部署在一個服務器即可.
1.2 集群和分布式架構
當我們的系統服務的用戶越來越多的時候,用戶量逐漸增加、我們的服務面臨的壓力也逐漸增加。可能會面臨一些問題:
- 后端服務器的壓力就會越來越大,負載越來越高,甚至出現無法訪問的情況
- 業務場景逐漸復雜.為了滿足用戶的需求,單體應用也會越來越大,各個業務代碼之間的耦合度也會越來越高.任何一個問題,都需要整個項目重新構建,發布.
- 一個微小的問題,可能會導致整個應用掛掉
這時候我們一般會從兩個角度進行優化:
1. 橫向:添加服務器,把單臺機器變成多臺機器的集群。
2. 縱向:對應用的業務進行拆分,拆分為多個子項目。(垂直架構)
以單體結構規模的項目為單位進行垂直劃分,也就是將一個大項目拆分成一個一個單體結構項目.項目和項目之間相對比較獨立,接口多為數據同步功能.
集群
集群(cluster)是將一個系統完整的部署到多個服務器上,每個服務器都能提供系統的所有服務,多個
服務器通過負載均衡調度完成任務,每個服務器稱為集群的節點(node)。
集群就像在一個大餐館里設置了多個完全相同的廚房(節點)。每個廚房都可以獨立處理整個菜單上的任何訂單。顧客的訂單被分配到不同的廚房,由每個廚房獨立完成。這種方式確保如果一個廚房出了問題,其他廚房還能繼續工作,保證餐館整體的服務能力。
分布式
分布式是將一個系統拆分為多個子系統,多個子系統部署在多個服務器上,多個服務器上的子系統協同合作完成一個特定任務。
分布式則像是在一個大餐館里,把菜單分成了多個部分,每個廚房只負責其中一部分。例如,一個廚房只做前菜,另一個廚房只做主菜,第三個廚房只做甜點。這樣,每個廚房專注于自己負責的部分,所有廚房一起協作完成整個餐館的服務。
集群和分布式區別和聯系
1.從概念上.集群是多個計算機做同樣的事,分布式是多個計算機做不同的事
2.從功能上.集群的每一個節點功能是相同的,并且可以替代的,分布式也是多個節點組成的系統,但是每個節點完成的業務是不同的,一個節點出現問題,這個業務就不可訪問了
3.從關系上,分布式和集群在實踐中,很多時候是互相配合使用的,比如分布式的某一個節點,可能由一個集群來代替,分布式架構大多是建立在集群上的,所以實際的分布式架構設計中并不會把分布式和集群單獨區分,而是統稱:分布式架構.
1.3 微服務架構
系統經過分布式進行業務拆分后,還會存在一些重復的功能開發。
在分布式架構下,當部署的服務越來越多,重復的代碼就會越來越多,服務的調用關系也會越來越復雜,我們可以把一些通用的,會被多個上層服務調用的共享業務,提取成獨立的基礎服務,組成一個個微小的服務.這就是微服務.簡單來說,微服務就是很小的服務.小到一個服務只對應一個單一的功能,只做一件事,這個服務可以單獨部署運行。
微服務之間可以采用REST和RPC協議進行通信,此處把他理解為接口的約定
從這個角度來看,微服務架構是分布式架構的一種拓展,這種架構模式下它拆分粒度更小,服務更獨立,可以理解為:微服務是一種經過良好架構設計的分布式架構方案.
分布式架構側重于壓力的分散,強調的是服務的分散化.微服務側重于能力的分散,更強調服務的專業化和精細分工.從實踐的角度來看,微服務架構通常是分布式服務架構,反之則未必成立.所以,選擇微服務通常意味著需要解決分布式架構的各種難題.?
2. 微服務的優勢與挑戰
微服務架構帶來好處的同時,也面臨著一些挑戰,從單體服務轉向微服務意味著管理更加復雜。
優勢
-
獨立部署:每個服務可以獨立部署和更新,不影響其他服務。這減少了發布的風險,提高了發布的靈活性。
-
技術多樣性:不同的服務可以使用不同的技術棧(編程語言、數據庫等),根據具體需求選擇最合適的技術。
-
擴展性:可以針對某個服務單獨進行水平擴展(增加實例數量)或垂直擴展(增加單個實例的處理能力),提高系統的彈性和資源利用率。
-
容錯性:服務之間的隔離性增強了系統的容錯能力。如果一個服務失敗,不會影響其他服務的運行,系統能更好地應對部分故障。
-
團隊獨立性:不同的服務可以由不同的小團隊負責,這樣團隊可以獨立開發、測試和部署,提高開發效率和團隊自主性。
-
更容易的理解和維護:由于服務較小且專注于單一業務功能,代碼庫更易于理解和維護。新成員可以更快上手。
挑戰
-
分布式系統復雜性:微服務架構將單一應用分解成多個服務,帶來了分布式系統的復雜性。服務間的通信、數據一致性、事務管理等都是新的挑戰。
-
服務間通信開銷:服務間的網絡通信會帶來額外的開銷,可能會影響性能。需要優化通信機制和策略,確保服務間通信高效可靠。
-
數據管理:數據管理變得更加復雜。每個服務通常擁有自己的數據庫,這導致分布式數據管理和跨服務的數據一致性變得困難。
-
運維復雜性:管理和監控大量微服務實例需要更復雜的運維工具和流程。需要有效的監控、日志和告警系統來確保服務的穩定性。
-
部署和版本控制:部署多個獨立的服務需要有效的部署管道和版本控制機制,確保各服務之間的兼容性和協調。
-
測試難度:測試微服務架構比測試單一應用復雜。需要模擬服務間的交互,并處理分布式環境下的各種測試場景。
-
安全性:每個服務都是獨立的潛在攻擊點,需要確保每個服務的安全性,以及服務間通信的安全。
既然我們的java框架已經發展到這一步驟,并且已經出現了這些需求,就肯定需要解決這些困難,就算有困難也需要去使用微服務啊!我們是自己研發還是直接選取市場上比較成熟的技術來使用?
全球的互聯網公司都在積極嘗試自己的微服務落地方案.在Java領域,最引人注目的就是Spring Cloud。
3. 微服務解決方案:Spring Cloud
3.1 什么是Spring Cloud
Spring Cloud 提供了一些可以讓開發人員快速構建分布式服務的工具,比如配置管理,服務發現,熔斷,智能路由等.他們可以在任何分布式環境中很好的工作.?Spring Cloud 通過集成和擴展多個開源項目,為開發人員提供了一整套解決方案,使他們能夠快速構建和管理分布式服務。這些工具和庫在任何分布式環境中都能很好地工作,幫助開發人員解決配置管理、服務發現、熔斷、智能路由等常見問題,提高系統的穩定性、靈活性和可擴展性。
簡單來說, Spring Cloud 就是分布式微服務架構的一站式解決方案,是微服務架構落地的多種技術的集合:
注意:
Spring Cloud 并不是Spring團隊研發的框架,它只是把一些比較優秀的解決微服務架構中常見問題的開源框架基于SpringCloud規范進行了整合,并基于SpringBoot的風格,對這些組件進行封裝,屏蔽掉了復雜的配置和實現原理,為開發者提供了開箱即用的微服務開發體驗,這些開源技術的框架是由各個公司來維護的.Spring Cloud 就是這些微服務的大管家.
3.2 Spring Cloud版本
Spring Cloud中的所有子項目都依賴SpringBoot,所以SpringBoot和Spring Cloud的版本之間也存在-定的對應關系。?如SpringBoot 3.2.X對應的SpringCloud版本是2023.0.X
?3.3 Spring Cloud實現方案
在Spring Cloud的規范下,有很多實現,其中最為出名的是
- Spring Cloud Netflix
- Spring Cloud Alibaba
Spring Cloud Netflix
包含的組件及其主要功能大致如下:
Spring Cloud Netflix是 Netflix OSS(Netflix Open Source Software)在Spring Cloud規范下的實現.
- Eureka:服務注冊和發現
- Zuul:服務網關
- Ribbon:負載均衡
- Feign: 服務調用組件
- Hystrix: 斷路器,提供服務熔斷和限流
- Hystrix Dashboard:監控面板
- ...
在很長的一段時間里,Spring Cloud 一度被泛指 Spring Cloud Netflix.Spring Cloud一直以來把Netflix oss 套件作為其官方默認的一站式解決方案,然而,Netflix公司在2018年前后宣布其核心組件Hystrix、Ribbon、Zuul等均進入維護狀態,Spring Cloud 也被迫宣布刪除這些維護模塊.
現在只有Eureka:服務注冊和發現。
?Spring Cloud Netflix 在很多公司都有大規模使用,一旦停止更新,短期看影響不大,但長期顯然是不合適的,Spring Cloud官方也提供了一些替換建議。
?Spring Cloud Alibaba
Spring Cloud Alibaba 是阿里巴巴集團下的開源組件和云產品在Spring Cloud規范下的實現
雖然Spring Cloud Alibaba目前并不是Spring Cloud官方推薦的默認方案,但是Spring Cloud Alibaba是阿里中間件團隊主導的一個新生項目,正處于高速迭代中.甚至在Alibaba的開源組件還沒有織入SpringCloud生態之前,就已經在各大公司廣泛使用了.

