最近幾年微服務很火,大家都在建設微服務,仿佛不談點微服務相關的技術,都顯得不是那麼主流了。
01微服務
講起springcloud之前,我們需要了解一下什麼是微服務。
簡單來說,微服務就是一種將一個單一應用程式拆分為一組小型服務的方法,拆分完成後,每一個服務都運行在獨立的進程中,服務於服務之間採用輕量級的通信機制來進行溝通(Spring Cloud 中採用基於 HTTP 的 RESTful API)。
我們先認識下應用架構的變遷,下面是應用架構的變遷歷史
02單體架構
早期, 企業的對外提供的服務比較單一, 客戶流量也相對不足。 因此將所有的模塊,代碼打包在一個項目中,集中部署一臺機器上。
就像學校裡面做的項目,搞定前端,資料庫,部署到伺服器,把WEB應用 APP做出來就是以前的單體架構。
其實就是給你用的,基本部署到一個雲伺服器。沒有任何的實用,企業的客戶會越來越多, 流量越來越大, 單單一臺伺服器對外提供服務, 哪裡撐得住啊, 不分分鐘被搞掛掉才怪。
遇到並發和大流量,基本就Over了。
03SOA架構
應用軟體over了,企業損失慘重,你也可以滾蛋了。一臺最垃圾雲伺服器1G運行內存加50G空間,雖然垃圾,但是我幾個伺服器一起上。一個掛了,還有幾個撐著,然後我們趕緊把掛的重啟,這樣不就可以頂住了嗎,這就是SOA架構,全面就是Service-Oriented Architecture。簡稱SOA,翻譯過來面向服務的架構,下圖就是SOA架構圖
將所有的服務提供者註冊到註冊中心。客戶端向註冊中心訂閱服務註冊中心向客戶端推送有效的服務信息客戶端得到所有可調用服務的信息後, 根據需求,按負載均衡算法, 進行調用, 獲取數據。下面用百度百科把SOA說得高大上點。
面向服務的架構(SOA)是一個組件模型,它將應用程式的不同功能單元(稱為服務)進行拆分,並通過這些服務之間定義良好的接口和契約聯繫起來。接口是採用中立的方式進行定義的,它應該獨立於實現服務的硬體平臺、作業系統和程式語言。這使得構建在各種各樣的系統中的服務可以以一種統一和通用的方式進行交互。(百度百科)
比如,阿里巴巴的Dubbo數據源就是一個非常好的服務治理SOA框架,
04微服務
微服務可以理解為是 SOA 的一個傳承,一個本質的區別是微服務是一個真正分布式、去中心化的,微服務的拆分比 SOA 更加徹底。
微服務架構的系統是一個分布式的系統,每個微服務基本是一個能獨立發布的應用服務,因此可以作為獨立組件升級、灰度或復用等,對整個大應用的影響也較小,每個服務可以由專門的組織來單獨完成,依賴方只要定好輸入和輸出口即可完全開發,甚至整個團隊的組織架構也會更精簡,因此溝通成本低、效率高。
比如,一個項目出了問題。哪裡出了問題,難道將整個項目從頭到尾看一遍嗎,就算你肯,老闆也不肯啊。你把企業都有的私密的源碼都知道了,萬一你突然間要挾漲薪。這時候,就將一個項目分成幾個小項目。一個小項目負責一個功能實現,再整合起來,不就是一個大項目。
每一個服務,都是圍繞具體的業務進行構建,例如一個電商系統,訂單服務、支付服務、物流服務、會員服務等等,這些拆分後的應用都是獨立的應用,都可以獨立的部署到生產環境中。在採用微服務之後,我們的項目不再拘泥於一種語言,可以 Java、Go、Python、PHP 等等,混合使用,這在傳統的 應用開發中,是無法想像的。而使用了微服務之後,我們可以根據業務上下文來選擇合適的語言和構建 工具進行構建。
比如,今日頭條APP。推薦算法可能是用Python,處理並發可能用go,註冊功能可能是Java。所以一個上百萬的用戶的項目,絕對耗上億資金完成的。如果出毛病了,就讓那個負責這個模塊的人去處理。
05SpringCloud
那SpringCloud和微服務有什麼關係?Spring Cloud 可以理解為微服務這種思想在 Java 領域的一個具體落地。Spring Cloud 在發展之初,就 借鑑了微服務的思想,同時結合 Spring Boot,Spring Cloud 提供了組件的一鍵式啟動和部署的能力, 極大的簡化了微服務架構的落地。
這也是Java為什麼是老大的原因。
學任何東西都先訪問官方文檔,我們先訪問SpringCloud官方文檔:https://spring.io/projects/spring-cloud/
Spring Cloud為開發人員提供了工具,以快速構建分布式系統中的一些常見模式(例如,配置管理,服務發現,斷路器,智能路由,微代理,控制總線,一次性令牌,全局鎖,領導選舉,分布式會話,群集狀態)。分布式系統的協調導致樣板式樣,並且使用Spring Cloud開發人員可以快速站起來實現這些樣板的服務和應用程式。它們可以在任何分布式環境中正常工作,包括開發人員自己的筆記本電腦,裸機數據中心以及Cloud Foundry等託管平臺。
06SpringCloud版本
不同於其他的框架,Spring Cloud 版本名稱是通過 A(Angel)、B(Brixton)、C(Camden)、 D(Dalston)、E(Edgware)、F(Finchley)。這樣來明明的,這些名字使用了倫敦地鐵站的名 字,目前最新版是 H (Hoxton)版。
官方圖為證
Spring Cloud 中,除了大的版本之外,還有一些小版本,小版本命名方式如下: M ,M 版是 milestone 的縮寫,所以我們會看到一些版本叫 M1、M2 RC,RC 是 Release Candidate,表示該項目處於候選狀態,這是正式發版之前的一個狀態,所以 我們會看到 RC1、RC2 SR,SR 是 Service Release ,表示項目正式發布的穩定版,其實相當於 GA(Generally Available) 版。所以,我們會看到 SR1、SR2 SNAPSHOT,這個表示快照版
07Spring Cloud體系
下面總結下重點的(
Spring Cloud Netix,這個組件,在 Spring Cloud 成立之初,立下了汗馬功勞。但是, 2018 年 的斷更,也是 Netix 掉鏈子了。Spring Cloud Cong,分布式配置中心,利用 Git/Svn 來集中管理項目的配置文件Spring Cloud Bus,消息總線,可以構建消息驅動的微服務,也可以用來做一些狀態管理等Spring Cloud Consul,服務註冊發現Spring Cloud Stream,基於 Redis、RabbitMQ、Kafka 實現的消息微服務Spring Cloud OpenFeign,提供 OpenFeign 集成到 Spring Boot 應用中的方式,主要解決微服務 之間的調用問題 - Spring Cloud Gateway,Spring Cloud 官方推出的網關服務Spring Cloud Cloudfoundry,利用 Cloudfoundry 集成我們的應用程式Spring Cloud Security,在 Zuul 代理中,為 OAuth2 客戶端認證提供支持 Spring Cloud AWS ,快速集成亞馬遜雲服務Spring Cloud Contract,一個消費者驅動的、面向 Java 的契約框架Spring Cloud Zookeeper,基於 Apache Zookeeper 的服務註冊和發現Spring Cloud Data Flow,在一個結構化的平臺上,組成數據微服務Spring Cloud Kubernetes,Spring Cloud 提供的針對 Kubernetes 的支持 Spring Cloud Function Spring Cloud Task,短生命周期的微服務
08Spring Cloud和 Spring Boot 版本關係
初學spring cloud的朋友可能不知道,其實SpringBoot與SpringCloud需要版本對應,否則可能會造成很多意料之外的錯誤。所以,你需要把SpringBoot看一看學一學。
下面總結Spring Cloud和 Spring Boot 版本關係