本人也是前段時間才開始接觸Spring Boot、Spring Cloud,進而通過Spring Cloud才知道“微服務”這一概念。之后單位的一個項目使用了Spring Cloud來實現,現在想把如何使用Spring Cloud搭建一個簡單的微服務框架寫下來,方便以后查閱,同時本人也希望本教程能起到拋磚引玉的作用,歡迎各位大神一起討論學習。
本入門教程會介紹微服務架構,然后使用Spring Boot、Spring Cloud框架搭建基于微服務架構的應用,這些應用能部署到公司的私有云或者諸如Amazon、Google等公有云。
什么是微服務
在微服務概念出現前,web應用程序大都采用一體化應用架構,即將所有功能模塊都集中在一起,包括UI、業務邏輯、數據庫操作邏輯等,然后打包成一個龐大的可部署的軟件構件,如war包,最后部署到應用服務器上。這種架構有很多弊端。當有新的需求,應用程序就必須做出修改,然后測試、部署;當應用越來越龐大,維護成本越來越高,維護也越來越困難,最后只能重構整個應用,重構后,又是一個惡性循環。
“微服務”這個概念是2014年才逐漸進入開發者的視野。可以用一句話來概括微服務:微服務應用是由多個分布式的、松耦合的小應用聚合在一起,而這些小應用只實現了少量的定義明確的功能。換句話說,就是:搭建一個大型應用時,使用微服務架構能將這個應用分解成多個易于管理的、功能明確的小應用。這些小應用實現的功能都是從大應用中的特定功能抽取出來的,所以它們是完全獨立的,不依賴于其它小應用,能夠獨立運行。而這些小應用之間的“交流”都是通過接口調用(同步)、消息隊列(異步)等完成的。所以雖然大應用被拆分成小應用,但它們還是可以很好的協調合作,實現各種功能。
微服務架構有如下特征:
- 應用程序的邏輯被分解成多個功能明確的、具有明確責任邊界的細粒度組件——微服務。
- 每個微服務都擁有自己獨立的業務domain(可以理解為實體類);完全獨立,不依賴于其它任何組件;能夠被多個應用程序重用。
- 微服務之間的交流基于一些基本規則。服務提供者和服務消費者之間的數據交換采用輕量級通信協議,如:HTTP和JSON。
- 微服務底層的實現具有編程語言、平臺無關性。因為微服務間的交流是基于“技術無關性協議”(technology-neutral protocol),最常見的是JSON。這意味著微服務應用可以使用多種語言、技術進行搭建。
為什么使用Spring Cloud搭建微服務應用
一體化應用架構有很多弊端,Spring開發團隊發現有很多開發團隊逐漸摒棄這種架構,轉而向分布式應用方向研究。為應付這種轉變,Spring開發團隊啟動了兩個項目:Spring Boot和Spring Cloud。
Spring Boot是一個重新構想的Spring框架。Spring Boot基于Spring,但去掉了很多企業級的特性,并提供了一個基于Java、面向REST風格的微服務框架。使用一些簡單的注解,就能搭建一個RESTful微服務應用,然后打包并部署,而且不需要應用程序容器(微服務中內置一個tomcat容器)。
微服務架構已成為目前搭建基于云的應用程序最流行的架構。為方便我們開發基于云的微服務應用,Spring開發社區啟動了Spring Cloud項目。Spring Cloud框架使操作和發布微服務應用到私有或公有云變得更簡便。Spring Cloud包裝了多個主流的云管理方面的微服務框架,開發團隊通過簡單的注解就能將這些優秀的微服務框架整合到我們自己應用中來。這些微服務框架包括:Netflix Eureka(服務注冊與發現)、Netflix Ribbon(客戶端負載均衡)、Netflix Hysteria(熔斷器)、Netflix Zuul(服務網關)、Spring Cloud Config(分布式配置)等。
以下為本教程的目錄
- 第一個微服務應用
- 服務注冊與發現——Netflix Eureka
- 分布式配置——Spring Cloud Configuration
- 服務容錯保護——Spring Cloud Hystrix
- 服務網關——Spring Cloud Zuul
- 消息驅動——Spring Cloud Stream
- 未完待續...
教程的源碼
https://gitee.com/rain7564/spring_microservices_study
注:
- 本教程是參考書籍 Spring MicroServices In Action 整理的, 需要看原書的可以下載
git
倉庫根目錄的電子書(英文版+中文版). - 學習本教程需要一定的Spring Boot基礎,若讀者未接觸或不熟悉,請下載
git
倉庫根目錄的“Spring Boot實戰 ,丁雪豐 (譯者).pdf”,然后自行學習。Spring Boot學深一點,搭建基于Spring Cloud的微服務云應用時不會太吃力。 - 本教程使用的IDE是idea,建議大家學習的時候也使用。
- 若使用idea,建議先配置好maven、git等。