999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

基于Spring Cloud和Docker的分布式微服務架構設計

2019-10-21 09:21:29黃強文曾丹
微型電腦應用 2019年6期

黃強文 曾丹

摘 要: 近年來,微服務架構是當前最流行的分布式系統類型之一,相比傳統單體架構它解決了數據、服務呈爆炸式增長帶來的沖擊問題。以構建一個天氣預報分布式微服務系統為例,利用Spring Cloud框架將系統垂直切分為四個獨立的業務服務:城市數據API微服務、天氣數據采集微服務、天氣數據API微服務和天氣預報微服務。系統集成Eureka做服務發現,使用Zuul做路由網關,結合Hystrix熔斷機制提高了系統的容錯性,并使用Docker容器快速獨立部署所有微服務,實現了開發、測試、部署運維的一體化。

關鍵詞: 微服務架構; Spring Cloud框架; Docker容器

中圖分類號: TP309

文獻標志碼: A

文章編號:1007-757X(2019)06-0098-04

Abstract: In recent years, as one of the most popular distributed system types, the microservice architecture has solved the problem of explosive growth of data and services compared to the traditional singleton architecture. Taking the construction of a weather forecast distributed microservice system as an example, this paper uses the Spring Cloud framework to divide the system vertically into four separate business services: the city data API microservice, the weather data collection microservice, the weather data API microservice, and the weather forecast microservice. The system integrates Eureka for service discovering, uses Zuul as a routing gateway, improves the fault tolerance of the system in conjunction with the Hystrix zapping mechanism, and uses the Docker container to quickly and independently deploy all services, it realizes the integration of development, tests, deployment operation and maintenance.

Key words: Microservice architecture; Spring Cloud framework; Docker container

0?引言

隨著互聯網、云計算的高速發展,人們對數據信息化服務依賴程度越來越深。以往的單體應用架構和面向服務化應用的架構逐漸不能滿足業務的需求。而微服務這種分布式架構的興起,是云計算應用快速發展的必然產物,也將是未來整個軟件應用架構向著靈活多變、低耦合、高擴展性、動態伸縮發展的一個必然方向[1]。與此同時,Docker的誕生,代表著容器虛擬化技術的盛行高峰,它將極大減少微服務應用實現大規模部署、落地的成本。

微服務架構就是將單體應用拆分為多個高內聚低耦合的小型服務,每個小服務運行在獨立進程,由不同的團隊開發和維護,服務間采用輕量級通信機制,獨立自動部署,可以采用不同的語言及存儲。微服務架構具有如下優勢[2]:

(1) 微服務架構將業務系統徹底的組件化、服務化,微服務專注于業務邏輯,服務功

能簡單,邊界清晰,復雜度低,接口明確,服務利于開發、部署。

(2) 服務耦合度低,每個服務是一個微型的應用,有完整的架構,可獨立部署。

(3) 微服務架構允許根據服務的功能和團隊的自身條件選擇不同的技術路線。

(4) 優良的容錯機制和熔斷機制,保障微服務之間交互的友好性。

本文將以一個天氣預報微服務系統為案例,使用Spring Cloud框架進行構建,將系統拆分為四個獨立的子微服務:城市數據API微服務、天氣數據采集微服務、天氣數據API微服務和天氣預報微服務。系統采用Eureka做服務注冊與發現,Zuul做路由API網關,Feign做服務節點間通信,Ribbon做負載均衡,Spring Cloud Config做統一管理微服務配置,Hystrix做服務熔斷,Turbine聚合監控多個微服務運行狀態,并使用Docker容器自動、快速、獨立部署所有微服務在一臺阿里云服務器上。本文最后給出天氣預報系統實現結果,并模擬天氣數據API微服務掉線操作驗證此系統優良的容錯機制。

1?主要框架技術

1.1?Sping Cloud框架

Spring Cloud 是一系列框架、組件的有序集合,擁有功能完善的、輕量級的微服務實現組件,例如服務發現治理、服務容錯、服務網關、服務配置、負載均衡、消息總線、服務跟蹤等方面均有經過實踐檢驗的成熟組件[2]。基于Spring Cloud 各組件的完整架構圖,如圖1所示。

其中Eureka組件負責服務的注冊與發現,很好將各服務連接起來。Zuul扮演API網關的角色,它對一切來自外部的服務請求進行路由轉發。Feign作為HTTP客戶端實現各微服務節點間的通信。Ribbon會根據服務網關的配置實現負載均衡。Config-Server組件為整個微服務系統提供了統一的配置管理中心。Hystrix起到監控各個服務之間的通信調用情況,如果失敗次數達到一個設置的閾值將進行熔斷保護。Turbine 結合Dashboard組件是用來監控查看Hystrix的熔斷情況,并且給予系統維護者一種圖形化的界面展示。

1.2?Docker容器

Docker是使用Google 公司推出的Go語言進行開發實現的高級容器引擎,其最終目的是實現對一個完整的應用進行打包封裝、獨立部署并運行在宿主機上的管理,做到應用組件級別的“一次封裝,隨處運行”[3]。從Docker實現方式的本質上來講,它其實就是運行在宿主機上的一個進程。Docker通過namespace實現了資源隔離,通過cgroups實現了資源的限制,通過寫時復制機制實現了高效的文件操作[4]。

傳統的虛擬機技術一般都是虛擬出一套完整的硬件,在上面運行一個完整的操作系統,然后把應用程序部署運行在此虛擬操作系統上。和傳統的虛擬化方式相比,容器就十分輕便了。容器沒有虛擬出任何硬件,也沒有內核,應用程序都是運行在宿主機的內核。Docker容器利用系統資源更高效,擁有著秒級的啟動速度、一致的運行環境、超方便的遷移和輕松的維護擴展特點。

Docker容器有3個基本概念:鏡像、容器和倉庫。

鏡像,其實是一個文件系統,用來儲存容器運行時需要的程序資源、配置資源、庫資源等文件,它不包含任何動態數據。鏡像使用分層儲存,一層層進行構建,后一層以前一層為基礎,內容一但構建后就不會再改變了。

容器,是鏡像啟動的實例。容器其實就是一個進程,運行在一個完全獨立的隔離空間,有著自己的文件系統和網絡配置。所以容器封裝的應用比直接在宿主運行更加安全。

倉庫,是一個用來儲存和分發鏡像的服務中心。類似Maven倉庫,1個倉庫包括多種標簽,1個標簽對應著1個特定的鏡像。一般通過倉庫名:標簽的格式來確定某個應用軟件具體的鏡像版本。

2?系統設計

本系統的業務主要拆分為四個獨立的子微服務。城市數據API微服務負責提供城市列表數據,并提供接口給天氣數據采集微服務調用;天氣數據采集微服務負責請求第三方數據服務的天氣數據,并保存在Redis緩存中;天氣數據API微服務負責調用天氣數據采集微服務緩存的天氣數據,并提供接口給天氣預報微服務調用;天氣預報微服務面向用戶提供天氣查詢服務。此外,API網關負責路由轉發請求。整體架構如圖2所示。

2.1?微服務功能設計

(1) 城市數據API微服務:包含一張全國主要城市地區的Xml表,建立城市Javabean對象,然后利用JDK自帶的JAXB解析包,快速便捷將城市Xml表解析轉換為城市對象,并對外暴露接口/ cities,提供城市列表Json數據。

(2) 天氣數據采集微服務:引入第三方Quartz定時器,集成Feign消費者客戶端遠程獲取城市數據API微服務提供的城市列表數據,并結合配置了Httpclient的RestTemplate客戶端每隔半小時遠程調用第三方中國天氣數據網的Json格式天氣數據,刷新并緩存到Redis節點中。

(3) 天氣數據API微服務:根據城市Id號或者城市名稱從Redis緩存節點中獲取天氣數據,因為Redis緩存的是Json格式數據,所以用Jackson包把天氣數據轉換為Javabean,并對外暴露接口/weather/cityId/{cityId}和/weather/cityName/{cityName}。

(4) 天氣預報微服務:暴露接口/report/cityId/{cityId},提供面向用戶請求服務,把所有請求轉發到API網關,并啟動Hystrix熔斷機制@FeignClient(name=" weather-gateway-zuul ", fallback=DataClientFallback.class)。

(5) 服務注冊中心:使用Eureka做服務注冊和發現中心,配置服務注冊中心的URL地址。一個微服務就是一個節點,是一個完整的應用程序,并且可獨立運行部署。系統除了本文上述的四個主要業務相關的微服務,還有API網關節點、配置中心Config-Server節點、Turbine的Hystrix監控節點等。這些節點都是以Eureka客戶端形式注冊在Eureka服務端,然后各個節點間采用輕量級Feign組件就可以實現相互調用通信了。

(6) API網關服務:根據URL轉發請求到不同的微服務。用戶請求訪問天氣預報微服務接口,天氣預報微服務統一向API網關微服務發送請求,API網關再把所有請求轉發到具體的其他微服務中,映射關系如下所示:

zuul.routes.city.path: /city/**

zuul.routes.city.serviceId: microservice-weather-city

zuul.routes.data.path: /data/**

zuul.routes.data.serviceId: microservice -weather-data

2.2?Docker容器部署設計

Spring Cloud應用是在Sping Boot基礎上構建的,而由Spring Boot開發的應用內嵌了Tomcat,所以一個Spring Cloud應用可以直接以Jar包的形式獨立運行。利用Gradle把各個微服務項目分別打包成Jar包,并使用Docker的Dockerfile鏡像構建命令把各Jar包制作成對應鏡像。

Compose項目是Docker官方的開源項目,負責實現對Docker容器集群的快速編排。Compose通過一個模板文件docker-compose.yml來定義一系列相互有關聯的應用容器為一個整體項目,并且可以為各應用容器設置相應的網絡環境和參數配置,如下所示為本系統的部分容器編排docker-compose.yml文件配置情況:

services://定義系統服務節點

discovery: //聲明服務注冊中心微服務節點

image: “discovery:0.0.1” // 配置discovery微服務容器鏡像

ports: “8761:8761” //映射主機的8761端口到discovery容器的8761端口

microservice-weather-city1: //聲明城市數據API微服務節點1

microservice-weather-city2: //聲明城市數據API微服務節點2,使用同一個鏡像,

//但通過設置不同端口來實現,用作負載均衡作用,

//其它3個微服務節點也是一樣配置

microservice-weather-data: //聲明天氣數據API微服務節點

microservice -weather-collection //聲明天氣數據采集微服務節點

microservice-weather-report: //聲明天氣預報微服務節點

redis: //聲明redis緩存節點

weather-gateway-zuul: //聲明網關路由節點

…… //其它節點設置

networks: //設置所有容器節點在同一個網絡環境service_base_default中

default:

external:

name: “service_base_default”

3?系統實現

整個天氣預報微服務系統使用IntelliJ IDEA開發,采用Java語言,基于Spring Boot創建應用,并結合Gradle項目構建工具編譯成可獨立運行的Jar包應用。構建出來的每個可獨立運行的Jar包應用都是系統的節點,本系統實現的所有節點如表1所示。

本系統采用Docker容器快速編排所有節點,其中4個主要的微服務節點都啟動兩個實例以作負載均衡。系統運行在阿里云服務器上,不同節點采用不同的端口,其中天氣預報微服務microservice -weather-report提供面向用戶接

口/report/cityId/{cityId},供用戶查詢天氣數據,用戶通過訪問http://39.108.184.144:8084/report/cityId/101020100可獲得上海近日的天氣預報,具體顯示界面如圖3所示,也可以通過該界面下拉列表選擇其他城市獲取對應的天氣數據。

同時訪問Turbine聚合節點,可以監控多個微服務運行狀態,圖4顯示的是天氣預報微服務節點microservice-weather-report的運行指標,如每秒執行的請求數、成功數、失敗數等。

此時,停止天氣數據API微服務,再次查詢上海天氣預報情況,出現圖5所示界面,服務快速正常響應,并沒有崩潰,說明天氣預報微服務啟動了斷路器,并進入回退方法,響應其他良好內容“溫馨提示:天氣預報查詢服務暫不可用,請稍后再查詢哦!”給用戶,驗證了分布式微服務系統優良的容錯機制。

4?總結

本文結合當前主流的分布式微服務架構思想,將天氣預報系統切分為四個獨立的微服務節點,各微服務之間通過Eureka實現服務注冊與發現,通過輕量級Feign做通信機制。系統引入Zuul做API網關轉發請求,Ribbon做負載均衡,Turbine做 Hystrix熔斷情況的監控。同時,結合Docker實現微服務容器快速編排,并采取停止天氣數據API微服務操作驗證此系統優良的容錯機制。使用當前最流行的Spring Cloud框架創建擴展性好、靈活、風險低的微服務應用[5],并結合Docker的秒級啟動,進程間隔離,快速部署的特點,無疑使得基于Spring Cloud和Docker的分布式微服務架構將在未來軟件架中扮演舉足輕重的角色。

參考文獻

[1] 孫海洪. 微服務架構和容器技術應用[J].金融電子化,2016(5):63-64.

[2]?王方旭.基于Spring Cloud實現業務系統微服務化的設計與實現[J].電子技術與軟件工程,2018(8):60-61.

[3]?高禮,高昕.Docker技術在軟件開發過程中的應用研究[J].軟件,2016,37(3):110-113.

[4]?馬雄. 基于微服務架構的系統設計與開發[D].南京:南京郵電大學,2017.

[5]?Marc Adler. Microservices Are the New Building Blocks of Financial Technology[J]. Wilmott,2017 (87):50-51.

(收稿日期: 2018.06.15)

主站蜘蛛池模板: 精品国产网| 2021国产精品自产拍在线| 亚洲综合经典在线一区二区| 亚洲成人在线网| 亚洲精品视频免费看| 老司机精品99在线播放| 中文字幕在线免费看| 免费一级毛片不卡在线播放| 成人午夜免费观看| 亚洲天堂自拍| 亚洲第一综合天堂另类专| 欧美日韩国产综合视频在线观看| 亚洲色图欧美视频| 麻豆精品视频在线原创| 日本一区二区不卡视频| 18黑白丝水手服自慰喷水网站| 国产成人AV男人的天堂| 国产制服丝袜无码视频| 十八禁美女裸体网站| 亚洲综合婷婷激情| 日韩二区三区无| 亚卅精品无码久久毛片乌克兰| 任我操在线视频| 国产成人久久综合777777麻豆| 青青青国产在线播放| 中文字幕在线一区二区在线| 91青草视频| 伊人蕉久影院| 色男人的天堂久久综合| 一本一道波多野结衣一区二区| 亚洲第一黄片大全| 免费a级毛片视频| 激情無極限的亚洲一区免费| 中文字幕欧美日韩高清| 人妻夜夜爽天天爽| 日本91在线| 青青青视频91在线 | 91免费片| 91免费在线看| 亚洲伊人电影| 免费无码AV片在线观看中文| 亚洲一区网站| 久久天天躁狠狠躁夜夜躁| 亚洲第一视频网站| 成人免费视频一区二区三区| 亚洲国产中文欧美在线人成大黄瓜| 成人av专区精品无码国产 | 97国产精品视频自在拍| 一本一本大道香蕉久在线播放| 黄色网页在线播放| 伊人中文网| 中日无码在线观看| 欧美综合区自拍亚洲综合天堂| 欧美国产日韩在线播放| 亚洲精品大秀视频| 欧美在线视频不卡第一页| 欧美日韩国产在线人成app| 黄色网站不卡无码| 国产精品分类视频分类一区| 在线观看欧美国产| 9966国产精品视频| 亚洲欧洲国产成人综合不卡| 91国内外精品自在线播放| 国产欧美日韩va另类在线播放| 国内精自线i品一区202| 国产白浆一区二区三区视频在线| 无码中文字幕乱码免费2| 伊人查蕉在线观看国产精品| www.亚洲一区| av一区二区三区在线观看| 四虎亚洲国产成人久久精品| 亚洲精品在线影院| 一区二区午夜| 伊人福利视频| 亚洲首页国产精品丝袜| 国产精品香蕉| 国产69囗曝护士吞精在线视频 | 中文字幕亚洲精品2页| 91成人在线观看视频| www.youjizz.com久久| 亚洲欧美一区二区三区蜜芽| 国产成人亚洲毛片|