久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

手把手教你用Spring Cloud和Docker構(gòu)建微服務(wù)

 liang1234_ 2016-09-09
手把手教你用Spring Cloud和Docker構(gòu)建微服務(wù)
翻譯:隋鑫  dockone  2015-07-20

本博文主要向大家介紹如何使用Spring Cloud和Docker構(gòu)建微服務(wù)平臺,。

什么是Spring Cloud?

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

Spring Boot

Spring Cloud最重要的一點是它可以和Spring Boot一起工作,,Spring Boot可以幫助開發(fā)者更容易地創(chuàng)建基于Spring的應(yīng)用程序和服務(wù)。

從Spring Boot項目名稱中的Boot就可以看出來,,Spring Boot的作用在于創(chuàng)建和啟動新的基于Spring框架的項目,。Spring Boot會選擇最適合的Spring子項目和第三方開源庫進行整合,。大部分Spring Boot應(yīng)用只需要非常少的配置就可以快速運行起來,。Spring Boot包含的特性如下:

  • 創(chuàng)建可以獨立運行的Spring應(yīng)用。
  • 直接嵌入Tomcat或Jetty服務(wù)器,,不需要部署WAR文件,。
  • 提供推薦的基礎(chǔ)POM文件來簡化Apache Maven配置。
  • 盡可能的根據(jù)項目依賴來自動配置Spring框架。
  • 提供可以直接在生產(chǎn)環(huán)境中使用的功能,,如性能指標,、應(yīng)用信息和應(yīng)用健康檢查。
  • 沒有代碼生成,,也沒有XML配置文件,。

服務(wù)發(fā)現(xiàn)和智能路由

每一個服務(wù)都含有一個特定意義的微服務(wù)架構(gòu)。當(dāng)你在Spring Cloud上構(gòu)建微服務(wù)架構(gòu)時,,這里有幾個基本概念需要首先澄清下,。首先,你需要要先創(chuàng)建Configuration Service和Discovery Service兩個基礎(chǔ)服務(wù),。如下圖所示:

 

手把手教你用Spring Cloud和Docker構(gòu)建微服務(wù)

上面的圖片說明了四個微服務(wù)以及各個服務(wù)之間的依賴關(guān)系,。

Configuration service處于最頂端,黃色標識,,而且被其它微服務(wù)所依賴,。

Discovery service處于最低端,藍色標識,,同時也被其它服務(wù)所依賴,。

綠色標識的兩個微服務(wù)是我們本系列博文中用到的兩個應(yīng)用案例:電影和觀影建議。

Configuration Service

Configuration Service在微服務(wù)架構(gòu)中是一個非常重要的組件,。如12要素應(yīng)用理論所說,, 微服務(wù)應(yīng)用的配置應(yīng)該存儲在環(huán)境中,而不是本地項目中,。

Configuration service(配置服務(wù))是一個必不可少的基礎(chǔ)組件的原因是因為它可以對所有通過點對點和檢索的基礎(chǔ)服務(wù)進行服務(wù)管理,。

假設(shè)我們有多個部署環(huán)境。比如我們有一個臨時環(huán)境和一個生產(chǎn)環(huán)境,,針對每個環(huán)境的配置將會是不同的,。每一個configuration service 將會由一個獨立的Git倉庫來存放環(huán)境配置。沒有其它環(huán)境能夠訪問到這個配置倉庫,,它只是提供該環(huán)境中運行的配置服務(wù)罷了,。

 

手把手教你用Spring Cloud和Docker構(gòu)建微服務(wù)

當(dāng)Configuration service啟動后,它將會指向那些根據(jù)配置文件配置的路徑并啟動對應(yīng)服務(wù),。每一個微服務(wù)通過讀取自己配置文件中的具體環(huán)境來運行,。在這一過程中,配置是通過版本管理來進行的內(nèi)部和集中化管理,,更改配置不需要重啟服務(wù),。

通過Spring Cloud提供的服務(wù)終端,你可以更改環(huán)境配置,,并向Discovery service(發(fā)現(xiàn)服務(wù))發(fā)送一個刷新信號,,所有的用戶都會收到新的配置通知,。

#p#

Discovery Service

Discovery Service(發(fā)現(xiàn)服務(wù))是另一個重要的微服務(wù)架構(gòu)的組件。Discovery Service管理運行在容器中的眾多服務(wù)實例,,而這些實例工作在集群環(huán)境下,。在這些應(yīng)用中,我們使用客戶端的方式稱之為從服務(wù)到服務(wù),。舉個例子,,我使用Spring Cloud Feign ,這是一個基于Restful風(fēng)格的微服務(wù)提供的客戶端開源項目,,它是從Netflix OSS project項目中派生出來的,。

 

  1. @FeignClient('movie'
  2. public interface MovieClient { 
  3. @RequestMapping(method = RequestMethod.GET, value = '/movies'
  4. PagedResources findAll(); 
  5.  
  6. @RequestMapping(method = RequestMethod.GET, value = '/movies/{id}'
  7. Movie findById(@RequestParam('id') String id); 
  8.  
  9. @RequestMapping(method = RequestMethod.POST, value = '/movies'
  10.   produces = MediaType.APPLICATION_JSON_VALUE) 
  11. void createMovie(@RequestBody Movie movie); 
  12. }  

 

在上面的例子中,我創(chuàng)建了一個Feign 客戶端,,并映射了一個REST API方法來暴露電影服務(wù),。使用@FeignClient注解,可以聲明我想要為movie微服務(wù)而創(chuàng)建的客戶端API,。接下來我聲明了一個我想要實現(xiàn)的服務(wù)映射,。通過在方法上聲明一個URL規(guī)則來描述一個REST API的路由規(guī)則。

更令人興奮的是,,這一切在Spring Cloud中都很容易,,我所要做的僅僅是知道service ID來創(chuàng)建我的Feign 客戶端。服務(wù)的URL地址在運行時環(huán)境是自動配置的,,因為每一個在集群中的微服務(wù)將會在啟動時通過綁定serviceid的方式來進行注冊,。

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

API Gateway

API Gateway 服務(wù)是Spring Cloud的另一個重要組件(關(guān)于它的介紹可以閱讀本篇文章),。它可以用來管理集群服務(wù)中的領(lǐng)域?qū)嶓w,。下圖的綠色六邊形是我們提供的數(shù)據(jù)驅(qū)動服務(wù),主要用來管理自己的實體類和數(shù)據(jù)庫,。通過添加API Gateway服務(wù),,我們可以為通過下面綠顏色的服務(wù)為每一個API路由創(chuàng)建一個代理暴露接口。

 

手把手教你用Spring Cloud和Docker構(gòu)建微服務(wù)

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

示例項目

我已經(jīng)在GitHub上創(chuàng)建了一個實例項目:https://github.com/kbastani/spring-cloud-microservice-example,,這個項目是一個端到端的原生云平臺,,使用Spring Cloud構(gòu)建實際的微服務(wù)架構(gòu),。

基本概念:

  • 使用Docker進行集成測試
  • 混合持久化
  • 微服務(wù)架構(gòu)
  • 服務(wù)發(fā)現(xiàn)
  • API網(wǎng)關(guān)

Docker

使用Docker對每一個服務(wù)進行構(gòu)建和部署,。使用Docker Compose在一個開發(fā)機上進行端到端的集成測試。

混合持久化

混合持久化其實就是說使用多種數(shù)據(jù)庫來存儲,。不同的微服務(wù)實例都會使用它們自己的數(shù)據(jù)庫,,并通過REST服務(wù)或者消息總線來通信,舉個例子,,你可以使用基于以下數(shù)據(jù)庫來構(gòu)建微服務(wù):

  • Neo4j(圖形化)
  • MongoDB(文檔化)
  • MySQL(關(guān)聯(lián))

#p#

微服務(wù)架構(gòu)

這個例子演示了如何使用微服務(wù)創(chuàng)建一個新的應(yīng)用,。由于在項目中的每一個微服務(wù)只有一個單一的父項目。開發(fā)者為此得到的收益是可以在本機上運行和開發(fā)每一個微服務(wù),。添加一個新的微服務(wù)非常簡單,,當(dāng)發(fā)現(xiàn)微服務(wù)時將會自動發(fā)現(xiàn)運行時的集群環(huán)境上。

Service Discovery

項目中包含兩個發(fā)現(xiàn)服務(wù),,一個在Netflix Eureka,,另一個使用了

Consul from Hashicorp。多種發(fā)現(xiàn)服務(wù)提供了多種選擇,,一個是使用(Consul)來做DNS服務(wù)集群,,另一個是(Consul)基于代理的API 網(wǎng)關(guān)。

API 網(wǎng)關(guān)

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

Docker 實例

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

開始構(gòu)建

在這之前,,請先移步至項目的GitHub 倉庫。

https://github.com/kbastani/spring-cloud-microservice-example

克隆或者fork這個項目并且把源碼下載到自己的電腦上,。下載完畢后,,你需要使用Maven和Docker來編譯和構(gòu)建本地的容器鏡像。

下載Docker

首先,,如果你還沒有Docker請先下載它,。可以跟隨這個指南來獲取Docker:https://docs./installation/,,然后在開發(fā)機上安裝并運行,。

當(dāng)然你也需要安裝Docker Compose(https//docs./compose/),,這個指南將會幫到你:https://docs./compose/install/。

環(huán)境要求

能夠運行實例程序,,需要在你的開發(fā)機上安裝下面的軟件:

  • Maven 3
  • Java 8
  • Docker
  • Docker Compose

構(gòu)建項目

通過命令行方式來構(gòu)建當(dāng)前項目,,在項目的根目錄中運行如下的命令:

 

  1. $ mvn clean install 

項目將會根據(jù)pom.xml中的每一個項目聲明中下載相應(yīng)的依賴jar包。每一個服務(wù)都將會被構(gòu)建,,同時Maven的Docker插件將會自動從本地Docker Registry中構(gòu)建每一個容器鏡像,。Docker將會在構(gòu)建成功后,根據(jù)命令行運行mvn clean install來清除相應(yīng)的資源,。

在項目成功構(gòu)建后,,你將會看到如下的輸出:

 

 

 

通過Docker compose 啟動集群

現(xiàn)在每一個鏡像都成功構(gòu)建完畢,我們使用Docker Compose來加速啟動我們的集群,。我已經(jīng)將Docker Compose的yaml文件包含進了項目中,,大家可以從GitHub上獲取。

現(xiàn)在我們通過下面的命令行啟動微服務(wù)集群:

 

  1. $ docker-compose up 

如果一切配置都是正確的,,每一個容器鏡像將會通過在Docker上的虛擬容器和自動發(fā)現(xiàn)的網(wǎng)絡(luò)服務(wù)來運行,。當(dāng)他們開始順序啟動時,你將會看到一系列的日志輸出,。這可能需要一段時間來完成,,取決于運行你實例程序的機器性能。

一旦容器啟動成功,,你將會通過Eureka主機看到通過Discovery service注冊上來的應(yīng)用服務(wù),。

通過命令行終端復(fù)制粘貼下面的命令到Docker中定義的$DOCKER_HOST環(huán)境變量中。

 

  1. $ open $(echo \'$(echo $DOCKER_HOST)\'
  2. \sed 's/tcp:\/\//http:\/\//g'
  3. \sed 's/[0-9]\{4,\}/8761/g'
  4. \sed 's/\'//g'

 

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

 

手把手教你用Spring Cloud和Docker構(gòu)建微服務(wù)

我們將會看到每一個正在運行的服務(wù)實例和狀態(tài)。通過下面的命令來獲取數(shù)據(jù)驅(qū)動服務(wù),,例如 movie 服務(wù),。

 

  1. $ open $(echo \'$(echo $DOCKER_HOST)/movie\'
  2.         \sed 's/tcp:\/\//http:\/\//g'
  3.         \sed 's/[0-9]\{4,\}/10000/g'
  4.         \sed 's/\'//g'

 

這個命令將會訪問根據(jù)導(dǎo)航網(wǎng)關(guān)終端提供的代理方式訪問movie服務(wù)的REST API終端。這些REST API使用 HATEOAS 來配置,,它是一個通過內(nèi)嵌鏈接的方式支持自動發(fā)現(xiàn)服務(wù)的接口,。

 

  1.   '_links' : { 
  2. 'self' : { 
  3.   'href' : 'http://192.168.59.103:10000/movie' 
  4. }, 
  5. 'resume' : { 
  6.   'href' : 'http://192.168.59.103:10000/movie/resume' 
  7. }, 
  8. 'pause' : { 
  9.   'href' : 'http://192.168.59.103:10000/movie/pause' 
  10. }, 
  11. 'restart' : { 
  12.   'href' : 'http://192.168.59.103:10000/movie/restart' 
  13. }, 
  14. 'metrics' : { 
  15.   'href' : 'http://192.168.59.103:10000/movie/metrics' 
  16. }, 
  17. 'env' : [ { 
  18.   'href' : 'http://192.168.59.103:10000/movie/env' 
  19. }, { 
  20.   'href' : 'http://192.168.59.103:10000/movie/env' 
  21. } ], 
  22. 'archaius' : { 
  23.   'href' : 'http://192.168.59.103:10000/movie/archaius' 
  24. }, 
  25. 'beans' : { 
  26.   'href' : 'http://192.168.59.103:10000/movie/beans' 
  27. }, 
  28. 'configprops' : { 
  29.   'href' : 'http://192.168.59.103:10000/movie/configprops' 
  30. }, 
  31. 'trace' : { 
  32.   'href' : 'http://192.168.59.103:10000/movie/trace' 
  33. }, 
  34. 'info' : { 
  35.   'href' : 'http://192.168.59.103:10000/movie/info' 
  36. }, 
  37. 'health' : { 
  38.   'href' : 'http://192.168.59.103:10000/movie/health' 
  39. }, 
  40. 'hystrix.stream' : { 
  41.   'href' : 'http://192.168.59.103:10000/movie/hystrix.stream' 
  42. }, 
  43. 'routes' : { 
  44.   'href' : 'http://192.168.59.103:10000/movie/routes' 
  45. }, 
  46. 'dump' : { 
  47.   'href' : 'http://192.168.59.103:10000/movie/dump' 
  48. }, 
  49. 'refresh' : { 
  50.   'href' : 'http://192.168.59.103:10000/movie/refresh' 
  51. }, 
  52. 'mappings' : { 
  53.   'href' : 'http://192.168.59.103:10000/movie/mappings' 
  54. }, 
  55. 'autoconfig' : { 
  56.   'href' : 'http://192.168.59.103:10000/movie/autoconfig' 
  57.   } 
  58. }   

 

總結(jié)

這是使用Spring Cloud和Docker構(gòu)建微服務(wù)架構(gòu)的系列博文的第一部分。在本文中,,我們接觸到了如下的概念:

  • Service Discovery
  • Externalized Configuration
  • API Gateway
  • Service Orchestration with Docker Compose

在這之后的博文中,,我們將會演示如何使用后臺服務(wù)來構(gòu)建前端應(yīng)用程序,同時也會介紹一個混合性持久化的實例,,使用MySQL和Neo4j,。

原文鏈接:http://www./article/510
 

【編輯推薦】

【責(zé)任編輯:Ophira TEL:(010)68476606】

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,,所有內(nèi)容均由用戶發(fā)布,,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式,、誘導(dǎo)購買等信息,,謹防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,,請點擊一鍵舉報,。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多