re:Invent大會第四天:爲什麼Lambda值得你更多關注?

2018年11月29日的拉斯維加斯,AWS re:Invent大會進入第四天,上午照例由AWS CTO Werner Vogels帶來主題演講。

從主題演講之前到主題演講之後,改變最大的產品毫無疑問就是Lambda,有至少8個相關的最新發布。Vogels在2014年正式對外發布了Lambda,到現在已經過去了四年,他自己對此的評價是:那是他有生以來做過的最精彩的一個主題演講。從那開始,Serverless這個說法開始在圈內流行,成爲全球趨勢;而直到今天,Lambda仍然是獨樹一幟,正式上線三年以來已經發展了超過十萬個客戶,每個月平均處理萬億級別的請求,在AWS服務線當中使用量相當可觀了。

InfoQ中文站記者與AWS產品市場經理Aaron Kao進行了一對一的交流,對這一系列Lambda的新發布進行了梳理。我們基本可以認爲,如果你沒有時間深入瞭解本次的發佈,那麼可以只記住兩個東西:

  1. Firecracker
  2. Lambda Custom Runtime(自選運行時)

一、Firecracker

Firecracker是大會第二天發佈的,AWS在晚場活動上宣佈了該項目的開源。作爲Lambda背後的支持技術之一,Firecracker在serverless的技術棧當中處於Hypervisor層之上、Guest OS層之下,如圖:

根據官方介紹,Firecracker與docker或者Kata containers並不存在替代關係。Firecracker真正要替代的是QEMU——因爲QEMU要支持各種不同種類的設備類型,搞得非常粗重、啓動費時;而Firecracker可以從雲計算的角度進行設計,僅僅針對單一設備類型,就可以做到非常輕便。以下摘錄兩段官方介紹:

Firecracker跟QEMU的區別:

Firecracker是雲原生的QEMU替代者,專門針對容器運行的安全和效率進行設計。Firecracker對guest OS的設備規格設置了最低限度的要求,把非必要的功能都去掉了(僅僅留下了4個模擬設備:virtio-net、virtio-block、serial console,以及一個專門用來關閉microVM的單鍵控制器)。由此,在一個流水線內核加載進程中,啓動時間可以達到125ms以下,內存佔用也較小。Firecracker進程還提供了RESTful的控制API,用於設置microVM的資源使用上限,並給microVM提供元數據服務,方便host與guest之間共享配置數據。

那麼,Firecracker現在能跟Kubernetes、Docker、Kata containers一起用嗎?

現在還不行。我們開源Firecracker,是因爲我們認爲它在運行容器的安全方面有一些獨到的意義,我們希望社區裏的同行們能從中收到一些啓發。我們在努力讓Firecracker能夠與容器生態自然集成,未來的目標是讓容器負載隔離這件事情有更多的選項,選項之間能夠有無縫的集成。

根據AWS計算服務總監Deepak Singh的介紹,Firecracker的研發是從大概一年前開始的,最初的起點是crosvm——也就是Google Chrome OS的VM技術。於是,因爲crosvm是用Rust語言寫的,所以Firecracker也是基於Rust語言。

Firecracker一經開源,短短几天就收穫了四千多的star https://github.com/firecracker-microvm/firecracker 以及大量的pull request。

二、Lambda Custom Runtime

在今天之前,Lambda已經支持了五種編程語言——node.js、Python、Java、.NET、Go,以及shell腳本。今天,Vogels發佈了Lambda對Ruby語言的支持,緊接着發佈了Lambda Custom Runtime。

這個Custom Runtime什麼意思呢?

就是說,你可以自己上傳爲Lambda定製的運行時,從而讓Lambda能夠支持你想用的編程語言。在今天第一批發布的Runtime裏面,有C++,有Rust,有Elixir,有Erlang,有PHP,還有一個叫做COBOL(真是令人意想不到)。

所以理論上,現在的Lambda可以支持任意一種編程語言!

三、其他發佈

Vogels主題演講中的其他發佈包括:

一些IDE插件:本次Keynote針對PyCharm、IntelliJ、VS Code這三個工具發佈了AWS的插件。

Lambda Layers:這個功能可以提升代碼的複用率。將一個通用組件打包成ZIP文件上傳給Lambda,做成一個Lambda Layer,就可以在不同的Lambda Functions之間共享這個組件。

Nested Applications:這個功能也可以提升代碼的複用率,不過是通過另一條方式,也就是去年發佈的Serverless Application Repository。

Step Functions與更多服務的集成:Step Functions是去年發佈的功能,給serverless應用做調試比較方便。本次發佈之後,現在AWS的Batch、ECS、Fargate、Glue、DynamoDB、SNS、SQS、SageMaker也都支持Step Functions了。

API Gateway現在支持WebSocket了:這是一個支持實時雙向通訊的功能。

ALB可以指向Lambda了:應用負載均衡原本不能指向Lambda,只能指向EC2和容器,現在可以指向Lambda了。

Kafka託管服務:AWS在2013年發佈了Kinesis服務之後,經常遇到用戶問:你這個做的事情不是跟Kafka一樣嗎,爲啥不乾脆在你們平臺上面提供Kafka的服務呢?當時的AWS對此是不同意的,因爲當時的Kafka項目發展也沒幾年,並不成熟,萬一跟着人家跑坑裏去了咋辦?就這樣,5年時間過去了。期間,AWS用戶還是可以用Kafka的,只不過得自己架設配置。今天AWS發佈Kafka託管服務可能有很多原因,但有一點是肯定的:Kafka真的有很多人在用。

Well-Architected Tool:這是一個用戶自檢工具,可以引導用戶、幫助他們發現自己的架構是否與AWS推薦的最佳實踐一致。

此外,有一個服務並沒有出現在Vogels的主題演講上,但Aaron Kao和Deepak Singh都推薦我們可以關注一下,那就是AWS App Mesh。這是AWS Serverless技術體系中第一次提供Service Mesh服務。

針對re:Invent Werner Vogels 第四日發佈,前線記者也專訪了InfoQ特約觀察員,看看他們如何解讀這一系列的發佈及其背後的某些衍生邏輯:

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章