DevOps架構(gòu)實踐案例_第1頁
DevOps架構(gòu)實踐案例_第2頁
DevOps架構(gòu)實踐案例_第3頁
DevOps架構(gòu)實踐案例_第4頁
DevOps架構(gòu)實踐案例_第5頁
已閱讀5頁,還剩11頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

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

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

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

4、主要功能如下:1 .升級、顯示當前版本2 .對war包有效期,真實性校驗3 .開發(fā)人員將公共SQL放入公共.sql里4 .各個客戶定制化需求的SQL放入各個客戶.sql里項目經(jīng)理升級時,自動提示未執(zhí)行的SQL,點擊執(zhí)行即可??蛻舳私酉聛?,我們聊客戶端:客戶端內(nèi)容不多,我們有安卓、IOS客戶端,也是經(jīng)過一輪無狀態(tài)抽取,然后抽取服務(wù)器地址,配置后,由Jenkins自動打包,同時打包測試環(huán)境包、生成環(huán)境包。號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ù)蛔時口月5力普7汩1討行情mdM4dJK110H幅的&)Kt小處稹6無與滬電,£)1Mtdw里litwfr也l月OojflystSXJW篤)aq1rtiz齒R-H/即&)2月r/*口-i1ii疝粒由口月&巾,71中情曲1U1由叟”和。夫12利無79視&1,決的版本號,然后進入OSS存項目。J口加,.z>44j-#5£*amkwi,-|4r-viejenkiniBTT測試組測試人員從Jira提單后,開發(fā)人員解決后,會看到具體解儲,安裝Android程序,或

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

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

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

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

10、一直以來是很多公司核心產(chǎn)品,對于小公司,如何低成本實施呢,我研究了一套強大的大數(shù)據(jù)框架Superset,并對其做了部分的二次開發(fā)。他能實現(xiàn)各種大數(shù)據(jù)圖表展示,如下圖:Name匚隊疝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的形式將部分功能加入到我們管理后臺&妾篇我們采用了RESTful風格的API,也許很多人說RESTful不是很簡單,10分鐘上手,30分鐘精通,事實上絕對比這要復(fù)雜的多。有很多的細節(jié),很多的約束,經(jīng)過幾個月的協(xié)調(diào)開發(fā)后,都未必能避免出現(xiàn)不太和諧的接口。之前,我們項目,各種接口文檔都存在,主要有一下:Swagger阿里的RAPWord文檔其它對了,之前的接口是這樣的:

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

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

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

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論