<kbd id="5sdj3"></kbd>
<th id="5sdj3"></th>

  • <dd id="5sdj3"><form id="5sdj3"></form></dd>
    <td id="5sdj3"><form id="5sdj3"><big id="5sdj3"></big></form></td><del id="5sdj3"></del>

  • <dd id="5sdj3"></dd>
    <dfn id="5sdj3"></dfn>
  • <th id="5sdj3"></th>
    <tfoot id="5sdj3"><menuitem id="5sdj3"></menuitem></tfoot>

  • <td id="5sdj3"><form id="5sdj3"><menu id="5sdj3"></menu></form></td>
  • <kbd id="5sdj3"><form id="5sdj3"></form></kbd>

    云原生架構(gòu)下的持續(xù)交付實(shí)踐

    共 6898字,需瀏覽 14分鐘

     ·

    2021-11-14 13:48

    點(diǎn)擊上方“服務(wù)端思維”,選擇“設(shè)為星標(biāo)

    回復(fù)”669“獲取獨(dú)家整理的精選資料集

    回復(fù)”加群“加入全國(guó)服務(wù)端高端社群「后端圈」


    作者 | 烏拉
    出品?| 愛(ài)番番技術(shù)

    全文約6100字,預(yù)計(jì)閱讀時(shí)間15分鐘

    導(dǎo)讀

    隨著虛擬化技術(shù)的成熟和分布式框架的普及,在容器技術(shù)、可持續(xù)交付、編排系統(tǒng)等開(kāi)源社區(qū)的推動(dòng)下,以及微服務(wù)等開(kāi)發(fā)理念的帶動(dòng)下,應(yīng)用上云已經(jīng)是不可逆轉(zhuǎn)的趨勢(shì)。
    微服務(wù)架構(gòu)下服務(wù)數(shù)量爆炸式增長(zhǎng),對(duì)應(yīng)的交付基建工作量暴增,且服務(wù)間拓?fù)鋸?fù)雜,又導(dǎo)致了升級(jí)影響難評(píng)估、問(wèn)題定位困難、單獨(dú)測(cè)試環(huán)境成本極高等問(wèn)題給高效能交付帶來(lái)了極大挑戰(zhàn)。另一方面,云原生帶來(lái)了標(biāo)準(zhǔn)化、松耦合、易觀測(cè)、易擴(kuò)展的特性,為交付基建與業(yè)務(wù)解耦、更靈活的環(huán)境管理和、無(wú)損發(fā)布帶來(lái)新機(jī)遇。
    愛(ài)番番產(chǎn)品從 20 年 4 月 全面云化,在云化時(shí)代,我們?nèi)绾慰朔鲜鲂芴魬?zhàn),同時(shí)利用云原生的技術(shù)紅利實(shí)現(xiàn)產(chǎn)品的高效能交付呢?

    1. 微服務(wù)架構(gòu)下效能體系面臨的挑戰(zhàn)

    愛(ài)番番是典型的 toB 型業(yè)務(wù),具有以下特點(diǎn):

    • 從產(chǎn)品形態(tài)上,產(chǎn)品戰(zhàn)線長(zhǎng),涵蓋 ( 拓、聊、追、洞察 ) 等核心產(chǎn)品能力。
    • 從市場(chǎng)環(huán)境上,市場(chǎng)環(huán)境環(huán)境競(jìng)爭(zhēng)異常激烈,對(duì)產(chǎn)研的效率與質(zhì)量提出更高的要求。
    • 從研發(fā)模式上,產(chǎn)品與研發(fā)采用敏捷思維研發(fā),需要不斷的創(chuàng)新與試錯(cuò),快速完成 PoC及 MVP 產(chǎn)品的研發(fā)上線。
    • 從部署形態(tài)上,除了提供 SaaS 服務(wù)外,同時(shí)具有多樣化售賣的訴求。

    團(tuán)隊(duì)以業(yè)務(wù)領(lǐng)域劃分的多個(gè)?scrumTeam,如下圖

    團(tuán)隊(duì)持續(xù)交付面臨的挑戰(zhàn):

    1. 服務(wù)爆炸導(dǎo)致的基礎(chǔ)設(shè)施成本劇增。活躍模塊數(shù) 200+,月均新增模塊 8個(gè),每個(gè)模塊需要接入的基礎(chǔ)設(shè)施如下圖,導(dǎo)致需要大量人力進(jìn)行流水線、監(jiān)控等基礎(chǔ)設(shè)施接入管理維護(hù)。

    2. 復(fù)雜拓?fù)鋵?dǎo)致的問(wèn)題定位困難和回歸范圍難以評(píng)估。服務(wù)間拓?fù)鋸?fù)雜,導(dǎo)致升級(jí)影響難評(píng)估、回歸漏測(cè)多、線上問(wèn)題定位困難、環(huán)境規(guī)模龐大,聯(lián)調(diào)測(cè)試成本高等問(wèn)題。

    3. 越來(lái)越高頻的發(fā)布需求和隨拓?fù)鋸?fù)雜度提升的發(fā)布成本的矛盾。模塊眾多且復(fù)雜拓?fù)?,而且模塊間上線有依賴關(guān)系,每次上線 100+ 模塊,人工控制流程,風(fēng)險(xiǎn)高而且效率越發(fā)低下,但業(yè)務(wù)上發(fā)布的需求愈發(fā)頻繁,在高頻次的發(fā)布下,如何保障發(fā)布過(guò)程的高效、安全也是一項(xiàng)極大的挑戰(zhàn)。

    2. 云原生架構(gòu)下的持續(xù)交付實(shí)踐

    為實(shí)現(xiàn)團(tuán)隊(duì)高效的價(jià)值交付,我們從敏捷機(jī)制改進(jìn)和全流程持續(xù)交付能力提升兩方面開(kāi)展了建設(shè):

    流程機(jī)制層面:?用戶價(jià)值,流動(dòng)效率提升為核心的敏捷體系建設(shè),包含以下幾個(gè)方面:

    • 敏捷迭代機(jī)制:以用戶價(jià)值流動(dòng)效率為核心理念,保障團(tuán)隊(duì)目標(biāo)一致,信息透明。
    • 需求拆分管理:標(biāo)準(zhǔn)化、可視化、自動(dòng)化的管理機(jī)制,在成本可控的前提下達(dá)成小批量需求加速流動(dòng),快速驗(yàn)證價(jià)值。
    • 分支模式和環(huán)境管理:基于云原生強(qiáng)大的流量管控能力,實(shí)現(xiàn)基于 istio 的全鏈路灰度環(huán)境能力,實(shí)現(xiàn)簡(jiǎn)潔、靈活、低風(fēng)險(xiǎn)的分支模式。
    • 全流程的數(shù)據(jù)度量體系:通過(guò)目標(biāo)指標(biāo)度量了解現(xiàn)狀,過(guò)程指標(biāo)度量挖掘問(wèn)題,問(wèn)題自動(dòng)創(chuàng)建任務(wù),協(xié)同 peer 推動(dòng)問(wèn)題閉環(huán)。

    技術(shù)層面:全流程環(huán)節(jié)自動(dòng)化智能化提升,包含以下幾個(gè)方面:

    • 基礎(chǔ)設(shè)施:建設(shè)與業(yè)務(wù)解耦的基礎(chǔ)設(shè)施服務(wù),解決服務(wù)爆炸帶來(lái)的成本問(wèn)題。

    • 自動(dòng)化:微服務(wù)下合理分層自動(dòng)化體系,可控投入下保障有效質(zhì)量召回,解決復(fù)雜拓?fù)鋷?lái)的回歸漏測(cè)問(wèn)題。

    • 發(fā)布能力:一鍵操作高效執(zhí)行、過(guò)程可視、可感知、可控的極致發(fā)布體驗(yàn),解決高頻發(fā)布需求下的發(fā)布成本問(wèn)題。

    • 工具賦能:豐富的工具能力賦能研發(fā)測(cè)試各效能痛點(diǎn)環(huán)節(jié),為人員賦能(建設(shè)中,本文暫不詳細(xì)介紹)。

    下面主要從技術(shù)層面的 3個(gè) 方向逐一進(jìn)行方案說(shuō)明。

    2.1 基礎(chǔ)設(shè)施:與業(yè)務(wù)解耦的 Devops 基礎(chǔ)設(shè)施服務(wù)

    什么是與業(yè)務(wù)解耦的基礎(chǔ)設(shè)施?

    這里的與業(yè)務(wù)解耦其實(shí)是借鑒了serverless 的思路,是指把基礎(chǔ)設(shè)施服務(wù)化,獨(dú)立運(yùn)維。以前,我們的業(yè)務(wù)團(tuán)隊(duì)研發(fā)和 QA,除了需要進(jìn)行業(yè)務(wù)的開(kāi)發(fā)和測(cè)試工作之外,有大量的時(shí)間都花費(fèi)在了新應(yīng)用、日志、配置的接入以及環(huán)境、流水線、監(jiān)控維護(hù)等等和核心業(yè)務(wù)無(wú)關(guān)的事項(xiàng)上,就像下面這個(gè)圖的左邊,而且,任意基礎(chǔ)設(shè)施服務(wù)要升級(jí),比如日志平臺(tái) SDK 升級(jí)、流水線需要統(tǒng)一增加一項(xiàng)安全檢測(cè)環(huán)節(jié)等等,都需要各個(gè)業(yè)務(wù)團(tuán)隊(duì)配合升級(jí),落地推廣困難。如果我們把這些基建內(nèi)容通過(guò)服務(wù)化的形式提供給業(yè)務(wù)團(tuán)隊(duì)使用,就能讓業(yè)務(wù)研發(fā)和 QA 聚焦于業(yè)務(wù)的關(guān)鍵事項(xiàng),從而大幅度提升團(tuán)隊(duì)效能。就像下面的右邊這個(gè)圖。同時(shí)基礎(chǔ)設(shè)施的升級(jí)業(yè)務(wù)無(wú)感知,再也不會(huì)有基礎(chǔ)設(shè)施能力落地推廣困難的問(wèn)題。


    上文已經(jīng)提到,基礎(chǔ)設(shè)施面臨的最大問(wèn)題是,由于爆炸的服務(wù)個(gè)數(shù)帶來(lái)的暴增的 Devops 基礎(chǔ)設(shè)施接入和維護(hù)成本問(wèn)題。如果能打造服務(wù)化的基礎(chǔ)設(shè)施,就可以實(shí)現(xiàn)基礎(chǔ)設(shè)施的 0 成本接入和運(yùn)維。那么如何打造與業(yè)務(wù)解耦,服務(wù)化的基礎(chǔ)設(shè)施呢?

    2.1.1 基礎(chǔ)設(shè)施標(biāo)準(zhǔn)化

    與業(yè)務(wù)解耦的第一步是基礎(chǔ)設(shè)施的標(biāo)準(zhǔn)化,只有標(biāo)準(zhǔn)化的過(guò)程才有可能規(guī)?;瑥亩鴮?shí)現(xiàn)技術(shù)設(shè)施服務(wù)化。我們主要針對(duì)以下幾部分內(nèi)容進(jìn)行了標(biāo)準(zhǔn)化改造:
    模塊標(biāo)準(zhǔn)化:代碼結(jié)構(gòu)、打包流程、標(biāo)準(zhǔn)容器、鏡像管理、部署過(guò)程。
    標(biāo)準(zhǔn)流水線
    標(biāo)準(zhǔn)的基礎(chǔ)服務(wù):APM組件、配置中心、發(fā)布平臺(tái)、資源管理。
    研發(fā)模式:

    2.1.2 聲明式基礎(chǔ)設(shè)施

    與業(yè)務(wù)解耦的第二步,是基于標(biāo)準(zhǔn)化的基礎(chǔ)上,建立聲明式的基礎(chǔ)設(shè)施能力。這里的聲明式是指給業(yè)務(wù)團(tuán)隊(duì)聲明式的基礎(chǔ)設(shè)施體驗(yàn)。業(yè)務(wù)團(tuán)隊(duì)只需要在標(biāo)準(zhǔn)配置中聲明一些基礎(chǔ)屬性,即可自動(dòng)完成所有基礎(chǔ)設(shè)施的接入,且后續(xù)維護(hù)上業(yè)務(wù) 0 成本。主要分為兩個(gè)環(huán)節(jié)的建設(shè):

    接入時(shí):分鐘級(jí)的一鍵接入

    我們的做法是通過(guò)腳手架為抓手來(lái)構(gòu)建基礎(chǔ)設(shè)施的一鍵接入能力。如下圖所示:



    • 腳手架:自動(dòng)生成框架代碼,包含基礎(chǔ) apm 組件、api 管理平臺(tái)等的接入。

    • configMap:自動(dòng)生成應(yīng)用標(biāo)準(zhǔn)配置并基于配置新增/變更主動(dòng)觸發(fā)接入服務(wù)。

    • 接入服務(wù):拉取 configMap 配置并解析,根據(jù)配置內(nèi)容調(diào)度不同的基礎(chǔ)設(shè)施服務(wù)完成接入初始化。

    腳手架是我們這邊新模塊創(chuàng)建的入口。所有新代碼庫(kù)都是通過(guò)腳手架創(chuàng)建,他會(huì)幫助開(kāi)發(fā)自動(dòng)生成一整套集成了標(biāo)準(zhǔn)組件的代碼框架。

    在腳手架創(chuàng)建新模塊的時(shí)候,根據(jù)業(yè)務(wù)聲明的模塊屬性,如是否接入 apm、模塊代碼類型、模塊服務(wù)類型等等自動(dòng)完流水線創(chuàng)建、基礎(chǔ)組件接入、集群環(huán)境申請(qǐng)、配置文件生成等操作。一個(gè)新的服務(wù),從創(chuàng)建代碼庫(kù)到服務(wù)全套基礎(chǔ)設(shè)施接入完成,服務(wù)可直接部署到測(cè)試集群的時(shí)間< 10 分鐘。

    運(yùn)行時(shí):根據(jù)服務(wù)聲明內(nèi)容動(dòng)態(tài)運(yùn)行,實(shí)現(xiàn)業(yè)務(wù)升級(jí)維護(hù)0成本

    基礎(chǔ)組件部分,因?yàn)槎际且?sidecar 模式提供服務(wù),所以運(yùn)行時(shí)天然與業(yè)務(wù)解耦,因此重點(diǎn)在于如何實(shí)現(xiàn)流水線在運(yùn)行時(shí)與業(yè)務(wù)解耦。我們針對(duì)流水線進(jìn)行了模板化、參數(shù)化改造,并和業(yè)務(wù)的聲明屬性結(jié)合。就像下面這張圖,流水線每次都是動(dòng)態(tài)運(yùn)行的,運(yùn)行的內(nèi)容是依賴左側(cè) 5部分聲明數(shù)據(jù)實(shí)時(shí)生成,包括 cicd 通用配置、流水線模板、任務(wù)腳本、任務(wù)策略、業(yè)務(wù)聲明屬性。除了業(yè)務(wù)自己的聲明文件,其余部分都是基礎(chǔ)設(shè)施組獨(dú)立運(yùn)維,故對(duì)應(yīng)任務(wù)優(yōu)化、添加、統(tǒng)一配置修改等均對(duì)業(yè)務(wù)透明。如下圖,如果要針對(duì)流水線上的某個(gè)環(huán)節(jié)進(jìn)行優(yōu)化,或者增加一些環(huán)節(jié),僅需基礎(chǔ)設(shè)施組修改流水線模板或者任務(wù)腳本即可。

    2.1.3?智能化基礎(chǔ)設(shè)施

    與業(yè)務(wù)解耦的第三步,通過(guò)智能化的策略能力,實(shí)現(xiàn)高穩(wěn)定的基礎(chǔ)設(shè)施服務(wù)。

    服務(wù)化之后,基礎(chǔ)設(shè)施作為獨(dú)立運(yùn)維的服務(wù),所有的問(wèn)題都需要設(shè)施團(tuán)隊(duì)獨(dú)立維護(hù)排查,所以與業(yè)務(wù)解耦的第三步就是建立高穩(wěn)定高效低運(yùn)維成本的基礎(chǔ)設(shè)施能力。我們的思路是通過(guò)智能化的策略,來(lái)保障高效和穩(wěn)定。在流水線運(yùn)行的前中后通過(guò)策略給流水線增加一個(gè)”監(jiān)工”,模擬人工判斷任務(wù)是否應(yīng)該執(zhí)行,模擬人工分析跟進(jìn)、修復(fù)問(wèn)題等。

    分析常見(jiàn)的流水線穩(wěn)定和效率問(wèn)題比如環(huán)境不穩(wěn)定、底層資源不穩(wěn)定、網(wǎng)絡(luò)異常等等,大體可分為 偶發(fā)問(wèn)題重試可恢復(fù)、問(wèn)題相對(duì)復(fù)雜需人工排查、阻塞問(wèn)題需人工修復(fù)三類。而效率方面大量重復(fù)、無(wú)效任務(wù)比如只加了個(gè) log 也要跑全套測(cè)試流程,導(dǎo)致了資源浪費(fèi),也導(dǎo)致了執(zhí)行效率低下。如下圖左側(cè)所示:

    針對(duì)這些場(chǎng)景,我們?cè)诹魉€運(yùn)行前后都添加了可配置的策略判斷過(guò)程,判斷任務(wù)是否需要跳過(guò)、排隊(duì)、重試等等,從而提升穩(wěn)定性和效率。

    典型場(chǎng)景:

    自動(dòng)紅燈分析:任務(wù)失敗后可自動(dòng)根據(jù)日志錯(cuò)誤碼分析問(wèn)題原因并給出標(biāo)注,方面后續(xù)根據(jù)統(tǒng)計(jì)數(shù)據(jù)更有效的優(yōu)化。

    排隊(duì)策略:在自動(dòng)化等任務(wù)執(zhí)行之前,自動(dòng)檢測(cè)依賴環(huán)境是否正常,從而降低運(yùn)行失敗導(dǎo)致的紅燈。

    2.1.4?與業(yè)務(wù)解耦的基礎(chǔ)設(shè)施帶來(lái)的收益

    成本:模版創(chuàng)建&維護(hù)流水線 1000+,降低創(chuàng)建和維護(hù)成本 90%。

    穩(wěn)定:流水線整體穩(wěn)定性從 85% 提升到 95%, 工具鏈穩(wěn)定性從 95% 提升到 99%。

    效率:代碼提交到部署完成 80 分位時(shí)間從 30+ 分鐘降低到 10 分鐘。

    2.2 自動(dòng)化:分層自動(dòng)化體系

    解決了服務(wù)暴增的問(wèn)題,下面我們來(lái)看復(fù)雜拓?fù)湎碌幕貧w漏測(cè)問(wèn)題。通常情況下解決回歸的質(zhì)量和效率問(wèn)題,都會(huì)想到自動(dòng)化測(cè)試。但是云原生微服務(wù)架構(gòu)下,什么樣的分層自動(dòng)化體系,可以既保障召回,又不引入過(guò)多的自動(dòng)化建設(shè)和維護(hù)成本呢?和傳統(tǒng) 3 層金字塔自動(dòng)化不一樣,云原生架構(gòu)下的自動(dòng)化,由于服務(wù)內(nèi)部相對(duì)簡(jiǎn)單,而服務(wù)拓?fù)鋸?fù)雜,所以測(cè)試的重點(diǎn)是在系統(tǒng)端到端測(cè)試,實(shí)際的分層測(cè)試的比重更像一個(gè)倒過(guò)來(lái)的金字塔。



    而由于端到端成本過(guò)高,考慮到投入產(chǎn)出比,愛(ài)番番的分層自動(dòng)化是按照右下角這個(gè)結(jié)構(gòu)來(lái)建設(shè)的,其中接口 DIFF 測(cè)試、契約測(cè)試、純前端 DIFF 測(cè)試是無(wú)人工介入,最核心的三個(gè)部分。下面會(huì)就接口 DIFF 自動(dòng)化測(cè)試和契約測(cè)試方案進(jìn)行說(shuō)明。

    2.2.1?基于全鏈路灰度環(huán)境的接口DIFF自動(dòng)化

    2.2.1.1?全鏈路灰度方案

    我們接口的 DIFF 測(cè)試是基于強(qiáng)大的全鏈路灰度環(huán)境能力來(lái)建設(shè)的,這是云原生架構(gòu)給我們帶來(lái)的紅利。先介紹下我們的全鏈路灰度方案。

    我們是基于 istio 的靈活的路由能力,通過(guò)同構(gòu)底層「分組多維路由」的架構(gòu)設(shè)計(jì), 自研 CRD Operator 構(gòu)建愛(ài)番番的「全鏈路灰度發(fā)布」平臺(tái)。該方案支持了我們的線下多路復(fù)用環(huán)境、線上安全的容量評(píng)估以及金絲雀發(fā)布等多個(gè)場(chǎng)景。

    2.2.1.2?測(cè)試環(huán)境多路復(fù)用

    測(cè)試環(huán)境多路復(fù)用是指,使用有限的資源,在一套基礎(chǔ)環(huán)境上邏輯隔離出多套環(huán)境,支持并行開(kāi)發(fā)、聯(lián)調(diào)的需求。

    如下圖所示,不同的分支對(duì)應(yīng)著不同的 feature,通過(guò)流量染色 + 流量規(guī)則路由的方式,使得不同分支擁有邏輯上隔離的環(huán)境,支持并行開(kāi)發(fā)。在前端給流量打上橘色標(biāo)記之后,全鏈路的請(qǐng)求會(huì)走橘色的鏈路進(jìn)行訪問(wèn)。


    2.2.1.3?基于多路復(fù)用的 DIFF 測(cè)試

    有了如上所述的多套邏輯隔離的測(cè)試環(huán)境之后,每當(dāng)有新的分支環(huán)境拉出并有代碼更新時(shí),即可通過(guò)將流量在 base 環(huán)境( 部署最后一次上線的代碼 )和新分支環(huán)境進(jìn)行回放,并對(duì)比兩者的返回是否存在差異來(lái)進(jìn)行回歸測(cè)試。我們的 diff 方案如下:

    該方案具備如下幾個(gè)優(yōu)點(diǎn):
    • 基于流量回放的接口 diff,最大限度的覆蓋線上用戶真實(shí)場(chǎng)景。

    • 全流程自動(dòng)化,無(wú)人工參與。

    • 配置化的流量篩選策略和 diff 策略接入,便于擴(kuò)展優(yōu)化。

    • 分布式任務(wù)運(yùn)行,支持大批量并發(fā)。

    2.2.2?保障召回服務(wù)間調(diào)用問(wèn)題的契約測(cè)試

    2.2.2.1?什么是契約測(cè)試

    微服務(wù)的架構(gòu),服務(wù)之間依賴復(fù)雜,而且通常每個(gè)服務(wù)都是獨(dú)立的團(tuán)隊(duì)維護(hù),服務(wù)和服務(wù)之間,前后端之間大多通過(guò) API 調(diào)用。那么這種情況下可能就會(huì)出現(xiàn)如下場(chǎng)景:A 團(tuán)隊(duì)開(kāi)發(fā)的 API 同時(shí)服務(wù)于 B\C 團(tuán)隊(duì)。最開(kāi)始測(cè)試的時(shí)候都是通過(guò)的。但是后續(xù)迭代中,B 團(tuán)隊(duì)對(duì)字段 A 有一些調(diào)整的需求,A 團(tuán)隊(duì)根據(jù)需求改了,也測(cè)試通過(guò)了,但是上線后發(fā)現(xiàn) C 團(tuán)隊(duì)功能異常了。

    以上問(wèn)題的本質(zhì)原因?yàn)椋?/p>

    服務(wù)提供方服務(wù)的消費(fèi)者越來(lái)越多的情況下,服務(wù)的變更影響難以評(píng)估,服務(wù)的變更也不能及時(shí)同步到所有消費(fèi)者,所以往往是消費(fèi)方發(fā)現(xiàn)問(wèn)題了反饋,導(dǎo)致?lián)p失。為了避免上述問(wèn)題,我們引入了契約測(cè)試。

    契約測(cè)試的核心思路是通過(guò)消費(fèi)者驅(qū)動(dòng)的方式,建立服務(wù)端和各個(gè)消費(fèi)端之前的契約,在服務(wù)端有修改之后,通過(guò)測(cè)試和所有消費(fèi)方之前的契約是否被毀壞來(lái)保障服務(wù)升級(jí)的安全性。同時(shí),契約也可以作為雙方測(cè)試解耦的手段。通過(guò)契約測(cè)試,團(tuán)隊(duì)能以一種離線的方式 ( 不需要消費(fèi)者、提供者同時(shí)在線 ),通過(guò)契約作為中間的標(biāo)準(zhǔn),驗(yàn)證提供者提供的內(nèi)容是否滿足消費(fèi)者的期望。

    2.2.2.2?常見(jiàn)的契約測(cè)試方案

    常見(jiàn)的契約測(cè)試方案有真正實(shí)踐消費(fèi)者驅(qū)動(dòng)的如 pact,契約由消費(fèi)端生成并維護(hù),提供方代碼更新之后,拉取所有消費(fèi)方契約進(jìn)行測(cè)試,即解決了集成測(cè)試解耦問(wèn)題,又保障了服務(wù)方能滿足所有消費(fèi)方需求。( 下左圖 )

    也有非消費(fèi)者驅(qū)動(dòng),提供方生產(chǎn)契約,并提供 mock 服務(wù),消費(fèi)方可以基于契約文件測(cè)試,如Spring Cloud Contract。只能解決集成測(cè)試解耦的問(wèn)題。( 下右圖 )

    2.2.2.3?愛(ài)番番的契約測(cè)試方案

    愛(ài)番番的方案則是取了折中。一方面由于團(tuán)隊(duì)習(xí)慣,契約一直是服務(wù)提供方給出,另一方面又希望保留消費(fèi)者驅(qū)動(dòng)特性,從而保障服務(wù)方能滿足所有消費(fèi)方需求。我們選擇了在提供方生成契約,但是通過(guò)線上日志和調(diào)用鏈解析的方式來(lái)補(bǔ)充模擬消費(fèi)端契約case。且整個(gè)過(guò)程全自動(dòng)化。

    2.2.3?問(wèn)題智能定位降低自動(dòng)化維護(hù)成本

    自動(dòng)化雖然是效能提升的好手段,但是長(zhǎng)期以來(lái),自動(dòng)化的穩(wěn)定性問(wèn)題、問(wèn)題跟進(jìn)排查成本的居高不下都是阻止大家開(kāi)展自動(dòng)化建設(shè)或者自動(dòng)化建設(shè)半途而廢的重要原因。針對(duì)自動(dòng)化的穩(wěn)定性提升和跟進(jìn)成本降低,我們建設(shè)了 case 失敗自動(dòng)定位和修復(fù)能力,讓智能化的小助手幫助大家輕輕松松維護(hù) case 運(yùn)行。下面是我們自動(dòng)定位的一個(gè)效果實(shí)例:

    我們會(huì)在自動(dòng)化 case 運(yùn)行失敗后,調(diào)用自動(dòng)定位服務(wù),自動(dòng)對(duì)失敗的 case 進(jìn)行標(biāo)注,根據(jù)標(biāo)注結(jié)果會(huì)對(duì)失敗 case 進(jìn)行分類處理。

    比如,環(huán)境問(wèn)題會(huì)自動(dòng)重試,批量未知會(huì)發(fā)送到自動(dòng)化小組進(jìn)行排查,元素找不到會(huì)發(fā)送到業(yè)務(wù) QA 排查。

    以下是實(shí)現(xiàn)的方案。包含基礎(chǔ)定位能力和基礎(chǔ)數(shù)據(jù)獲取。在這些基礎(chǔ)能力之上,建設(shè)了配置層,實(shí)現(xiàn)配置解析和調(diào)度能力,讓我們可以通過(guò)配置的方式,靈活組合不同的定位策略快速支持不同場(chǎng)景的問(wèn)題定位。


    2.3 發(fā)布能力:高效安全的持續(xù)發(fā)布

    2.3.1?發(fā)布困境

    • 不同類型模塊對(duì)接了不同的發(fā)布平臺(tái)和流程,統(tǒng)一發(fā)布困難,底層發(fā)布方式的變更需要各模塊升級(jí),遷移成本高。

    • 由于模塊眾多且復(fù)雜拓?fù)?,而且模塊間上線有依賴關(guān)系,每次上線 100+ 模塊,人工控制流程,風(fēng)險(xiǎn)高而且效率低。上線過(guò)程的的記錄和分析人耗也很高。

    • 整體上線過(guò)程不可見(jiàn),風(fēng)險(xiǎn)感知滯后。

    如何解決以上問(wèn)題?

    2.3.2?多平臺(tái)部署引擎

    首先是基于云原生構(gòu)建多平臺(tái)統(tǒng)一的部署與發(fā)布引擎,無(wú)縫集成 CICD,實(shí)現(xiàn)發(fā)布過(guò)程的高度標(biāo)準(zhǔn)化,同時(shí)支持多種發(fā)布策略。如下圖:

    通過(guò) CD 發(fā)布平臺(tái)的統(tǒng)一,實(shí)現(xiàn)各類型模塊統(tǒng)一發(fā)布,且底層部署遷移業(yè)務(wù)無(wú)感知。

    2.3.3?發(fā)布劇本設(shè)計(jì)

    有了統(tǒng)一的發(fā)布平臺(tái)之后,為了解決上線過(guò)程復(fù)雜低效的問(wèn)題,我們希望實(shí)現(xiàn)完全自動(dòng)化的發(fā)布過(guò)程。

    分析發(fā)布前后需要進(jìn)行的事項(xiàng),如下圖所示?;谶@些事項(xiàng),梳理了要自動(dòng)完成整個(gè)發(fā)布過(guò)程需要收集的數(shù)據(jù),如右圖所示,包含發(fā)布模塊封板信息、依賴信息、配置信息等等?;谶@些數(shù)據(jù),根據(jù)固定的編排邏輯,自動(dòng)生成服務(wù)發(fā)布拓?fù)湟约氨敬紊暇€步驟。生成的上線拓?fù)浜筒襟E信息經(jīng)人工確認(rèn)之后,自動(dòng)調(diào)用對(duì)應(yīng)上線發(fā)布服務(wù)進(jìn)行發(fā)布,并針對(duì)發(fā)布過(guò)程數(shù)據(jù)自動(dòng)統(tǒng)計(jì),生成發(fā)布過(guò)程總結(jié)。

    2.3.4?過(guò)程可視、可感知、可控的一鍵發(fā)布

    有了自動(dòng)化分發(fā)布過(guò)程之后,為了能夠及時(shí)感知發(fā)布過(guò)程中的問(wèn)題,降低發(fā)布風(fēng)險(xiǎn),進(jìn)行了發(fā)布過(guò)程可視化建設(shè),并與 APM、金絲雀發(fā)布等策略結(jié)合,保障發(fā)布的安全。

    發(fā)布過(guò)程可視:服務(wù)粒度的依賴拓?fù)湟呀?jīng)實(shí)時(shí)上線進(jìn)度展現(xiàn)、過(guò)程可視可感知。

    金絲雀發(fā)布策略:發(fā)布無(wú)損、風(fēng)險(xiǎn)及時(shí)感知并召回。

    3. 整體收益

    迭代 story 量增長(zhǎng) 85.8%,發(fā)布周期穩(wěn)定,研發(fā)測(cè)試周期下降 30%,千行?bug 率從 1.5 降低到 0.5

    4. 未來(lái)展望

    Local 工具箱賦能開(kāi)發(fā)效能,通過(guò) IDE 本地插件工具,賦能開(kāi)發(fā)編碼測(cè)試過(guò)程,提升研發(fā)環(huán)節(jié)效能。

    智能風(fēng)險(xiǎn)識(shí)別,通過(guò)白盒能力,構(gòu)建質(zhì)量風(fēng)險(xiǎn)識(shí)別體系,應(yīng)用于準(zhǔn)入、準(zhǔn)出、灰度等場(chǎng)景。

    5.?作者介紹

    烏拉,在百度愛(ài)番番主要負(fù)責(zé)團(tuán)隊(duì)持續(xù)交付建設(shè)。


    — 本文結(jié)束 —


    ●?漫談設(shè)計(jì)模式在 Spring 框架中的良好實(shí)踐

    ●?顛覆微服務(wù)認(rèn)知:深入思考微服務(wù)的七個(gè)主流觀點(diǎn)

    ●?人人都是 API 設(shè)計(jì)者

    ●?一文講透微服務(wù)下如何保證事務(wù)的一致性

    ●?要黑盒測(cè)試微服務(wù)內(nèi)部服務(wù)間調(diào)用,我該如何實(shí)現(xiàn)?



    關(guān)注我,回復(fù) 「加群」 加入各種主題討論群。



    對(duì)「服務(wù)端思維」有期待,請(qǐng)?jiān)谖哪c(diǎn)個(gè)在看

    喜歡這篇文章,歡迎轉(zhuǎn)發(fā)、分享朋友圈


    在看點(diǎn)這里
    瀏覽 57
    點(diǎn)贊
    評(píng)論
    收藏
    分享

    手機(jī)掃一掃分享

    分享
    舉報(bào)
    評(píng)論
    圖片
    表情
    推薦
    點(diǎn)贊
    評(píng)論
    收藏
    分享

    手機(jī)掃一掃分享

    分享
    舉報(bào)

    <kbd id="5sdj3"></kbd>
    <th id="5sdj3"></th>

  • <dd id="5sdj3"><form id="5sdj3"></form></dd>
    <td id="5sdj3"><form id="5sdj3"><big id="5sdj3"></big></form></td><del id="5sdj3"></del>

  • <dd id="5sdj3"></dd>
    <dfn id="5sdj3"></dfn>
  • <th id="5sdj3"></th>
    <tfoot id="5sdj3"><menuitem id="5sdj3"></menuitem></tfoot>

  • <td id="5sdj3"><form id="5sdj3"><menu id="5sdj3"></menu></form></td>
  • <kbd id="5sdj3"><form id="5sdj3"></form></kbd>
    樱桃视频91 | 狼人综合在线 | 久操精品视频 | 婷婷五月欧美乱伦 | 天堂网www在线资源网 |