微服務(wù)架構(gòu)的部署_第1頁
微服務(wù)架構(gòu)的部署_第2頁
微服務(wù)架構(gòu)的部署_第3頁
微服務(wù)架構(gòu)的部署_第4頁
微服務(wù)架構(gòu)的部署_第5頁
已閱讀5頁,還剩2頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、微 服 務(wù) 架 構(gòu) 的 部 署本文從以下幾個(gè)方面簡要說明微服務(wù)架構(gòu)項(xiàng)目的實(shí)踐經(jīng)驗(yàn):架構(gòu)選型、開發(fā)測試環(huán)境下的相關(guān)工具支持、 人員分工及開發(fā)部署流程、相關(guān)設(shè)計(jì)及注意事項(xiàng)。最后,將根據(jù)實(shí)踐經(jīng)驗(yàn)討論提高微服架構(gòu)下的開發(fā)和運(yùn) 維效率的切實(shí)需求,進(jìn)一步理清本項(xiàng)目所實(shí)現(xiàn)的容器服務(wù)管理平臺的完善性需求。本項(xiàng)目是一個(gè)企業(yè)級的容器服務(wù)管理平臺,該平臺的功能是基于容器實(shí)現(xiàn)的應(yīng)用運(yùn)行環(huán)境管理,以及 應(yīng)用開發(fā)階段的持續(xù)集成和持續(xù)發(fā)布。簡單的理解該平臺的核心功能之一就是管理復(fù)雜應(yīng)用的開發(fā)和運(yùn)維 環(huán)境,提高微服務(wù)架構(gòu)下的開發(fā)和運(yùn)維效率。項(xiàng)目的開發(fā)背景如下:首先,該系統(tǒng)具有典型分布式應(yīng)用系統(tǒng)特征:該平臺所運(yùn)行的服務(wù)器配置不

2、高,例如華為RH1288這類低配置服務(wù)器,允許硬件失敗;系統(tǒng)平臺要求可根據(jù)實(shí)際用戶數(shù)的規(guī)模進(jìn)行伸縮部署,保證硬件資源的合理利用;由于系統(tǒng)平臺之上需要運(yùn)行若干企業(yè)應(yīng)用的開發(fā)和運(yùn)行環(huán)境,可靠性是非常重要的,不允許單點(diǎn)失效。其次,本系統(tǒng)功能復(fù)雜,從架構(gòu)的角度需要將系統(tǒng)分成多個(gè)層次和若干個(gè)子系統(tǒng)。不同的層次、子系 統(tǒng)根據(jù)具體情況需要采用不同的開發(fā)語言,由不同的開發(fā)小組完成。第三,項(xiàng)目組成員由幾個(gè)城市的異地團(tuán)隊(duì)協(xié)同開發(fā),統(tǒng)一的開發(fā)環(huán)境和協(xié)同工具是必不可少的。針對上述項(xiàng)目背景的考慮,本項(xiàng)目選擇基于微服務(wù)架構(gòu)進(jìn)行項(xiàng)目開發(fā)。開發(fā)、測試、部署使用到的工具集“工欲善其事、必先利其器”,借助適合的流程和相關(guān)工具集,

3、才能提高微服務(wù)架構(gòu)下的應(yīng)用開發(fā)效 率。本項(xiàng)目利用 DevOPs流程并選用一套相關(guān)工具集實(shí)現(xiàn)應(yīng)用開發(fā)管理,提高開發(fā)、測試、部署的效率。代碼庫:本項(xiàng)目使用分布式代碼庫Gitlab ,它的功能不限于代碼倉庫,還包括 reviews(代碼審查),issue tracking( 問題跟蹤)、wiki等功能,是代碼管理和異地團(tuán)隊(duì)溝通、協(xié)作工具的首選。Docker鏡像倉庫、Docker :本項(xiàng)目用容器貫穿整個(gè)軟件開發(fā)流程,以容器作為應(yīng)用發(fā)布的載體,應(yīng)用 的開發(fā)環(huán)境和測試發(fā)版環(huán)境都運(yùn)行在Docker容器中。對于復(fù)雜的開發(fā)和運(yùn)維環(huán)境管理Docker具有先天的優(yōu)勢,目前國內(nèi)外的互聯(lián)網(wǎng)公司有大多數(shù)都已經(jīng)將Docke

4、r應(yīng)用到了他們的開發(fā)或者生產(chǎn)環(huán)境中了。K8s:本項(xiàng)目采用 Kubernates作為容器調(diào)度管理的基礎(chǔ)環(huán)境,開發(fā)環(huán)境、測試環(huán)境的 Docker容器都 由K8s負(fù)責(zé)調(diào)度管理。Jenkins :快速的部署發(fā)布離不開老牌持續(xù)集成明星Jenkins ,本項(xiàng)目通過Jenkins任務(wù)構(gòu)建代碼、將應(yīng)用打包成 Docker鏡像,最終發(fā)布到 K8s環(huán)境中將容器運(yùn)行起來。Shell腳本:編寫Shell腳本將項(xiàng)目打分支、發(fā)布應(yīng)用等開發(fā)階段的配置管理工作自動化,降低運(yùn)維 門檻、提高配置管理和運(yùn)維的效率。WIKI : Gitlib 上的 WIKI功能相對簡陋,因此項(xiàng)目組選擇dokuwiki作為異地團(tuán)隊(duì)協(xié)作和溝通的工具團(tuán)隊(duì)

5、成員可以將設(shè)計(jì)文檔、知識分享文檔、公告信息等信息可以更新到wiki上,便與協(xié)同開發(fā)。禪道:為了便于開發(fā)計(jì)劃、開發(fā)任務(wù)和 bug關(guān)聯(lián)起來,本項(xiàng)目使用禪道進(jìn)行開發(fā)任務(wù)和bug管理。人員分工及開發(fā)流程微服務(wù)架構(gòu)應(yīng)用的開發(fā)、部署的復(fù)雜度都是遠(yuǎn)大于單體式應(yīng)用的,靠運(yùn)維人員手工的配置管理顯然是 難于應(yīng)彳t 了。 DevOps主張以自動化任務(wù)處理方式實(shí)現(xiàn)軟件交付及基礎(chǔ)設(shè)施更新,可以說是微服務(wù)架構(gòu)應(yīng)用開發(fā)和運(yùn)維的必要條彳本項(xiàng)目采用DevOps的理念的開發(fā)流程進(jìn)行開發(fā)。實(shí)現(xiàn)部署和運(yùn)維的自動化需要工具,同時(shí)DevOps強(qiáng)調(diào)軟件開發(fā)者與其他IT員工及管理層間的協(xié)作與溝通,因此明確的人員分工和開發(fā)流程是與工具同樣重要

6、的因素。通俗的說,就是有了工具,大家要知道怎么使用工具,并且愿意使用工具 才能真正達(dá)到提高研發(fā)效率的目的。項(xiàng)目組的主要工作成員無非也是做開發(fā)、測試和系統(tǒng)管理三類工作,這里只說明與傳統(tǒng)的企業(yè)應(yīng)用開 發(fā)過程中三類人員所做的工作略有不同的工作內(nèi)容。開發(fā)人員:a)開發(fā)者做開發(fā)設(shè)計(jì),需要將涉及到接口部分設(shè)計(jì)更新到wiki上,供調(diào)用者評審和調(diào)用。b)開發(fā)者除了編寫程序邏輯外,還需要注意編寫單元測試用例,因?yàn)榉植际綉?yīng)用聯(lián)調(diào)相對復(fù)雜,先 做在編寫單服務(wù)時(shí)做好了測試再聯(lián)調(diào)能夠提高開發(fā)效率。c)由于本項(xiàng)目是采用 Docker容器作為發(fā)布載體的,開發(fā)者可能需要修改DockerFile 模板里的部分參數(shù),便于部署階段

7、能將編譯后的代碼打包到鏡像中。相對于傳統(tǒng)的開發(fā)方式,這是對開發(fā)者額外的要求。讓所有開發(fā)者懂 Dockerfile 似乎要求也有點(diǎn)高,其實(shí)每個(gè)子項(xiàng)目中的 DockerFile 及腳本一般是在搭建項(xiàng) 目框架時(shí),主要系統(tǒng)配置管理員編寫的好的模板,若開發(fā)人員不懂相關(guān)技術(shù),也可以跟配置管理員溝通需 求,由配置管理員修改相關(guān)文件。測試人員:測試人員的工作沒有什么特別,只是需要注意除了每個(gè)Sprint階段的測試外,還需要配合開發(fā)人員持續(xù)集成的測試;系統(tǒng)配置管理人員:一般DevOps的開發(fā)方式是依賴于云基礎(chǔ)平臺以及自動化發(fā)布工具的,因此相對于傳統(tǒng)開發(fā)方式,對系統(tǒng)配置管理者的技術(shù)要求會比較低。但是,我們的項(xiàng)目開

8、發(fā)目的就是構(gòu)建一個(gè)能支 撐DevOps流程的平臺,其開發(fā)本身還不具備相應(yīng)的平臺基礎(chǔ)。因此,我們項(xiàng)目最初的系統(tǒng)配置管理工作 是由架構(gòu)師來做的,主要需要做如下這些事:a)部署運(yùn)行項(xiàng)目組開發(fā)需要用到公共的服務(wù)組件、例如 zookeeper注冊中心、Docker Registry鏡像 倉庫、數(shù)據(jù)庫等;b)為子項(xiàng)目編寫在 git上打分支的腳本,便于測試發(fā)版的時(shí)候打分支;c)編寫各類型應(yīng)用發(fā)布部署成鏡像的Dockerfiled)制作或者在網(wǎng)上找到現(xiàn)成的開發(fā)所需環(huán)境的Docker鏡像,并且Push到項(xiàng)目開發(fā)使用的私有鏡像庫中;e)編寫Shell腳本實(shí)現(xiàn)將子項(xiàng)目打包成Docker鏡像,并且 Push到鏡像倉庫

9、中。f)在Jenkins上配置自動編譯或者部署任務(wù),實(shí)現(xiàn)持續(xù)集成和部署。本文將對項(xiàng)目的開發(fā)、部署聯(lián)調(diào)以及測試發(fā)版流程和規(guī)范做簡要說明,并提供項(xiàng)目各個(gè)階段使用到的 部分自動化腳本工具示例。圖1項(xiàng)目持續(xù)集成和部署流程代碼分支管理:如圖所示,在 git上創(chuàng)建的每一個(gè)項(xiàng)目都需要至少建立develop和master兩個(gè)分支。開發(fā)人員只有權(quán)限把代碼提交到develop分支上,平時(shí)的持續(xù)集成和聯(lián)調(diào)都從develop分支上獲取代碼。每個(gè)Sprint階段測試發(fā)版時(shí),配置管理員從develop分支上創(chuàng)建一個(gè)用于測試的release分支。當(dāng)測試修改bug時(shí),開發(fā)人員只把修改后的代碼提交到對應(yīng)的測試Release分支

10、上。當(dāng)測試版本穩(wěn)定后,由配置管理員將代碼合并到 Master分支中。自動部署和發(fā)布:項(xiàng)目借助于 Shell腳本、Dockerfile 、K8s配置文件和Jenkins任務(wù)實(shí)現(xiàn)了自動化的持續(xù)集成和部署。配置管理員在項(xiàng)目目錄下編寫的腳本文件結(jié)構(gòu)如圖2所示。a)創(chuàng)建分支的shell腳本,示例見附件 1;#!/bin/bashif -z $1 ; thencat EOFUsage:EOFexit 1fiDEPLOY_VERSION=$1RP_FILES=(subproject1/ subprojectl/ subprojectl/Makefile)if -z $(git branch -a | gre

11、p -e /$DEPLOY_VERSION$) ; thengit commit -a -m Create Branch $DEPLOY_VERSIONgit push origin $DEPLOY_VERSIONDockerfile示例文件,將 Java dubbo服務(wù)發(fā)布為鏡像為例,示例見附件2:MAINTAINER zhangsanRUN mkdir -p /app ?COPY target/ /app/COPY ./ /app/RUN chmod +x /app/WORKDIR /appCMD ./EXPOSE 8080Makefile 文件:包括編譯項(xiàng)目、將項(xiàng)目打包成Docker鏡像

12、、將鏡像 Push到鏡像倉庫、在K8s上創(chuàng)建 ReplicationController 、在 K8s上創(chuàng)建service 的命令腳本:clean:mvn clean#各當(dāng)前程序打包成 Docker鏡像build: ?docker build -t $(IMAGE).#1各當(dāng)前鏡像Push到鏡像倉庫push: ?docker push $(IMAGE)run:redeploy:kubectl replace -f $(KUBE_OPS)undeploy:kubectl delete -f $(KUBE_OPS)船J建 servicedeploy-svc:kubectl create -f $(

13、KUBE_OPS)undeploy-svc:kubectl delete -f $(KUBE_OPS)K8s部署配置文件,創(chuàng)建 ReplicationController 、創(chuàng)建service 示例見附件4:#創(chuàng)建 Service apiVersion: v1 kind: Service metadata:name: subproject1 labels:component: subproject1 spec:ports:-port: 8888 nodePort: 16888 selector:name: svc-subproject1 type: NodePore)配置管理員在 Jenkin

14、s上配置自動或手動觸發(fā)的任務(wù),在 jenkins任務(wù)中配置shell腳本,可實(shí) 現(xiàn)應(yīng)用的一鍵部署,示例見附件5。具體的過程說如下:.從Git上拉取代碼,編譯、發(fā)布項(xiàng)目;將編譯好的程序包,打包成 Docker鏡像;將打包好的Docker鏡彳象Push到鏡像倉庫;Jenkins 執(zhí)行Shell腳本命令,從鏡像倉庫拉取鏡像在K8s環(huán)境中創(chuàng)建pod和RG將應(yīng)用程序及其運(yùn)行環(huán)境所在的容器在K8s平臺上運(yùn)行起來。測試與發(fā)版:從圖中可以看到,項(xiàng)目的開發(fā)環(huán)境和測試環(huán)境是相互隔離的兩套環(huán)境。a)部署在開發(fā)環(huán)境的應(yīng)用代碼,來自 develop分支,對應(yīng)的Docker鏡彳象Tag用latest ,供開發(fā)人員 調(diào)試、

15、以及測試人員隨時(shí)協(xié)助做集成測試;b)部署在測是環(huán)境的應(yīng)用代碼,來自每到一個(gè) Sprint階段發(fā)版測試時(shí)配置管理員從develop分支中打出的測試發(fā)版分支,分支名對應(yīng)的版本號不同,相應(yīng)的 Docker鏡像的tag也會隨是版本號改變。測試 環(huán)境中部署的應(yīng)用主要用于測試驗(yàn)證。部署聯(lián)調(diào):項(xiàng)目分為四層:前端 UI、WEB!有若干個(gè)web應(yīng)用、Service層包括若干個(gè)分布式服務(wù)、基礎(chǔ)底層。這里簡要說明一下各層之間的調(diào)試方式:a)前端和 Web層聯(lián)調(diào):前端開發(fā)人員本地啟動一個(gè)Nginx,配置文件將localhost 代理指向web server的地址,即可在本地調(diào)試與動態(tài)Web端的交互。b) WEB層與服

16、務(wù)層聯(lián)調(diào)、服務(wù)層之間聯(lián)調(diào)、服務(wù)層與基礎(chǔ)層聯(lián)調(diào),分為兩種方式:本地調(diào)試:部署一個(gè)專用的 zookeeper注冊中心,開發(fā)者可以把本機(jī)地址注冊到注冊中心,供相關(guān)人 員臨時(shí)調(diào)用服務(wù)調(diào)試。集成環(huán)境調(diào)試:提交代碼觸發(fā)Jenkins任務(wù),將服務(wù)打包成容器鏡像,部署到K8s上在完整的系統(tǒng)運(yùn)行環(huán)境中聯(lián)合調(diào)試。具體的集成環(huán)境編排依賴于k8s完成。微服務(wù)的分層和服務(wù)交互設(shè)計(jì)和來自 DZone community 社區(qū)的關(guān)于微服架構(gòu)的利弊以及設(shè)計(jì)原則有很多著名的文章有介紹,例如MarinFowler的博文Microservices:a definition of this new architectural ter

17、mMicroservices in Practice: From Architecture to Deployment在 InfoQ 等技術(shù)網(wǎng)站都有中文翻譯,本文就不對概念和設(shè)計(jì)原則做過多贅述。本小節(jié)主要是說明關(guān)于項(xiàng)目的邏輯分層結(jié)構(gòu)和服務(wù)交互方面的設(shè) 計(jì)。本項(xiàng)目遵守以下微服務(wù)架構(gòu)的主要基本原則,但是也會根據(jù)具體項(xiàng)目情況有所保留。單一責(zé)任原則(Single Responsibility Principle, SRP保證微服務(wù)設(shè)計(jì)能支持服務(wù)的敏捷/獨(dú)立地開發(fā)和部署。圖2分層結(jié)構(gòu)及通信機(jī)制架構(gòu)分層設(shè)計(jì)如圖2所示,項(xiàng)目的架構(gòu)是分為四層:靜態(tài) UI層、動態(tài) WEB!、業(yè)務(wù)服務(wù)層、基礎(chǔ)業(yè)務(wù)層。i.靜態(tài)UI層,直接面向用戶的操作展示界面,包括靜態(tài) UI設(shè)計(jì)和JS交互代碼,主要采用 Angulars 框架;ii.動態(tài)WEB!是

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論