什么是微服務
簡單來說,微服務就是一種將一個單一應用程序拆分為一組小型服務的方法,拆分完成后,每一個服務都運行在獨立的進程中,服務於服務之間采用輕量級的通信機制來進行溝通(Spring Cloud 中采用基於HTTP 的 RESTful API)。
每一個服務,都是圍繞具體的業務進行構建,例如一個電商系統,訂單服務、支付服務、物流服務、會員服務等等,這些拆分后的應用都是獨立的應用,都可以獨立的部署到生產環境中。就是在采用微服務之后,我們的項目不再拘泥於一種語言,可以 Java、Go、Python、PHP 等等,混合使用,這在傳統的應用開發中,是無法想象的。而使用了微服務之后,我們可以根據業務上下文來選擇合適的語言和構建工具進行構建。
微服務可以理解為是 SOA (面向服務的體系結構) 的一個傳承,一個本質的區別是微服務是一個真正分布式、去中心化的,微服務的拆分比 SOA 更加徹底。
微服務的優勢
-
復雜度可控
-
獨立部署
-
技術選型靈活
-
較好的容錯性
-
較強的可擴展性
微服務的設計思想
微服務架構的風格
將應用程序構建為服務套件。除了服務可獨立部署和可擴展之外,每個服務還提供了牢固的模塊邊界,甚至允許使用不同的編程語言編寫不同的服務。他們也可以由不同的團隊管理。
微服務架構的特征
1、通過服務進行組件化
-
這里組件的定義是:可以獨立替換和升級的軟件單元。
-
使用服務作為組件(而不是庫)的主要原因之一是服務是可獨立部署的。
-
將服務用作組件的另一個結果是更明確的組件接口。
2、產品不是項目
微服務的支持者傾向於團隊應該在產品的整個生命周期內擁有產品的想法。這樣做的一個共同靈感是亞馬遜的“構建,運行”概念,其中開發團隊對生產中的軟件負全部責任。
3、分散數據管理
微服務更喜歡讓每個服務管理自己的數據庫,或者是同一數據庫技術的不同實例,或者是完全不同的數據庫系統,一種稱為 Polyglot Persistence 的方法。
4、失敗設計
-
將服務用作組件的結果是,需要對應用程序進行設計,以便它們可以容忍服務故障。
-
由於服務隨時可能發生故障,因此重要的是能夠迅速檢測到故障,並在可能的情況下自動恢復服務。
-
微服務團隊希望看到每項服務的復雜監視和日志記錄設置,例如顯示上/下狀態的儀表板以及各種與業務和業務相關的指標。
5、進化設計
-
組件的關鍵特性是獨立替換和可升級性的概念
-
使用微服務時,您只需要重新部署您修改過的服務即可。這樣可以簡化並加快發布過程。缺點是您必須擔心一項服務的更改會破壞其用戶。傳統的集成方法是嘗試使用版本控制來解決此問題,但是微服務領域的首選是僅使用版本控制作為最后的手段。通過設計服務以盡可能地容忍其供應商的變更,我們可以避免很多版本控制。
什么是 Spring Cloud
Spring Cloud 是一系列框架的集合,Spring Cloud 內部包含了許多框架,這些框架互相協作,共同來構建分布式系統。利用這些組件,可以非常方便的構建一個分布式系統。
Spring Cloud 與微服務的關系
Spring Cloud 可以理解為微服務這種思想在 Java 領域的一個具體落地。Spring Cloud 在發展之初,就借鑒了微服務的思想,同時結合 Spring Boot,Spring Cloud 提供了組件的一鍵式啟動和部署的能力,極大的簡化了微服務架構的落地。
Spring Cloud 這種框架,從設計之初,就充分考慮了分布式架構演化所需要的功能,例如服務注冊、配置中心、消息總線以及負載均衡等。這些功能都是以可插拔的形式提供出來的,這樣,在分布式系統不斷演化的過程中,我們的 Spring Cloud 也可以非常方便的進化。
Spring Cloud 的特征
Spring Cloud專注於為典型的用例和擴展機制(包括其他用例)提供良好的開箱即用體驗。
-
分布式/版本化配置
-
服務注冊和發現
-
路由
-
服務之間的調用
-
負載均衡
-
斷路器
-
全局鎖
-
領導選舉和集群狀態
-
分布式消息傳遞
Spring Cloud 版本命名
不同於其他的框架,Spring Cloud 版本名稱是通過 A(Angel)、B(Brixton)、C(Camden)、D(Dalston)、E(Edgware)、F(Finchley)。。 這樣來明明的,這些名字使用了倫敦地鐵站的名字,目前最新版是 H (Hoxton)版。
Spring Cloud 包含的組件
下面的常用:
-
Spring Cloud Netflix,這個組件,在 Spring Cloud 成立之初,立下了汗馬功勞。
-
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 | Spring Boot |
---|---|
Hoxton | 2.2.x |
Greenwich | 2.1.x |
Finchley | 2.0.x |
Edgware | 1.5.x |
Dalston | 1.5.x |
Spring Cloud 和 Spring Boot 的關系
1、在 IOC 和 AOP 的基礎上,構造出來的 Spring 框架,然后在 Spring 的基礎上,構造出來 Spring Boot ,最后在 Spring Boot 的基礎上,使用 Spring Cloud 。
2、Spring Boot 只是專注於快速開發單個的微服務,而 Spring Cloud 關注的是全局的微服務和協調整體服務之間的治理。
3、Spring Cloud 從更大的層面上去協調各個不同的 Spring Boot 之間的一個工作的關系,這是 Spring Cloud 做的一個事情。
4、Spring Boot 本身可以離開 Spring Cloud 獨立開發項目,但是 Spring Cloud 是無法離開 Spring Boot 的。
參考資源:https://martinfowler.com/articles/microservices.html
每天學習一點點,每天進步一點點。