DevOps架構(gòu)實(shí)踐案例_第1頁(yè)
DevOps架構(gòu)實(shí)踐案例_第2頁(yè)
DevOps架構(gòu)實(shí)踐案例_第3頁(yè)
DevOps架構(gòu)實(shí)踐案例_第4頁(yè)
DevOps架構(gòu)實(shí)踐案例_第5頁(yè)
已閱讀5頁(yè),還剩11頁(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)介

1、DevOps架構(gòu)實(shí)踐案例最近幾年DevOps的概念越來(lái)越火,各個(gè)企業(yè)也逐漸意識(shí)到DevOps對(duì)項(xiàng)目研發(fā)效率的重要性,也有不少第三方企業(yè)提供整套流程成熟的解決方案。而我們僥幸,在這些第三方平臺(tái)尚未崛起時(shí),制定了一套適合自己的DevOps流程。背景先說(shuō)下背景,我們公司做的大概可以理解成SaaS服務(wù),即從服務(wù)器硬件到系統(tǒng)環(huán)境到服務(wù)都?xì)w我們管。而且每家客戶都有很多個(gè)性化的需求,在我接手重構(gòu)前,我們平均半個(gè)月才能接入一家,經(jīng)過(guò)我們幾個(gè)月的改造,我們現(xiàn)在可以接入一家客戶大概可以控制在1人天。之前,我們開發(fā)流程比較混亂,沒(méi)有文檔,沒(méi)有各種開發(fā)流程,現(xiàn)在我們逐漸規(guī)范,形成穩(wěn)定的流程和體系。Java項(xiàng)目改造下面

2、我們聊聊Java項(xiàng)目,我們把一個(gè)Git庫(kù)中的2個(gè)項(xiàng)目(接口、后臺(tái)管理)進(jìn)行拆分:1 .接口服務(wù)2 .后臺(tái)服務(wù)3 .html5包4 .公共包服務(wù)我們主要做了前后端分離,代碼Git庫(kù)分支化管理(事實(shí)上大部分小公司都可以這么拆分),我們采用和其他公司不同的方式,定義公共版為主分支,為每個(gè)客戶建立1個(gè)額外分支(事實(shí)上分為開發(fā)分支、集成分支),發(fā)現(xiàn)公版的bug,到主分支改,改完后合并到各個(gè)分支,這樣就不必重復(fù)切換到每個(gè)客戶項(xiàng)目中改bug。Jenkins使用Jenkins編譯,包含我們Java項(xiàng)目、H5項(xiàng)目、安卓項(xiàng)目、iOS項(xiàng)目。開發(fā)人員只需要本地調(diào)試后,提交代碼到Git庫(kù)的某個(gè)項(xiàng)目分支上,由Jenkin

3、s自動(dòng)編譯。如果編譯錯(cuò)誤會(huì)通過(guò)郵件反饋到影響代碼的開發(fā)人員郵箱中,另外測(cè)試人員一鍵部署后,測(cè)試出問(wèn)題,也可以通過(guò)Jira提單給開發(fā)人員。開發(fā)人員收到后,繼續(xù)提交代碼,不再像我們之前,必須通知開發(fā)人員,開發(fā)人員本地打包。流程如下:嬉學(xué)昭苦中唐c同過(guò)一幫那下鼻點(diǎn)用我JOnkn6«iI這里我們做了一點(diǎn)偷懶,我們版本號(hào)的維護(hù)也交給了Jenkins,通過(guò)腳本由Jenkins自動(dòng)增加版本號(hào)。我們還將所有項(xiàng)目中狀態(tài)抽取出來(lái),做成無(wú)狀態(tài)項(xiàng)目(大部分公司都是這么做的,尤其之前聽(tīng)阿里分享,他們做到自動(dòng)識(shí)別環(huán)境),這樣,測(cè)試環(huán)境、生成環(huán)境的war包都是相同的。自動(dòng)化部署然后我們做了一個(gè)自動(dòng)化部署的小平臺(tái),

4、主要功能如下:1 .升級(jí)、顯示當(dāng)前版本2 .對(duì)war包有效期,真實(shí)性校驗(yàn)3 .開發(fā)人員將公共SQL放入公共.sql里4 .各個(gè)客戶定制化需求的SQL放入各個(gè)客戶.sql里項(xiàng)目經(jīng)理升級(jí)時(shí),自動(dòng)提示未執(zhí)行的SQL,點(diǎn)擊執(zhí)行即可??蛻舳私酉聛?lái),我們聊客戶端:客戶端內(nèi)容不多,我們有安卓、IOS客戶端,也是經(jīng)過(guò)一輪無(wú)狀態(tài)抽取,然后抽取服務(wù)器地址,配置后,由Jenkins自動(dòng)打包,同時(shí)打包測(cè)試環(huán)境包、生成環(huán)境包。號(hào)Jenkins219sJutMei.Srankm2注血L用了M也-1,:,-7七塞死左0卡"W;上®泳a聚器聞J。122匚則-圣*M.Utw4#4就Q3際切中Ifll1*-0

5、41月W3-t5*nniwL睡*Jvww?5任=*%lrjSlrteCa上發(fā)短上次務(wù)蛔時(shí)口月5力普7汩1討行情mdM4dJK110H幅的&)Kt小處稹6無(wú)與滬電,£)1Mtdw里litwfr也l月OojflystSXJW篤)aq1rtiz齒R-H/即&)2月r/*口-i1ii疝粒由口月&巾,71中情曲1U1由叟”和。夫12利無(wú)79視&1,決的版本號(hào),然后進(jìn)入OSS存項(xiàng)目。J口加,.z>44j-#5£*amkwi,-|4r-viejenkiniBTT測(cè)試組測(cè)試人員從Jira提單后,開發(fā)人員解決后,會(huì)看到具體解儲(chǔ),安裝Android程序,或

6、者IOS程序,一鍵部署Java因?yàn)榘沧亢虸OS均是同時(shí)發(fā)2個(gè)包,Java項(xiàng)目、H5項(xiàng)目無(wú)狀態(tài),所以生產(chǎn)環(huán)境和測(cè)試環(huán)境都可快速部署測(cè)試。A二汗14、事忘庫(kù)JunTilt?mJ-!i.前HTf君七3M7.冷!I?aMTIII口事躺鼻十Kir02試空-11u己口1;四尸!1=:MMH.幅巾ETT;17I甲中8ElMlE"建)口運(yùn)維組運(yùn)維組重構(gòu)先看看之前的圖:warE4MLQCiWbimall.OtT,數(shù)眼博藥HlT.MgjIsMNrZt:蘆warNAK第;中,;.肘gFE'什七九叫他lEMlBi'i.rJcalftlir.因?yàn)楦鱾€(gè)時(shí)期部署的系統(tǒng)版本以及服務(wù)器型號(hào)等都不通,所

7、以線上環(huán)境比較混亂。我們采用Docker容器統(tǒng)一方案解決此問(wèn)題,使得每個(gè)客戶機(jī)器環(huán)境均相同。我知道在座的各位都是Docker大神,我就不多講了??纯次覀儸F(xiàn)在的管理圖:cm滬通過(guò)TL9送證明,母朋以娓口連挎.置生譽(yù)£岳南翼01第用于春IT通僖應(yīng)用梅序之何員保,塞性和SUB變餐忖4X:由兩丁可成TIS胃星肉E培口其3dlH1TIS毛于伊匕我們用的是Portainer框架,簡(jiǎn)單二次開發(fā)了一點(diǎn)功能。我們用了TLS認(rèn)證,所以,管理者并不是通過(guò)Linux密碼控制,而是通過(guò)配置平臺(tái),然后分配權(quán)限給各個(gè)項(xiàng)目經(jīng)理所在的team中,然后,項(xiàng)目經(jīng)理對(duì)team成員權(quán)限進(jìn)行管理分配。該方案優(yōu)點(diǎn):在Docker

8、下,所有客戶生產(chǎn)環(huán)境相同。易于備份、遷移、恢復(fù)??山ǜ呖捎铆h(huán)境,發(fā)包時(shí)采用灰度發(fā)包,藍(lán)綠部署不中斷服務(wù)??芍С謴椥陨炜s設(shè)計(jì),支持?jǐn)U展。支持負(fù)載均衡,域名轉(zhuǎn)發(fā),意外切換容器等。有利于轉(zhuǎn)型微服務(wù)架構(gòu)??焖俅罱ōh(huán)境而建立Docker集群需要我們自動(dòng)化完成,這里我采用了Ansible工具來(lái)實(shí)施,我們可通過(guò)指令分發(fā),指令獲取所有機(jī)器某個(gè)包的版本,執(zhí)行不同的代碼。這里我建立了各種倉(cāng)庫(kù),方便Java開發(fā),建立了一個(gè)私有倉(cāng)庫(kù),一個(gè)Maven官方代理倉(cāng)庫(kù),一個(gè)阿里云代理倉(cāng)庫(kù);Docker上我為了方便開發(fā)打包其他環(huán)境,創(chuàng)建了Docker私有倉(cāng)庫(kù);還有一些為了解決統(tǒng)一管理Linux服務(wù)器而創(chuàng)建npm倉(cāng)庫(kù);以及安卓所

9、要使用的Gradle私有倉(cāng)庫(kù);未來(lái),我們可能還會(huì)創(chuàng)建更多倉(cāng)庫(kù),能支持的倉(cāng)庫(kù)列表都在下面:FormalAge253.Knpn壯3。mndgreaterincludingstopsupportDocker'3.0andgreaterWuGet30前i口greaterSitePaiA由3.0andgreaterMaven1ciMwen2曲31andgreaterNote30russingadvancetireatures)qmGemG曲3.0.2andgreater.'30andgreaterPyPtD,7302andgreaterP2:1OBR的vbm鞋本及賓后的倉(cāng)庫(kù)大數(shù)據(jù)篇大數(shù)據(jù)

10、一直以來(lái)是很多公司核心產(chǎn)品,對(duì)于小公司,如何低成本實(shí)施呢,我研究了一套強(qiáng)大的大數(shù)據(jù)框架Superset,并對(duì)其做了部分的二次開發(fā)。他能實(shí)現(xiàn)各種大數(shù)據(jù)圖表展示,如下圖:Name匚隊(duì)疝umtiMGenders附Stale4:wjO&FJ1:MJTrend-BThom”制ItgEWOK.今心|S和"IFlJIEJogOilUk«,“JEWKflAmjndl-MdWAi*WW外*/amwphMichifliauch-cHa:*即.皿箱Ik陶煙HF3加Anrhar>篦月X田Kfifhar24.kCtT.EtGpie-5S.9ke«n,l0島nil31.1k更以

11、皿甘m艮總小依347kjaw打昨Jen1M54.4k鈣胃wJt麗M*Joseph?l.4k曲hj總JttMMvifiir.ik船型"4UkY加8,RHldid«saQk*Sfl-ah我們采用iframe的形式將部分功能加入到我們管理后臺(tái)&妾篇我們采用了RESTful風(fēng)格的API,也許很多人說(shuō)RESTful不是很簡(jiǎn)單,10分鐘上手,30分鐘精通,事實(shí)上絕對(duì)比這要復(fù)雜的多。有很多的細(xì)節(jié),很多的約束,經(jīng)過(guò)幾個(gè)月的協(xié)調(diào)開發(fā)后,都未必能避免出現(xiàn)不太和諧的接口。之前,我們項(xiàng)目,各種接口文檔都存在,主要有一下:Swagger阿里的RAPWord文檔其它對(duì)了,之前的接口是這樣的:

12、7A項(xiàng)目/模塊1/getProducts-接口 7A項(xiàng)目/模塊1/Products.html-頁(yè)面 7A項(xiàng)目/模塊1/Products.js一靜態(tài)資源留下了很多的坑,這里不對(duì)RESTful再做詳細(xì)介紹,有興趣,大家可以自己了解下。我們統(tǒng)一了一個(gè)接口文檔為postman,可能很多朋友會(huì)說(shuō)postman怎么能作為接口文檔,我只想說(shuō),他適合小公司,不僅有入?yún)?、出參示例(可以多個(gè)例子),還能在tests里寫接口說(shuō)明,也方便前端調(diào)試,調(diào)用服務(wù)器使用。規(guī)范篇我們制定了一些規(guī)范和約束,比如,原來(lái)項(xiàng)目經(jīng)理發(fā)現(xiàn)問(wèn)題,會(huì)立馬找開發(fā),現(xiàn)在規(guī)定為先聯(lián)系測(cè)試,由測(cè)試提單給開發(fā)。Q&AQ:請(qǐng)問(wèn)Portainer僅

13、用于測(cè)試環(huán)境還是在生產(chǎn)也用這一套?A;因?yàn)镻ortainer是直接通過(guò)dockerapi執(zhí)行的,并沒(méi)有在服務(wù)器上裝有什么客戶端(也就是無(wú)侵入,這也是我們選用他的原因),我們只是在Docker里面配置了個(gè)http的TLS證書,加上我們對(duì)它做了一些改造,所以我們使用了Portainer應(yīng)用生產(chǎn)環(huán)境。Q:請(qǐng)問(wèn)下測(cè)試的時(shí)候接口模擬您這邊是如何處理的?A:Ostman默認(rèn)錄入了幾個(gè)多種情況下的出參,其次,我們前端每個(gè)人都有一套獨(dú)立環(huán)境,通過(guò)Web端管理部署(數(shù)據(jù)庫(kù)和測(cè)試人員共用),不會(huì)受后臺(tái)開發(fā)人員對(duì)接口修改而中斷服務(wù)。其次我們有少量前端頁(yè)面使用了mock.jsQ:請(qǐng)問(wèn)Docker里跑Java應(yīng)用性能怎

14、么調(diào)優(yōu),默認(rèn)是共享資源池,對(duì)Java來(lái)說(shuō)CPU切換很費(fèi)性能,除了綁定CPU,但這樣就沒(méi)有彈性之說(shuō),麻煩說(shuō)下?A:這個(gè)性能,我們對(duì)Java項(xiàng)目進(jìn)行多次內(nèi)存優(yōu)化,通過(guò)ide的內(nèi)存管理,線程查看等多重方法進(jìn)行調(diào)優(yōu),單從war包體積上我們就縮小了60%,內(nèi)存也下調(diào)很多。我們并不能自動(dòng)伸縮,目前是通過(guò)Nginx配置多容器來(lái)實(shí)現(xiàn)負(fù)載均衡。Q:如何實(shí)現(xiàn)分布式事務(wù)?如何保證數(shù)據(jù)一致性?A:我們?cè)贜ginx層通過(guò)策略保證同一個(gè)機(jī)器請(qǐng)求只會(huì)分布到一臺(tái)機(jī)器上,用最少代價(jià)解決這個(gè)問(wèn)題,其次我們項(xiàng)目中,大部分都使用全局uuid操作和插庫(kù)。Q:貴司的業(yè)務(wù)模式跟我們很像,感覺(jué)很受用。想問(wèn)下,多客戶、多版本共存的情況下,版本升級(jí)這塊兒是怎么做的?A:我們使用的是Git分支化管理,由Jenkins定義版本號(hào),SQL分為公共和私有的部分,比如某個(gè)客戶升級(jí)2.0.0版本,會(huì)自動(dòng)檢測(cè)上個(gè)版本到此時(shí)的SQL語(yǔ)句,提示項(xiàng)目經(jīng)理點(diǎn)擊,自動(dòng)執(zhí)行。(我們現(xiàn)在回滾項(xiàng)目版本,不支持SQL回滾,所以我們SQL一般只增不減、不改),我們可以隨時(shí)查看某客戶線上版本和SQL執(zhí)行到什么地方。Q:日志如何存儲(chǔ)和分析?用什么工具?系統(tǒng)異常如何監(jiān)控?A:先說(shuō)說(shuō)異常如何檢測(cè)吧,我們做了一套http監(jiān)控框架,以任務(wù)的形式添加,然后會(huì)對(duì)已配置的線上環(huán)境、多容器進(jìn)行監(jiān)控,比如任務(wù)為執(zhí)行時(shí)間及頻率,然后配置項(xiàng)

溫馨提示

  • 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)論