1. 程式人生 > >所謂 Serverless,你理解對了嗎?

所謂 Serverless,你理解對了嗎?

作者 | Emac

640?wx_fmt=png&wxfrom=5&wx_lazy=1

杏仁醫生架構師兼平臺組負責人,關注為服務、DevOps領域。

隨著 DevOps 和微服務的理念日漸被IT業界所接受,另一個新名詞 Serverless 也開始進入人們的視野。尤其在今年4月份國內兩大雲服務廠商阿里雲、騰訊雲先後推出各自的 Serverless 產品之後,Serverless 一時洛陽紙貴。那到底什麼是 Serverless,它跟 DevOps 和微服務又有什麼樣的聯絡呢?本文將嘗試揭開 Serverless 的神祕面紗,讓你一睹為快。

1 Serverless != No Server

首先,必須澄清的是 Serverless 並不能按字面上理解為無伺服器,而是說對應用開發者而言,不再需要操心

大部分跟伺服器相關的事務,比如伺服器選購、應用執行環境配置、負載均衡、日誌蒐集、系統監控等,這些事情統統交給 Serverless 平臺即可,應用開發者唯一需要做的就是編寫應用程式碼,實現業務邏輯。為了避免歧義,本文將保留使用 Serverless,而不是其通常的中文翻譯無伺服器。

Serverless 最早由 Amazon 提出,第一個 Serverless 平臺是 2014 年年底推出的 Amazon Lambda,應用開發者只需要上傳程式碼或者應用包,即可釋出一個應用。之後全球各大雲服務廠商都紛紛推出各自的Serverless平臺,比如Google Cloud Functions,Azure Functions,IBM Cloud Functions,以及前面提到的阿里雲函式計算和騰訊雲無伺服器雲函式等。在雲服務廠商之外,開源社群也湧現出很多優秀的Serverless框架,比如Apache OpenWhisk,Spring Cloud Function,Lambada Framework,webtask等。

根據 Serverless Architectures一文,Serverless 應用可以細分為 BaaS 和 FaaS 兩類,

  • BaaS:Backend as a Service,這裡的 Backend 可以指代任何第三方提供的應用和服務,比如提供雲資料庫服務的 Firebase和Parse,提供統一使用者身份驗證服務的Auth0和Amazon Cognito等。

  • FaaS:Functions as a Service,應用以函式的形式存在,並由第三方雲平臺託管執行,比如之前提到的 Amazon Lambda,Google Cloud Functions 等。

本文主要討論的是 FaaS,這也是目前各類 Serverless 平臺和框架主要支援的型別。

2 函式即應用

當我們討論函式時,我們到底在討論什麼?

函式,往大了說可以是一個應用的 main 函式,往小了說也可以是一個簡單的加法函式,那到底該如何理解 FaaS 中的函式呢?先來看張圖。

640?wx_fmt=other

左側的 Monolith 即我們常說的單體應用,中間是微服務,右側就是 FaaS 中的函式(為了避免歧義,如不特殊指明,下文提到的函式都是指代 FaaS 中的函式)。如同一個單體應用可以按業務模組拆分成多個微服務,一個微服務也可以按使用場景拆分成多個函式。比如一個廣告微服務,至少可以拆分出實時競價、展示計數、報表查詢等多個函式。也就是說,FaaS 中的函式和微服務中的 API 是同一粒度的。但不同於 API,在 Serverless 架構下,每個函式都是獨立部署,按需執行。那這樣的拆分有意義嗎?接著往下看。

3 搞懂 Serverless 的 4 把鑰匙

和其他架構相比,Serverless 有以下 4 個特點。

3.1 執行成本更低

無論是過去的 IDC,還是如今的雲主機,本質上都是一種包月計費模式,也就是說,不管有沒有使用者訪問你的應用,也不管你有沒有部署應用,你都要付相同的錢。但對於 Serverless 應用,你只需要根據實際使用的資源量(比如 Amazon Lambda 是按記憶體大小*計算時間計算資源量)進行付費,也即用多少,付多少,相當於行動網路的按流量計費模式。那為什麼說使用這種模式就能降低執行成本呢?

640?wx_fmt=other

紅線以下的長方形面積代表了傳統包月計費模式下你所需要支付的成本,而藍色區域的面積則代表了按流量計費模式下的成本,顯然後者要遠低於前者。根據福布斯 2015 年釋出的一份研究報告,從全年來看,一個典型的資料中心裡的伺服器平均資源使用率只有可憐的 5% 到 15%,也就是說如果全部使用 Serverless,理論上至少可以節省 80% 的執行成本。

按流量計費的另一個隱藏的好處是任何的效能提升都可以直接的反應到執行成本上,這讓技術人員的價值也有了更充分的體現。

3.2 自動擴縮容

Serverless 第二個常被提及的特點是自動擴縮容。前面說了函式即應用,一個函式只做一件事,可以獨立的進行擴縮容,而不用擔心影響其他函式,並且由於粒度更小,擴縮容速度也更快。而對於單體應用和微服務,藉助於各種容器編排技術,雖然也能實現自動擴縮容,但由於粒度關係,相比函式,始終會存在一定的資源浪費。比如一個微服務提供兩個 API,其中一個 API 需要進行擴容,而另一個並不需要,那麼這時候擴容,對於不需要的API就是一種浪費。

3.3 事件驅動

函式本質上實現的是一種 IPO(Input-Process-Output)模型,它是短暫的,是即用即走的。這點是函式區別於單體應用和微服務的另一個特徵。不管是單體應用,還是微服務,都是系統中的常駐程序,套用一句流行語,就是你來或不來,我都在這裡,不捨不棄。而函式不一樣,既不釋出任何服務,沒有請求時也不消耗任何資源,只有當請求來了,才會消耗資源進行響應,服務完立刻釋放資源。正是由於這一點,函式天然的適用於任何事件驅動的業務場景,比如廣告競價,身份驗證,定時任務,以及一些新興的 IoT 應用。

640?wx_fmt=other

OpenWhisk 給出的一個 IoT 電冰箱的案例

3.4 無狀態性

函式的 IPO 本質決定了函式的另一個特徵,無狀態性。無狀態一方面有助於提高函式的可重用性和可遷移性,但另一方面也帶來了一些效能上的損失。第一,函式不是常駐程序,這就意味著每來一個請求,函式都要經歷一次冷啟動,這對編譯型語言編寫的應用不啻為一場噩夢(以 Spring Boot 為例,即便是一個最簡單的 Hello World 應用,至少也需要 5 秒鐘才能啟動完畢)。第二,每服務完一個請求,函式所在的程序就會被殺掉,也就是說使用記憶體進行快取對函式而言不再有意義。第三,由於每次啟動都可能被排程到新的伺服器上,任何基於本地磁碟的快取技術也就不再適用。從第二點和第三點可知,函式只能使用外存(比如 Redis,資料庫)進行快取,而操作外存都需要通過網路,效能跟記憶體、本地硬碟相比差了一到兩個數量級。

4 DevOps => NoOps

如果說 Agile+IaaS 促成了 DevOps,那麼 Agile+PaaS 就孕育了 Serverless。

理解了什麼是 Serverless,再來看看它和 DevOps 的關係。DevOps 雖然做了很多 Dev 的事,但底牌還是 Ops(好比貓熊雖然長得像貓,但實際上還是熊)。但 Serverless 不同,從本質上說,它是把 Ops 外包給第三方平臺,讓 Dev 專注於業務邏輯的實現而不用操心 Ops 相關的工作,最終的結果就是絕大多數企業不再需要 Ops 這個崗位。它和 DevOps 最大的共同點就是幫助企業縮短產品上市的時間。

5 參考

  • Serverless Architectures (https://martinfowler.com/articles/serverless.html)

  • What makes serverless architectures so attractive? (https://developer.ibm.com/opentech/2016/09/06/what-makes-serverless-attractive/)

  • InfoQ虛擬研討會:無伺服器計算的實踐方法 (http://www.infoq.com/cn/articles/practical-serverless-computing?utm_campaign=infoq_content&utm_source=infoq&utm_medium=feed&utm_term=架構%20&%20設計-articles)

  • 姍姍來遲的Serverless如何助力微服務和DevOps (http://www.infoq.com/cn/news/2017/06/tengxun-cloud-serverless?utm_campaign=infoq_content&utm_source=infoq&utm_medium=feed&utm_term=DevOps)

 全文完

以下文章您可能也會感興趣:

我們正在招聘 Java 工程師,歡迎有興趣的同學投遞簡歷到 [email protected]

640?wx_fmt=png

杏仁技術站

長按左側二維碼關注我們,這裡有一群熱血青年期待著與您相會。


相關推薦

所謂 Serverless理解

作者 | Emac杏仁醫生架構師兼平臺組負責人,關注為服務、DevOps領域。隨著 DevOps

補習系列(9)-springboot 定時器

empty cront apps 任務並發 轉發 gis execute 大小 定義 目錄 簡介 一、應用啟動任務 二、JDK 自帶調度線程池 三、@Scheduled 定制 @Scheduled 線程池 四、@Async 定制 @Async 線程池 小結 簡介 大

【深度精講】JFinal中的Ret和Kv工具類的區別

在JFinal中有兩個類Map的工具類,一個是有狀態的Ret,一個是無狀態的Kv,各種自己的應用場景,你用對了嗎?       下面我們從多個方面來探究一下,JFinal針對這兩個類的設計:   一、位置-com.jfinal.kit包  

行業少奮鬥十年

因為從企業發展的角度來看,凡是最後成為企業管理者的,基本上純技術出身的很少。管理者本質上不是需要特別深的專業知識,而是各個方面,都需要懂,特別是管理和利用手下的資源,最大化創造效益,這是純技術領域專家所不具備的能力。這就好比一個時鐘,和僅僅一顆齒輪,他的維度是不一樣的。 所以,你就需要問自己,自己是更希望與

合適的meta?

meta標籤用來描述一個HTML網頁文件的屬性,例如作者、日期和時間、網頁描述、關鍵詞、頁面重新整理等。它提供的資訊雖然使用者不可見,但卻是文件的最基本的元資料。    對於網頁來說,meta data就是通過一些欄位資訊來描述一下當前網頁,以便瀏覽器和搜尋引擎在訪問到此網頁的時

可用性測試的8種誤解中槍

使用者測試是理解使用者行為和動機的過程。 好的設計能讓使用者輕鬆找到想看的, 輕鬆做到想做的。   然而很多時候, 由於時間和預算的限制, 使用者測試被邊緣化、 甚至直接被略過了。 究其根本, 還是在於使用者測試的價值被誤解和低估了。   蜜汁誤解1  

部署釋出的幾種思路:運維司機們您都理解

文章背景 滾動部署、藍綠部署、灰度釋出/金絲雀釋出、A/B測試等名詞在講述“微服務”、“DevOps”,甚至更抽象的“Cloud-native”的交付時可能會有所涉及,學習這幾個名詞作為基礎打底; 有幾篇網路上瀏覽量較高的文章在這幾者的所謂“對比說明”中,槽點太多,故而有了本文作為概念層面的糾正。

VR禁毒體驗試過

研發 img 成了 此舉 pict clas bsp 廣州 嘗試 VR禁毒體驗,你試過了嗎? 大家先來跟著小編的文字,嘗試冥想一下——當你正處於寧靜的情緒中,對於顏色感覺生動、豐富而深刻,感到周圍事物絢麗多彩,五光十色;對音樂的鑒賞能力增強,對其他聲音也很敏感。然後,感到時

【項目管理】經驗之談 | 資深項目經理都避免的5個坑中招

尊重 最終 fail 同方 快速 這就是 tro 理解 動力 哈嘍!大家好! 那天看到最有趣的一句話就是 為了填坑,一位項目經理胖了20斤 。。。。。 今天就給大家介紹一下 項目經理要註意的那些“坑” 項目經理“誤踩雷區” 1 未告知成員工作目標 作為項目經理

C語言/原子/編譯真的明白

clas done ati pre 內存 程序 導致 裏的 creat   說到原子,類似於以下的代碼可能人人都可以看出貓膩。 #include <stdio.h> #include <pthread.h> int cnt = 0;

身份證掃描識別/身份證OCR識別的正確姿勢get到

視頻流 開發包 掃描識別 出錯 應用 左右 信息 設備 ucs 自從國家規定電信實名制之後,實名制已經推廣到各個領域:辦理通信業務需要實名制、銀行開戶需要實名制、移動支付需要實名制,就連註冊個自媒體賬戶都需要實名制。 而實名制的背後,就是身份證信息的采集和錄入驗證。 傳統的

IT輪子系列(六)——Excel上傳與解析一套代碼解決所有Excel業務上傳Get到

tryparse mappath src 個推 列名 import ges bject tab 前言 在日常開發當中,excel的上傳與解析是很常見的。根據業務不同,解析的數據模型也都不一樣。不同的數據模型也就需要不同的校驗邏輯,這往往需要寫多套的代碼進行字段的檢驗,如必填

柯夢嬌:3.5非農強勢來襲準備好

均線 黃金 有效 走勢分析 body 現象 線圖 盈利 交易 柯夢嬌:3.5非農強勢來襲,你準備好了嗎? 就像貝利的烏鴉嘴一樣,資本市場常有些令人訝異的“規律”,比如期指“逢9必跌”、原油市場“7月必跌”等等。如今,在黃金市場上,也出現了這一種詭異的現象——周五總是

python小白也可以分分鐘爬取微博數據並生成有個性的詞雲get到

python 爬蟲 web開發 編程Python(發音:英[?pa?θ?n],美[?pa?θɑ:n]),是一種面向對象、直譯式電腦編程語言,也是一種功能強大的通用型語言,已經具有近二十年的發展歷史,成熟且穩定。它包含了一組完善而且容易理解的標準庫,能夠輕松完成很多常見的任務。它的語法非常簡捷和清晰,與其它大多

共享人才時代已經到來做好準備

共享共享經濟是一種全新的經濟模式,近幾年得到了突飛猛進的發展。其本質是整合線下的閑散物品或服務者,讓他們提供產品或服務。在共享過程中,供給方通過在特定時間內提供使用權或服務獲得酬勞,需求方雖無所有權但在特定使用權內滿足了需要。 人才是決定企業成敗的關鍵性因素之一。共享人才做為一種新生的力量,在互聯網大環境中扮

記一次安裝多版本php的四個雷區踩著

path start cgi 命令執行 mysq -c tool port 一鍵 記一次安裝多版本的php的四個雷區,你踩著了嗎 需求:公司需要在同一臺服務器上安裝不同版本的php,而這一臺的服務上已經安裝了php.7.1,現需要同

逸管家:共享人才時代已經到來做好準備

特定 正常 之間 結束 銷售 相關 不可 人的 十分 ?  共享人才時代已經到來,你做好準備了嗎? 共享經濟是一種全新的經濟模式,近幾年得到了突飛猛進的發展。其本質是整合線下的閑散物品或服務者,讓他們提供產品或服務。   在共享過程中,供給方通過在特定時間內提供使用權或服務

初學C語言編程時最容易犯的錯誤踩坑

不同的 類型 alt 結果 如何 wid text size can C編譯的程序對語法檢查並不像其它高級語言那麽嚴格,這就給編程人員留下“靈活的余地”,但還是由於這個靈活給程序的調試帶來了許多不便,尤其對初學C語言的人來說,經常會出一些連自己都不知道錯在哪裏的錯誤。看著有

HTTPS時代已來做好準備

兩種方法 運營商 增長 images 同步 有效期 很多 取證 錯誤類型 摘要: 全站HTTPS時代的到來,這也是最近越來越多的網站上HTTPS和更換證書的原因。那麽究竟什麽是HTTPS?它為什麽會提升安全系數?CDN HTTPS又將如何做到安全性與性能同時提升?作為用戶,

學習程式設計的25個“坑”踩到

0、忽視了程式設計終究是以人為本的。是的,機器的確會執行你的程式碼,但程式設計是為人們解決問題的,將他們的需求轉換為由其他人(或你自己線下)讀取,維護和修改的程式碼。 1、未能花充足的時間練習程式設計。 根據工作或日程安排,你可能會花費大量時間在與程式設計相關的任務上,但實際上這些並非程式設計本