Devops系統(tǒng)自動(dòng)部署技術(shù)方案_第1頁(yè)
Devops系統(tǒng)自動(dòng)部署技術(shù)方案_第2頁(yè)
Devops系統(tǒng)自動(dòng)部署技術(shù)方案_第3頁(yè)
Devops系統(tǒng)自動(dòng)部署技術(shù)方案_第4頁(yè)
Devops系統(tǒng)自動(dòng)部署技術(shù)方案_第5頁(yè)
已閱讀5頁(yè),還剩24頁(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)介

DevOps系統(tǒng)自動(dòng)部署項(xiàng)目技術(shù)方案目錄TOC\o"1-5"\h\z\o"CurrentDocument"項(xiàng)目概述 3\o"CurrentDocument"項(xiàng)目背景 3\o"CurrentDocument"項(xiàng)目現(xiàn)狀 4\o"CurrentDocument"項(xiàng)目目標(biāo) 6\o"CurrentDocument"提高測(cè)試和部署的自動(dòng)化水平 6\o"CurrentDocument"集中管理應(yīng)用部署包 6\o"CurrentDocument"快速分享提交物 6\o"CurrentDocument"代碼管理規(guī)范化 7\o"CurrentDocument"自動(dòng)構(gòu)建 7\o"CurrentDocument"方案設(shè)計(jì)原則 8\o"CurrentDocument"技術(shù)方案 10\o"CurrentDocument"業(yè)務(wù)架構(gòu) 10技術(shù)架構(gòu) 12\o"CurrentDocument"數(shù)據(jù)架構(gòu) 14\o"CurrentDocument"集成架構(gòu) 16\o"CurrentDocument"解決方案 17\o"CurrentDocument"總體方案 17\o"CurrentDocument"配置管理 18\o"CurrentDocument"持續(xù)集成 19\o"CurrentDocument"持續(xù)交付 20\o"CurrentDocument"控制臺(tái) 21\o"CurrentDocument"部署方案 22\o"CurrentDocument"非功能性設(shè)計(jì) 24\o"CurrentDocument"性能 24\o"CurrentDocument"可靠性 26\o"CurrentDocument"可用性 27\o"CurrentDocument"可擴(kuò)展性 27\o"CurrentDocument"可維護(hù)性 28\o"CurrentDocument"安全性 29項(xiàng)目概述企業(yè)級(jí)的配置管理和自動(dòng)部署平臺(tái),從配置管理,構(gòu)建管理等角度對(duì)軟件開發(fā)中的各個(gè)細(xì)節(jié)進(jìn)行改進(jìn)和能力加強(qiáng);集中有序管理應(yīng)用代碼和版本,確保資產(chǎn)自主可控,最大限度地保證資產(chǎn)可復(fù)用性。運(yùn)用自動(dòng)化工具,從部署包、部署環(huán)境、部署流程以及部署執(zhí)行四個(gè)維度,提升應(yīng)用軟件系統(tǒng)部署的自動(dòng)化水平,降低部署過(guò)程中的出錯(cuò)率、返工率,進(jìn)而提高軟件交付的效率和質(zhì)量。基于該平臺(tái)的研究和運(yùn)用,以盡可能短的周期,高效可靠地構(gòu)建、測(cè)試、發(fā)布應(yīng)用軟件。從而,為業(yè)務(wù)發(fā)展提供強(qiáng)有力的支撐,并從IT發(fā)展自身角度建立扎實(shí)的基礎(chǔ)。項(xiàng)目背景談到企業(yè)IT,就沒有辦法回避兩種迥然不同的企業(yè),一種是以傳統(tǒng)制造業(yè)或者服務(wù)業(yè)為基礎(chǔ)的,對(duì)生產(chǎn)資料進(jìn)行加工的「?jìng)鹘y(tǒng)企業(yè)」;另一種是以「信息互聯(lián)」為基礎(chǔ)的,對(duì)「人與人關(guān)系、人與物關(guān)系、物與物關(guān)系」進(jìn)行信息加工的「互聯(lián)網(wǎng)企業(yè)」。這兩類,是兩類極端的企業(yè),一類企業(yè)的日常運(yùn)行,可以沒有信息系統(tǒng);另一類企業(yè),完全離不開信息系統(tǒng)。一般的信息系統(tǒng),對(duì)于企業(yè)的價(jià)值,主要有三類漸進(jìn)過(guò)度的典型類型。第一類,是將信息系統(tǒng)定位于「輔助和支撐」企業(yè)的產(chǎn)品制造以及企業(yè)運(yùn)營(yíng)部門,因?yàn)檫@類企業(yè)的生產(chǎn)資料系、生產(chǎn)力、生產(chǎn)關(guān),都以實(shí)體制造為主,不以信息加工和處理作為企業(yè)產(chǎn)品核心。第二類,是將信息系統(tǒng)作為數(shù)據(jù)加工、傳輸作為主體,但業(yè)務(wù)模式來(lái)自于傳統(tǒng)行業(yè),信息系統(tǒng)主要完成已有業(yè)務(wù)規(guī)則的虛擬化,例如金融、電信行業(yè)。這類企業(yè)的信息或者數(shù)據(jù),主要來(lái)自于業(yè)務(wù)受理,或者說(shuō)數(shù)據(jù)的生產(chǎn)者和使用者是企業(yè)自身。第三類,是將信息系統(tǒng)作為企業(yè)唯一生產(chǎn)工具,并將企業(yè)的客戶(個(gè)人或企業(yè))所自發(fā)貢獻(xiàn)的信息、數(shù)據(jù),作為生產(chǎn)資料,形成新興的業(yè)務(wù)模式。這里企業(yè)的典型,就是互聯(lián)網(wǎng)企業(yè)。隨著又一輪「互聯(lián)網(wǎng)+」的概念席卷而來(lái),非互聯(lián)網(wǎng)企業(yè)所面臨的更多針對(duì)用戶和客戶的思考和探索,都需要有更快交付能力的信息系統(tǒng)進(jìn)行支撐,這也是傳統(tǒng)企業(yè)互聯(lián)網(wǎng)化,打開企業(yè)邊界圍欄需要邁出的第一步。隨著云計(jì)算、容器/Docker、微服務(wù)、敏捷等相關(guān)概念和實(shí)施的成熟發(fā)展,DevOps已經(jīng)基本成為互聯(lián)網(wǎng)企業(yè)的標(biāo)準(zhǔn)配置,在DevOps的概念被炒熱之前,眾多互聯(lián)網(wǎng)公司其實(shí)已經(jīng)實(shí)踐了DevOps。其中的原因也正是因?yàn)樾畔⑾到y(tǒng),是這些公司的生產(chǎn)工具,沒有人比互聯(lián)網(wǎng)公司的人更明白提高自身的辦公效率,提高團(tuán)隊(duì)、企業(yè)的生產(chǎn)力,就是為提高企業(yè)產(chǎn)品的生產(chǎn)力進(jìn)行有效的保障。DevOps的核心價(jià)值,是能夠幫助企業(yè)快速交付變更,以便于快速響應(yīng)企業(yè)對(duì)于市場(chǎng)的變化、用戶的需求。包括7個(gè)主要過(guò)程:代碼、構(gòu)建、測(cè)試、打包、發(fā)布、配置、監(jiān)控。相比傳統(tǒng)企業(yè)尤其是制造業(yè)的產(chǎn)品制造工藝和制造流程,軟件產(chǎn)品的制造,IT服務(wù)的交付,更多的是交付一些無(wú)形的軟件產(chǎn)品和知識(shí)工作。正因?yàn)檫@些無(wú)形產(chǎn)品受制于不同的人認(rèn)知所產(chǎn)生的多變,其管理復(fù)雜度遠(yuǎn)比制造業(yè)來(lái)的復(fù)雜,企業(yè)軟件的設(shè)計(jì)、開發(fā)、發(fā)布、上線,缺乏標(biāo)準(zhǔn)化的管理過(guò)程。對(duì)于如今的非互聯(lián)網(wǎng)企業(yè)而言,能夠快速見效的DevOps實(shí)踐,應(yīng)當(dāng)從(環(huán)境)配置的管理,以及自動(dòng)化部署。在實(shí)施難度上,配置的管理要低于自動(dòng)化部署。因?yàn)榉腔ヂ?lián)網(wǎng)企業(yè)的技術(shù)路線由于供應(yīng)商的競(jìng)爭(zhēng)(甚至是惡意競(jìng)爭(zhēng)),變得極其多樣,架構(gòu)離散化程度也很高。對(duì)比互聯(lián)網(wǎng)企業(yè),(環(huán)境)配置管理和自動(dòng)化部署,由于IT技術(shù)從硬件到虛擬化/容器的自主可控,企業(yè)整體技術(shù)架構(gòu)的收斂性就比較理想。項(xiàng)目現(xiàn)狀目前企業(yè)級(jí)的配置管理和自動(dòng)化部署系統(tǒng)還處于建設(shè)初期,大部份企業(yè)都面臨著幾大問(wèn)題,包括缺乏統(tǒng)一的研發(fā)管理平臺(tái)、項(xiàng)目管理有待規(guī)范化、配置和版本管理混亂、缺乏應(yīng)用部署環(huán)境資源管理、手工操作導(dǎo)致低效率和高出錯(cuò)率。缺乏統(tǒng)一的研發(fā)管理平臺(tái)自主開發(fā)和外包開發(fā)的項(xiàng)目眾多,工具繁雜而不統(tǒng)一,各種工具往往只解決某一個(gè)點(diǎn)上的問(wèn)題,例如配置管理,缺陷管理,計(jì)劃任務(wù)管理,構(gòu)建管理等。部分研發(fā)環(huán)節(jié)使用開源工具或非專業(yè)化工具,工具間缺乏集成性,數(shù)據(jù)無(wú)法連通,不同項(xiàng)目所使用的工具都存在差異,項(xiàng)目資產(chǎn)數(shù)據(jù)也分散在這些工具當(dāng)中,無(wú)法有效加以利用,并大大增加了管理難度?,F(xiàn)有的RTC,CQ等工具,使用量較少,并且沒有整合為一個(gè)平臺(tái)。例如RTC只用于個(gè)別項(xiàng)目的構(gòu)建管理,CQ用于需求提出和故障流程管理。這些環(huán)節(jié)之間是斷裂的,沒有連通起來(lái)構(gòu)成清晰的研發(fā)生命周期鏈條。項(xiàng)目管理有待規(guī)范化目前的研發(fā)項(xiàng)目管理處于較為粗放,落后的狀態(tài)。既定的項(xiàng)目流程規(guī)定在各個(gè)項(xiàng)目當(dāng)中并未很好地落實(shí)和執(zhí)行,往往憑借項(xiàng)目經(jīng)理的經(jīng)驗(yàn)和習(xí)慣進(jìn)行管理。信息匯總通過(guò)會(huì)議和文檔進(jìn)行,溝通傳達(dá)通過(guò)郵件和口頭等方式。流程僅僅落在紙面上并由手工監(jiān)督執(zhí)行,這種管理方式顯然與我行建設(shè)先進(jìn)高效的研發(fā)管理理念不符。配置和版本管理混亂現(xiàn)有代碼分散在開發(fā)商自有的版本管理系統(tǒng),對(duì)代碼缺乏集中、有序的管理和維護(hù)。缺乏應(yīng)用部署環(huán)境資源管理缺乏集中、規(guī)范并易于訪問(wèn)的軟件發(fā)布包存儲(chǔ)庫(kù)。當(dāng)前很多軟件包的存儲(chǔ)基于簡(jiǎn)單文件系統(tǒng),這種存儲(chǔ)方式不便于被不同應(yīng)用環(huán)境的部署人員快速訪問(wèn)。手工操作導(dǎo)致低效率和高出錯(cuò)率采用手工操作界面或運(yùn)行構(gòu)建腳本形成發(fā)布包,手工記錄和溝通每個(gè)環(huán)境所部署的應(yīng)用版本,系統(tǒng)測(cè)試、用戶驗(yàn)收測(cè)試、準(zhǔn)生產(chǎn)、生產(chǎn)環(huán)境的應(yīng)用部署基于手工操作(包括手工修改參數(shù)文件、手工執(zhí)行部署命令)。在手工部署,通常手工操作包括把發(fā)布包拷貝到目標(biāo)機(jī)器,根據(jù)部署環(huán)境的差異對(duì)客戶化發(fā)布包,然后執(zhí)行部署命令,最后對(duì)部署結(jié)果進(jìn)行驗(yàn)證。部署相關(guān)流程基于手工進(jìn)行溝通,溝通成本高,效率低:比如應(yīng)用在測(cè)試環(huán)境部署完成后,需要通過(guò)郵件或電話通知測(cè)試人員;在部署生產(chǎn)環(huán)境前,需要人工完成審批。項(xiàng)目目標(biāo)配置管理和自動(dòng)部署平臺(tái)從配置管理、構(gòu)建管理等角度對(duì)軟件開發(fā)中的各個(gè)細(xì)節(jié)進(jìn)行改進(jìn)和加強(qiáng),并持續(xù)提升應(yīng)用系統(tǒng)部署的自動(dòng)化水平和效率,從而快速響應(yīng)業(yè)務(wù)需求,本項(xiàng)目的主要目標(biāo)包括:提高測(cè)試和部署的自動(dòng)化水平作為發(fā)布人員,能制定跨環(huán)境、跨版本重用的標(biāo)準(zhǔn)化部署流程;作為部署人員,查看不同環(huán)境下部署的應(yīng)用組件版本和部署日志,發(fā)起特定環(huán)境、特定流程和特定版本的部署請(qǐng)求。集中管理應(yīng)用部署包作為發(fā)布人員,能管理發(fā)布包版本和版本文件,定義版本類型(增量或全量)和狀態(tài),有效的集中管理應(yīng)用部署包。作為部署人員,能管理被部署服務(wù)器并關(guān)聯(lián)需要部署的應(yīng)用組件,獲得已部署的應(yīng)用組件版本信息??焖俜窒硖峤晃镒鳛轫?xiàng)目成員,能快速獲得和分享項(xiàng)目提交物,并能存儲(chǔ)和獲得修改歷史。代碼管理規(guī)范化作為開發(fā)人員,能獲得所承擔(dān)的工作項(xiàng),完成相應(yīng)的代碼修改,提交新文件版本并自動(dòng)關(guān)聯(lián)工作項(xiàng)。自動(dòng)構(gòu)建作為發(fā)布人員,能運(yùn)行自動(dòng)構(gòu)建,把發(fā)布包自動(dòng)導(dǎo)入軟件部署工具,并觸發(fā)測(cè)試環(huán)境的自動(dòng)部署。方案設(shè)計(jì)原則1.實(shí)用性原則在需求分析的基礎(chǔ)上設(shè)計(jì)系統(tǒng),確保系統(tǒng)滿足需求;努力設(shè)計(jì)簡(jiǎn)單、方便、友好的用戶界面,使用戶易于理解、易學(xué)、易操作,保證系統(tǒng)發(fā)揮應(yīng)有功效;充分考慮已有資源(軟硬件設(shè)備及數(shù)據(jù))的合理利用,與現(xiàn)有系統(tǒng)的兼容性,最大限度的保護(hù)現(xiàn)有設(shè)備的投資,實(shí)現(xiàn)系統(tǒng)操作上的一貫性;設(shè)計(jì)時(shí)考慮好新舊系統(tǒng)平穩(wěn)過(guò)渡問(wèn)題,避免出現(xiàn)不必要的浪費(fèi);2.先進(jìn)性原則系統(tǒng)構(gòu)造采用先進(jìn)的B/S架構(gòu),簡(jiǎn)化客戶端的支持工作;系統(tǒng)實(shí)現(xiàn)采用先進(jìn)的云計(jì)算技術(shù)、容器技術(shù)、微服務(wù)架構(gòu)技術(shù);應(yīng)用軟件開發(fā)采用先進(jìn)的軟件工程方法,確保軟件質(zhì)量,并提供完整的技術(shù)文檔;3.可行性原則采用的先進(jìn)技術(shù)應(yīng)是成熟的經(jīng)過(guò)實(shí)踐證明是成功的技術(shù);設(shè)計(jì)的方案要科學(xué)、正確、嚴(yán)謹(jǐn)、且現(xiàn)實(shí)可行;4.開放可擴(kuò)充性原則系統(tǒng)設(shè)計(jì)要采用結(jié)構(gòu)化和模塊化的設(shè)計(jì)方法,使系統(tǒng)邏輯結(jié)構(gòu)清晰、易讀,在功能的劃分和設(shè)計(jì)時(shí),使各模塊盡可能相對(duì)獨(dú)立、減少相關(guān)性以易于擴(kuò)充、維護(hù)和修改;系統(tǒng)選型應(yīng)遵循國(guó)際標(biāo)準(zhǔn),具有一定的設(shè)備無(wú)關(guān)性,使設(shè)備配置和系統(tǒng)擴(kuò)展有更大的自由度和靈活性;注重系統(tǒng)的設(shè)計(jì)具有一定的兼容性;系統(tǒng)設(shè)計(jì)要考慮到業(yè)務(wù)未來(lái)發(fā)展的需要,同時(shí)考慮系統(tǒng)建設(shè)的階段性,要盡可能地設(shè)計(jì)得簡(jiǎn)明,各個(gè)功能模塊間的耦合度小,便于系統(tǒng)的擴(kuò)展,平滑地與其它應(yīng)用系統(tǒng)自動(dòng)接口;5.安全性原則建立完善的授權(quán)機(jī)制,主要為不同的用戶提供合適的訪問(wèn)權(quán)限,使其不越權(quán)使用;保證系統(tǒng)操作的可記錄性,以便對(duì)操作行為進(jìn)行監(jiān)督;6.可移植性、可延續(xù)性原則采用的開發(fā)技術(shù)不僅滿足現(xiàn)在的應(yīng)用需求,而且要適應(yīng)未來(lái)的發(fā)展趨勢(shì),在以后的升級(jí)、移植工作方便;降低用戶的二次開發(fā)成本,保證用戶的投資利益;技術(shù)方案業(yè)務(wù)架構(gòu)軟件從需求收集到部署上線需要各種角色的人員共同協(xié)作,經(jīng)過(guò)一系列專業(yè)過(guò)程,才能最終實(shí)現(xiàn)預(yù)期的產(chǎn)品功能,交付目標(biāo)用戶使用。這些活動(dòng)可以使用不同的過(guò)程模型來(lái)描述和規(guī)范。軟件過(guò)程模型就是一組開發(fā)策略,這種策略針對(duì)軟件工程的各個(gè)階段提供了一套范式,使工程的進(jìn)展達(dá)到預(yù)期的目的。對(duì)一個(gè)軟件的開發(fā)無(wú)論其大小,我們都需要選擇一個(gè)合適的軟件過(guò)程模型,這種選擇基于項(xiàng)目和應(yīng)用的性質(zhì)、采用的方法、需要的控制,以及要交付的產(chǎn)品的特點(diǎn)。在整個(gè)軟件工程的發(fā)展歷史上,出現(xiàn)過(guò)多種軟件過(guò)程模型。比較典型的開發(fā)模型有線性的瀑布模型、增量的迭代模型等。在這些模型中有一些共同的基本活動(dòng):需求、開發(fā)、構(gòu)建、部署,通過(guò)按照時(shí)序完成這些活動(dòng)(迭代模型中是多輪次完成),逐步完善一款軟件的各個(gè)方面,并最終交付完整系統(tǒng)或者每個(gè)增量特性?,F(xiàn)代軟件系統(tǒng)規(guī)模越來(lái)越大,邏輯越來(lái)越復(fù)雜,開發(fā)一款軟件需要的工程人員結(jié)構(gòu)越來(lái)越復(fù)雜,但協(xié)作確越來(lái)越頻繁和至關(guān)重要。由于不同角色的工程人員技術(shù)背景和職責(zé)不同,往往在協(xié)作過(guò)程中會(huì)產(chǎn)生協(xié)作不暢的現(xiàn)象,非常典型的開發(fā)團(tuán)隊(duì)和運(yùn)維團(tuán)隊(duì)之間的協(xié)作問(wèn)題。同時(shí),由于軟件本身的復(fù)雜度不斷提高,完全依靠人工的處理就有不夠穩(wěn)定和高效。軟件業(yè)界針對(duì)那些執(zhí)行起來(lái)比較繁瑣或者經(jīng)常出現(xiàn)問(wèn)題的活動(dòng),有一種方法論來(lái)處理:更加頻繁、更加自動(dòng)化地處理這些活動(dòng)以便更快地得到反饋,盡快發(fā)現(xiàn)問(wèn)題并快速將問(wèn)題解決在萌芽階段。DevOps敏捷軟件交付方法就是這種方法論的具體實(shí)踐。DevOps(英文Development和Operation的組合)是一組過(guò)程、方法與系統(tǒng)的統(tǒng)稱,用于促進(jìn)開發(fā)、技術(shù)運(yùn)營(yíng)和質(zhì)量保障部門之間的溝通、協(xié)作與整合。可以進(jìn)步劃分為持續(xù)集成(CLcontinuousintegration的縮寫)和持續(xù)交付(CD,continuousdelivery)DevOps軟件過(guò)程圖DevOps的工程實(shí)踐一般采用快速迭代的模型。每個(gè)迭代依然主要由需求、研發(fā)、構(gòu)建、部署四個(gè)階段組成,但是每個(gè)階段都有相應(yīng)的實(shí)踐來(lái)優(yōu)化。需求和研發(fā)階段屬于持續(xù)集成,而構(gòu)建和部署則屬于持續(xù)交付。需求階段,方案設(shè)計(jì)配置項(xiàng)以及工程代碼集中管理,并規(guī)范配置項(xiàng)與代碼之間的關(guān)聯(lián)。當(dāng)研發(fā)人員實(shí)現(xiàn)完工作項(xiàng)并將對(duì)應(yīng)的代碼提交進(jìn)配置倉(cāng)庫(kù)時(shí),用戶可以關(guān)聯(lián)代碼集和相應(yīng)的工作項(xiàng),實(shí)現(xiàn)需求與實(shí)現(xiàn)的跟蹤。研發(fā)階段,設(shè)置自動(dòng)化的代碼集成測(cè)試,檢查代碼質(zhì)量,并及時(shí)反饋團(tuán)隊(duì);支持項(xiàng)目團(tuán)隊(duì)針對(duì)每一個(gè)代碼修改在線協(xié)作改進(jìn),以及規(guī)范穩(wěn)定版和研發(fā)版代碼的組織結(jié)構(gòu)。項(xiàng)目推薦用戶保持一個(gè)隨時(shí)可以用于部署的代碼基,一般叫做主分支,沒有完成的或者發(fā)現(xiàn)有缺陷的代碼不能提交合并到該代碼基。開發(fā)人員可以為每個(gè)工作項(xiàng)以最新的主分支為基礎(chǔ)創(chuàng)建一個(gè)代碼分支,用于臨時(shí)保存針對(duì)該工作項(xiàng)的代碼。這個(gè)臨時(shí)分支也可以提交到集成配置庫(kù)保存,防止所做代碼修改意外丟失。更加重要的是,它可以用于開發(fā)人員之間隨時(shí)進(jìn)行代碼評(píng)審和協(xié)作完善,且多個(gè)工作項(xiàng)可以并行處理,互不干擾。除了可部署代碼基和臨時(shí)特性開發(fā)分支,用戶還可以創(chuàng)建用于質(zhì)量保障測(cè)試、預(yù)發(fā)布、正式產(chǎn)品發(fā)布等用途的分支。這些分支會(huì)根據(jù)應(yīng)用發(fā)布計(jì)劃從某個(gè)時(shí)間點(diǎn)的主分支創(chuàng)建,并封閉一段時(shí)間,期間不再合并新的工作項(xiàng)代碼集。如果進(jìn)入下一輪發(fā)布或者需要修改封閉測(cè)試過(guò)程中發(fā)現(xiàn)的缺陷,用戶仍然需要先使用臨時(shí)分支開發(fā)并合并代碼集到主分支,然后從主分支的代碼集序列中合并需要的代碼集。用戶可以配置一個(gè)或者多個(gè)分支執(zhí)行集成任務(wù),一旦有代碼集提交到該分支,系統(tǒng)就會(huì)執(zhí)行所配置的集成任務(wù),并將反饋集成結(jié)果到代碼集。如果分支配置了集成任務(wù),那么只有集成任務(wù)成功的代碼集才可以合并到主分支,以保障主分支的質(zhì)量。構(gòu)建階段,根據(jù)需要構(gòu)建的分支的代碼集變動(dòng),自動(dòng)構(gòu)建發(fā)布,并規(guī)范成品配置項(xiàng)的管理。用戶可以配置一個(gè)或者多個(gè)分支執(zhí)行構(gòu)建任務(wù),一旦有代碼集提交到該分支,系統(tǒng)就會(huì)執(zhí)行所配置的構(gòu)建任務(wù),并將生成的版本保存到統(tǒng)一的倉(cāng)庫(kù)。部署階段,規(guī)范部署過(guò)程,實(shí)現(xiàn)復(fù)用,支持多套環(huán)境部署;與構(gòu)建階段對(duì)接。用戶可以描述多套環(huán)境的部署配置,每個(gè)配置相互獨(dú)立??梢赃x擇自動(dòng)或者手動(dòng)執(zhí)行部署。如果選擇自動(dòng)部署,當(dāng)部署關(guān)聯(lián)的版本有更新時(shí),系統(tǒng)自動(dòng)觸發(fā)一個(gè)部署任務(wù)執(zhí)行部署操作。如果選擇手動(dòng)部署,只有用戶觸發(fā)部署時(shí),系統(tǒng)才會(huì)創(chuàng)建一個(gè)部署作業(yè)執(zhí)行部署。技術(shù)架構(gòu)為實(shí)現(xiàn)應(yīng)用系統(tǒng)自動(dòng)部署的業(yè)務(wù)目標(biāo),系統(tǒng)采用以下技術(shù)架構(gòu):門戶苜理控制普DevOps持續(xù)策成引擎(JMkim)自動(dòng)部署引擎(Puppet.SaltSteck)基礎(chǔ)服務(wù)集中配置倉(cāng)厚(GitLab}建中軟件倉(cāng)庫(kù)(RPM、DEB.Docker)基礎(chǔ)設(shè)施物理機(jī)闞機(jī)該系統(tǒng)主要由四個(gè)層次組成,分別是基礎(chǔ)設(shè)施層、基礎(chǔ)服務(wù)層、DevOps引擎層和用戶門戶?;A(chǔ)設(shè)施層由用于部署系統(tǒng)的基礎(chǔ)設(shè)施資源組成,可以是物理機(jī),也可以是虛擬機(jī)。這些主機(jī)需要配置一定的計(jì)算能力,足量、可靠的存儲(chǔ)空間以及可以實(shí)現(xiàn)相互通信的網(wǎng)絡(luò)連接?;A(chǔ)服務(wù)層主要由集中配置倉(cāng)庫(kù)、集中軟件倉(cāng)庫(kù)、數(shù)據(jù)庫(kù)、消息中間件、緩存服務(wù)構(gòu)成,用于支撐上層DevOps各組件的運(yùn)行和之間的協(xié)作。DevOps層是整個(gè)系統(tǒng)的核心,主要由持續(xù)集成引擎和持續(xù)交付引擎組成,相互協(xié)作處理上層用戶請(qǐng)求,運(yùn)用下層基礎(chǔ)服務(wù)實(shí)現(xiàn)應(yīng)用系統(tǒng)的自動(dòng)部署功能。用戶門戶是用戶與系統(tǒng)的交互界面,調(diào)整系統(tǒng)參數(shù),管理應(yīng)用相關(guān)的人員、權(quán)限、代碼、主機(jī)等資源。系統(tǒng)主要由門戶Web、API網(wǎng)關(guān)、授權(quán)管理器、工程管理器、集成管理器、構(gòu)建管理器、部署管理器以及外部支持組件組成,它們之間的邏輯關(guān)系如下圖:

存儲(chǔ)、消息、緩存

中間件組件邏輯架構(gòu)圖數(shù)據(jù)架構(gòu)應(yīng)用系統(tǒng)自動(dòng)部署領(lǐng)域主要包含的數(shù)據(jù)模型以及它們之間的相互關(guān)系,可以用以下圖表描述:應(yīng)用系統(tǒng)自動(dòng)部署領(lǐng)域模型一個(gè)應(yīng)用系統(tǒng)可以包含一個(gè)或者多個(gè)工程,每個(gè)工程單獨(dú)一個(gè)代碼配置庫(kù)。應(yīng)用還會(huì)分配一個(gè)或者多個(gè)主機(jī)用于部署各個(gè)工程的發(fā)布版本。研發(fā)過(guò)程中,每個(gè)工程的需求由一個(gè)或者多個(gè)工作項(xiàng)組成,團(tuán)隊(duì)根據(jù)這些工作項(xiàng)進(jìn)行研發(fā),最終生成一個(gè)或者多個(gè)代碼集并提交到工程對(duì)應(yīng)的配置庫(kù)。每個(gè)提交可以關(guān)聯(lián)一個(gè)或者多個(gè)工作項(xiàng),也可以不關(guān)聯(lián)工作項(xiàng)。提交之間組織成鏈?zhǔn)疥P(guān)系,從一個(gè)提交可以查看它所基于的整個(gè)提交歷史。為了方便團(tuán)隊(duì)的協(xié)作,一個(gè)工程可以創(chuàng)建一個(gè)或者多個(gè)分支,每個(gè)分支引用一個(gè)代碼集及其上溯的整個(gè)提交歷史。每個(gè)分支上可以創(chuàng)建不同的集成任務(wù)和構(gòu)建任務(wù),集成任務(wù)用于對(duì)分支的代碼集執(zhí)行集成測(cè)試并反饋結(jié)果。構(gòu)建任務(wù)用于將分支的代碼集構(gòu)建成一個(gè)版本。版本是可以用于部署的組件,與一個(gè)代碼集關(guān)聯(lián),并根據(jù)代碼集關(guān)聯(lián)的工作項(xiàng)得到該版本所實(shí)現(xiàn)的需求。版本一旦生成就不能修改了,并集中在一個(gè)版本庫(kù)里管理。一個(gè)工程可以根據(jù)版本的成熟情況部署多次,得到不同的運(yùn)行實(shí)例。每個(gè)部署關(guān)聯(lián)一個(gè)版本、可選的多個(gè)配置參數(shù)以及一個(gè)或者多個(gè)目標(biāo)主機(jī)。系統(tǒng)可以啟動(dòng)多個(gè)部署任務(wù)來(lái)執(zhí)行部署,將指定版本安裝在目標(biāo)主機(jī)上,并使用配置參數(shù)啟動(dòng)版本。數(shù)據(jù)模型中涉及的實(shí)體根據(jù)不同特點(diǎn)采用了不同的存儲(chǔ)技術(shù),總體的數(shù)據(jù)存儲(chǔ)架構(gòu)如下圖所示:緩存層 內(nèi)存數(shù)據(jù)庫(kù) 內(nèi)存緩存服務(wù)層 I代碼倉(cāng)庫(kù)I I消息隊(duì)列I I關(guān)系型數(shù)據(jù)庫(kù)基礎(chǔ)層I文件系統(tǒng)I LUN 備份系統(tǒng)存儲(chǔ)自動(dòng)部署系統(tǒng)的組件主要使用代碼倉(cāng)庫(kù)、消息隊(duì)列以及關(guān)系數(shù)據(jù)庫(kù)來(lái)存儲(chǔ)系統(tǒng)的數(shù)據(jù)。系統(tǒng)業(yè)務(wù)模型的數(shù)據(jù)大部分通過(guò)關(guān)系型數(shù)據(jù)庫(kù)存儲(chǔ)。代碼倉(cāng)庫(kù)是由GIT提供服務(wù),存儲(chǔ)代碼文件到文件系統(tǒng)。組件之間協(xié)作是通過(guò)異步消息實(shí)現(xiàn)的,這些消息通過(guò)消息隊(duì)列保存和堆積。其它文件類型的數(shù)據(jù),比如文本格式的配置文件、二進(jìn)制格式的版本包,統(tǒng)一采用文件系統(tǒng)進(jìn)行存儲(chǔ)。基礎(chǔ)層的文件系統(tǒng)可以是在主機(jī)的本地磁盤上構(gòu)建的,也可以是基于SAN存儲(chǔ)系統(tǒng)的LUN構(gòu)建的,或者是其它共享文件系統(tǒng)。整個(gè)系統(tǒng)的所有數(shù)據(jù)都可能部署到備份系統(tǒng)的存儲(chǔ)上。集成架構(gòu)應(yīng)用自動(dòng)部署系統(tǒng)需要與第三方開發(fā)商的代碼倉(cāng)庫(kù)、測(cè)試管理軟件、部署目的主機(jī)操作系統(tǒng)進(jìn)行集成。系統(tǒng)采用分布式代碼管理方式,不同的代碼管理系統(tǒng)保存的相同項(xiàng)目的代碼可以方便地相互比較和同步。第三方可以緩存應(yīng)用的集中庫(kù)中代碼到本地,并在本地離線開發(fā),提高研發(fā)效率。為了提高自動(dòng)部署系統(tǒng)的自動(dòng)化水平,代碼系統(tǒng)的一些事件需要能夠自動(dòng)觸發(fā)持續(xù)集成系統(tǒng)的處理。系統(tǒng)所采用的代碼管理系統(tǒng)設(shè)計(jì)有hook機(jī)制,在代碼集提交、分支合并等事件處設(shè)置了集成鉤子。系統(tǒng)通過(guò)這些鉤子,接收到代碼管理系統(tǒng)的特定事件,并相應(yīng)地啟動(dòng)持續(xù)集成任務(wù)。持續(xù)集成引擎需要支持不同的集成任務(wù),有些集成任務(wù)需要對(duì)接測(cè)試管理軟件執(zhí)行特定的測(cè)試計(jì)劃。持續(xù)集成引擎采用插件架構(gòu),通過(guò)專門為測(cè)試管理軟件開發(fā)的插件可以與它實(shí)現(xiàn)集成。持續(xù)交付引擎執(zhí)行部署任務(wù)時(shí),需要能夠從版本配置庫(kù)獲取應(yīng)用的特定版本,保存到目標(biāo)主機(jī)上并安裝啟動(dòng)版本。版本配置庫(kù)提供HTTP協(xié)議的API,方便引擎查詢、下載版本。持續(xù)部署引擎可以通過(guò)目標(biāo)主機(jī)上的代理插件遠(yuǎn)程執(zhí)行命令來(lái)同步完成一些操作。解決方案總體方案應(yīng)用自動(dòng)部署平臺(tái)通過(guò)搭建統(tǒng)一的配置管理以及持續(xù)集成和持續(xù)交付兩個(gè)功能引擎,整合分布式代碼管理系統(tǒng)、統(tǒng)一軟件包管理系統(tǒng)、部署作業(yè)系統(tǒng)、容器技術(shù)以及第三方軟件(如HPEALM),實(shí)現(xiàn)包含應(yīng)用工作項(xiàng)管理、代碼管理、自動(dòng)化代碼測(cè)試和分析、代碼在線評(píng)審、自動(dòng)化構(gòu)建等持續(xù)集成實(shí)踐,達(dá)到集中管理和規(guī)范應(yīng)用系統(tǒng)研發(fā),促進(jìn)團(tuán)隊(duì)協(xié)作的目的;同時(shí)實(shí)現(xiàn)包括應(yīng)用發(fā)布版本包的統(tǒng)一管理、規(guī)范部署方案管理、自動(dòng)化部署多套環(huán)境、多個(gè)版本的應(yīng)用等持續(xù)交付實(shí)踐,達(dá)到標(biāo)準(zhǔn)化部署流程,提高部署自動(dòng)化程度,實(shí)現(xiàn)應(yīng)用可靠、快速交付上線,從而,為業(yè)務(wù)發(fā)展提供強(qiáng)有力的支撐,并從IT發(fā)展自身角度建立扎實(shí)的技術(shù)基礎(chǔ)。整個(gè)系統(tǒng)的功能按照下圖所示劃分和組織??刂?參散管理 用戶普建 校限昔謹(jǐn) 資源昔遵 工程管遵功能結(jié)構(gòu)圖系統(tǒng)核心是配置管理以及持續(xù)集成和持續(xù)交付核心引擎。配置管理的主要功能包括工作項(xiàng)管理和代碼管理。持續(xù)集成引擎的主要功能包括集成配置、代碼評(píng)審、自動(dòng)測(cè)試、構(gòu)建配置、自動(dòng)構(gòu)建和集成作業(yè)管理。持續(xù)交付引擎的主要功能包括版本管理、部署配置、自動(dòng)部署和部署作業(yè)管理。系統(tǒng)面向用戶提供管理控制臺(tái),主要功能包括參數(shù)管理、用戶管理、權(quán)限管理、資源管理、工程管理。以下將按照功能模塊詳細(xì)說(shuō)明解決方案。配置管理配置管理主要功能有工作項(xiàng)管理和代碼管理。工作項(xiàng)管理作為開發(fā)人員,可以創(chuàng)建、編輯和刪除工作項(xiàng),根據(jù)實(shí)際研發(fā)進(jìn)度更好工作項(xiàng)狀態(tài)。作為開發(fā)人員,可以在提交一個(gè)代碼集時(shí),在代碼集的描述信息中使用標(biāo)記關(guān)聯(lián)若干個(gè)工作項(xiàng),對(duì)需求和實(shí)現(xiàn)進(jìn)行跟蹤。當(dāng)一個(gè)代碼集經(jīng)過(guò)測(cè)試和評(píng)審,合并到主分支中時(shí),系統(tǒng)會(huì)自動(dòng)關(guān)閉代碼集關(guān)聯(lián)的工作項(xiàng)。代碼管理作為項(xiàng)目成員,可以快速獲得并存儲(chǔ)項(xiàng)目代碼,查看修改歷史。系統(tǒng)采用git作為配置管理存儲(chǔ)系統(tǒng),可以按照工程存儲(chǔ)代碼,支持使用SSH、HTTP/HTTPS協(xié)議獲取任何一個(gè)時(shí)間點(diǎn)的項(xiàng)目代碼,支持查看任一納入配置管理的代碼文件的修改歷史信息。對(duì)于異地進(jìn)行開發(fā)的團(tuán)隊(duì),可以從集中配置庫(kù)簽出代碼,操作方式與內(nèi)部訪問(wèn)一致。開發(fā)人員可以同時(shí)添加多個(gè)配置管理系統(tǒng),拉取代碼進(jìn)行評(píng)審或者合并。系統(tǒng)支持創(chuàng)建任意多個(gè)分支。每個(gè)工程都默認(rèn)創(chuàng)建一個(gè)主分支。分支只是一個(gè)代碼集提交的別名,因此創(chuàng)建分支是非常輕量級(jí)的操作,速度很快。除了分支以外,配置管理支持設(shè)置標(biāo)簽來(lái)標(biāo)識(shí)一個(gè)代碼集提交。標(biāo)簽一般用于標(biāo)記工程代碼的一個(gè)特殊狀態(tài),可以將版本號(hào)與對(duì)應(yīng)的代碼關(guān)聯(lián)起來(lái)。持續(xù)集成集成配置作為開發(fā)人員,可以設(shè)置自動(dòng)集成相關(guān)策略和參數(shù),以便當(dāng)工程代碼發(fā)生變更時(shí)觸發(fā)系統(tǒng)的自動(dòng)集成,快速得到有關(guān)所提交代碼質(zhì)量的反饋。工程創(chuàng)建時(shí),系統(tǒng)會(huì)將工程的代碼倉(cāng)庫(kù)和集成引擎間通過(guò)hook創(chuàng)建聯(lián)系。一旦代碼倉(cāng)庫(kù)有修改,集成引擎就會(huì)得到通知,如果工程配置了自動(dòng)集成,系統(tǒng)執(zhí)行集成作業(yè),并反饋結(jié)果到代碼集的關(guān)聯(lián)事件列表中。代碼評(píng)審作為項(xiàng)目成員,可以將自動(dòng)還沒有合并的代碼集創(chuàng)建一個(gè)合并請(qǐng)求,改善給項(xiàng)目評(píng)審人員進(jìn)行評(píng)審。評(píng)審人員可以使用對(duì)比視圖查看需要合并的代碼。如果有評(píng)審意見,雙方可以直接在線交流修改意見。合并請(qǐng)求在接受合并前可以多次更新,以便包含更新的修改。自動(dòng)測(cè)試作為項(xiàng)目成員,可以添加單元測(cè)試代碼,以便保證代碼邏輯正常和一定的質(zhì)量標(biāo)準(zhǔn)。單元測(cè)試代碼需要用戶自己編寫。目前主流編程語(yǔ)言都支持xUnit或者類似的單元測(cè)試框架。系統(tǒng)在自動(dòng)集成過(guò)程中,默認(rèn)都會(huì)執(zhí)行自動(dòng)化測(cè)試,并反饋測(cè)試結(jié)果給用戶。一旦有失敗的測(cè)試,那么本次自動(dòng)集成作業(yè)失敗。這需要提交該代碼集的用戶解決發(fā)現(xiàn)的問(wèn)題后再次提交,直到測(cè)試通過(guò)。構(gòu)建配置作為發(fā)布人員,可以設(shè)置構(gòu)建配置和軟件版本號(hào),以便自動(dòng)完成應(yīng)用軟件包的構(gòu)建。軟件的版本號(hào)通過(guò)創(chuàng)建以版本號(hào)命名的標(biāo)簽來(lái)實(shí)現(xiàn),系統(tǒng)發(fā)現(xiàn)當(dāng)前提交設(shè)置了標(biāo)簽,會(huì)優(yōu)先使用它作為版本號(hào)。如果提交沒有標(biāo)簽,系統(tǒng)默認(rèn)會(huì)結(jié)合提交的唯一標(biāo)識(shí)創(chuàng)建版本號(hào)。自動(dòng)構(gòu)建自動(dòng)構(gòu)建的觸發(fā)機(jī)制與自動(dòng)測(cè)試相同,當(dāng)代碼發(fā)生修改時(shí),系統(tǒng)會(huì)根據(jù)構(gòu)建配置執(zhí)行構(gòu)建作業(yè),創(chuàng)建軟件包并按照設(shè)置的版本號(hào)命名,最終存儲(chǔ)到集中的軟件包倉(cāng)庫(kù)。集成作業(yè)管理作為項(xiàng)目成員,可以查看各種集成作業(yè)的日志,以便了解集成作業(yè)的詳細(xì)信息,輔助解決過(guò)程中的問(wèn)題。持續(xù)交付版本管理作為發(fā)布人員,能夠管理各個(gè)版本軟件包,以便快速得到任意版本的軟件部署包。系統(tǒng)設(shè)置一個(gè)站點(diǎn)存儲(chǔ)軟件包,每個(gè)軟件包存儲(chǔ)版本更新歷史,對(duì)外提供HTTP協(xié)議的訪問(wèn)接口,支持上傳、查看、下載軟件包。部署配置作為部署人員,可以配置需要部署的版本、目標(biāo)主機(jī)以及參數(shù)設(shè)置,以便系統(tǒng)能夠自動(dòng)完成部署。系統(tǒng)將部署配置信息作為代碼納入配置管理,方便團(tuán)隊(duì)成員統(tǒng)一管理和內(nèi)容評(píng)審。配置中的目標(biāo)主機(jī),可以是明確指定主機(jī)名或者IP。這些主機(jī)需要是分配給應(yīng)用使用的資源(有關(guān)資源管理,可以參見“控制臺(tái)”的相關(guān)說(shuō)明),否則無(wú)法部署到指定主機(jī)。如果指定多臺(tái)主機(jī),系統(tǒng)會(huì)并行執(zhí)行相同的部署作業(yè)。這可以用于部署對(duì)等集群系統(tǒng)。系統(tǒng)支持同一個(gè)版本的應(yīng)用部署到多套環(huán)境中。自動(dòng)部署當(dāng)系統(tǒng)自動(dòng)觸發(fā)或者用戶請(qǐng)求執(zhí)行自動(dòng)部署時(shí),系統(tǒng)創(chuàng)建部署作業(yè),按照部署配置將相應(yīng)的版本軟件包部署到關(guān)聯(lián)的主機(jī)上。部署成功后,系統(tǒng)會(huì)更新主機(jī)資源關(guān)聯(lián)的應(yīng)用版本信息。如果配置了多套環(huán)境,系統(tǒng)順序執(zhí)行每套環(huán)境的部署。如果配置指定了多臺(tái)主機(jī),系統(tǒng)會(huì)并行啟動(dòng)多個(gè)部署作業(yè)來(lái)執(zhí)行部署。用戶可以手動(dòng)從控制臺(tái)觸發(fā)一套或者多套環(huán)境的部署。多套環(huán)境的部署策略和自動(dòng)觸發(fā)下的處理一致。部署作業(yè)管理作為項(xiàng)目成員,可以查看各種部署作業(yè)的日志,以便了解部署作業(yè)的詳細(xì)信息,輔助解決過(guò)程中的問(wèn)題??刂婆_(tái)參數(shù)作為系統(tǒng)管理員,可以修改參數(shù)設(shè)置,以便調(diào)整系統(tǒng)功能。用戶作為系統(tǒng)管理員,可以管理系統(tǒng)的用戶,以便工程人員可以使用系統(tǒng)。作為系統(tǒng)管理員,可以對(duì)用戶進(jìn)行分組,以便快速調(diào)整一組用戶的設(shè)置。權(quán)限系統(tǒng)通過(guò)權(quán)限管理,設(shè)置不同用戶在不同工程中的角色,從而控制用戶可以執(zhí)行的操作。資源作為應(yīng)用管理員,可以為應(yīng)用添加主機(jī)資源,以便控制自動(dòng)部署可以使用的資源。工程作為應(yīng)用管理員,可以創(chuàng)建一個(gè)或者多個(gè)工程,以便更好地組織整個(gè)應(yīng)用的開發(fā)和部署。用戶創(chuàng)建工程時(shí),系統(tǒng)會(huì)自動(dòng)為工程創(chuàng)建相關(guān)聯(lián)的配置倉(cāng)庫(kù)、軟件包倉(cāng)庫(kù)。部署方案應(yīng)用自動(dòng)部署系統(tǒng)以多個(gè)組件發(fā)布,各個(gè)組件力求無(wú)狀態(tài),以便集群部署,提高系統(tǒng)的可靠性和性能。系統(tǒng)主要組件可以采用的邏輯部署如下圖所示。

基礎(chǔ)服務(wù)節(jié)點(diǎn)頂層包::數(shù)據(jù)庫(kù)服務(wù)頂層包::消息隊(duì)列服務(wù)頂層包::緩存服務(wù)系統(tǒng)邏輯部署圖系統(tǒng)每個(gè)組件的所需要的資源規(guī)格如下表:節(jié)點(diǎn)類型指標(biāo)備注控制臺(tái)節(jié)點(diǎn)4c8G管控節(jié)點(diǎn)8C16G配置庫(kù)節(jié)點(diǎn)4c8G,3006數(shù)據(jù)存儲(chǔ)引擎節(jié)點(diǎn)8C16G基礎(chǔ)服務(wù)節(jié)點(diǎn)8C16G非功能性設(shè)計(jì)性能系統(tǒng)的性能是一個(gè)系統(tǒng)成敗的關(guān)鍵所在,在架構(gòu)設(shè)計(jì)初期就一定要把系統(tǒng)性能考慮在內(nèi),否則等開發(fā)完成以后測(cè)試發(fā)現(xiàn)性能不好就比較難辦,通常要花費(fèi)較長(zhǎng)的時(shí)間來(lái)診斷性能瓶頸,找到提升的辦法,甚至要改變架構(gòu),傷筋動(dòng)骨,往往造成項(xiàng)目延期。所以性能設(shè)計(jì)首先要有明確的性能目標(biāo),根據(jù)用戶和軟件本身的性能要求來(lái)設(shè)計(jì),合適的就是最好的。其次,要有適當(dāng)?shù)亩攘繕?biāo)準(zhǔn)和量化的性能指標(biāo)。最后,要有相應(yīng)的設(shè)計(jì)策略,具體的測(cè)試方法。影響系統(tǒng)性能主要瓶頸在I/O,包括數(shù)據(jù)庫(kù),socket,網(wǎng)絡(luò)通信,文件等,例如頻繁查詢數(shù)據(jù)庫(kù)并返回大量結(jié)果集,頻繁操作大文件等,這些昂貴的操作會(huì)占用大量的CPU時(shí)間。拿系統(tǒng)響應(yīng)和服務(wù)一個(gè)事務(wù)來(lái)說(shuō),有幾個(gè)Roundtrip,要通過(guò)哪幾層I/O,如何合理的分配這些I/O的調(diào)用,降低不必要的I/O,都是進(jìn)行系統(tǒng)性能設(shè)計(jì)要考慮的。而有些性能問(wèn)題在初期并不會(huì)表現(xiàn)出來(lái),但當(dāng)拿到實(shí)際上線環(huán)境下,存在多用戶并發(fā)、大數(shù)據(jù)量的情況下就會(huì)暴露出嚴(yán)重的問(wèn)題。所以性能設(shè)計(jì)時(shí)一定要考慮到I/O,同步,并發(fā),資源爭(zhēng)用,以及大數(shù)據(jù)量等因素。通常,I/O操作、網(wǎng)絡(luò)響應(yīng)、差的算法、數(shù)據(jù)庫(kù)、以及其他的低效的資源使用都會(huì)導(dǎo)致低劣的性能。在性能設(shè)計(jì)上,我們的主品主要考慮了以下的設(shè)計(jì)策略:(1)緩存以及緩存層(cachinglayer)在數(shù)據(jù)層和應(yīng)用層之間增加數(shù)據(jù)緩存層,提供全局?jǐn)?shù)據(jù)服務(wù)??梢源蟠鬁p少數(shù)據(jù)庫(kù)往返次數(shù)。與讀取數(shù)據(jù)庫(kù)和讀取大文件(如XML文件)比,讀取內(nèi)存的速度無(wú)疑要快的多。所以對(duì)經(jīng)常要訪問(wèn)的數(shù)據(jù)進(jìn)行緩存是非常好的實(shí)踐方法。因?yàn)楝F(xiàn)在系統(tǒng)往往內(nèi)存很大,可以充分利用大內(nèi)存,而共享內(nèi)存更能實(shí)現(xiàn)數(shù)據(jù)并發(fā)訪問(wèn)。(2)多線程(multi-threading)現(xiàn)在基本上大部分軟件實(shí)現(xiàn)多線程或多進(jìn)程,多線程對(duì)單CPU系統(tǒng)還只是順序利用CPU時(shí)間和改善用戶體驗(yàn),多CPU系統(tǒng)才是真正的并行。要注意的是多線程不要爭(zhēng)搶訪問(wèn)同一資源而導(dǎo)致部分串行操作,要做到真正的并行操作多線程并不容易。另外,在多線程間同步一個(gè)龐大的資源,過(guò)多創(chuàng)建線程又沒有實(shí)現(xiàn)線程池也會(huì)導(dǎo)致系統(tǒng)性能下降。(3)負(fù)載均衡(loadbalancing)物理上增加地位對(duì)等的集群服務(wù)器(Cluster),通過(guò)負(fù)載分配算法分配相應(yīng)服務(wù)器來(lái)相應(yīng)客戶端請(qǐng)求,我們的產(chǎn)品設(shè)計(jì)充分考慮了系統(tǒng)的可擴(kuò)展性,所有節(jié)點(diǎn)都支持負(fù)載均衡,以實(shí)現(xiàn)整個(gè)系統(tǒng)的無(wú)限擴(kuò)展。(4)數(shù)據(jù)庫(kù)優(yōu)化(databaseoptimization)數(shù)據(jù)庫(kù)的優(yōu)化是一個(gè)持續(xù)的過(guò)程,在架構(gòu)上,我們支持?jǐn)?shù)據(jù)庫(kù)的讀寫分離,能對(duì)CPU利用率、IOPS、連接數(shù)、磁盤空間等實(shí)例信息實(shí)時(shí)監(jiān)控,并給出相應(yīng)的SQL語(yǔ)句優(yōu)化意見,根據(jù)需要建立相應(yīng)的數(shù)據(jù)庫(kù)索引。文件系統(tǒng)優(yōu)化有時(shí)候系統(tǒng)性能不好,但當(dāng)你關(guān)閉寫log的功能,性能一下子提高很多。因?yàn)轭l繁的打開關(guān)閉大log文件時(shí)I/O開銷非常大,同樣記錄log到數(shù)據(jù)庫(kù)也一樣。所以,release版盡量減少寫log,或干脆移到裸設(shè)備上。頻繁打開關(guān)閉文件對(duì)系統(tǒng)性能下降程度是驚人的,可以通過(guò)一些變通辦法來(lái)減少文件的頻繁操作。例如,原來(lái)的緩存持久化實(shí)現(xiàn)是保存在XML文件,每次要獲得一個(gè)配置項(xiàng),都打開XML文件,通過(guò)XPath拿到這個(gè)配置項(xiàng)的值,這樣效率不高,而且容易把這個(gè)XML文件lock??;改進(jìn)的方法是:通過(guò)比較XML文件的修改時(shí)間(System.IO.File.GetLastWriteTime)判斷是否要再次打開文件,大大提高了效率;另一個(gè)可以改進(jìn)的方法是:?jiǎn)?dòng)時(shí)讀取所有配置到一個(gè)靜態(tài)的HashTable,每次要獲得一個(gè)配置項(xiàng)都從內(nèi)存HashTable獲取,在最后或適當(dāng)?shù)臅r(shí)候持久化到XML。通過(guò)以優(yōu)化,我們的軟件能達(dá)到用戶要求的以下性能指標(biāo):大類指標(biāo)備注穩(wěn)定性測(cè)試穩(wěn)定運(yùn)行時(shí)間一周指標(biāo)系統(tǒng)峰值的60%系統(tǒng)資源CPU使用率<二75%內(nèi)存使用率<二75%磁盤繁忙率<=75%可靠性軟件系統(tǒng)規(guī)模越做越大越復(fù)雜,其可靠性越來(lái)越難保證。應(yīng)用本身對(duì)系統(tǒng)運(yùn)行的可靠性要求越來(lái)越高,軟件系統(tǒng)的可靠性也直接關(guān)系到設(shè)計(jì)自身的聲譽(yù)和生存發(fā)展競(jìng)爭(zhēng)能力。軟件可靠性意味著該軟件在測(cè)試運(yùn)行過(guò)程中避免可能發(fā)生故障的能力,且一旦發(fā)生故障后,具有解脫和排除故障的能力。軟件可靠性和硬件可靠性本質(zhì)區(qū)別在于:后者為物理機(jī)理的衰變和老化所致,而前者是由于設(shè)計(jì)和實(shí)現(xiàn)的錯(cuò)誤所致。故軟件的可靠性必須在設(shè)計(jì)階段就確定,在生產(chǎn)和測(cè)試階段再考慮就困難了。軟件系統(tǒng)必須是可靠的,一般的人為和外部的異常事件不會(huì)引起系統(tǒng)的崩潰;同時(shí)系統(tǒng)有較高的可用性,當(dāng)系統(tǒng)出現(xiàn)問(wèn)題后能在較短的時(shí)間內(nèi)恢復(fù),而且系統(tǒng)的數(shù)據(jù)是完整的,不會(huì)引起數(shù)據(jù)的不一致。主機(jī)系統(tǒng)能夠保持7*24穩(wěn)定的不間斷運(yùn)行,從系統(tǒng)軟硬件平臺(tái)及網(wǎng)絡(luò)等方面來(lái)保證系統(tǒng)的穩(wěn)定性;對(duì)于所采用的主備服務(wù)器方式,若主服務(wù)器宕機(jī)時(shí),可實(shí)時(shí)地切換到備用服務(wù)器上,用戶的應(yīng)用不受影響。我們的軟件目前可靠性可達(dá)到如下指標(biāo):系統(tǒng)易恢復(fù),RPO<10分鐘,RTO<30分鐘。具備對(duì)交易超時(shí)構(gòu)建、部署異常情況的容錯(cuò)處理??捎眯韵到y(tǒng)采用多個(gè)組件單獨(dú)部署運(yùn)行的方式組成整個(gè)應(yīng)用,每個(gè)組件支持集群部署,可以通過(guò)橫向擴(kuò)展來(lái)確保系統(tǒng)服務(wù)可用性和必要的性能。只要集群中任一實(shí)例能夠正常運(yùn)行,就可以保證系統(tǒng)功能基本可用。如果一旦運(yùn)行中的實(shí)例出現(xiàn)故障,可以快速啟動(dòng)新實(shí)例并加入集群,從而恢復(fù)整個(gè)集群的處理能力,進(jìn)一步保證應(yīng)用的可用性。系統(tǒng)自身組件的部署采用容器化技術(shù),可以在秒級(jí)完成系統(tǒng)啟動(dòng),實(shí)現(xiàn)故障快速恢復(fù)。同時(shí)結(jié)合系統(tǒng)服務(wù)管理框架,當(dāng)服務(wù)異常退出時(shí)觸發(fā)自動(dòng)重啟,縮短故障時(shí)間窗口。綜合采用以上措施可以全面保障系統(tǒng)可用性在評(píng)估期內(nèi)(試運(yùn)行期間)保證99.9以上(MTTF/(MTTF+MTTR)*100%

溫馨提示

  • 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ù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 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)論