微服務簡介
微服務是一種架構風格,是開發一組小型服務的方式來作爲一個獨立的應用系統,每個服務都運行在自己的進程中,服務之間採用輕量級的HTTP通信機制(通常是採用HTTP的Restful API)進行通信。
這些服務都是微繞具體業務進行構建的,並且可以獨立部署到生產環境上。這些服務可以用不同的語言編寫,並且可以用不同的數據存儲技術。
對這些服務我們只需要使用一個非常輕量級的集中式管理來進行協調。
單體應用架構
優點
- 便於開發測試。單個應用包含所有功能,不涉及互聯互調。
- 便於部署。單個應用打成war包或jar包,部署至tomcat即可,運維起來比較方便。
- 便於整體拓展。應用負載壓力大時,將該應用複製幾份,部署至不同的服務器上,再通過負載均衡即可提高應用併發能力。
缺點
- 複雜性高。單體應用包含的模塊較多,導致模塊之間邊界模糊、依賴關係不清晰、優化迭代會帶來隱藏的缺陷,使得整個項目十分複雜。
- 阻礙技術創新。單體應用技術選型是在開發之前經過慎重評估後選定的,每個團隊成員都必須使用相同的開發語言、持久化存儲和消息系統。
微服務架構
優點
- 易於開發維護。一個微服務只會關注一個特定的業務功能,所以業務清晰,業務量較少。
- 單個微服務啓動快。
- 局部容易修改部署。單體應用只要有修改,就得重新部署整個應用。微服務架構解決了這樣的問題。一般來說,對某個微服務進行修改,只需要重新部署這個服務即可。
- 技術棧不受限制。可以根據項目業務和團隊特點,合理選擇技術棧。
- 按需伸縮。根據需求實現細粒度的擴展。
缺點
- 運維要求高。更多的服務意味着投入更多的運維。
- 分佈式固有的複雜性。使用微服務構建的是分佈式系統。對於一個分佈式系統,系統容錯、網絡延時、分佈式事務等都會帶來問題。
- 接口調整成本高。微服務之間通過接口進行通信,如果修改一個微服務的API,可以所有用到這個接口的微服務都需要進行調整。
微服務架構總結
微服務的核心就是將傳統的單一應用,根據業務拆分成一個一個的服務,徹底的解耦和,每一個微服務提供單一的功能模塊,一個服務做一件事。
在Idea中實用Maven構建一個個獨立的Module,也就是SpringBoot開發的一個個小模塊,將專業的事交給專業的模塊來做。比如一個大型項目可能有上百個微服務,將這些微服務集中起來構成一個大的系統,對外暴露服務進行調用。
從技術角度看就是一個小而獨立的處理過程,類似進程概念,能夠自行單獨啓動或銷燬,可以擁有自己獨立的數據庫。
搭建分佈式微服務架構的技術棧
Spring Cloud
Spring Cloud,基於Spring Boot提供了一套微服務解決方案,包括服務註冊與發現,配置中心,全鏈路監控,服務網關,負載均衡,熔斷器等組件,除了基於NetFlix的開源組件做高度抽象封裝之外,還有一些選型中立的開源組件。
官網:https://spring.io/projects/spring-cloud
各組件說明(中文版):https://www.springcloud.cc
SpringCloud中國社區:http://www.springcloud.cn
Spring Cloud使用Restful API實現服務之間通信。
Dubbo使用RPC(遠程過程調用)實現服務之間通信。
Spring Boot和Spring Cloud的關係
Spring Boot可以離開Spring Cloud單獨使用開發項目,但是Spring Cloud離不開Spring Boot,屬於依賴關係。
Spring Boot專注於快速方便的開發單個個體微服務,Spring Cloud是關注全局的服務治理框架。
Spring Cloud是關注全局的服務治理框架,它將Spring Boot開發的一個個單體微服務整合並管理起來,爲各個微服務之間提供配置管理、服務發現、斷路器、路由、微代理、事件總線、全局鎖、決策競選、分佈式會話等等集成服務。