Netflix是如何構建程式碼的
三名Netflix工程師Ed Bukoski、Brian Moyles和Mike McGarr在一篇博文中解釋了Netflix如何持續交付向7500萬觀眾提供電視節目和電影的程式碼。
Immutable Server模式是Netflix部署的基礎。每次部署都會建立一個全新的亞馬遜機器映象(AMI)。
Netflix的微服務架構讓Netflix團隊可以鬆耦合。變更推送速度讓每個團隊都很舒服。
Netflix不要求任何團隊使用任何工具集,但他們要負責維護他們實現的工具。在Netflix,有團隊會集中提供工具,作為“鋪好的路”的一部分,以減少大多數Netflix工程師的認知負擔。
這個“鋪好路”的程式碼交付過程由幾個步驟組成。程式碼使用Nebula在本地構建和測試。變更提交到中心Git版本庫。一個Jenkins作業構建、測試並打包應用程式用於部署。這些程式包使用Netflix的全球持續交付平臺Spinnaker部署到亞馬遜機器映象(AMI)。
構建
Nebula是Gradle構建系統的一組外掛,它可以構建、測試並打包Java應用程式。Netflix的大多數程式碼都是用Java編寫的。這些外掛擴充套件了Gradle的自動化功能,包括依賴管理、釋出管理以及打包。一個專案的構建檔案宣告瞭用到的依賴和外掛。
整合
下一步是將本地構建、測試並打包的原始碼推送到Git版本庫。具體的流程由團隊選擇。
提交完成後,會觸發一個Jenkins作業構建、測試並打包程式碼用於部署。程式包型別會根據構建物件是一個庫還是一個應用程式作出恰當的選擇。
部署
Netflix “Bakery”暴露了一個API用於建立AMI。具體的映象使用Aminator建立。使用者指明將什麼基礎映象和程式包放入該AMI。基礎映象是一個Linux環境,包含與Netflix生態系統整合所需的約定、工具和服務。
當Jenkins整合任務執行成功後,它會觸發Spinnaker管道。Spinnaker讀取Nebula程式包,並使用Bakery API建立AMI。
然後,Spinnaker會向數以十計、百計或千計的例項提供該AMMI。
第一次部署是到測試環境,部署會執行自動化整合測試。在通過這些測試後,Spinnaker為團隊提供了自定義生產環境部署過程的靈活性,例如多區域部署、金絲雀釋出或者紅/黑部署。
該自動化過程非常高效,舉例來說,Janitor Monkey雲彈性和維護服務從程式碼檢入到多區域部署只要16分鐘就可以完成。
未來方向
在Netflix,語言無關的需求與日俱增。非JVM語言需要包含進構建過程。
部署時間有一大部分是“烘焙(baking)”過程,Netflix正設法減少這部分時間。
此外,Netflix還在研究容器是否能夠幫助他們應對上述兩個挑戰。
容器還可以改進當前的構建、烘焙和部署過程,進而改善開發測試周期。可以在本地部署的容器,無需修改就可以部署到生產環境,這對於確定一個Bug是否是由環境差異導致的非常有幫助。這讓工程師可以專注於新特性。
本文轉自d1net(轉載)
相關文章
- Google 是如何構建 Web 框架的GoWeb框架
- 低程式碼構建程式有哪些風險如何避免?
- jenkins如何構建github上的程式碼(ci cd)JenkinsGithub
- 我們是如何使用 Electron 構建 Linux 桌面應用程式的Linux
- 你知道 Linux 核心是如何構建的嗎?Linux
- 低程式碼如何構建支援OAuth2.0的後端Web APIOAuth後端WebAPI
- Facebook是如何管理程式碼的
- 我是如何替換Spring Cloud Netflix的?SpringCloud
- 如何用50行程式碼構建情感分類器行程
- 為“架構”再建個模:如何用程式碼描述軟體架構?架構
- 如何構建一個理想UI程式碼表達的自動化工具?UI
- 程式碼構建軟體架構圖的工具介紹架構
- 什麼是DOM?如何構建web頁面Web
- 用程式碼構建星辰大海
- [轉]:如何快速構建一個簡單的程式
- Java中靜態程式碼塊、構造程式碼塊、建構函式、普通程式碼塊Java函式
- 基礎程式碼重構的若干建議(一)
- 《程式碼大全》讀書筆記-構建的前期筆記
- 史上最真實的VR遊戲,是如何構建“真實”的VR遊戲
- 如何構建 Android MVVM 應用程式AndroidMVVM
- Amazon和Netflix的個性化推薦是如何工作的?
- CentOS 7 jenkins 程式碼構建同步CentOSJenkins
- 如何構建一個沒有任何後端程式碼的全棧應用?- hashnode後端全棧
- 我是如何構建一個持續發展的專案
- 如何結構化我們的程式碼
- 90行JS程式碼構建屬於你的ReactJSReact
- 程式碼來構建一個簡單的compilerCompile
- 你構建的程式碼為什麼這麼大
- Flutter 6 個建議改善你的程式碼結構Flutter
- Kafka是如何處理Netflix每天2萬億條訊息的?Kafka
- Netflix的全週期開發者—執行您構建的內容(中英雙語)
- 如何基於 Redis 構建應用程式元件Redis元件
- 03 . Jenkins構建之程式碼掃描Jenkins
- CentOS7 jenkins 程式碼構建同步CentOSJenkins
- JS混淆程式碼資料集構建方法JS
- 軟體開發中,如何為你的程式碼構建三層防護體系
- 菜雞程式設計師是如何寫程式碼的?程式設計師
- 多執行緒程式是如何執行程式碼的?執行緒行程