一,什麼是微服務
微服務英文名稱Microservice,Microservice架構模式就是将整個Web應用組織為一系列小的Web服務。這些小的Web服務可以獨立地編譯及部署,并通過各自暴露的API接口互相通訊。它們彼此互相協作,作為一個整體為使用者提供功能,卻可以獨立地進行擴。
微服務架構需要的功能或使用場景
1:我們把整個系統根據業務拆分成幾個子系統。
2:每個子系統可以部署多個應用,多個應用之間使用負載均衡。
3:需要一個服務注冊中心,所有的服務都在注冊中心注冊,負載均衡也是通過在注冊中心注冊的服務來使用一定政策來實作。
4:所有的用戶端都通過同一個網關位址通路背景的服務,通過路由配置,網關來判斷一個URL請求由哪個服務處理。請求轉發到服務上的時候也使用負載均衡。
5:服務之間有時候也需要互相通路。例如有一個使用者子產品,其他服務在處理一些業務的時候,要擷取使用者服務的使用者資料。
6:需要一個斷路器,及時處理服務調用時的逾時和錯誤,防止由于其中一個服務的問題而導緻整體系統的癱瘓。
7:還需要一個監控功能,監控每個服務調用花費的時間等。
目前主流的微服務架構:Dubbo、 SpringCloud、thrift、Hessian等,目前國内的中小企業用的大多數都是Dubbo,SpringCloud估計很少,也許有些開發同學都沒聽說過。
二,SpringCloud總體架構
構件一套完整的微服務架構需要考慮許多問題,包括API Gateway、服務間調用、服務發現、服務容錯、服務部署、資料調用等。
基于SpringCloud建構微服務架構可以通過自動配置和綁定Spring環境和其他Spring程式設計模型來實作微服務。采用Spring Boot應用程式提供的內建功能,通過幾個簡單的注釋,開發人員可以快速配置和啟用應用程式中的常見功能子產品,并使用久經考驗的Netflix元件建構大型分布式系統。
提供的微服務功能子產品包括服務發現(Eureka),斷路器(Hystrix),智能路由(Zuul)和用戶端負載均衡(Ribbon)等。
![](https://img.laitimes.com/img/__Qf2AjLwojIjJCLyojI0JCLiAjM2EzLcd3LcJzLcJzdllmVldWYtl2PnVGcq5CbstWOllGOrVDMvwFOzczN5QTMtUGall3LcVmdhNXLwRHdo9CXt92YucWbpRWdvx2Yx5yazF2Lc9CX6MHc0RHaiojIsJye.jpeg)
三,SpringCloud常用元件
- 服務發現——Netflix Eureka
- 客服端負載均衡——Netflix Ribbon
- 斷路器——Netflix Hystrix
- 服務網關——Netflix Zuul
- 分布式配置——Spring Cloud Config
1,Eureka
一個RESTful服務,用來定位運作在AWS地區(Region)中的中間層服務。由兩個元件組成:Eureka伺服器和Eureka用戶端。 Eureka伺服器用作服務注冊伺服器。Eureka用戶端是一個Java用戶端,用來簡化與伺服器的互動、作為輪詢負載均衡器,并提供服務的故障切換支 持。Netflix在其生産環境中使用的是另外的用戶端,它提供基于流量、資源使用率以及出錯狀态的權重負載均衡。
2,Ribbon
Ribbon,主要提供客戶側的軟體負載均衡算法。
Ribbon用戶端元件提供一系列完善的配置選項,比如連接配接逾時、重試、重試算法等。Ribbon内置可插拔、可定制的負載均衡元件。下面是用到的一些負載均衡政策:
- 簡單輪詢負載均衡
- 權重響應時間負載均衡
- 區域感覺輪詢負載均衡
- 随機負載均衡
Ribbon中還包括以下功能:
- 易于與服務發現元件(比如Netflix的Eureka)內建
- 使用Archaius完成運作時配置
- 使用JMX暴露運維名額,使用Servo釋出
- 多種可插拔的序列化選擇
- 異步和批處理操作
- 自動SLA架構
- 系統管理/名額控制台
3,Hystrix
斷路器可以防止一個應用程式多次試圖執行一個操作,即很可能失敗,允許它繼續而不等待故障恢複或者浪費 CPU 周期,而它确定該故障是持久的。斷路器模式也使應用程式能夠檢測故障是否已經解決。如果問題似乎已經得到糾正,應用程式可以嘗試調用操作。
斷路器增加了穩定性和靈活性,以一個系統,提供穩定性,而系統從故障中恢複,并盡量減少此故障的對性能的影響。它可以幫助快速地拒絕對一個操作,即 很可能失敗,而不是等待操作逾時(或者不傳回)的請求,以保持系統的響應時間。如果斷路器提高每次改變狀态的時間的事件,該資訊可以被用來監測由斷路器保 護系統的部件的健康狀況,或以提醒管理者當斷路器跳閘,以在打開狀态。
流程圖
4,Zuul
類似nginx,反向代理的功能,不過netflix自己增加了一些配合其他元件的特性。
5,Spring Cloud Config
四,Spring Cloud優勢
微服務的架構那麼多比如:dubbo、Kubernetes,為什麼就要使用Spring Cloud的呢?
- 産出于spring大家族,spring在企業級開發架構中無人能敵,來頭很大,可以保證後續的更新、完善。比如dubbo現在就差不多死了
- 有spring Boot 這個獨立幹将可以省很多事,大大小小的活spring boot都搞的挺不錯。
- 作為一個微服務治理的大家夥,考慮的很全面,幾乎服務治理的方方面面都考慮到了,友善開發開箱即用。
- Spring Cloud 活躍度很高,教程很豐富,遇到問題很容易找到解決方案
- 輕輕松松幾行代碼就完成了熔斷、均衡負責、服務中心的各種平台功能