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

下載本文檔

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

文檔簡(jiǎn)介

務(wù)

構(gòu)

署本文從以下個(gè)方面簡(jiǎn)說(shuō)明微服架構(gòu)項(xiàng)目的實(shí)踐經(jīng)驗(yàn):架構(gòu)選型、發(fā)測(cè)試環(huán)下的相關(guān)具支持、人員分工及發(fā)部署流、相關(guān)設(shè)及注意事項(xiàng)。最后,將根據(jù)實(shí)踐經(jīng)討論提高服架構(gòu)下開發(fā)和運(yùn)維效率的切需求,進(jìn)步理清本目所實(shí)現(xiàn)的容器服務(wù)管理平臺(tái)的完性需求。本項(xiàng)目是一企業(yè)級(jí)的器服務(wù)管平臺(tái),該平臺(tái)的功能是基于容器實(shí)的應(yīng)用運(yùn)環(huán)境管理以及應(yīng)用開發(fā)階的持續(xù)集和持續(xù)發(fā)。簡(jiǎn)單的理解該平臺(tái)的核心功能之就是管理雜應(yīng)用的發(fā)和運(yùn)維環(huán)境,提高服務(wù)架構(gòu)的開發(fā)和維效率。項(xiàng)目的開發(fā)背景如下:首先,該系具有典型布式應(yīng)用統(tǒng)特征:該平臺(tái)所運(yùn)的服務(wù)器置不高,如華為RH1288這類低配置務(wù)器,允許硬件失敗;系統(tǒng)平臺(tái)要可根據(jù)實(shí)用戶數(shù)的模進(jìn)行伸縮部署,保證硬件資源的理利用;由于系統(tǒng)平之上需要行若干企應(yīng)用的開發(fā)和運(yùn)行環(huán)境可靠性是常重要的不允許點(diǎn)失效。其次,本系功能復(fù)雜從架構(gòu)的度需要將系統(tǒng)分成多個(gè)層次和若干子系統(tǒng)。同的層次子系統(tǒng)根據(jù)具體況需要采不同的開語(yǔ)言,由不同的開發(fā)小組完成。第三,項(xiàng)目成員由幾城市的異團(tuán)隊(duì)協(xié)同開發(fā),統(tǒng)一的開發(fā)環(huán)境和同工具是不可少的針對(duì)上述項(xiàng)背景的考,本項(xiàng)目擇基于微服務(wù)架構(gòu)進(jìn)行項(xiàng)目開發(fā)。開發(fā)測(cè)試部署用到的工具集“工欲善其、必先利器”,借適合的流程和相關(guān)工具集,才能提微服務(wù)架下的應(yīng)用發(fā)效率。本項(xiàng)目用DevOPs流程并用一套相關(guān)具集實(shí)現(xiàn)用開發(fā)管,提高開發(fā)、測(cè)試、部署的效率。代碼庫(kù):本目使用分式代碼庫(kù)Gitlab它的功能不限于代碼倉(cāng)庫(kù),還包括reviews(代碼審查)issuetracking(問(wèn)跟蹤、wiki等功,是代碼理和異地隊(duì)溝通、協(xié)作工具的首選。Docker鏡像倉(cāng)庫(kù)、Docker:本項(xiàng)目用器貫穿整軟件開發(fā)程,以容作為應(yīng)用發(fā)布的載體,應(yīng)用的開發(fā)環(huán)境測(cè)試發(fā)版境都運(yùn)行Docker容中。對(duì)于復(fù)雜的開發(fā)和維環(huán)境管Docker具先天的優(yōu)勢(shì),目前內(nèi)外的互網(wǎng)公司有多數(shù)都已經(jīng)將Docker應(yīng)用到了他的開發(fā)或生產(chǎn)環(huán)境了。K8s:項(xiàng)目采Kubernates作為容器度管理的礎(chǔ)環(huán)境,發(fā)環(huán)境、測(cè)試環(huán)境的Docker容器都由K8s負(fù)責(zé)調(diào)度理。Jenkins:快速部署發(fā)布不開老牌續(xù)集成明星Jenkins,本項(xiàng)通過(guò)Jenkins任務(wù)構(gòu)代碼、將應(yīng)用打包成Docker鏡像,最終布到K8s環(huán)中將容器行起來(lái)。Shell本:編Shell腳本項(xiàng)目打分支發(fā)布應(yīng)用開發(fā)階段配置管理工作自動(dòng)化,降低運(yùn)維門檻、提高置管理和維的效率

WIKI:Gitlib上的WIKI功能對(duì)簡(jiǎn)陋,因項(xiàng)目組選作為地團(tuán)隊(duì)協(xié)和溝通的具,團(tuán)隊(duì)成員可將設(shè)計(jì)文、知識(shí)分文檔、公告信息等信息可以更新到wiki上,便協(xié)同開發(fā)禪道:為了于開發(fā)計(jì)、開發(fā)任和聯(lián)起來(lái)本項(xiàng)目使禪道進(jìn)行開發(fā)任務(wù)和bug理。人員工及發(fā)流微服務(wù)架構(gòu)用的開發(fā)部署的復(fù)度都是遠(yuǎn)大于單體式應(yīng)用的,靠運(yùn)人員手工配置管理然是難于應(yīng)付了DevOps主張自動(dòng)化任處理方式實(shí)現(xiàn)軟件交付及基礎(chǔ)設(shè)施新可以說(shuō)是服務(wù)架構(gòu)用開發(fā)和運(yùn)維必要條件本項(xiàng)目采DevOps的念的開發(fā)流程進(jìn)行開發(fā)實(shí)現(xiàn)部署運(yùn)維的自化需要工具,同時(shí)DevOps強(qiáng)調(diào)件開發(fā)與其他員工及管理層間的協(xié)作與溝通因此明確人員分工開發(fā)流程是與工同樣重要因素。通的說(shuō),就是有了工具,大家要知道么使用工,并且愿使用工具才能真正達(dá)提高研發(fā)率的目的項(xiàng)目組的主工作成員非也是做發(fā)、測(cè)試和系統(tǒng)管理三類工作,這只說(shuō)明與統(tǒng)的企業(yè)用開發(fā)過(guò)程中三人員所做工作略有同的工作內(nèi)容。開發(fā)人員:a)開發(fā)者開發(fā)設(shè)計(jì)需要將涉到接口部分設(shè)計(jì)更新到上,供調(diào)者評(píng)審和用。b)開發(fā)者了編寫程邏輯外,需要注意編寫單元測(cè)試用例,因?yàn)椴际綉?yīng)用調(diào)相對(duì)復(fù),先做在編寫單務(wù)時(shí)做好測(cè)試再聯(lián)能夠提高開發(fā)效率。c)由于本目是采用Docker容作為發(fā)布載體的,開發(fā)者可能需要改DockerFile模板的部分參數(shù)于部階段能將譯后的代打包到鏡像中對(duì)于傳統(tǒng)的開發(fā)方式是對(duì)開發(fā)額外的要。讓所有開發(fā)懂Dockerfile似乎要求有點(diǎn)高,其實(shí)每個(gè)子項(xiàng)目中的DockerFile及腳本一是在搭建目框架時(shí),要系統(tǒng)配管理員編的好的模板,若開發(fā)人員不懂相關(guān)術(shù),也可跟配置管員溝通需求,由配置理員修改關(guān)文件。測(cè)試人員:試人員的作沒(méi)有什特別,只是需要注意除了每個(gè)Sprint階段的測(cè)外,還需配合開發(fā)人員續(xù)集成的試;系統(tǒng)配置管人員:一DevOps的開發(fā)方式是賴于云基平臺(tái)以及動(dòng)化發(fā)布工具的,因此相對(duì)于傳統(tǒng)開發(fā)式,對(duì)系配置管理的技術(shù)要求會(huì)比較低。但是,我們項(xiàng)目開發(fā)的就是構(gòu)一個(gè)能支撐DevOps流的平臺(tái),開發(fā)本身不具備相應(yīng)的平臺(tái)基礎(chǔ)。因此,我項(xiàng)目最初系統(tǒng)配置理工作是由架構(gòu)師做的,主需要做如這些事:a)部署運(yùn)項(xiàng)目組開需要用到共的服務(wù)組件、例如zookeeper注中心DockerRegistry鏡像倉(cāng)庫(kù)、數(shù)據(jù)等;b)為子項(xiàng)編寫在git上打分支腳本,便于測(cè)試發(fā)版的時(shí)候打分支c)編寫各型應(yīng)用發(fā)部署成鏡的Dockerfile;

d)制作或在網(wǎng)上找現(xiàn)成的開所需環(huán)境的Docker鏡像,并Push到項(xiàng)開發(fā)使用私有鏡像庫(kù)中;e)編寫Shell腳本實(shí)將子項(xiàng)目包成Docker鏡像并且Push到鏡倉(cāng)庫(kù)中。f)在Jenkins上配置動(dòng)編譯或部署任務(wù),實(shí)現(xiàn)持續(xù)集成和部署。本文將對(duì)項(xiàng)的開發(fā)、署聯(lián)調(diào)以測(cè)試發(fā)版流程和規(guī)范做簡(jiǎn)要說(shuō)明,提供項(xiàng)目個(gè)階段使到的部分自動(dòng)化本工具示。圖1目持續(xù)成和部署流程代碼分支管:如圖所示,git上創(chuàng)建的每個(gè)項(xiàng)目都需要至少建立develop和master個(gè)分支開發(fā)人員只有權(quán)限把代碼交到develop分支上,平時(shí)持續(xù)集成聯(lián)調(diào)都從develop分支上獲取碼。每個(gè)Sprint階段測(cè)試發(fā)時(shí),配置理員從develop分支上創(chuàng)建一個(gè)于測(cè)試的release分。當(dāng)測(cè)試修改bug時(shí),開發(fā)人員只修改后的碼提交到應(yīng)的測(cè)試Release分支。當(dāng)測(cè)試版穩(wěn)定后,配置管理將代碼合并到Master支中。自部和布項(xiàng)目借助于Shell腳本Dockerfile配置文和Jenkins任務(wù)實(shí)現(xiàn)了自化的持續(xù)成和部署配置管理員項(xiàng)目目錄編寫的腳文件結(jié)構(gòu)如圖2所示。a)創(chuàng)建分的shell腳本,例見(jiàn)附件;#!/bin/bashif[-z"$1"];thencat<<EOFUsage:branch-release.sh<version>EOFexit1fiDEPLOY_VERSION=$1

RP_FILES=(subproject1/kube-rc.yamlsubproject1/pom.xmlsubproject1/Makefile)if[-z$(gitbranch-a|grep-e/${DEPLOY_VERSION}$)];then?gitcommit-a-m"CreateBranch${DEPLOY_VERSION}"gitpushorigin${DEPLOY_VERSION}b)Dockerfile示例文,將dubbo服務(wù)發(fā)為鏡像為,示例見(jiàn)件2:MAINTAINERzhangsanRUNmkdir-p/app?COPYtarget/subproject1.war/app/COPY./startup.sh/app/RUNchmod+x/app/startup.shWORKDIR/appCMD["./startup.sh"]EXPOSE8080c)Makefile文:包括編項(xiàng)目、將項(xiàng)打包成Docker鏡、將鏡像Push鏡像庫(kù)、在K8s上創(chuàng)建ReplicationController、在K8s上創(chuàng)建service的命令腳:clean:mvnclean#當(dāng)前程序打包成鏡像build:?dockerbuild-t$(IMAGE).#當(dāng)前鏡像到鏡像倉(cāng)庫(kù)push:?dockerpush$(IMAGE)

run:?redeploy:kubectlreplace-fkube-rc.yaml$(KUBE_OPS)undeploy:kubectldelete-fkube-rc.yaml$(KUBE_OPS)#建deploy-svc:kubectlcreate-fkube-svc.yaml$(KUBE_OPS)undeploy-svc:kubectldelete-fkube-svc.yaml$(KUBE_OPS)d)K8s部署配置文,創(chuàng)建ReplicationController創(chuàng)建service示例附件4:#創(chuàng)建ServiceapiVersion:v1kind:Servicemetadata:name:subproject1labels:component:subproject1spec:ports:-port:8888nodePort:16888selector:name:svc-subproject1type:NodePore)配置管員在Jenkins上配置動(dòng)或手觸發(fā)的任務(wù),在jenkins任務(wù)中配shell腳本可實(shí)現(xiàn)應(yīng)用的一部署,示見(jiàn)附件5。

具體的過(guò)程如下:i.從上拉取代,編譯、發(fā)布項(xiàng)目;ii.編譯好的程序包,打包成Docker鏡像;iii.將包好的Docker鏡像Push鏡像庫(kù);iv.Jenkins執(zhí)行Shell腳命令,從像倉(cāng)庫(kù)拉鏡像在環(huán)境中建pod和RC,將應(yīng)程序及其運(yùn)行環(huán)境在的容器K8s平臺(tái)上運(yùn)行來(lái)。測(cè)與版從圖中可以到,項(xiàng)目開發(fā)環(huán)境測(cè)試環(huán)境是相互隔離的兩套環(huán)境。a)部署在發(fā)環(huán)境的用代碼,自develop分支對(duì)應(yīng)的Docker鏡像Tag用latest,供開發(fā)人員調(diào)試、以及試人員隨協(xié)助做集測(cè)試;b)部署在是環(huán)境的用代碼,自每到一個(gè)Sprint階發(fā)版測(cè)試配置管理從develop分支中打出的測(cè)試版分支,支名對(duì)應(yīng)版本號(hào)不同,相應(yīng)的Docker鏡像的tag也會(huì)隨版本號(hào)變。測(cè)試環(huán)境中部署應(yīng)用主要于測(cè)試驗(yàn)。部聯(lián):項(xiàng)目分為四:前端層若干個(gè)web應(yīng)用Service層包括若干個(gè)布式服務(wù)基礎(chǔ)底層這里簡(jiǎn)要說(shuō)一下各層間的調(diào)試式:a)前端和Web聯(lián)調(diào):前端開發(fā)人員本啟動(dòng)一個(gè)Nginx配置nginx.conf文件將localhost代理指向webserver的址,即可本地調(diào)試與動(dòng)態(tài)Web端的交互b)WEB層與服務(wù)層調(diào)、服務(wù)之間聯(lián)調(diào)、服務(wù)層與基礎(chǔ)層聯(lián)調(diào),分為兩種方:本地調(diào)試:署一個(gè)專的zookeeper注冊(cè)中心,發(fā)者可以把本機(jī)地址注到注冊(cè)中,供相關(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ì)關(guān)于微服架的利弊以設(shè)計(jì)原則很多著名的文章有介紹,例如MarinFowler的博文《Microservices:adefinitionofthisnewarchitectural》和來(lái)自DZonecommunity社的《MicroservicesinPractice:FromArchitecturetoDeployment》在InfoQ技術(shù)網(wǎng)站有中文翻,

本文就不對(duì)念和設(shè)計(jì)則做過(guò)多述。本小節(jié)主要是說(shuō)明關(guān)于項(xiàng)目的輯分層結(jié)和服務(wù)交方面的設(shè)計(jì)。本項(xiàng)目遵守下微服務(wù)構(gòu)的主要本原則,但是也會(huì)根據(jù)具體項(xiàng)目情有所保留i.單一責(zé)原則(SingleResponsibilityPrinciple,SRP)ii.證微服務(wù)設(shè)計(jì)能支持服務(wù)的敏捷/獨(dú)立開發(fā)和部署。圖2層結(jié)構(gòu)通信機(jī)制架構(gòu)層設(shè)如圖2示,項(xiàng)的架構(gòu)是為四層:靜態(tài)UI層、動(dòng)態(tài)、業(yè)務(wù)務(wù)層、基業(yè)務(wù)層。i.靜態(tài)UI層直接面用戶的操作示界面,括靜態(tài)設(shè)計(jì)和互代,主要采用Angulars框架;ii.動(dòng)WEB是各務(wù)

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論