如果你徘徊在十字路口,需要外部幫助決策,本文列舉了一些場景,可能有助於你做出選擇。
我經常被問到的一個問題是:構建雲原生應用,我該使用Serverless還是Kubernetes?我認為兩個選項各有利弊,選擇哪個取決於你的需求。
下週Ansgar Schmidt和我就這個話題會有個對話。我們仍在修改我們的幻燈片,不過關於總結何時使用Kubernetes以及何時使用Serverless的那部分,我們已經完成了。
請註意我們是將Serverless和Kubernetes做比較,而非容器。因為利用開源Serverless平臺OpenWhisk你也可以直接用Docker容器來構建函式。同樣的,我們也不會拿一個很簡單的Serverless函式和Kubernetes上一個很複雜的微服務應用來比較,但是雙方有相似複雜度。
一個本地網站就是一個很好的Serverless場景,它在夜間只有一點甚至沒有流量。由於Serverless平臺只針對你的程式碼執行時才使用到的資源計費,這就能明顯的降低成本。應用越長時間不做事,Serverless平臺成本低的機率就越大。
然而這不是說Serverless就意味著低成本,比如你的應用需要7X24小時都保持執行。它還有一些隱藏成本,比如API管理的一些額外消費,或者測試函式呼叫時的成本。
如果你既無Serverless,也無Kubernetes的開發經驗,那麼開發一個Hello World應用,讓其執行在Serverless平臺上是更容易的。當使用Kubernetes時,通常你必須花費一段時間去建立叢集,配置Kubernetes以獲取公網IP,然後才能部署你的第一個應用。而使用Serverless平臺,你可以簡單地使用雲服務商提供的web工具,就能在幾分鐘之內啟動應用。
然而,Serverless也不總是比Kubernetes容易。構建並管理一個有一系列函式的Serverless應用,比一個簡單的只有一個容器的Kubernetes應用,可要難多了。事實上,對於更複雜的應用,Kubernetes可能更容易使用,因為Kubernetes平臺更成熟(參考下文)。
Serverless的其中一個強大的功能就是其自帶的函式自動伸縮能力,開發人員無需做任何事情就能擁有該功能。Kubernetes當然也可以對Pod甚至節點使用自動伸縮功能,但是它需要一些配置,另外這個過程有點慢,因為它只在應用特定規則的時候才觸發。
然而,Kubernetes相比某些Serverless平臺,可能會提供更好的伸縮特性,因為它更成熟,並且提供了不同可用區(zones)之間的HA(high availability)能力,而這並非所有Serverless平臺都提供。
我不知道是否有Serverless平臺支援A/B測試,這是我認為構建雲原生應用必須具備的一個關鍵能力。除此之外,Kubernetes對應用的監控能力也更成熟。例如,使用Istio,你可以看到微服務的執行時間,哪個服務呼叫了哪個服務,以及是否存在瓶頸。Serverless平臺還沒有真正意義上的這項功能,且只在最近才開始啟動新增這類特性,來定義函式間的流向,比如亞馬遜的Step Functions,以及OpenWhisk的 Composer。
然而,如果你的應用相當簡單,例如只有一個函式來提供一個API,那麼Serverless則是更好的選擇,因為部署將更容易,且對單函式的監控能力,各個Serverless平臺都已提供。
使用Serverless平臺,函式的首次呼叫會花費一定時間,因為程式碼需要初始化。例如,在OpenWhisk上,你可以使用Docker容器執行Java應用,它會花費一定時間來啟動。如果你需要快速且可靠的響應時間,你應該使用Kubernetes。
像OpenWhisk這種Serverless平臺,最近透過一系列快取的使用,已明顯提升了響應時延。在最初的冷啟動之後,你不應該再看到這些很長的響應時間,目前的響應時間對你的應用來說已足夠了。
Serverless平臺典型地需要一些資源限制,例如函式不能使用超過512M的記憶體,執行時間不能超過5分鐘。如果這些限制對你的應用來說太嚴格,那麼你也需要使用Kubernetes。
然而,某些時候可能可以將應用拆成更小的函式。某些場景下甚至就希望這麼做,例如將一個已有的單體應用遷移到雲上。
我覺得觀察這些技術今年會如何演進是非常有趣的。我已聽說某些活動想使Kubernetes更易用,也有些活動想使Serverless更成熟。
原文連結:https://dzone.com/articles/when-to-use-serverless-when-to-use-kubernetes
本次培訓內容包括:Docker容器的原理與基本操作;容器網路與儲存解析;Kubernetes的架構與設計理念詳解;Kubernetes的資源物件使用說明;Kubernetes 中的開放介面CRI、CNI、CSI解析;Kubernetes監控、網路、日誌管理;容器應用的開發流程詳解等,點選識別下方二維碼加微信好友瞭解具體培訓內容。
3月23日開始上課,還剩最後5個名額,點選閱讀原文連結即可報名。
長按二維碼向我轉賬
受蘋果公司新規定影響,微信 iOS 版的贊賞功能被關閉,可透過二維碼轉賬支援公眾號。