1. 程式人生 > >奔馳在打造未來汽車時的DevOps實踐

奔馳在打造未來汽車時的DevOps實踐

jfrog artifactory devops 運維

技術分享圖片


Siva Mandadi 是來自奔馳北美研發中心的用戶交互部門的一名 DevOps 工程師,他在 JFrog 用戶大會上分享中介紹了奔馳通過 DevOps 落地,加速打造未來汽車的實踐。本文根據視頻資料整理而來,原視頻地址:


https://www.youtube.com/watch?v=zw0QsPgD5Ug


背景介紹


奔馳對於未來汽車的定義涵蓋了很多方面,包括車載音樂、導航、自動駕駛等等,涉及到的實現技術也是多方面的,如機器學習、物聯網等前沿技術。這些技術表現在實際應用上,便有了一種“未來感”。舉個例子,未來汽車可以根據天氣情況,切換車內的主題,比如顏色、音樂等,讓車主時刻都保持舒適的狀態;或者,如果車主開車回家,在離家還有半小時車程的時候,可以通過車給家裏的廚房電器發消息,開始準備煮一頓可口的飯菜。


最開始,整個用戶交互部門(視頻主講人所在部門)大約有 300 名工程師,他們來自不同國家,分布在美國、德國和印度等不同地域;團隊每天大約會執行 60 次構建任務;每周有超過 1000 個、約 1TB 數據量的自研件產生;平均 CI 構建時長為 6 小時。


技術分享圖片


面臨的挑戰


隨著業務的發展,團隊面臨著巨大的挑戰,主要是在工件的存儲與共享、依賴管理、編排、持續構建和倉庫不同等方面:


  • 自研件存儲:每周會產生超過 1000 個自研件,需要耗費近 ITB 存儲空間,隨著時間推移現有的存儲資源很快就出現枯竭。


  • 自研件共享:團隊成員分布在世界各地,上傳和下載的速度成為瓶頸,開發與 QA 人員通常會抱怨下載速度太慢。比如印度和德國的開發者需要上傳,美國這邊的 QA 需要下載進行測試就會遇到這種情況。


  • 依賴管理:龐大研發團隊的依賴管理也是一個非常頭疼的問題,某些功能依賴的軟件包在不同的模塊中存在著不同的版本,而維護復雜的依賴關系是非常有挑戰的一件事情。團隊主要使用 Java 和 C++ 開發,並且使用了 maven、conan 作為依賴管理工具。


  • 持續集成:持續集成對於這樣一個大團隊是必須的,每一次的提交都必須通過持續集成(CI)確保提交不會帶來任何問題。團隊使用了 Jenkins 和 Bamboo 做一些持續集成相關的事情,值得一提的是使用了 Docker Container 作為 Jenkins Agent,通過配置文件根據負載動態創建 Build Agent。然而,由於 Docker 鏡像非常大,而且處於不同的地域,導致整個過程也效率較低。


技術分享圖片


在遇到上述挑戰的同時,在 CI 構建階段,下載依賴的時候達到 5-6 個小時,這也是難以接受的,並且由於 Artifact 非常大,也會使得整個系統運行緩慢。一種解決方案就是使用 NAS 存儲。但是依然存在一些新的挑戰:


  • 價格昂貴。


  • NAS 存儲雖然能在一定程度上解決問題,但是相關的設備和維護費用非常昂貴。


  • 構建次數的限制:由於構建的自研件增長非常快,然而存儲空間是相對有限的,所以,實際情況下需要限制 10 次構建。


  • 共享:共享的問題依然難以解決,尤其是跨地域的共享。


技術分享圖片


解決方案


在對挑戰進行分析之後,認為有如下兩種可選的解決方案。一種是增加存儲,另外一種方式是采用 Nexus,但需要高可用架構和 REST API 的支持。


技術分享圖片


這兩種選擇無疑都需要一個強大的 DevOps 工具。對於跨國研發團隊來說,高可用是非常重要的特性,多語言的倉庫也是必須的,增加存儲顯然難以解決根本問題。Nexus 有多語言支持,但是在高可用和 REST API 方面都需要額外的維護。在調研了眾多相關產品之後,奔馳的研發團隊認為 JFrog Artifactory 是非常不錯的選擇。


技術分享圖片


JFrog Artifactory 提供了非常豐富的功能,比如統一的倉庫、一致的 UI、企業級高可用支持、基於 YAML 的預定義配置、豐富的 REST API 支持以及良好的客戶支持等等。Artifactory 對開源工具均可以無縫對接,尤其是 Jenkins,因此用戶原有的習慣幾乎不需要改變,使用之後,整個 DevOps 環境有了很顯著的變化。


除此之外,Artifactory 還有諸多非常強大的特性,如 DevOps 全生命周期元數據記錄、AQL(Artifactory Query Language) 查詢語言、跨語言的服務正向和反向依賴解析、結合 Xray 的漏洞掃描及影響力分析等等。


技術分享圖片


奔馳通過 Artifactory 實現了統一的依賴管理和集中式的軟件包倉庫,結合其強大的正反向依賴解析,輕松解決了依賴關系不清晰的問題。Artifactory 的異地同步復制解決了軟件包上傳和下載的性能瓶頸問題,由於具有緩存機制,使得雖然每天的構建頻率增長十倍,但是構建時間卻大幅下降。在自研件存儲方面,通過 Artifactory 的存儲優化節省了大量存儲空間,且通過自動清理機制,減少了很多管理成本,也降低了人為操作的風險。


全球分布的研發中心和人員的角色變更,使得權限的管控變得異常復雜,由於 Artifactory 集中管理了所有語言的二進制包,奔馳在使用 Artifactroy 後輕松地實現了對各地研發人員的細粒度權限管控,在團隊內共享也可以很方面地控制相關權限,確保始終滿足最小權限模型的要求。


技術分享圖片


從數據我們可以看出,每日構建的次數增長了 10 倍,每周產生的工件也增長了 10 倍,但是存儲只增加了 2 倍,存儲優化十分顯著。最明顯的效果是 CI 構建的時間減少了 3600%,這是非常驚人的。當然,這些都是直觀的效果,還有一些是潛在的收益,比如新人熟悉整個項目的時間更短了、開發的周期更短、權限控制更加準確,相應地安全性也大幅提升。


總結


奔馳所面臨的挑戰在很多企業中都存在,尤其是大型的跨國開發團隊。企業級的高可用,多語言的集中式倉庫,跨地域的復制分發以及強大的依賴管理功能都是必須要滿足的需求,JFrog Artifactory 在奔馳的實踐中提供了切實可行的解決方案,實現了 DevOps 的平穩落地,具有借鑒意義。


作者: 付輝,JFrog 資深工程師,專註軟件系統架構及企業 IT 轉型,曾在 HPE 擔任雲計算技術顧問、容器架構師、DevOps 架構師等,曾服務客戶中石油及中石化、摩托羅拉、阿爾卡特 - 朗訊、華為等等。擅長容器及容器編排技術,熟悉混合雲架構、微服務架構、持續集成及交付、DevOps 等。長期參與開源社區開發及翻譯工作。



奔馳在打造未來汽車時的DevOps實踐