? 一、微服務
1)單體架構
業務的所有功能實現都打包在一個 war 包或者 jar 包中,這種方式就稱為?單體架構
例如,學校中實現的博客系統,前端+后端+數據庫實現,都是在一個項目中
把所有模塊都寫在一個 web 項目中,然后再統一部署到一個 web 服務器中
這種架構開發簡單,部署容易,一個項目就包含了所有的功能,省去了多個項目之間的交互和調用消耗。直接部署在一個服務器即可
2)集群和分布式架構
當用戶的訪問量越來越大,需求也越來越多,流量也會越來越大:
1. 后端服務器負載越來越大,可能會無法訪問
2. 業務場景越來越復雜,單體應用會更大。各個業務之間的耦合度也會變高。任何一個問題和迭代,都需要整個項目重新構建,發布
3. 一個微小的問題,可能會至整個應用關掉
優化方案:
1)橫向:添加服務器,把單臺機器變成多臺機器的集群
2)縱向:把一個應用,按照業務進行拆分成多個項目(垂直架構)
以單體結構規模的項目為單位進行垂直劃分,也就是將一個大項目拆分成一個一個的單體結構的項目。項目和項目之間相對比較獨立,接口多為數據同步功能
集群和分布式
? 集群(cluster)是將?個系統完整的部署到多個服務器上,每個服務器都能提供系統的所有服務,多個 服務器通過負載均衡調度完成任務.每個服務器稱為集群的節點(node)
? 分布式是將?個系統拆分為多個?系統,多個?系統部署在多個服務器上,多個服務器上的?系統 協同合作完成?個特定任務
集群和分布式區別和聯系:
1. 從概念上.集群是多個計算機做同樣的事,分布式是多個計算機做不同的事
2. 從功能上.集群的每?個節點功能是相同的,并且可以替代的.分布式也是多個節點組成的系統,但是 每個節點完成的業務是不同的,?個節點出現問題,這個業務就不可訪問了
3. 從關系上.分布式和集群在實踐中,很多時候是互相配合使?的.比如分布式的某?個節點,可能由? 個集群來代替.分布式架構大多是建立在集群上的.所以實際的分布式架構設計中并不會把分布式和集群單獨區分,?是統稱:分布式架構
3)微服務架構
在分布式架構下,當部署的服務越來越多,重復的代碼就會越來越多,服務的調?關系也會越來越復雜. 我們可以把?些通?的,會被多個上層服務調?的共享業務,提取成獨?的基礎服務,組成?個個微?的 服務.這就是微服務
簡單來說,微服務就是很?的服務.?到?個服務只對應?個單?的功能,只做?件事.這個服務可以單 獨部署運?
微服務之間可以采?REST和RPC協議進?通信
優勢
? 易開發和維護.每個微服務負責的業務?較清晰,體量?,開發和維護成本降低.
? 容錯性?.?個服務發?故障,可以使故障隔離在單個服務中,不影響整體服務故障
? 擴展性好.每個服務都是獨?運?的,我們可以結合項?實際情況進?擴展,按需伸縮
? 技術選型靈活.每個微服務都是單獨的團隊來運維,可以根據業務特點和團隊特點,選擇適合的技術棧
挑戰
? 服務依賴.隨著服務的數量增多,服務之間的關系也會變得更加復雜.?個服務的更改,需要考慮對其 他服務的影響
? 運維成本.?個業務流程會涉及多個微服務共同完成,有更多的服務需要編譯,部署,運?,甚?可能 是不同的編程語?,不同的運?環境,當然也需要集群來處理故障轉移等.這對于運維?員??,挑戰 是巨?的
? 開發和測試. ?個業務流程可能涉及多個微服務共同完成,服務調?引??絡延遲,不可靠的?絡,如 何進?容錯處理等問題.這對開發和測試??,難度也會提升
? 服務監控.在?個單體結構中,很容易實現服務的監控.因為所有功能都在?個服務中,微服務架構 下,不僅需要對整個鏈路進?監控,還需要對每?個服務實現監控
? 負載均衡.微服務架構中的服務實例數量可能?常龐?,因此需要有效的服務發現和負載均衡機制 來管理請求流量和保證?可?性
二、SpringCloud
1)什么是SpringCloud
pring Cloud 提供了?些可以讓開發?員快速構建分布式服務的?具,比如配置管理,服務發現,熔斷, 智能路由等.他們可以在任何分布式環境中很好的?作
Spring Cloud
簡單來說,SpringCloud就是分布式微服務架構的?站式解決方案,是微服務架構落地的多種技術的集合. 比如:
? Distributed/versioned configuration 分布式版本配置
? Serviceregistration and discovery 服務注冊和發現
? Routing 路由
? Service-to-service calls 服務調?
? Loadbalancing 負載均衡
? Circuit Breakers 斷路器
? Distributed messaging 分布式消息
...
2)Spring Cloud實現方案
Spring Cloud中的所有?項?都依賴SpringBoot,所以SpringBoot和SpringCloud的版本之間也存在 ?定的對應關系
在SpringCloud的規范下,有很多實現,其中最為出名的是
? SpringCloudNetflix
? SpringCloudAlibaba
接下來的文章中,會講解以下內容:
服務注冊/發現:Eureka? Nacos
服務調用:OpenFeign
配置中心:Nacos
服務網關:SpringCloudGateway
負載均衡:SpringCloudBalance