這篇文章介紹瞭如何 Spring Cloud 是如何幫助構建一個高可用的分佈式系統的。在同類文章算是介紹的很不錯的,感受比 Spring Blog 裏面的文章還要更全面易懂。spring
文章開始先介紹了構建分佈式系統時會遇到的各類須要解決的問題,而後分別由這些問題引出 Spring Cloud 中的各類技術。編程
Spring Cloud Config Server 以 Git、SVN 等 VCS 系統存儲 properties、yml 等格式的配置文件,構建了一個可橫向伸縮的配置服務器。且不說使用效果怎麼樣,這個思想仍是頗有啓發性的。配置文件一般是文本文件,用 VCS 存儲是瓜熟蒂落的,同時還具有了版本控制功能,使得配置的變化被記錄了下來。再在這個基礎之上,加上橫向伸縮的能力,便成爲了一個很不錯的配置服務器。服務器
Spring Cloud Bus 爲 Spring 應用提供了 Message Broker 的功能。目前的惟一實現是基於 AMQP 的(用 RabbitMQ 爲消息中間件)。目前,Cloud Bus 的一個應用是經過消息中間件,將配置改變的事件通知給業務組件。被 @RefreshScope
表示的 Bean 便具備了感知配置變化的能力。app
Spring Cloud Netflix 是 Spring Cloud 中被介紹最多的部分。基於 Netflix 一套通過實戰的解決方案,Spring Cloud Netflix 爲分佈式系統提供了不少易用又強大的功能。異步
對於 Eureka 和 Ribbon,我很少介紹,由於這兩個是被提到比較多的技術。多介紹一下 Hystrix。Hystrix 會對提升分佈式系統在遠程調用方面的可用性和魯棒性很是有幫助的一個組件。它提供了熔斷器等模式(服務降級)。同時,它還提供了一個很不錯的遠程調用監控的功能(如原文圖6所示的 Hystrix Dashboard)。Spring Cloud Netflix 使得 Hystrix 提供的這些功能(固然也包括 Eureka 和 Ribbon 所提供的功能)能夠很透明地、非侵入式地被 Spring 應用所使用。分佈式
目前常見的應用監控解決方案,如國內廠商比較普遍使用的大衆點評的 CAT,其使用方式仍是一種侵入是的。這種方式是業務代碼和監控系統相耦合,同時也使代碼的可讀性下降。因此最好的方式是非侵入式的監控(某些場合實現起來很困難,好比異步 API)。在這方面,Spring Cloud Netflix 在 REST API 調用方面給咱們提供了一個不錯的可選擇的方案。ui
Zuul 是 Netflix 所用的反向代理模塊。不一樣於 Nginx 和 HAProxy,Zuul 使用的是動態加載 Groovy 縮寫的 Filter 的方式來定義路由規則。由於採用了編程的方式,因此其自定義能力大大強於 Nginx 和 HAProxy(此處是憑經驗推斷)。設計
Spring Cloud Netflix 進一步地在 Zuul 的基礎上提供了 OAuth2 SSO 的能力。代理
大體讀了一下這篇文章,發現了 Spring Cloud 更多的亮點和能夠爲項目之所用的地方。我相信深刻了解 Spring Cloud 以及其設計思想會給咱們的分佈式系統帶來質的提升。