分享一下我老師大神的人工智能教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow
也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!
分佈式系統, 微服務, Java, 當這三個詞放到一起的時候, 很多人自然而然地就會想起Spring Cloud. Spring Cloud是Spring總多的Project中的一個,它提供了一整套的工具幫助系統架構師們在進行分佈式設計的時候可以拿來即用, 在創建和發佈微服務時極爲便捷和有效.
本系列介紹所使用的spring cloud的Release爲Camden SR3。 雖然各個版本可能相差不大。
項目 | 詳細 |
---|---|
Release | Camden SR3 |
Reference | http://cloud.spring.io/spring-cloud-static/Camden.SR3/ |
API | http://cloud.spring.io/spring-cloud-static/spring-cloud.html |
Spring Cloud提供了一整套的工具幫助創建分佈式應用,使用Spring Cloud可以用Spring Cloud的方式創建符合12要素的原生雲應用。Spring Cloud與Spring Boot等一起,提供了一整套的微服務架構的原生雲應用的解決方案。
分佈式應用相比普通應用,因爲它的複雜,所以導致很多問題我們在作架構的時候不得不考慮,傳統的方式下是通過總多的軟件/硬件的集成來解決的。比如至少需要考慮如下問題:
項目 | 詳細 |
---|---|
No.1 | 配置管理 |
No.2 | 控制總線 |
No.3 | 集羣管理 |
No.4 | 安全機制 |
No.5 | Session管理 |
No.6 | Failback |
No.7 | 智能路由 |
No.8 | 網關管理 |
No.9 | 服務管理(服務發現/服務註冊等) |
… | … |
而一旦我們有了Spring Cloud,基本上就是一個All in One的集合。
原生雲應用Cloud Native Applications是一個被叫的越來越多的概念。Cloud Native到底是什麼?從Spring Cloud的角度去理解,Cloud Native是在持續交付和價值驅動的軟件開發領域爲了鼓勵更加方便快捷有效地實施最佳實踐的一種軟件開發方式。可能這個解釋依然不能讓大多數人所理解,那麼我們換一種方式來理解,它在改變什麼?傳統的應用是什麼?
關於傳統應用下應用相關,這裏列出一些我們常見的條目:
項目 | 詳細 |
---|---|
架構 | 3層架構或者N層架構 |
耦合 | 緊耦合,有狀態 |
負載自動擴展 | 不可,或者非常困難 |
物理宕機 | 極力避免(錢+精力) |
應用恢復 | 檢測->確認->手動恢復 |
DevOps | 開發和運維割裂,持續集成和持續部署困難 |
… | … |
總結一下,一個詞,很嬌氣,像我們養的寵物。以前有一些關於pets 和 cattle的討論在這方面能給一些啓事,沒有讀過的建議搜索來讀一下。
項目 | 詳細 |
---|---|
架構 | 微服務 |
耦合 | 鬆耦合,儘量無狀態 |
負載自動擴展 | 自動水平擴展 |
物理宕機 | 自愈 |
應用恢復 | 通過設計和Platform結合,能夠自愈 |
DevOps | 開發和運維無縫集成,持續集成和持續部署方便 |
… | … |
總結一下,一個詞, 很皮實。像養牛場裏的牛,有問題了隨時換一個,而不是像寵物那樣傲嬌。以前寫過一些文章關於Rancher,Rancher是一個用於部署和管理生產環境的容器的開源平臺,它與Kubernetes/Mesos/Docker Swarm進行集成,但是它自己也有一個,它把這個也命名爲Cattle,項目的名稱也是這樣,有興趣地可以研究一下。
項目 | 詳細 |
---|---|
英文URL | https://12factor.net/ |
中文URL | https://12factor.net/zh_cn/ |
項目 | 詳細 |
---|---|
I. 基準代碼 | 一份基準代碼,多份部署 |
II. 依賴 | 顯式聲明依賴關係 |
III. 配置 | 在環境中存儲配置 |
IV. 後端服務 | 把後端服務當作附加資源 |
V. 構建,發佈,運行 | 嚴格分離構建和運行 |
VI. 進程 | 以一個或多個無狀態進程運行應用 |
VII. 端口綁定 | 通過端口綁定提供服務 |
VIII. 併發 | 通過進程模型進行擴展 |
IX. 易處理 | 快速啓動和優雅終止可最大化健壯性 |
X. 開發環境與線上環境等價 | 儘可能的保持開發,預發佈,線上環境相同 |
XI. 日誌 | 把日誌當作事件流 |
XII. 管理進程 | 後臺管理任務當作一次性進程運行 |
使用Maven可以非常簡單地將Spring Cloud導入工程之中,具體Maven片段如下
項目 | 詳細 |
---|---|
Spring Cloud Config | 統一配置管理,支持本地/Git/SVN. |
Spring Cloud Netflix | Netflix提供的多種組件包括Eureka, Hystrix, Zuul, Archaius等。 |
Spring Cloud Bus | 使用分佈式的消息機制將服務和服務實例連接起來的事件總線,在跨集羣進行狀態通知時非常有效,比如配置變更事件。 |
Spring Cloud for Cloud Foundry | 與CloudFoundry進行集成 |
Spring Cloud Cloud Foundry Service Broker | 提供Service Broker用來管理相關服務 |
Spring Cloud Cluster | 通過對Zookeeper, Redis, Hazelcast, Consul等進行抽象和實現所提供的關於Leadership election以及common stateful patterns的支持 |
Spring Cloud Consul | 使用Hashicorp Consul進行服務發現和配置管理 |
Spring Cloud Security | 爲應用程序添加OAuth2的安全控制 |
Spring Cloud Sleuth | 提供與Zipkin/HTrace/ELK等兼容的Tracing機制 |
Spring Cloud Data Flow | 簡單易用的DSL與擴拽可用的GUI,加之REST-API一起提供了一種簡化的微服務數據流管道機制。 |
Spring Cloud Stream | 使用Apache Kafka或者RabbitMQ收發消息,提供了一種輕量級的事件驅動的微服務框架用於和外系統進行連接。 |
Spring Cloud Stream App Starters | 基於spring boot,與外系統進行整合 |
Spring Cloud Zookeeper | 使用Apache Zookeeper進行服務發現和配置管理 |
Spring Cloud for Amazon Web Services | 用於簡化與Amazon Web Service更好的集成 |
Spring Cloud Connectors | 使得Paas應用更容易與後端服務(比如數據庫)進行交互 |
Spring Cloud Starters | 更簡單的進行以來管理(同其他starter類似) |
Spring Cloud CLI | 用CLI方式創建Spring Cloud的各種組件。 |
總結:本文走馬觀花地過了一下Spring Cloud相關的知識和概念,從下篇文章開始,我們將使用具體的例子,逐步深入研究是如何使用Spring Cloud的各種組件非常簡單的進行服務發現/負載均衡/配置管理/網關管理等。