精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

從25分鐘到7分鐘,我們用了這些方法提升Rails CI的效率

新聞 系統(tǒng)運維
最近,我們在 Gusto 創(chuàng)下了一個新紀錄:6 分 29 秒。這是我們?yōu)?Gusto 最大的一個應用程序,一個 Rails 單體程序運行測試套件所花費的時間。

 [[330177]]

最近,我們在 Gusto 創(chuàng)下了一個新紀錄:6 分 29 秒。

這是我們?yōu)?Gusto 最大的一個應用程序,一個 Rails 單體程序運行測試套件所花費的時間。6 分 29 秒是公司的持續(xù)集成(CI)流水線啟用以來的最快紀錄。上一次 CI 套件跑出這樣的成績,公司的規(guī)模還很小,而現(xiàn)在我們共有全球數(shù)百名工程師在使用這個 Rails 單體應用,為全美 1% 的小型企業(yè)提供支持。

對 Gusto 而言,高速 CI 流水線并不只是做做樣子,我們把它視為一種競爭優(yōu)勢,代碼部署越快,那么客戶的業(yè)務開展也會越快。隨著 CI 速度的提升,工程師的生產(chǎn)率也在提高,CI 時間每縮短一分鐘,Gusto 每位工程師每周可增加 2%的拉取請求。

我們的目標很簡單,希望讓測試套件的速度成為一個參數(shù)的函數(shù),這個參數(shù)就是:我們愿意花多少錢?將基礎架構(gòu)簡化到這個層面后,就更容易做成本效益分析,例如如果想要將構(gòu)建速度從 7 分鐘提升到 5 分鐘,那么需要花費 1 美元。

這篇文章介紹了我們是怎樣加快測試套件速度的,其中涉及一個 Rails 單體程序和一個主要用 React 編寫的 JavaScript 單頁應用程序(SPA),這些經(jīng)驗適用于所有速度較慢的測試套件。

我的同事 Kent 說,構(gòu)建軟件有 3 個步驟:

  • 讓它跑起來(Make it work)
  • 讓它走上正軌(Make it right)
  • 讓它跑得更快(Make it fast)

“讓它跑起來”指的是做出不會隨便崩潰的軟件。在這一步代碼可能晦澀難懂,但足以為客戶提供價值,并且通過了測試,讓我們能信任它。沒有測試,就很難判斷“它能行嗎?”

“讓它走上正軌”指的是要讓代碼可維護,且易于更改。代碼不僅能在計算機上運行,更要讓人容易理解。新來的工程師可以輕松向代碼添加功能,代碼中的缺陷也應該很容易隔離和糾正。

“讓它跑得更快”指的是要提升軟件性能。為什么它會是最后一步呢?對于像 Gusto 這樣的金融科技公司來說,如果只關注速度卻無視質(zhì)量,那么我們的客戶和我們自己就離破產(chǎn)不遠了。并非每段代碼都需要優(yōu)異的性能,如果一段代碼每天可能只執(zhí)行一次,那么就算它有”高性能”水平,卻難以閱讀和理解,那也是一段失敗的代碼。

我們把這套原則應用在 CI 套件的提速優(yōu)化過程中。

1. 讓它跑起來

消除不可靠測試

首先需要做的事情是消除測試套件中的不可靠測試(test flakes)。不可靠測試(flaky test)指的是結(jié)果不確定的測試,它有時會通過,有時會失敗。速度飛快但不可靠的測試套件并不能讓你確信代碼可以正常運行,這只是在拋硬幣賭運氣而已。

為了讓一個規(guī)模龐大的工程團隊消除不可靠測試,我們采用并執(zhí)行了以下政策:

在 master 分支上所有失敗的測試都將視為不可靠的。這些測試將標記為已跳過(skipped)。負責不可靠測試的團隊可以在空閑時修復它們并取消跳過標記。

這個做法不僅能讓測試套件一直亮綠燈,同時也讓各個團隊決定何時編寫更多確定性測試。他們可以立刻開始編寫,也可以選擇等到再次處理這個功能時再行動。這種方法減少了一個團隊的不確定測試給其他團隊帶來的損害。

當然,這種方法也存在質(zhì)疑,“如果我們跳過了一項重要的測試該怎么辦?”是最常見的問題。沒錯,這個問題很重要,但我們需要搞清楚問題的背景。一個測試之所以會被標記為已跳過,是因為它會隨機失敗,首先要考慮的是我們對這個測試和功能到底有多大的信心。很多時候,測試會出現(xiàn)不可靠情況是因為生產(chǎn)環(huán)境中的確存在錯誤!

通過這種方式,我們在主分支上的構(gòu)建綠燈率從約 75%增至 98%!

2. 讓它走上正軌

回到默認狀態(tài)

隨著時間的流逝,我們逐漸偏離了運行 RSpec 測試的默認路徑。遵守默認值是很難的。下面是 RSpec 測試的一些默認值:

在各個測試用例之間重置狀態(tài)。這樣可以確保測試是可重復的、確定性的,并且不會相互依賴。

測試執(zhí)行是隨機的。這樣可以確保測試之間不存在相互依賴,幫助避免測試污染。

測試文件使用 Rails 自動加載器。這意味著我們僅加載應用程序所需的部分,而不是程序整體,可以幫助避免不完整的測試設置。

重新采用這些默認值的過程并不輕松。確保每個測試用例都重置其狀態(tài)(數(shù)據(jù)庫、Redis 值、緩存等),都會帶來新的不可靠測試。根據(jù)其性質(zhì),我們可以修復更改或?qū)⒅罢5臏y試標記為不可靠。

我們慢慢重新引入了 RSpec 默認值,這為測試提速奠定了基礎。

3. 讓它跑得更快

引入測試時間上限

我們的測試是不平衡的。有些測試文件只需幾毫秒就能執(zhí)行完畢,還有些則需要花費數(shù)十分鐘時間。耗時幾分鐘的測試是集成測試,涉及我們應用程序中最重要的一些流程。我們希望這些測試的速度能更快,但并不想移除它們。

因為測試套件是分布在多個節(jié)點上并行執(zhí)行的,所以很快就遇到了測試提速的瓶頸。

我們的測試套件速度取決于最慢的測試文件,因此實施了一項新政策:

任何測試文件的執(zhí)行時間都不能超過 2 分鐘。

這個門檻是憑空拉出來的,但似乎很實用。我們只有 40 多個耗時超過 2 分鐘的文件。

確定界限之后,我們開始處理速度緩慢的測試,試圖讓它們通過新的門檻,之前 40 個文件的時間都降到了閾值以下。之后,每個團隊都有責任確保其測試文件的執(zhí)行時間不超過 2 分鐘,而執(zhí)行時間超過 2 分鐘的測試文件會被標記為已跳過。

根據(jù)最壞情況來平衡測試

現(xiàn)在我們有了一個可靠的測試套件,只是速度很慢,它可以按任何順序執(zhí)行測試,但是將測試分配給節(jié)點的方法是隨機的。有些節(jié)點只需幾秒鐘就完成了,而另一些節(jié)點則需要數(shù)十分鐘。我們怎樣才能讓它們平衡呢?

我們面臨的最后一個問題是測試平衡。我們在這一步評估了兩種解決方案:

  1. 開發(fā)一個隊列,以在節(jié)點準備就緒后為其輸入測試用例。雖然這種方案原理上沒問題,但 RSpec 需要對框架做大幅更新才能兼容這種方案。此外,它在所有各不相同的并行作業(yè)之間引入了共享狀態(tài)。
  2. 在一次 CI 流程開始時在一個數(shù)據(jù)庫中記錄測試時間,將測試分為不同的桶,讓所有分組都有相同的長度。

我們采用了記錄與分桶的方法將測試分配到各個節(jié)點上,因為它非常適合 knapsack(https://docs.knapsackpro.com/ruby/knapsack)。測試運行期間,這種方法也不會在許多不同的并行作業(yè)之間共享狀態(tài)。這是很重要的,因為一個共享隊列可能有數(shù)百個節(jié)點,每個節(jié)點每秒為一個構(gòu)建可以請求數(shù)千次工作。

我們建立了一個 MySQL 實例來記錄所有文件的測試時間。在每次 CI 流程開始時,它會根據(jù)每個測試文件的第 99 個百分位時間生成一個 knapsack 文件。在每次 CI 流程結(jié)束時,它將上傳新的結(jié)果。

為什么是第 99 個百分位?由于我們在共享硬件(AWS)上運行 CI,因此無法控制基礎架構(gòu),各個測試文件的測試時間會大相徑庭。我們無法將這些波動與使用的 EC2 實例類型,或者其他任何可以衡量的參數(shù)關聯(lián)起來。

我們沒有進一步完善構(gòu)建基礎架構(gòu),而是讓系統(tǒng)具備了彈性。我們使用第 99 個百分位來組織測試,從而保證了測試的性能表現(xiàn)有一個下限,而不是在獲得較好的平均性能時卻存在明顯偏低的個例。即便底層硬件發(fā)生變化或基礎架構(gòu)層出現(xiàn)故障,CI 管道依舊能保障可預期的性能水平。

這套策略實施之后,我們就有了一個自平衡的系統(tǒng)。測試越多,系統(tǒng)也就越平衡。如果某些測試隨著時間的推移變慢,則測試桶也會隨之調(diào)整平衡狀態(tài)。

提升并行度

現(xiàn)在到了有意思的地方:讓測試速度真的變快。

這里的主要做法是增加并行度。項目開始以來,我們已經(jīng)從 40 個并行作業(yè)增加到了 130 個。這稍稍增加了成本,但大幅提升了 CI 的運行速度。在 Gusto,我們使用 Buildkite 作為 CI 基礎架構(gòu),但這種并行化的理念適用于所有主流 CI 產(chǎn)品。

雖然我們將并行度提高到了 3 倍以上,但 CI 費用卻沒有隨之線性增長。為什么?因為我們更好地利用了已有的 CPU 時間,通過在各個節(jié)點之間平衡作業(yè),總 CPU 時間并沒有變化,但是實際運行時間大幅縮短了。

4. 總結(jié)

在過去幾個月中,我們在一點點讓 Gusto 主要應用程序的 CI 管道變得更堅實可靠,而且速度更快。

這種改進依舊是一項日常工作。在出現(xiàn)不可靠測試時我們還是會跳過它們,或者尋找新的優(yōu)化策略來加快構(gòu)建速度。無論你們現(xiàn)在使用的是什么技術,我們都希望這篇文章可以為你們的團隊提供一個路線圖參考,幫助改進你們的 CI 管道和軟件發(fā)布架構(gòu)。

 

責任編輯:張燕妮 來源: 架構(gòu)頭條
相關推薦

2012-06-28 10:26:51

Silverlight

2016-08-03 16:01:47

GitLinux開源

2022-09-30 15:46:26

Babel編譯器插件

2015-11-23 17:34:33

秒借

2017-01-10 09:07:53

tcpdumpGET請求

2015-09-18 19:38:01

BlackHatSQLChop

2020-12-11 09:40:10

DevOpsCICD

2021-03-03 11:36:57

Java 8Java 15Java

2013-09-17 09:49:29

程序集讀懂程序編程

2009-11-16 10:53:30

Oracle Hint

2024-12-11 07:00:00

面向?qū)ο?/a>代碼

2025-03-13 06:22:59

2020-06-16 08:47:53

磁盤

2016-09-13 20:58:41

MySQ基礎入門Sql

2013-05-03 10:57:09

泛型泛型教程

2021-07-15 06:43:11

Bash調(diào)試腳本

2022-06-17 08:05:28

Grafana監(jiān)控儀表盤系統(tǒng)

2018-03-12 21:31:24

區(qū)塊鏈

2019-09-19 21:14:56

2025-10-30 09:09:25

點贊
收藏

51CTO技術棧公眾號

免费不卡av网站| 欧美一级日本a级v片| 内射一区二区三区| 亚洲国产aⅴ精品一区二区| 亚洲制服丝袜一区| 欧美精品一区二区三区四区五区| 中文字幕在线观看第二页| 日韩毛片视频| 亚洲精品一区二区三区四区高清| 欧洲av无码放荡人妇网站| 国产日本在线观看| 国产美女精品人人做人人爽| 91精品国产91久久久久久吃药| www在线观看免费视频| 91视频成人| 色综合夜色一区| 大地资源第二页在线观看高清版| 色呦呦中文字幕| 三级精品在线观看| 国内精品400部情侣激情| 精品手机在线视频| 亚欧洲精品视频在线观看| 911精品国产一区二区在线| 91专区在线观看| huan性巨大欧美| 国产精品你懂的在线欣赏| 精品久久久久久综合日本 | 国产欧美大片| 九九久久综合网站| 少妇高潮惨叫久久久久| 一本色道久久综合狠狠躁的番外| 欧美成人午夜电影| 天天干天天曰天天操| 亚洲国产尤物| 色综合欧美在线视频区| 免费超爽大片黄| 成人高清免费在线| 亚洲欧洲日韩一区二区三区| 日韩电影天堂视频一区二区| 少妇又色又爽又黄的视频| 国产剧情一区二区| 成人中心免费视频| 亚洲资源在线播放| 日本va欧美va精品| 国产成人精品最新| 福利网址在线观看| 亚洲自啪免费| 青草青草久热精品视频在线观看| 日韩精品――中文字幕| 国产精品激情电影| 欧美黑人xxx| 久草视频免费在线播放| 女人香蕉久久**毛片精品| 久久韩剧网电视剧| 黄色香蕉视频在线观看| 久久久久亚洲| 美女少妇精品视频| 九九九在线视频| 欧美日韩一区二区国产| 久久久久久com| 中文字幕在线观看免费视频| 一本久道综合久久精品| 91精品国产乱码久久久久久蜜臀| 日韩精品在线不卡| 爽好久久久欧美精品| 国产成人精品视| 中日韩av在线| 国产最新精品免费| 国产精品美女黄网| 三级在线播放| 国产午夜亚洲精品羞羞网站| 天天好比中文综合网| a天堂中文在线| 国产精品久久久久一区二区三区共| 一区二区三区的久久的视频| 最爽无遮挡行房视频在线| 亚洲午夜羞羞片| 日本免费不卡一区二区| 欧美日韩电影免费看| 欧美日韩二区三区| 亚洲免费观看在线| 亚洲精品aaaaa| 日韩天堂在线视频| 精品亚洲永久免费| 老司机久久99久久精品播放免费| 国产精品普通话| 国产高中女学生第一次| 91偷拍与自偷拍精品| 日韩av在线一区二区三区| 黄色av电影在线播放| 亚洲地区一二三色| 九色91popny| 91综合精品国产丝袜长腿久久| 日韩精品极品毛片系列视频| 手机看片国产日韩| 亚洲激情av| 国产一区私人高清影院| 亚洲欧美国产高清va在线播放| 91在线观看高清| 中文字幕一区二区三区在线乱码| 182在线视频观看| 欧美日韩一区小说| 国产二级一片内射视频播放 | 国产亚洲福利一区| 欧美黄色免费看| 日韩二区三区四区| 国产富婆一区二区三区| 91在线播放网站| 午夜视频一区二区| 天堂av.com| 国产麻豆一区二区三区精品视频| 欧美猛交免费看| 高潮无码精品色欲av午夜福利| 成人黄色av网站在线| 一本色道久久综合亚洲二区三区| 黄色漫画在线免费看| 5566中文字幕一区二区电影| 亚洲精品色午夜无码专区日韩| 欧美日本一区二区高清播放视频| 国产精品福利网| 五月婷婷丁香网| 一区二区理论电影在线观看| 91高清国产视频| 国产亚洲精品美女久久久久久久久久| 久久久视频免费观看| 国产伦理吴梦梦伦理| 国产视频一区二区在线观看| 精品久久久久久久久久中文字幕| 清纯唯美激情亚洲| www.欧美免费| 又骚又黄的视频| 国产女主播视频一区二区| 黄色免费视频大全| 欧美wwwsss9999| 久久久久久久一区二区| 国产视频一区二区三| 国产精品国产自产拍在线| 激情综合网俺也去| 国产一区二区三区探花| 日本电影亚洲天堂| 欧洲毛片在线| 色综合久久九月婷婷色综合| 国产精品jizz| 久久精品日产第一区二区| 国产日韩欧美精品| 国产传媒在线| 国产视频精品久久久| 天天插天天操天天干| av亚洲精华国产精华精| 18禁网站免费无遮挡无码中文| 岛国av一区| 亚洲91精品在线观看| 人妻一区二区三区| 粉嫩老牛aⅴ一区二区三区| 国产激情视频网站| 国产毛片久久| 免费看污久久久| japanese23hdxxxx日韩| 伊人久久五月天| 在线观看色网站| 综合欧美一区二区三区| 99999精品| 欧美日韩久久| 久久久一本精品99久久精品| www.成人爱| 在线黄色免费观看| 蜜桃网站成人| 亚洲www视频| 久久久999久久久| 欧美激情综合网| 色免费在线视频| 99视频精品全国免费| 91丨九色丨国产在线| 七七成人影院| 日韩av在线电影网| 国产日韩在线免费观看| 亚洲欧洲精品成人久久奇米网| 久久出品必属精品| 亚洲精品乱码| 日韩av在线电影观看| 99综合久久| 78色国产精品| 最新国产在线观看| 欧美变态凌虐bdsm| 无码日韩精品一区二区| 成人欧美一区二区三区视频网页 | 日本成人在线一区| 桥本有菜av在线| 老司机aⅴ在线精品导航| 国产999在线观看| 中中文字幕av在线| 亚洲精品一区中文字幕乱码| 亚洲一区二区人妻| 亚洲成av人片一区二区三区 | 久久不见久久见国语| 成人黄色午夜影院| 少妇视频一区| 久久精品国产亚洲| 亚洲 国产 欧美 日韩| 欧美日韩国产高清一区二区三区| 国产亚洲精久久久久久无码77777| 久久久青草青青国产亚洲免观| 伊人免费视频二| 久久aⅴ国产紧身牛仔裤| 国产成人免费高清视频| 欧美美乳视频| 国产一区喷水| 国产亚洲字幕| 国产精品大陆在线观看| 久久五月精品中文字幕| 色一区av在线| 免费黄网站在线观看| 欧美成人video| 亚洲中文字幕在线一区| 色999日韩国产欧美一区二区| 精品国产乱码久久久久久鸭王1| 国产欧美一区二区精品性| 中文字幕天堂av| 国产精选一区二区三区| 欧美日韩中文不卡| 久久经典综合| 欧美乱大交xxxxx潮喷l头像| 国产精品久久天天影视| 日韩精彩视频| 亚洲成人一品| 国内视频一区| 成人盗摄视频| 91久久久久久久| 国产精品99久久久久久董美香| 欧美精品18videosex性欧美| 欧美边添边摸边做边爱免费| 亚洲图中文字幕| 你懂的在线看| 亚洲精品天天看| 头脑特工队2在线播放| 日韩欧美国产电影| 99精品人妻无码专区在线视频区| 欧美日韩一级黄| 中文字幕在线一| 91高清视频免费看| 五月婷婷激情五月| 色婷婷av久久久久久久| 啦啦啦免费高清视频在线观看| 一区二区三区成人| 久久97人妻无码一区二区三区| 亚洲欧美日韩国产成人精品影院 | 亚洲综合一区二区| 欧美黑人一级片| 一区二区三区在线高清| 成人观看免费视频| 亚洲男人天堂一区| 欧美精品99久久久| 一区二区激情小说| 国产精品成人av久久| 亚洲午夜免费视频| 日本少妇久久久| 午夜精品免费在线| 亚洲欧美综合另类| 欧美在线观看视频一区二区| 日批视频免费观看| 制服丝袜中文字幕一区| www.国产麻豆| 亚洲黄色www网站| 青梅竹马是消防员在线| 中文字幕久热精品视频在线| 91caoporm在线视频| 久久精品成人一区二区三区| 综合久久2019| 2024亚洲男人天堂| 午夜影院在线播放| 国产精品美女www| 国产剧情一区二区在线观看| 国产高清自拍一区| 亚洲春色h网| 黄色www在线观看| 黄色亚洲精品| 激情综合网婷婷| 久久爱另类一区二区小说| 欧美性猛交乱大交| 99久久国产综合精品色伊| 国产又大又粗又爽的毛片| 中文字幕在线播放不卡一区| 91成人福利视频| 激情懂色av一区av二区av| 欧美一级淫片免费视频黄| 欧美日韩精品一区视频| 亚洲AV无码国产精品午夜字幕| 日韩成人高清在线| 欧洲不卡av| 91精品国产91久久久久久| 免费成人高清在线视频| av一区二区三区四区电影| 蜜臀av免费一区二区三区| 一区二区在线高清视频| 99国产精品自拍| 亚洲欧美自拍另类日韩| 成人黄色综合网站| 午夜国产福利视频| 狠狠色噜噜狠狠狠狠97| 国产一区二区在线视频观看| 亚洲精品福利免费在线观看| 男女啪啪在线观看| 88xx成人精品| 精品国产鲁一鲁****| 蜜桃传媒视频第一区入口在线看| 91久久国产| 成年人免费在线播放| 国产乱人伦偷精品视频不卡| 91网站免费视频| 亚洲图片欧美综合| 一级爱爱免费视频| 亚洲免费中文字幕| 大桥未久在线播放| 91免费看片网站| 精品国产午夜| 国产精品沙发午睡系列| 国产高清不卡一区| 最新黄色av网址| 色婷婷激情综合| 五月婷在线视频| 欧美激情videoshd| 99久久久国产| 伊人久久青草| 日本不卡视频一二三区| 免费的av网站| 亚洲国产一区视频| www.欧美国产| 精品国产欧美成人夜夜嗨| 澳门av一区二区三区| 精品亚洲一区二区三区四区五区高| 综合色一区二区| 午夜不卡福利视频| 中文字幕一区免费在线观看| 日本妇乱大交xxxxx| 亚洲欧美国产另类| 乡村艳史在线观看| 精品日韩电影| 99视频+国产日韩欧美| 性猛交╳xxx乱大交| 伊人一区二区三区| 性欧美videos另类hd| 色综合久久久888| 午夜视频在线观看精品中文| 自拍偷拍亚洲色图欧美| 激情六月婷婷久久| 亚洲伦理一区二区三区| 91精品蜜臀在线一区尤物| 免费的黄网站在线观看| 91美女高潮出水| 91超碰成人| 黑人性生活视频| 亚洲综合激情小说| 日本高清视频在线| 91精品国产91久久久久久久久| 老汉色老汉首页av亚洲| 无码人妻丰满熟妇区96| 91麻豆视频网站| 亚洲欧美另类在线视频| 亚洲视频在线看| 久久电影天堂| 潘金莲一级淫片aaaaa免费看| 国产乱码一区二区三区| 毛片a片免费观看| 亚洲黄色片网站| 婷婷午夜社区一区| 亚洲精品视频一二三| 韩国av一区二区三区四区| 福利所第一导航| 亚洲电影免费观看高清| 成人美女大片| 亚洲综合五月天| 国产成人在线观看| 在线观看黄网站| 国产一区二区三区久久精品 | 国产精品综合久久久久久| 日韩午夜一区| 精品无码在线观看| 欧美一区二区黄色| 欧美a级在线观看| 亚洲人成影视在线观看| 国产成人精品免费一区二区| 成人毛片18女人毛片| 日韩亚洲精品视频| xvideos.蜜桃一区二区| 久久久久久久久久久久久久国产| 国产精品久久免费看| 性少妇videosexfreexxx片| 78色国产精品| 亚洲一区二区三区| 亚洲精品视频大全| 制服视频三区第一页精品| 91九色porn在线资源| 亚洲精品一卡二卡三卡四卡| 国产91丝袜在线播放九色| 欧美三级网站在线观看| 久久久亚洲影院| 婷婷亚洲图片| 久久精品国产亚洲av麻豆| 欧美一区二区在线免费观看| 成人性生活视频|