久久精品人人爽,华人av在线,亚洲性视频网站,欧美专区一二三

如何使用Spring Cloud和Docker構建微服務平臺

202次閱讀
沒有評論

共計 6561 個字符,預計需要花費 17 分鐘才能閱讀完成。

本篇內容介紹了“如何使用 Spring Cloud 和 Docker 構建微服務平臺”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓丸趣 TV 小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!

什么是 Spring Cloud?

Spring Cloud 是 Pivotal 提供的用于簡化分布式系統構建的工具集。Spring Cloud 引入了云平臺連接器 (Cloud Connector) 和服務連接器 (Service Connector) 的概念。云平臺連接器是一個接口,需要由云平臺提供者進行實現,以便庫中的其他模塊可以與該云平臺協同工作。

在 Spring Cloud 提供的解決方案中,你將會發現如下的內容:
Configuration Service
Discovery Service
Circuit breakers
Distributed sessions
Spring Boot

Spring Cloud 最重要的一點是它可以和 Spring Boot 一起工作,Spring Boot 可以幫助開發者更容易地創建基于 Spring 的應用程序和服務。

從 Spring Boot 項目名稱中的 Boot 就可以看出來,Spring Boot 的作用在于創建和啟動新的基于 Spring 框架的項目。Spring Boot 會選擇最適合的 Spring 子項目和第三方開源庫進行整合。大部分 Spring Boot 應用只需要非常少的配置就可以快速運行起來。Spring Boot 包含的特性如下:
創建可以獨立運行的 Spring 應用。
直接嵌入 Tomcat 或 Jetty 服務器,不需要部署 WAR 文件。
提供推薦的基礎 POM 文件來簡化 Apache Maven 配置。
盡可能的根據項目依賴來自動配置 Spring 框架。
提供可以直接在生產環境中使用的功能,如性能指標、應用信息和應用健康檢查。
沒有代碼生成,也沒有 XML 配置文件。
服務發現和智能路由
每一個服務都含有一個特定意義的微服務架構。當你在 Spring Cloud 上構建微服務架構時,這里有幾個基本概念需要首先澄清下。首先,你需要要先創建 Configuration Service 和 Discovery Service 兩個基礎服務。如下圖所示:

上面的圖片說明了四個微服務以及各個服務之間的依賴關系:
Configuration service 處于最頂端,黃色標識,而且被其它微服務所依賴;
Discovery service 處于最低端,藍色標識,同時也被其它服務所依賴;
綠色標識的兩個微服務是我們本系列博文中用到的兩個應用案例:電影和觀影建議。

配置服務
Configuration Service(配置服務)在微服務架構中是一個非常重要的組件。如 12 要素理論所說,微服務應用的配置應該存儲在環境中,而不是本地項目中。Configuration service 是一個必不可少的基礎組件的原因是因為它可以對所有通過點對點和檢索的基礎服務進行服務管理。
假設我們有多個部署環境。比如我們有一個臨時環境和一個生產環境,針對每個環境的配置將會是不同的。每一個 configuration service 將會由一個獨立的 Git 倉庫來存放環境配置。沒有其它環境能夠訪問到這個配置倉庫,它只是提供該環境中運行的配置服務罷了。

當 Configuration service 啟動后,它將會指向那些根據配置文件配置的路徑并啟動對應服務。每一個微服務通過讀取自己配置文件中的具體環境來運行。在這一過程中,配置是通過版本管理來進行的內部和集中化管理,更改配置不需要重啟服務。
通過 Spring Cloud 提供的服務終端,你可以更改環境配置,并向 Discovery service(發現服務)發送一個刷新信號,所有的用戶都會收到新的配置通知。

發現服務
Discovery Service(發現服務)是另一個重要的微服務架構的組件。Discovery Service 管理運行在容器中的眾多服務實例,而這些實例工作在集群環境下。在這些應用中,我們使用客戶端的方式稱之為從服務到服務。舉個例子,我使用 Spring Cloud Feign,這是一個基于 Restful 風格的微服務提供的客戶端開源項目,它是從 Netflix OSS project 項目中派生出來的。
[java] view plain copy 在 CODE 上查看代碼片派生到我的代碼片
@FeignClient(movie)

public interface MovieClient {

@RequestMapping(method = RequestMethod.GET, value = /movies)

PagedResources findAll(); 

@RequestMapping(method = RequestMethod.GET, value = /movies/{id} )

Movie findById(@RequestParam( id) String id); 

@RequestMapping(method = RequestMethod.POST, value = /movies ,

produces = MediaType.APPLICATION_JSON_VALUE)

void createMovie(@RequestBody Movie movie);

}

在上面的例子中,我創建了一個 Feign 客戶端,并映射了一個 REST API 方法來暴露電影服務。使用 @FeignClient 注解,可以聲明我想要為 movie 微服務而創建的客戶端 API。接下來我聲明了一個我想要實現的服務映射。通過在方法上聲明一個 URL 規則來描述一個 REST API 的路由規則。
更令人興奮的是,這一切在 Spring Cloud 中都很容易,我所要做的僅僅是知道 service ID 來創建我的 Feign 客戶端。服務的 URL 地址在運行時環境是自動配置的,因為每一個在集群中的微服務將會在啟動時通過綁定 serviceid 的方式來進行注冊。

微服務架構中的其它服務,也是通過上面提到的方式運行。我只需要知道進行通訊服務的 serviceid,所有的操作都是通過 Spring 自動綁定的。

API 網關
API Gateway 服務是 Spring Cloud 的另一個重要組件。它可以用來管理集群服務中的領域實體。下圖的綠色六邊形是我們提供的數據驅動服務,主要用來管理自己的實體類和數據庫。通過添加 API Gateway 服務,我們可以為通過下面綠顏色的服務為每一個 API 路由創建一個代理暴露接口。

假設推薦服務和電影服務都暴露他們自己的 REST API 在自己管理的域實體上。API gataway 通過 discovery service 和從其它服務注入的基于代理路由的 API 方法。通過這種方式,包括推薦服務和電影服務將擁有一個完整定義的路由,通過暴露的 REST API 獲得本地的微服務。API Gateway 將會重定義路由請求到服務實例,這些請求都是基于 HTTP 的。

示例項目
我已經在 GitHub(https://github.com/kbastani/sp … ample)上創建了一個實例項目,這個項目是一個端到端的原生云平臺,使用 Spring Cloud 構建實際的微服務架構。

基本概念:
使用 Docker 進行集成測試
混合持久化
微服務架構
服務發現
API 網關
Docker
使用 Docker 對每一個服務進行構建和部署。使用 Docker Compose 在一個開發機上進行端到端的集成測試。
混合持久化
混合持久化其實就是說使用多種數據庫來存儲。不同的微服務實例都會使用它們自己的數據庫,并通過 REST 服務或者消息總線來通信,舉個例子,你可以使用基于以下數據庫來構建微服務:
Neo4j(圖形化)

MongoDB(文檔化)

MySQL(關聯)

微服務架構
這個例子演示了如何使用微服務創建一個新的應用。由于在項目中的每一個微服務只有一個單一的父項目。開發者為此得到的收益是可以在本機上運行和開發每一個微服務。添加一個新的微服務非常簡單,當發現微服務時將會自動發現運行時的集群環境上。

發現服務
項目中包含兩個發現服務,一個是 Netflix Eureka,另一個使用了 Consul from Hashicorp。多種發現服務提供了多種選擇,一個是使用(Consul)來做 DNS 服務集群,另一個是(Eureka)基于代理的 API 網關。

API 網關
每一個微服務都關聯 Eureka,在整個集群中檢索 API 路由。使用這個策略,每一個在集群上運行的微服務只需要通過一個共同的 API 網關進行負載均衡和暴 露接口,每一個服務也會自動發現并將路由請求轉發到自己的路由服務中。這個代理技術有助于開發用戶界面,作為平臺完整的 API 通過自己的主機映射為代理服 務。

Docker 實例
下面的實例將會通過 Maven 來構建,使用 Docker 為每一個微服務構建容器鏡像。我們可以很優雅的使用 Docker Compose 在我們自己的主機上搭建全部的微服務集群。

開始構建
在這之前,請先移步至項目的 GitHub 倉庫。
[html] view plain copy 在 CODE 上查看代碼片派生到我的代碼片
https://github.com/kbastani/sp … mpleX24X 克隆或者 fork 這個項目并且把源碼下載到自己的電腦上。下載完畢后,你需要使用 Maven 和 Docker 來編譯和構建本地的容器鏡像。

下載 Docker
首先,如果你還沒有 Docker 請先下載它。可以跟隨這個指南(https://docs.docker.com/compose/install/)來獲取 Docker,然后在開發機上安裝并運行。
當然你也需要安裝 Docker Compose,這個指南(https://docs.docker.com/compose/install/)將會幫到你。如果你使用的 Mac OSX 或者 boot2docker,請確保在虛擬機上你給 boot2docker 提供的內存至少是 5GB,下面這個命令能幫助你這么做:
[html] view plain copy 在 CODE 上查看代碼片派生到我的代碼片
$ boot2docker init –memory=5000

環境要求
能夠運行實例程序,需要在你的開發機上安裝下面的軟件:
Maven 3
Java 8
Docker
Docker Compose

構建項目
通過命令行方式來構建當前項目,在項目的根目錄中運行如下的命令:
[html] view plain copy 在 CODE 上查看代碼片派生到我的代碼片
$ mvn clean install

項目將會根據 pom.xml 中的每一個項目聲明中下載相應的依賴 jar 包。每一個服務都將會被構建,同時 Maven 的 Docker 插件將會自動從本地 Docker Registry 中構建每一個容器鏡像。Docker 將會在構建成功后,根據命令行運行 mvn clean install 來清除相應的資源。
在項目成功構建后,你將會看到如下的輸出:

[html] view plain copy 在 CODE 上查看代碼片派生到我的代碼片
[INFO] ——————————————————————[INFO] Reactor Summary:

[INFO]

[INFO] spring-cloud-microservice-example-parent ………. SUCCESS [0.268s]

[INFO] users-microservice ………………………….. SUCCESS [11.929s]

[INFO] discovery-microservice ………………………. SUCCESS [5.640s]

[INFO] api-gateway-microservice …………………….. SUCCESS [5.156s]

[INFO] recommendation-microservice ………………….. SUCCESS [7.732s]

[INFO] config-microservice …………………………. SUCCESS [4.711s]

[INFO] hystrix-dashboard …………………………… SUCCESS [4.251s]

[INFO] consul-microservice …………………………. SUCCESS [6.763s]

[INFO] movie-microservice ………………………….. SUCCESS [8.359s]

[INFO] movies-ui ………………………………….. SUCCESS [15.833s]

[INFO] ——————————————————————[INFO] BUILD SUCCESS

[INFO] ——————————————————————

通過 Docker compose 啟動集群
現在每一個鏡像都成功構建完畢,我們使用 Docker Compose 來加速啟動我們的集群。我已經將 Docker Compose 的 yaml 文件包含進了項目中,大家可以從 GitHub 上獲取。

現在我們通過下面的命令行啟動微服務集群:

[html] view plain copy 在 CODE 上查看代碼片派生到我的代碼片
$ docker-compose up

如果一切配置都是正確的,每一個容器鏡像將會通過在 Docker 上的虛擬容器和自動發現的網絡服務來運行。當他們開始順序啟動時,你將會看到一系列的日志輸出。這可能需要一段時間來完成,取決于運行你實例程序的機器性能。
一旦容器啟動成功,你將會通過 Eureka 主機看到通過 Discovery service 注冊上來的應用服務,通過命令行終端復制粘貼下面的命令到 Docker 中定義的 $DOCKER_HOST 環境變量中。

[html] view plain copy 在 CODE 上查看代碼片派生到我的代碼片
$ open $(echo \ $(echo $DOCKER_HOST)\ |

\sed s/tcp:\/\//http:\/\//g |

\sed s/[0-9]{4,}/8761/g |

\sed s/\ //g )

如果 Eureka 正確的啟動,瀏覽器將會啟動并打開 Eureka 服務的儀表盤,如下圖所示:

我們將會看到每一個正在運行的服務實例和狀態。通過下面的命令來獲取數據驅動服務,例如 movie 服務。

[html] view plain copy 在 CODE 上查看代碼片派生到我的代碼片
$ open $(echo \ $(echo $DOCKER_HOST)/movie\ |

\sed s/tcp:\/\//http:\/\//g |

\sed s/[0-9]{4,}/10000/g |

\sed s/\ //g )

這個命令將會訪問根據導航網關終端提供的代理方式訪問 movie 服務的 REST API 終端。這些 REST API 使用 HATEOAS 來配置,它是一個通過內嵌鏈接的方式支持自動發現服務的接口。
[html] view plain copy 在 CODE 上查看代碼片派生到我的代碼片
{

_links : {

self : {

href : http://192.168.59.103:10000/movie X63X},

resume : {

href : http://192.168.59.103:10000/movie/resume X66X},

………… 

autoconfig : {

href : http://192.168.59.103:10000/mo … t;X70X}

}

}

“如何使用 Spring Cloud 和 Docker 構建微服務平臺”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注丸趣 TV 網站,丸趣 TV 小編將為大家輸出更多高質量的實用文章!

正文完
 
丸趣
版權聲明:本站原創文章,由 丸趣 2023-08-16發表,共計6561字。
轉載說明:除特殊說明外本站除技術相關以外文章皆由網絡搜集發布,轉載請注明出處。
評論(沒有評論)
主站蜘蛛池模板: 诸暨市| 沛县| 宁陕县| 万年县| 钟祥市| 池州市| 响水县| 平乡县| 兴化市| 长垣县| 兴文县| 垦利县| 金华市| 泰州市| 洛川县| 邢台市| 绵竹市| 吉隆县| 离岛区| 墨竹工卡县| 四子王旗| 美姑县| 库车县| 桓仁| 曲阳县| 榆树市| 揭阳市| 安顺市| 潜山县| 廊坊市| 满洲里市| 鄯善县| 湘潭市| 咸阳市| 崇州市| 临泉县| 西华县| 巩义市| 武鸣县| 夏河县| 巴楚县|