為什麼Netflix推出自己的Node.js功能即服務?
Netflix等公司首創了微服務等概念,並將其技術堆疊轉移到Spring Cloud等大眾應用,如今他們又走在了serverless無伺服器架構前列:
自從ofollow,noindex" target="_blank">hook.io 在2014年推出功能即服務(FaaS)以來,開發人員一直在抓住這項新技術,並且有兩隻手。這是無伺服器計算夢想的下一個時代:一個一體化的“no ops無運營”平臺,允許開發人員構建、開發、啟動和管理應用程式功能 - 沒有麻煩,你知道,構建基礎架構通常很費事。
僅僅四年之後,FaaS已成為雲工程工具包中的一個交鑰匙工具,雲工程工具包是AWS Lambda,Google Cloud Functions和Microsoft Azure Functions等雲服務提供商的內建標準產品。
工程師喜歡FaaS的“無運營”優點,這使得可以簡單地將模組化功能塊上傳到您選擇的雲提供商,然後將其作為隔離、可靠和低延遲的生產服務執行。企業喜歡他們的開發人員可以比以前更快地將程式碼部署到生產環境中。
Netflix是一家早期極其有效採用雲原生技術的公司,採用FaaS來保持電影順利播放,使其每天有1.3億小時的視訊流傳輸給1.3億客戶。
是什麼驅使Netflix決定接受FaaS?
FaaS功能非常適合Netflix API平臺,它使工程師能夠使用JavaScript編寫和部署第1層服務,而無需管理基礎架構或操作。基於JavaScript的FaaS平臺允許工程師將JavaScript功能部署為生產服務,這意味著可以在每個Netflix請求的核心提供對延遲敏感的服務。
在什麼時候編寫自己的FaaS平臺
幾年前,Netflix使用無伺服器實現了一個引人注目的用例,擁有許多客戶團隊,每個團隊都擁有不同的使用者介面 - 這需要快速創新和高可用性。與此同時,客戶團隊使用後端(BFF)模式作為其UI,這意味著他們擁有的每個UI版本都有一個定製服務。為了創新,每年進行數百次A / B測試,每種測試都有許多變體。為了實現這種快速創新,這些BFF由客戶團隊自己擁有,並且通常會在每個版本中進行更改。
設計,構建和執行高效能,低延遲和高可用性服務很困難 - 即使對於具有多年經驗的經驗豐富的伺服器工程師也是如此。期望客戶端工程師根據這些要求擁有和運營這些服務是不合理的 - 因為他們的核心專長是構建最高階的使用者介面。
FaaS和無伺服器允許每個客戶團隊將其服務的架構和操作解除安裝到團隊(API平臺團隊)維護的公共平臺,並允許他們專注於編寫區分每個BFF與下一個BFF的業務邏輯。
為什麼建立了自己的內部FaaS平臺?
無法找到滿足需求的第三方FaaS平臺,大多數外部FaaS和無伺服器產品主要針對延遲不敏感的事件驅動任務,而不是針對大規模延遲敏感型服務。在Netflix上執行高可用性服務需要與Netflix服務堆疊 整合。使用現成的FaaS產品很難實現這種緊密整合,這些產品是針對更一般的用例量身定製的。
這個執行平臺NodeQuark - 因為它使用Node.js. NodeQuark FaaS平臺是一個服務容器,已預先組裝了生產就緒服務所需的所有元件。所需要的只是客戶端新增他們的業務邏輯。
NodeQuark如何適應Netflix堆疊?
開發人員生產力工具團隊構建了一個名為Newt(Netflix Workflow Toolkit) 的本地開發工具。通過NEWT為每個工程師引導一致的開發環境,NEWT提供原生開發環境和工作流程。NEWT引導FaaS開發環境,開發人員可以在本地開發,測試和除錯功能。在幕後,本地配置一個包含FaaS執行時的Docker容器,工具無縫同步程式碼並強制容器和本地主機之間 - 通過日誌和除錯埠提供除錯資訊。
在構建和管理方面,通過函式,我們構建了一個函式索引,可以不變地對函式進行版本化和儲存。由於我們有許多團隊使用函式,因此索引是多租戶的,並且支援團隊和專案的名稱空間。
我們使用Spinnaker 和Titus 來管理我們的基礎設施。Spinnaker作為CI / CD工具和Titus用於容器編排。Spinnaker允許我們協調支援FaaS所需的複雜部署互動。Titus允許我們可靠地大規模部署容器。Newt通過本地迭代和Titus入門幫助簡化容器開發。在Newt和Titus之間擁有一致的容器環境有助於開發人員充滿信心地部署。NEWT工具還提供了一個CLI,可以輕鬆管理部署過程。
在操作上,我們使用Atlas 作為指標和儀表板 - 提供執行時對每項服務執行狀況的可見性 - 並與PagerDuty整合警報。這些指標,警報和儀表板都是為每個新功能自動生成的,確保每個服務的完全可見性和可操作性。
Netflix擁有一個內部的開發人員生產力工具團隊,以確保您的開發人員擁有完美的工具來完成他們的工作。
我們對技術的使用非常務實,理解這一切只是達到支援業務主要目標的手段。您可以在我們採用AWS和許多其他開源技術(如RPC/">gRPC,Node.js,Docker等)中看到這一點。Netflix幾乎完全託管在AWS(EC2)上,滿足了我們的許多需求。然而,有時最好的答案仍然是建立自己的。