@Author : Runsen
最近幾年微服務很紅,大家都在建設微服務,彷彿不談點微服務相關的技術,都顯得不是那麼主流了。
微服務講起springcloud之前,我們需要了解一下什麼是微服務。
簡單來說,微服務就是一種將一個單一應用程式拆分為一組小型服務的方法,拆分完成後,每一個服務都執行在獨立的程序中,服務於服務之間採用輕量級的通訊機制來進行溝通(Spring Cloud 中採用基於 HTTP 的 RESTful API)。
我們先認識下應用架構的變遷,下面是應用架構的變遷歷史
單體架構早期, 企業的對外提供的服務比較單一, 客戶流量也相對不足。 因此將所有的模組,程式碼打包在一個專案中,集中部署一臺機器上。
就像學校裡面做的專案,搞定前端,資料庫,部署到伺服器,把WEB應用 APP做出來就是以前的單體架構。
其實就是給你用的,基本部署到一個雲伺服器。沒有任何的實用,企業的客戶會越來越多, 流量越來越大, 單單一臺伺服器對外提供服務, 哪裡撐得住啊, 不分分鐘被搞掛掉才怪。
遇到併發和大流量,基本就Over了。
SOA架構應用軟體over了,企業損失慘重,你也可以滾蛋了。一臺最垃圾雲伺服器1G執行記憶體加50G空間,雖然垃圾,但是我幾個伺服器一起上。一個掛了,還有幾個撐著,然後我們趕緊把掛的重啟,這樣不就可以頂住了嗎,這就是SOA架構,全面就是Service-Oriented Architecture。簡稱SOA,翻譯過來面向服務的架構,下圖就是SOA架構圖
將所有的服務提供者註冊到註冊中心。客戶端向註冊中心訂閱服務註冊中心向客戶端推送有效的服務資訊客戶端得到所有可呼叫服務的資訊後, 根據需求,按負載均衡演算法, 進行呼叫, 獲取資料。下面用百度百科把SOA說得高大上點。
面向服務的架構(SOA)是一個元件模型,它將應用程式的不同功能單元(稱為服務)進行拆分,並通過這些服務之間定義良好的介面和契約聯絡起來。介面是採用中立的方式進行定義的,它應該獨立於實現服務的硬體平臺、作業系統和程式語言。這使得構建在各種各樣的系統中的服務可以以一種統一和通用的方式進行互動。(百度百科)
比如,阿里巴巴的Dubbo資料來源就是一個非常好的服務治理SOA框架,
微服務微服務可以理解為是 SOA 的一個傳承,一個本質的區別是微服務是一個真正分散式、去中心化的,微服務的拆分比 SOA 更加徹底。
微服務架構的系統是一個分散式的系統,每個微服務基本是一個能獨立釋出的應用服務,因此可以作為獨立元件升級、灰度或複用等,對整個大應用的影響也較小,每個服務可以由專門的組織來單獨完成,依賴方只要定好輸入和輸出口即可完全開發,甚至整個團隊的組織架構也會更精簡,因此溝通成本低、效率高。
比如,一個專案出了問題。哪裡出了問題,難道將整個專案從頭到尾看一遍嗎,就算你肯,老闆也不肯啊。你把企業都有的私密的原始碼都知道了,萬一你突然間要挾漲薪。這時候,就將一個專案分成幾個小專案。一個小專案負責一個功能實現,再整合起來,不就是一個大專案。
每一個服務,都是圍繞具體的業務進行構建,例如一個電商系統,訂單服務、支付服務、物流服務、會員服務等等,這些拆分後的應用都是獨立的應用,都可以獨立的部署到生產環境中。在採用微服務之後,我們的專案不再拘泥於一種語言,可以 Java、Go、Python、PHP 等等,混合使用,這在傳統的 應用開發中,是無法想象的。而使用了微服務之後,我們可以根據業務上下文來選擇合適的語言和構建 工具進行構建。
SpringCloud那SpringCloud和微服務有什麼關係?Spring Cloud 可以理解為微服務這種思想在 Java 領域的一個具體落地。Spring Cloud 在發展之初,就 借鑑了微服務的思想,同時結合 Spring Boot,Spring Cloud 提供了元件的一鍵式啟動和部署的能力, 極大的簡化了微服務架構的落地。
這也是Java為什麼是老大的原因。
學任何東西都先訪問官方文件,我們先訪問SpringCloud官方文件:https://spring.io/projects/spring-cloud/
Spring Cloud為開發人員提供了工具,以快速構建分散式系統中的一些常見模式(例如,配置管理,服務發現,斷路器,智慧路由,微代理,控制匯流排,一次性令牌,全域性鎖,領導選舉,分散式會話,群集狀態)。分散式系統的協調導致樣板式樣,並且使用Spring Cloud開發人員可以快速站起來實現這些樣板的服務和應用程式。它們可以在任何分散式環境中正常工作,包括開發人員自己的膝上型電腦,裸機資料中心以及Cloud Foundry等託管平臺。
SpringCloud版本不同於其他的框架,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,這個表示快照版
Spring Cloud體系Spring Cloud Netflix,這個元件,在 Spring Cloud 成立之初,立下了汗馬功勞。但是, 2018 年 的斷更,也是 Netflix 掉鏈子了。Spring Cloud Config,分散式配置中心,利用 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,短生命週期的微服務Spring Cloud和 Spring Boot 版本關係
初學spring cloud的朋友可能不知道,其實SpringBoot與SpringCloud需要版本對應,否則可能會造成很多意料之外的錯誤。所以,你需要把SpringBoot看一看學一學。
spring-cloud-dependencies 版本列表可檢視: https://mvnrepository.com/artifact/org.springframework.cloud/spring-cloud-dependencies spring-boot-starter-parent 版本列表可檢視: https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-parent