深刻spring cloud(1)

SpringCloud分佈式開發

Spring Cloud爲開發人員提供了快速構建分佈式系統中的一些通用模式(例如配置管理,服務發現,斷路器,智能路由,微代理,控制總線,一次性令牌,全局鎖,領導選舉,分佈式 會話,羣集狀態)。 分佈式系統的協調致使了鍋爐板模式,而且使用Spring Cloud開發人員能夠快速地站起來實現這些模式的服務和應用程序。 它們能夠在任何分佈式環境中正常工做,包括開發人員本身的筆記本電腦,裸機數據中心和受管平臺,如Cloud Foundry。html

  • 服務發現——實現:Netflix Eureka/Consul(必須)
  • 分佈式配置——Spring Cloud Config(必須)
  • 服務網關——實現:Netflix Zuul(須要不必定要,根據開發進度需求逐步完善)
  • 客服端負載均衡——實現:Netflix Ribbon(須要不必定要,根據進度逐步完善)
  • 斷路器——實現Netflix Hystrix(須要不必定要,根據進度逐步完善)

服務發現

目前實現採用spring cloud 全家桶解決方案實現的服務發現主要是,Eureka 或 Consule 2種方案。java

服務發現之 Eureka 實現

Eureka 是一個RESTFul服務,由兩個組件組成:Eureka服務器和Eureka客戶端。Eureka服務器用做服務註冊服務器。Eureka客戶端是一個java客戶端,用來簡化與服務器的交互、做爲輪詢負載均衡器,並提供服務的故障切換支持。Netflix在其生產環境中使用的是另外的客戶端,它提供基於流量、資源利用率以及出錯狀態的加權負載均衡。nginx

輸入圖片說明

服務發現之 Consul實現

Consul 是一個支持多數據中心分佈式高可用的服務發現和配置共享的服務軟件,由 HashiCorp 公司用 Go 語言開發, 基於 Mozilla Public License 2.0 的協議進行開源. Consul 支持健康檢查,並容許 HTTP 和 DNS 協議調用 API 存儲鍵值對。 一致性協議採用 Raft 算法,用來保證服務的高可用. 使用 GOSSIP 協議管理成員和廣播消息, 而且支持 ACL 訪問控制。 參考: http://cloud.spring.io/spring-cloud-consul/#quick-startweb

Consul 的使用場景

  • docker 實例的註冊與配置共享
  • coreos 實例的註冊與配置共享
  • vitess 集羣
  • SaaS 應用的配置共享
  • 與 confd 服務集成,動態生成 nginx 和 haproxy 配置文件

Consul 的優點

  • 使用 Raft 算法來保證一致性, 比複雜的 Paxos 算法更直接. 相比較而言, zookeeper 採用的是 Paxos, 而 etcd 使用的則是 Raft.
  • 支持多數據中心,內外網的服務採用不一樣的端口進行監聽。 多數據中心集羣能夠避免單數據中心的單點故障,而其部署則須要考慮網絡延遲, 分片等狀況等. zookeeper 和 etcd 均不提供多數據中心功能的支持.
  • 支持健康檢查. etcd 不提供此功能.
  • 支持 http 和 dns 協議接口. zookeeper 的集成較爲複雜, etcd 只支持 http 協議.
  • 官方提供web管理界面, etcd 無此功能. 綜合比較, Consul 做爲服務註冊和配置管理的新星, 比較值得關注和研究.能夠替代Eureka

分佈式配置中心

這個仍是靜態的,得配合Spring Cloud Bus + AMQP 實現動態的配置更新。算法

客服端負載均衡

Ribbon,主要提供客戶側的軟件負載均衡算法。 Ribbon客戶端組件提供一系列完善的配置選項,好比鏈接超時、重試、重試算法等。Ribbon內置可插拔、可定製的負載均衡組件。下面是用到的一些負載均衡策略:spring

  • 簡單輪詢負載均衡
  • 加權響應時間負載均衡
  • 區域感知輪詢負載均衡
  • 隨機負載均衡

Ribbon中還包括如下功能:docker

  • 易於與服務發現組件(好比Netflix的Eureka)集成。
  • 使用Archaius完成運行時配置
  • 使用JMX暴露運維指標,使用Servo發佈
  • 多種可插拔的序列化選擇
  • 異步和批處理操做(即將推出)
  • 自動SLA框架(即將推出)
  • 系統管理/指標控制檯(即將推出)

斷路器

斷路器能夠防止一個應用程序屢次試圖執行一個操做,即極可能失敗,容許它繼續而不等待故障恢復或者浪費 CPU 週期,而它肯定該故障是持久的。斷路器模式也使應用程序可以檢測故障是否已經解決。若是問題彷佛已經獲得糾正​​,應用程序能夠嘗試調用操做。 斷路器增長了穩定性和靈活性,以一個系統,提供穩定性,而系統從故障中恢復,並儘可能減小此故障的對性能的影響。它能夠幫助快速地拒絕對一個操做,即極可能失敗,而不是等待操做超時(或者不返回)的請求,以保持系統的響應時間。若是斷路器提升每次改變狀態的時間的事件,該信息能夠被用來監測由斷路器保護系統的部件的健康情況,或以提醒管理員當斷路器跳閘,以在打開狀態。vim

服務網關

相似nginx,反向代理的功能,不過netflix本身增長了一些配合其餘組件的特性。服務器

參考網絡

系列目錄: