Spring Cloud學習之-什麼是Spring Cloud?
SpringCloud
什麼是微服務?
要想學習微服務,首先需要知道什麼是微服務?為什麼會有微服務?相信看完架構的發展史讀者就會明白
架構發展史
單體應用架構
如圖所示:將所有的模組,所有內容(頁面、Dao、Service、Controller)全部寫入一個專案中,放在一個Tomcat容器中啟動適用於小型專案
優點:開發速度快,可以利用程式碼生成工具快速的開發一個專案
缺點:不易擴充套件,程式碼耦合度高,且不容錯(當某部分出錯後整個服務就會停止執行)
垂直架構
既然原來單體架構中程式碼耦合度高,不利於維護和執行,人們自然就想到將不同的內容分開。最簡單合理的方式就是將系統按照功能劃分成不同的模組,然後將各模組獨立放入不同的Web容器中,這就形成了垂直架構
優點:程式碼耦合度降低,且不同模組之間可以獨立執行。一旦某個模組壓力過大,可以針對性的搭叢集
缺點:模組之間有可能不是那麼完全獨立,導致實體類或者其他層程式碼不能複用,需要多出貼上,不方便日後維護。如果直接通過HTTP呼叫又不是很合理。
分散式架構/分散式SOA架構
分散式架構顧名思義就是分散部署在不同的機器上的服務,一個服務可能負責幾個功能,是一種面向SOA架構的,服務之間也是通過rpc來互動或者是webservice來互動的架構。從開發的角度看就是Controller層(服務消費者)和Service層(服務提供者)分成不同的專案,部署在不同的伺服器上,通過RPC(遠端方法呼叫)來實現互動。阿里巴巴著名的Dubbo框架就是作為分散式架構的框架。一般推薦使用Zookeeper作為服務的註冊中心,負責註冊和發現服務的提供者,並供服務的消費者消費
微服務
微服務的提出者馬丁·福勒關於微服務的論文中文翻譯版
單體架構和微服務的比較圖示:
微服務的核心就是將傳統的一站式應用,根據業務拆分成一個個原子應用。徹底地去耦合,一個服務只做一件事情,從技術角度講就是一個服務就是一個程序,可以單獨啟動或銷燬,擁有獨立的資料庫。並且通過配置中心可以方便的切換資料庫等。
優點:
- 每個服務足夠內聚,足夠小,程式碼容易理解,一個服務可能就是專一的只幹一件事。開發簡單、開發效率提高
- 微服務能夠被小團隊單獨開發,這個小團隊可以是由2到5人的開發人員組成
- 微服務能使用不同的語言開發。易於和第三方整合,微服務允許容易且靈活的方式整合自動部署,通過持續整合工具,如Jenkins, Hudson, bamboo 。微服務允許你利用融合最新技術。
- 微服務易於被一個開發人員理解,修改和維護,這樣小團隊能夠更關注自己的工作成果。無需通過合作才能體現價值。
缺點:
- 開發人員要處理分散式系統的複雜性,會面臨分散式事務、分散式一致性等問題
- 多服務運維難度,隨著服務的增加,運維的壓力也在增大
- 服務間通訊成本變高
微服務的技術棧
微服務條目 | 落地技術 | 備註 |
---|---|---|
服務開發 | Springboot、Spring、SpringMVC | |
服務配置與管理 | Netflix公司的Archaius、阿里的Diamond等 | |
服務註冊與發現 | Eureka、Consul、Zookeeper等 | |
服務呼叫 | Rest、RPC、gRPC | |
服務熔斷器 | Hystrix、Envoy等 | |
負載均衡 | Ribbon、Nginx等 | |
服務介面呼叫(客戶端呼叫服務的簡化工具) | Feign等 | |
訊息佇列 | Kafka、RabbitMQ、ActiveMQ等 | |
服務配置中心管理 | SpringCloudConfig、Chef等 | |
服務路由(API閘道器) | Zuul等 | |
服務監控 | Zabbix、Nagios、Metrics、Spectator等 | |
全鏈路追蹤 | Zipkin,Brave、Dapper等 | |
服務部署 | Docker、OpenStack、Kubernetes等 | |
資料流操作開發包 | SpringCloud Stream(封裝與Redis,Rabbit、Kafka等傳送接收訊息) | |
事件訊息匯流排 | Spring Cloud Bus |
什麼是Spring Cloud
Spring Cloud 是實現微服務思想落地開發的一整套技術的集合
Spring Cloud和Dubbo的區別圖解
Spring Cloud開發者文件中文版:
https://springcloud.cc/spring-cloud-dalston.html
Spring Cloud中國社群
http://springcloud.cn/
Spring Cloud中文網
https://springcloud.