Devops系統(tǒng)自動部署技術(shù)方案_第1頁
Devops系統(tǒng)自動部署技術(shù)方案_第2頁
Devops系統(tǒng)自動部署技術(shù)方案_第3頁
Devops系統(tǒng)自動部署技術(shù)方案_第4頁
Devops系統(tǒng)自動部署技術(shù)方案_第5頁
已閱讀5頁,還剩24頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

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

存儲、消息、緩存

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

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

溫馨提示

  • 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)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論