王方旭
一、概述
隨著互聯網、云計算的進步,微服務越來越受到從業者的關注。尤其是以單體架構建設的應用和SOA架構的應用皆無法解決數據、服務呈爆炸式增長帶來的沖擊,而微服務將業務系統徹底組件化、服務化的思想讓系統建設者有了更多選擇。
微服務的核心思想是:應用是由相互獨立的服務組成,這些服務可分布式部署,運行在獨立的進程中,通過輕量級的通信機制交互信息,服務獨立擴展,自由伸縮,但有明確的邊界,不受開發語言、技術路線、開發團隊的制約。
Spring Cloud是實踐微服務的框架,有活躍的開源社區支持;Docker使分布式應用脫離底層物理硬件和基礎環境的限制,實現應用快速開發和部署而大放異彩的開源項目。因此,使用Spring Cloud框架和Docker構建的微服務系統是實現開發、部署、運維一體化的DevOps模式的最佳解決方案。
二、Spring Cloud
(一) Spring Cloud簡介及架構圖
Spring boot是由 Pivotal 團隊提供的框架,按照約定大于配置的核心思想對Spring框架進行了簡化。Spring Cloud是基于Spring Boot推出一系列框架、組件的有序集合,簡化了分布式系統基礎設施的開發,且封裝的框架均是成熟且經過實際檢驗的,比如面向服務發現治理的EureKa,面向負載均衡的Ribbon等。經過封裝,向開發者提供的則是易理解、易部署、易交互的分布式系統開發框架。
下圖,展示了Spring Cloud框架完整架構圖。
(二) Spring Cloud框架中的組件
1. Eureka在Spring Cloud框架中實現微服務的自動注冊與發現。定義服務注冊中心是在啟動類配置@ EnableEurekaServer;定義服務提供者是在其啟動類配置@EnableEurekaClient,該注解聲明服務是Eureka客戶端,具備服務注冊和發現能力。
2. Zuul的作用是動態路由和請求過濾,便于監控和認證。在服務啟動類上配置@EnableZuulProxy即可開啟Zuul的動態路由作用,而在啟動類內部配置繼承了ZuulFilter類的過濾器實現類可開啟Zuul的請求過濾功能。
3. Ribbon是基于HTTP和TCP的客戶端負載均衡器,從Eureka注冊中心獲取服務列表,采用輪詢訪問的方式實現負載均衡的作用。在客戶端的服務方法上配置@ LoadBalanced即可開啟客戶端負載均衡。
4. HyStrix是能夠提升系統的容錯能力的熔斷器。該服務在啟動類配置@EnableCircuitBreaker或者@ EnableHystrix即可開啟熔斷器支持。
5. Turbine是為了監控微服務集群而引入的工具,Turbine結合HyStrix可監控系統中所有服務的實時數據。在服務的啟動類配置@EnableTurbine可開啟Turbine功能。
6. F e i g n整合R i b b o n向客戶端提供聲明式的H T T P A P I。在基于F e i g n的服務啟動類上配置@ EnableFeignClients即可開啟Feign功能,在服務接口類上配置@FeignClient綁定服務提供者的服務名和實現方法。
7. Spring Cloud Config為Spring Cloud框架系統提供統一的配置管理,并提供服務器端(Config Server)和客戶端(Config Client)的支持,Config Server本質上是一個用于集中管理配置、獲取遠程配置倉庫的配置信息供客戶端使用的微服務。在服務器端的啟動類上配置@EnableConfigServer開啟Config Server功能。
8. Spring Cloud Bus的作用是將各服務節點用輕量的消息代理(如RabbitMQ)連接起來,并廣播配置文件的動態信息和服務之間的通訊。
9. Spring Cloud Sleuth集成ZipKin,實現微服務的鏈路監控分析。基于Zipkin的服務在啟動類配置@ EnableZipkinServer開啟Zipkin Server功能,服務開啟后通過訪問Zipkin Server監控頁面監控服務的請求細節和分析依賴關系。
三、Docker與微服務
微服務雖是先進的架構,但在系統的復雜性、服務的持續集成方面卻有無法回避的弊端,因此,我們引入了Docker技術。Docker 是遵從Apache2.0 協議開源的容器引擎,利用輕量級虛擬化技術實現資源隔離,并將各種環境依賴和應用統一打包,以達到方便應用移植和部署的目的。我們將微服務打包成獨立的Docker鏡像,之后push到私有鏡像庫中,每次部署服務時從私有鏡像庫pull下對應的鏡像,按照Docker Compose編排好的微服務調度方式運行鏡像。
下圖是使用Docker后,微服務部分的框架圖。多個業務系統獨立部署在Docker容器中,將復雜的應用系統拆分成多個功能單一、業務邏輯簡單的服務進行獨立部署。每個微服務注冊在Eureka Server中,通過聲明式的RESTful API相互調用。
四、結束語
通過Spring Cloud和Docker構建的應用平臺,充分展現了微服務架構的優勢,對服務做到了組件化、服務化的管理,提升了服務的持續集成能力和擴展能力。隨著技術的進步,微服務架構的系統會更多的被采用,而基于Spring Cloud和Docker構建微服務系統必會成為讓微服務落地的最佳解決方案。當然隨著技術的進步,思想、理念的變化,微服務架構的思想仍需要不斷的探索與改進。