1. 程式人生 > >AWS Lambda重大更新,跨越程式語言差異之門?

AWS Lambda重大更新,跨越程式語言差異之門?

北京時間11月30日凌晨,在美國拉斯維加斯召開的AWS re: Invent 2018上,和往年一樣,AWS CTO Werner·Vogels博士又釋出了AWS多項重要的更新,包括資料庫、程式設計工具、架構等多個方面,而在其中,有兩項針對於AWS Lambda的更新引爆了現場眾多開發者的歡呼,這就是Lambda Layers和Lambda Runtime API的釋出。而在著名的Haker News網站,關於這個主題的評論已經超過了205條。那麼,為什麼這兩項關於Lambda的更新,卻吸引了那麼多開發者的關注呢?想要搞清這個問題,那就要從Lambda本身開始講起。

AWS Lambda是什麼?

AWS Lambda是AWS於2014年推出的一項計算服務,通過它,可以無需預配置或管理伺服器即可執行程式碼。AWS Lambda只在需要時執行程式碼時會消耗相應資源,程式碼未執行時則不產生費用。藉助AWS Lambda,幾乎可以為任何型別的應用程式或後端服務執行程式碼,而且無需執行任何管理。AWS Lambda是在可用性很高的計算基礎設施上執行程式碼,執行計算資源的所有管理工作,包括伺服器和作業系統維護、容量預置和自動擴充套件、程式碼監控和記錄。只需要以 AWS Lambda支援的一種語言提供程式碼。 使用者就可以使用AWS Lambda執行程式碼以響應事件,例如更改Amazon S3儲存桶或Amazon DynamoDB表中的資料;以及使用Amazon API Gateway執行程式碼以響應HTTP請求;或者使用通過AWS SDK完成的API呼叫來呼叫程式碼。藉助這些功能,可以使用Lambda輕鬆地為Amazon S3和Amazon DynamoDB等AWS服務構建資料處理觸發程式;處理Kinesis中儲存的流資料,或建立按AWS規模、效能和安全性執行的後端。

Lambda為什麼這麼火?

實際上,AWS Lambda是Serverless(無伺服器計算)的典型代表,它與Microsoft Azure Functions和Google Cloud Functions等都可以被稱為所謂的功能即服務(FaaS)技術。雖然還有其他無伺服器技術(如無伺服器資料儲存和資料庫),但這些功能計算服務通常就是我們所理解的“無伺服器計算”。

無伺服器計算對於開發人員最大的好處,簡單來說,就是使得開發人員可以更多的關注與應用程式功能本身,而無需關心例如虛擬機器調配這樣的配置方面的工作。與容器相比,無伺服器具有許多優點。與執行業務功能相比,它更多地用於可執行功能,並且可以根據需求的高峰自動擴充套件,並且具有精細的成本模型。此外,由於程式可以隨時執行和終止,因此帶來了操作簡單性和成本節省。重要的是,它可以提高產品生命週期的效率並降低管理費用。它還為雲更加實用鋪平了道路,因為它不需要任何虛擬機器配置或預先承諾。企業只需要為他們使用的東西付費。

而這也是為什麼以AWS Lambda為代表的無伺服器計算技術為什麼如此火熱的原因。

這是什麼樣的兩項更新?

30號AWS釋出的兩項更新是:

Lambda Layer,一種集中管理跨多個函式共享的程式碼和資料的方法。

Lambda Runtime API,一個使用任何程式語言的簡單介面,或用於開發函式的特定語言版本。

這兩個特性可以一起使用,執行時可以作為層來共享,以便開發人員可以在編寫Lambda函式時選取並使用它們最喜歡的程式語言。

那麼,這兩項更新對開發人員為什麼如此重要呢,下面,我們就來一一詳細講來。

Lambda Layers

在構建無伺服器應用程式時,在Lambda函式之間共享程式碼是很常見的,開發人員可以通過新增由多個函式或標準庫使用的自定義程式碼,以簡化業務邏輯的實現。但以前,必須打包和部署這個共享程式碼以及使用它的所有函式。而現在,開發人員只需將公共元件放入ZIP檔案中,並作為Lambda Layer上傳即可。函式程式碼不需要更改,並且可以像通常那樣引用層中的庫。同時,層可以被版本化來管理更新,每個版本都是不可變的。當一個版本被刪除或者它的使用許可權被撤銷時,以前使用它的函式將繼續工作。

在函式的配置中,最多可以引用五層,其中之一可以是執行時。當呼叫函式時,按照開發人員提供的順序在/opt中安裝層。順序很重要,因為所有層都是在相同的路徑下提取的,所以每個層都有可能覆蓋前一層。這種方法可以用來定製環境。例如,第一層可以是執行時,第二層新增所需的庫的特定版本。函式和層的總體未壓縮大小受通常未壓縮的部署包大小限制。層可以在AWS帳戶中使用、在帳戶之間共享或與廣大開發人員社群公開共享。

使用層時有很多優點。例如,可以使用lambda層來:

  • 在依賴項和自定義業務邏輯之間實現關注點的分離。
  • 使函式程式碼更小巧,更專注於想要構建的東西。
  • 加速部署,因為必須打包和上載的程式碼更少,並且可以重用依賴項。

AWS還透露,基於使用者的反饋,並且為了提供一個如何使用Lambda層的示例,正在釋出一個公共層,其中包括NumPy和SiciPy,兩個流行的Python科學庫。這個預先構建和優化的層將可以幫助開發人員快速地開始資料處理和機器學習應用程式。

除此之外,開發人員還可以從AWS合作伙伴(如Datadog、Epsa.、IO.、NodeSource、Thundra、Protego、PureSec、Twistlock、Serverless和Stackery)中找到用於應用程式監控、安全性和管理的層。

Lambda Runtime API

通過Lambda Runtime API,現在,開發人員可以在建立或更新函式時選擇自定義執行時,也就是說,開發人員可以使用任何程式語言並共享公共元件,這對開發者而言無疑是一個非常令人興奮的功能。

要想使用此選擇,函式必須(在其程式碼或層中)包含一個名為bootstrap的可執行檔案,負責程式碼(可以使用任何程式語言)和Lambda環境之間的通訊。執行時載入程式使用一個簡單的基於HTTP的介面來獲取新呼叫的事件有效負載,並從函式返回響應。關於介面端點和函式處理程式的資訊作為環境變數共享。

對於程式碼的執行,可以使用在Lambda執行環境中執行的任何東西。例如,可以為任何程式語言帶來直譯器。如果想管理或釋出自己的執行時,只需要知道執行時API是如何工作的即可。這使得開發人員可以快速使用共享的執行時作為層。

目前,以下這些開源執行時已經獲得支援:

  • C++
  • Rust

此外,在合作伙伴的幫助下,還將提供對以下執行時的支援:

  • Erlang (Alert Logic)
  • Elixir (Alert Logic)
  • Cobol (Blu Age)
  • Node.js (NodeSource N|Solid)
  • PHP (Stackery)

Runtime API將是未來Lambda支援新語言的主要方式。例如,就是通過它,Lambda現在已經可以支援Ruby語言了。

開發人員可以通過控制檯或AWS命令列介面(CLI)在Lambda可用的所有區域中使用執行時和層,還可以使用AWS無伺服器應用程式模型(SAM)和SAM CLI使用這些新特性測試、部署和管理無伺服器應用程式。而且,使用執行時和層是不會產生任何額外的成本。

總結

AWS此次釋出的Lambda LayersLambda Runtime API,使得開發人員可以使用自己喜歡的程式語言編寫並共享公共元件,這對廣大開發人員來說無疑是一件喜聞樂見的事情,而在此次大會上,AWS還公佈了Lambda對譬如PyCharm、IntelliJ和Visual Studio等IDE的支援,這毫無疑問也是令廣大開發者普大喜奔的訊息。而這些看起來改動不大,但對開發者卻極其貼心的功能則無一不體現了AWS使用者為先的理念和思想。

實際上,據Werner介紹,AWS 95%的新功能和新服務都是建立在直接使用者的反饋之上,而像Lambda Layer、Lambda Runtime API,正是AWS真真切切站在開發者角度,認認真真分析開發者所遇到的困難和挑戰而適時推出的新服務、新功能,就像AWS全球基礎設施和客戶支援副總裁Peter Desantis所說的那樣,以客戶為先的理念絕對是AWS快速發展的重要源泉。在這種理念長期引領下的AWS,能夠每年都推出如此眾多的新功能和新服務,並且常年穩坐雲端計算市場第一把交椅,也就不足為奇了!

而AWS為開發者不斷提供的新功能和新服務,將為開發者提供構建更美好的未來新世界所需要的更簡單,更高效、更強有力的工具!而對於開發者們而言,當今他們所擔當的責任,用Werner在本次大會上的一句話總結,就是Let‘s Go Build!