看完螞蟻,我們再看看整個金融行業(yè),金融行業(yè)做研發(fā)效能和DevOps,有哪些共同的挑戰(zhàn)?我們總結(jié)下來四個方面:
第一,管理者認知方面的挑戰(zhàn)。很多中小機構(gòu)的管理者,對研發(fā)效能的認知是嚴重不足的,不會把這些東西納入到緊急重要的日程事項中去。所以說就需要在意識上給他們做破冰。
第二,團隊協(xié)作,典型的重業(yè)務(wù)、輕it,業(yè)務(wù)主導(dǎo)性特別強。需求就一句話,隨意變更,這都是常態(tài)。然后研發(fā)運維各自為政,彼此之間的協(xié)作多基于文檔,整體溝通和協(xié)作的效率是非常低下的。
第三,技術(shù)人員的能力參差不齊,導(dǎo)致交付質(zhì)量千差萬別。包括技術(shù)棧各種各樣、外包難于管理,所有這些東西都影響交付的質(zhì)量和效率。
第四,就是體系規(guī)范和工具方面,整個IT的基礎(chǔ)管理規(guī)范和標準文件都比較老比較重,執(zhí)行依賴于人肉,落地就比較困難,更不用提數(shù)據(jù)積累了,整體缺少自動化方面的全局的建設(shè),整個DevOps工具鏈是比較初級的。
那么要解決這些我們剛才提到的內(nèi)部和外部的挑戰(zhàn)和問題,螞蟻金服也給出了自己的一些解法和答案,賦能伙伴最終實現(xiàn)又快又穩(wěn)的持續(xù)交付。微觀上,我們希望我們的方案能夠盡量自動化減少人肉,提升研發(fā)同學(xué)的幸福感,讓研發(fā)過程絲般順滑。宏觀上可以提升團隊的研發(fā),持續(xù)交付的效能,進而賦能企業(yè)去升級組織效能。其中,最重要的還是把我們螞蟻金服這么多年在這個領(lǐng)域積累下來的經(jīng)驗和最佳實踐,對外提供賦能使其價值。
接下來我們就分享螞蟻在研發(fā)效能領(lǐng)域里具體的實踐,我們將按照軟件生命周期的邏輯來進行講解。
第一部分就是需求項管領(lǐng)域。經(jīng)過不斷的實踐,螞蟻金服自己也沉淀出了一套敏捷研發(fā)實踐的框架。 第一個就是文化引領(lǐng),面向一線的研發(fā)團隊進行敏捷文化的培訓(xùn),讓團隊成員能夠理解敏捷的基本理念和指導(dǎo)思想。第二個是實踐落地方面,是一個逐步演化的過程,團隊范疇到項目范疇,以價值交付為最終目標,然后通過不斷的迭代,實現(xiàn)持續(xù)集成、持續(xù)交付。在整個過程里邊又不斷的去收集數(shù)據(jù),做統(tǒng)計分析,建立數(shù)據(jù)模型,從而形成適合團隊及項目的可視化的度量指標,持續(xù)的反饋到這個項目的迭代中去, 從而形成統(tǒng)一的節(jié)奏、統(tǒng)一的心跳,縮短和消除項目組內(nèi)不同團隊間的等待和浪費。在不斷的實踐過程中,螞蟻也沉淀了大量的最佳案例、最佳實踐,可以逐步的對外輸出,來幫助到伙伴和客戶。
剛剛談的是偏方法論的,具體到敏捷項目管理的實踐。 首先看看在螞蟻項目是如何組織的,在我們內(nèi)部按照項目的規(guī)模我們有不同的叫法,比如說戰(zhàn)役、戰(zhàn)場這些概念,但無論是怎么樣的規(guī)模,都涉及到三個核心的角色:PD產(chǎn)品經(jīng)理、PM項目經(jīng)理、技術(shù)架構(gòu)師,我們叫做項目的三駕馬車,所有工作都圍繞這三個關(guān)鍵角色來展開。在項目的執(zhí)行過程中,我們引入了SCRUM一些管理實踐,需求和迭代的進展通過電子看板能夠清晰的展示出來,使得敏捷所倡導(dǎo)的原則和理念能夠得到比較好的落地。
這里邊我們分享三點:
第一,敏捷是貫穿軟件研發(fā)全生命周期的。敏捷不是說越重越好,適合的才是好的,我們稱之為輕量級的敏捷實踐。
第二,平臺覆蓋項目協(xié)作的全部領(lǐng)域,項目集、工作項、沖刺、里程碑、風(fēng)險這些領(lǐng)域都能實現(xiàn)很好的管理。
第三,利用高效靈活的可視化看板,來提高整個項目的透明度,從而激發(fā)整個團隊及組織的熱情和文化。
我們通過平臺也固化了一套比較有特色的迭代研發(fā)的模型。它通過發(fā)布、迭代、應(yīng)用、流水線四 層模型對研發(fā)過程進行有效的管控:
在流水線維度,我們具備PUSH、MR、手動等多種觸發(fā)模式;流水線的所有的組件和節(jié)點,可編排、可擴展。然后應(yīng)用層面,我們的所有研發(fā)活動都是按應(yīng)用去組織和推進的,包括質(zhì)量的門禁和階段的卡點,都是應(yīng)用維度進行管控。在一個研發(fā)迭代中我們可以管理多個應(yīng)用,一個發(fā)布窗口又可以管理和發(fā)布多個迭代,從而實現(xiàn)從微觀到宏觀,多個維度的、立體的項目協(xié)作和管控。
那么接下來是持續(xù)集成環(huán)節(jié),首先給大家介紹的是統(tǒng)一的應(yīng)用元數(shù)據(jù)管理。在螞蟻我們有5000多應(yīng)用,規(guī)模非常之大,而且支撐的業(yè)務(wù)也各不相同。我們給應(yīng)用做了分級定義,主要是從服務(wù)依賴、交易/資金量以及每天的PV UV這些維度對應(yīng)用進行分級,并在平臺中進行統(tǒng)一管理。第一個好處,所有的應(yīng)用以及架構(gòu)一盤棋,組織層面可看到全貌,為整個架構(gòu)的規(guī)劃以及架構(gòu)的治理,提供比較好的輸入以及基礎(chǔ);第二個好處,每個架構(gòu)域每個應(yīng)用的技術(shù)負責(zé)人、質(zhì)量負責(zé)人、運維負責(zé)人等角色一清二楚,有利于在項目中進行協(xié)作;第三個好處是應(yīng)用的屬性,通過應(yīng)用分級和應(yīng)用屬性,為精益研發(fā)流程定制提供依據(jù),做到研發(fā)流程的千人千面,每個應(yīng)用都可以定制自己的個性化的研發(fā)流程。
除了應(yīng)用原數(shù)據(jù)的統(tǒng)一管理,我們還提到配置統(tǒng)一管理,這里邊配置就包括環(huán)境的配置、中間件的配置、CI配置、技術(shù)棧軟件配置等。螞蟻研發(fā)效能平臺可以按照不同的環(huán)境,對所有的配置項進行集中管理,在研發(fā)迭代推進的過程里邊,還可以實現(xiàn)配置項在不同環(huán)境間的自動轉(zhuǎn)化和生效,這樣就避免了研發(fā)同學(xué)頻繁訪問配置項控制臺進行人肉配置,提效的同時避免人肉錯誤。
接下來介紹代碼質(zhì)量內(nèi)建,其實代碼質(zhì)量在整個研發(fā)過程里邊是非常關(guān)鍵的一環(huán),我們鼓勵第一時間就把代碼寫好寫正確,或者在第一時間就發(fā)現(xiàn)和修復(fù)錯誤。
首先我們看代碼的質(zhì)量標準。 事實上在螞蟻的研發(fā)效能平臺上邊做開發(fā),質(zhì)量標準是可以按照這種應(yīng)用維度去做配置的。每個應(yīng)用都可以根據(jù)應(yīng)用的分級、業(yè)務(wù)需要去配置不同質(zhì)量標準。 在質(zhì)量標準里邊,我們沉淀的一套成熟的質(zhì)量分模型,將代碼掃描、單元/接口自動化的通過率覆蓋率,還有一些其他的質(zhì)量指標,納入質(zhì)量分統(tǒng)一管控,進而可以比較直觀地評價一個應(yīng)用當(dāng)前的質(zhì)量情況。 其次是代碼掃描,阿里的 Java開發(fā)規(guī)約大家都耳熟能詳,在這個基礎(chǔ)之上,螞蟻也沉淀了一些自己的開發(fā)規(guī)約,強強互補,通過IDE以及Pipeline兩個端去執(zhí)行,確保第一時間能快速的發(fā)現(xiàn)問題和解決問題。
然后是代碼評審,代碼評審是整個開發(fā)過程里邊非常有價值的工作,他不僅能夠幫助我們提高代碼質(zhì)量,而且對整個團隊人員的學(xué)習(xí)培養(yǎng),團隊建設(shè)都非常有幫助。在螞蟻的研發(fā)效能平臺里邊,我們的功能也是非常有特色,實現(xiàn)了與Pipeline流水線有效集成的可多人協(xié)作的高效代碼評審。
接下來是自動化白盒測試。這邊指的就是單元自動化和接口自動化。外部客戶交流中發(fā)現(xiàn),很多中小企業(yè)由于研發(fā)或者測試團隊的能力限制,不能夠高效的去準備自動化測試腳本,所以我們也提供了一個測試腳本的輔助生成工具。測試腳本可以通過效能平臺的流水線自動觸發(fā)執(zhí)行和收集測試結(jié)果。每次執(zhí)行完流水線之后,都會實時更新應(yīng)用的質(zhì)量數(shù)據(jù)。質(zhì)量如果不達標的情況下推進迭代,我們還有配套的質(zhì)量加簽的審批流程,上述全是圍繞著代碼質(zhì)量所進行的實踐。
接下來我們給大家介紹我們的Pipeline流水線,以下是平臺運營的實際截圖。 截圖上邊開發(fā)階段、集成階段、預(yù)發(fā)階段、發(fā)布階段,我們叫它迭代模板,這些迭代模板都是可以按需進行定制的。在螞蟻我們鼓勵基于GitFlow的最佳實踐,通過MR而不是PUSH的方式,向項目分支和主干提交代碼,這樣的話給代碼門禁和流水線檢測提供一個機會。事實上我們流水線的Pipeline的所有節(jié)點和組件都是可編排的、可擴展的??蓴U展的意思是說,業(yè)務(wù)可以根據(jù)自己的需要,把自己自建的一些測試工具、質(zhì)量工具,封裝成標準組件,接入到整個Pipeline流水線中來。 這樣的話每執(zhí)行完一個組件平臺都會實時的反饋結(jié)果,并更新迭代的應(yīng)用的質(zhì)量看板,幫助開發(fā)測試同學(xué)來管理質(zhì)量風(fēng)險。
在流水線的執(zhí)行過程中和研發(fā)推進過程里邊會產(chǎn)生大量的日志,為了幫助同學(xué)們快速的通過日志來定位到問題,節(jié)約同學(xué)們在定位解決問題上的時間成本,我們針對性的開發(fā)了日志診斷服務(wù)系統(tǒng),為用戶提供一個統(tǒng)一的日志查看界面,減少不必要的信息的干擾。 同時我們通過這些異常問題的知識庫,對常見的一些問題提供精準的定位和解決方案的推薦,提高開發(fā)同學(xué)的研發(fā)效率。
當(dāng)每個流水線組建執(zhí)行之后,那么應(yīng)用的質(zhì)量看板會實時的更新,這里邊我們也做了一個截圖,比如說質(zhì)量分, PMD安全問題,還包括測試的通過率、覆蓋率,除此之外,我們還提供一些代碼行接口、注釋率、重復(fù)度等基本的統(tǒng)計信息。每次代碼變更,我們都能夠看到整個質(zhì)量分,包括質(zhì)量數(shù)據(jù)的更新變化情況,做一個很好的追溯。
此外我們還提供流程審批的能力,在實際的項目研發(fā)過程里邊,我們鼓勵自動化,但很多時候必要的人肉介入又不可避免。比如說技術(shù)風(fēng)險評估、發(fā)布、評審這些場景,就需要專家介入去評估一些風(fēng)險。所以靈活可配置的這種流程審批就非常有用了。
接下來我們介紹持續(xù)部署,其實部署這邊主要分兩塊,首先是線下環(huán)境的自動部署,我們平臺通過和 SOFAStack的運維管理相關(guān)模塊的無縫集成,提供了自動部署的能力。它也是以流水線組件的方式執(zhí)行,需要查看詳情就直接跳轉(zhuǎn)都能夠看到整個部署的日志以及結(jié)果。
然后是一鍵提交生產(chǎn)發(fā)布。對于金融機構(gòu)來講的話,監(jiān)管對線上和線下隔離這一塊有明確的要求,所以線下我們支持自動部署,線上的話我們提供這種一鍵提交生產(chǎn)發(fā)布的能力,自動推送發(fā)布單并同步查詢發(fā)布單的狀態(tài),這樣有發(fā)布權(quán)限的同學(xué)就可以登錄到生產(chǎn)環(huán)境去執(zhí)行發(fā)布了。在這個過程里邊,我們通過網(wǎng)絡(luò)白名單、open API接口級別的權(quán)限控制這些技術(shù)手段,來確保線上和線下是真正有效隔離的。
接下來分享一下發(fā)布策略,這里邊提到一個概念變更三板斧,這個也是我們螞蟻內(nèi)部技術(shù)風(fēng)險條例的核心思想,所有的應(yīng)用研發(fā)的底線要求。變更三板斧大概三個方面,一個叫可灰度,要求應(yīng)用發(fā)布過程確保變更的影響程度,影響面是可控的,又可以快速地應(yīng)急,具體策略包括灰度,分組,Beta,藍綠這些。第二個叫做可監(jiān)控。,在應(yīng)用上線之前要進行日志的埋點,監(jiān)控的配置不僅要有,而且需要確保監(jiān)控的準確性,直觀性,進而保證整個變更的過程都是可監(jiān)控的。第三個叫可應(yīng)急,隨時暫?;貪L,任何變更都有據(jù)可查。其實針對變更三板斧,容器應(yīng)用服務(wù)上面有很好的實踐,比如說包括分組的灰度發(fā)布、無損升級,可適配多種設(shè)計工作負載,這些能夠很好的貫徹變更三板斧的思想。
接下來進入測試驗證部分,首先是分層測試的能力,我們主要談兩個方面。首先就是測試環(huán)境、環(huán)境策略,從開發(fā)到集成、預(yù)發(fā)、灰度,我們的環(huán)境一步步的去接近和模擬生產(chǎn)環(huán)境,確保生產(chǎn)發(fā)布最后是沒有問題的。其次就是分層自動化測試驗證能力,我們將單元自動化、接口自動化,結(jié)合研發(fā)效能平臺,靈活的通過Pipeline流水線的組件去執(zhí)行,統(tǒng)一賦能給全螞蟻的研發(fā)團隊。
針對外部很多機構(gòu)在自動化測試腳本的編碼方面有很大的能力和效率上的痛點,我們提供了測試腳本輔助生成的ACTS測試框架?;跀?shù)據(jù)模型驅(qū)動測試引擎執(zhí)行,適配TestNG+Spring的測試上下文環(huán)境,以yaml為數(shù)據(jù)載體,實現(xiàn)了這種一站式的編輯、精細化的校驗和高效的用例管理,能夠有效的提升這種測試腳本的效率。
前面提的,無論是單元自動化還是接口自動化,都是應(yīng)用及系統(tǒng)級別的測試。那么端到端的話一般都更帶有業(yè)務(wù)屬性,全鏈路的測試。螞蟻經(jīng)過這么多年在分布式架構(gòu)工程測試領(lǐng)域的積累,沉淀了這種根據(jù)業(yè)務(wù)場景自適應(yīng)加載測試流程,動態(tài)編排,精細化校驗的金融級的端到端的測試能力,它又輕量又標準,幫助研發(fā)測試團隊提升業(yè)務(wù)測試效率和質(zhì)量保障能力。
在螞蟻金服開展這么多的研發(fā)效能的工程實踐,那么我們的平臺是如何來支撐的?首先是 SOFAStack-LinkE的公共云的產(chǎn)品大圖,上面是支撐的業(yè)務(wù)以及交付的價值,我們重點介紹中間產(chǎn)品層,目前我們提供了兩個組件,一個是項目協(xié)作,主要就是包括需求、項目、沖刺和工作項的管理。然后第二個組件就是持續(xù)交付,從編碼到測試、到部署、到發(fā)布,整個端到端的支撐,下邊有配套的代碼服務(wù),持續(xù)集成、持續(xù)部署、測試服務(wù)的這些組件。
那么,我們把SOFA-LinkE的產(chǎn)品能力做一個總結(jié),大體七個方面:項目協(xié)作、代碼服務(wù)、持續(xù)交付、代碼分析、測試服務(wù)、流程審批、環(huán)境管理。
SOFA-LinkE研發(fā)效能平臺,主要輸出這四塊的產(chǎn)品價值。
就平臺產(chǎn)品特色而言,主要體現(xiàn)在三個方面:可擴展、可編排、多樣化??蓴U展主要指的是Pipline流水線的組件是支持自定義的;可編排體現(xiàn)在研發(fā)迭代流程及流水線,可根據(jù)業(yè)務(wù)需要對其進行配置;多樣化支撐多種分支策略,多種技術(shù)棧,經(jīng)典與云原生架構(gòu)的雙模支持。
在多樣化的分支發(fā)布策略方面,我們內(nèi)部大概有是這4種玩法,一種叫日常發(fā)布,其實就是全站的窗口發(fā)布,主要適用于全站的這種核心鏈路上的業(yè)務(wù)應(yīng)用,之間有一定的關(guān)聯(lián)和耦合,每周發(fā)布一次。事實上現(xiàn)在我們?nèi)粘0l(fā)布已經(jīng)消除了。第二個叫獨立發(fā)布,主要場景在獨立業(yè)務(wù)域里應(yīng)用之間有一定的耦合度,但是更多的是為了管控的需要,把一些應(yīng)用集中放在一個窗口去發(fā)。 第三個我們叫它單應(yīng)用發(fā)布,相關(guān)應(yīng)用業(yè)務(wù)獨立性強、架構(gòu)層面完全解耦,單應(yīng)用想怎么走就怎么走,想什么時候發(fā)就什么時候發(fā)。前三種都是我們標準的分支策略叫分支開發(fā)主干。然后第四種緊急發(fā)布,主要是為了響應(yīng)緊急業(yè)務(wù)需求或者是修復(fù)線上的故障,通常是分支開發(fā)分支發(fā)布的模式。那么通過這四種模式,螞蟻所有的業(yè)務(wù)場景基本上都能滿足,你想怎么玩都能夠覆蓋到。
接下來我們談到云原生,隨著螞蟻金服對云原生理念的理解越來越深,我們相信未來的金融級應(yīng)用場景都會往這種極致的彈性和混合云方向去發(fā)展。所以我們的架構(gòu)也一直在不斷的演進,去擁抱云原生。向云原生新型技術(shù)轉(zhuǎn)變的過程里邊,不同場景的應(yīng)用很難一步到位,所以為了滿足這種業(yè)務(wù)的需要,我們同步的去支持經(jīng)典的研發(fā)模式以及云原生的研發(fā)模式。在云原生的改造中,老業(yè)務(wù)、新老業(yè)務(wù)并存過渡,通過統(tǒng)一的研發(fā)平臺,同時支持基于虛擬機和容器的雙模持續(xù)交付,助力于整個架構(gòu)的穩(wěn)妥的演進和遷移。
金融行業(yè)本身受到嚴格的監(jiān)管,螞蟻在滿足監(jiān)管以及行業(yè)規(guī)范的領(lǐng)域里也積累了一套做法,并在我們的研發(fā)效能平臺上將這些經(jīng)驗進行了沉淀。通過有效的技術(shù)手段去滿足監(jiān)管合規(guī)的要求,形成了金融級的技術(shù)風(fēng)險的防控手段,把它內(nèi)化到研發(fā)項目平臺里面去了,能夠幫助咱們企業(yè)在數(shù)字化轉(zhuǎn)型的背景下邊實現(xiàn)這種穩(wěn)妥的創(chuàng)新。
接下來是最后的解決方案部分,做研發(fā)效能其實還是要想實現(xiàn)整個DevOps跨職能的全流程協(xié)同,不同的職能團隊能夠高效地協(xié)同在一起,特別是開發(fā)、測試和運維。
介紹一下螞蟻一站式研發(fā)效能解決方案,下圖中間部分屬于螞蟻研發(fā)效能平臺的范圍,提供從需求到發(fā)布的整個持續(xù)交付的引擎,將整個DevOps的工程能力集成串接在一起,具體能力前面都有提到。大圖底部是應(yīng)用PaaS平臺,就是咱們SOFAStack運維管理相關(guān)的組件,效能平臺通過open API和它交互,打通整個環(huán)境管理和環(huán)境部署這些功能,也實現(xiàn)了經(jīng)典發(fā)布部署和容器應(yīng)用服務(wù)的雙模支持。 大圖右側(cè)是對螞蟻智能科技其他產(chǎn)品的集成和支持,通過研發(fā)容器統(tǒng)一管理多環(huán)境的中間件配置,實現(xiàn)環(huán)境的隔離,迭代推進過程中不同環(huán)境之間的自動同步和生效。另外我們支持技術(shù)風(fēng)險防控平臺以及端到端測試等產(chǎn)品的集成和聯(lián)動。螞蟻研發(fā)的平臺本身具備開放集成能力,所以可以通過自定義組件的方式來對接其他平臺的能力以及業(yè)務(wù)自建的一些資產(chǎn),比如說質(zhì)量測試等工具,最終實現(xiàn)一站式的智能研發(fā)平臺的方案。
那么我們可以提供哪些軟性的服務(wù),下圖展示了咨詢及其具體領(lǐng)域,然后我們可以和客戶一起來針對痛點建立研發(fā)規(guī)范,我們還提供沙盤幫助用戶快速的在實際項目里邊去演練整套的規(guī)范以及平臺工具。
最后給大家介紹的是整個DevOps轉(zhuǎn)型的一個路徑,大概分這幾個階段: 第一個階段就是咨詢診斷階段,出具DevOps的實施方案以及落地規(guī)劃,包括平臺的搭建。第二個階段就是培訓(xùn)賦能,這里邊就包括理念的培訓(xùn),產(chǎn)品的培訓(xùn),要建立統(tǒng)一的體系和流程規(guī)范。 第三個我們提供沙盤演練,讓項目組的同學(xué)真正的了解敏捷、流水線和自動化,通過在項目里試運行,為企業(yè)內(nèi)部研發(fā)效能團隊賦能,培養(yǎng)帶頭人。第四制定落地的目標和規(guī)劃,配合企業(yè)按照業(yè)務(wù)或者按照產(chǎn)品線去落地實施,通過日常監(jiān)控以及數(shù)據(jù)的分析,能夠持續(xù)的去解決痛點,去推動效能的持續(xù)提升。
以上就是我今天分享的全部內(nèi)容了,希望對大家有所幫助,也希望大家去關(guān)注我們已經(jīng)商業(yè)化的SOFAStack產(chǎn)品,特別是LinkE研發(fā)效能相關(guān)的組件。
謝謝大家。如果有問題我們可以線下持續(xù)去探討。