無伺服器是當前軟體架構模式中的熱門話題之一,像許多軟體工程中的其他術語或趨勢一樣,無伺服器也沒有一個明確的定義,所以在這篇文章中我們會簡單介紹一下無伺服器的基本概念,並圍繞無伺服器的幾個爭論點展開討論。

什麼是無伺服器?

根據MartinFowler.com的定義,無伺服器體系結構是指主要依賴於第三方服務(稱為後端即服務或"BaaS")的應用程序或在臨時容器中運行的自定義代碼(功能即服務或"FaaS")。

如上說述,如果你沒有維護或管理自己的基礎架構來運行應用程序,並根據使用情況付費(或者不付費),同時從供應商那裡自動獲得所需級別的高可用性、可擴展性和容錯性,那麼你就正在運行一個無伺服器的應用程序。作為在無伺服器環境中運行應用程序的所有者,你可以將所有的精力放在應用程序業務邏輯上,而不必擔心其運行的基礎架構以及應用程序周圍的其他非功能性需求。

無伺服器只是炒作?

如果你是無伺服器的新手,並且在考慮將其作為架構,那麼這就會成為你需要面對的問題之一。沒錯兒,無伺服器是現在的熱門話題,但是綜合了之前和之後的發展,我個人認為無伺服器並不是一個短期內的炒作,至少在3-5年不是,圍繞無伺服器的技術或許會被改變、替換,但是無伺服器的概念不會。

技術層面如何向無伺服器發展?

俗話說得好,觀往知來、知古鑒今,所以在解釋無伺服器功能如何強大之前,我們先來看看它是如何在過去幾年演變的:

  • 1989 - 1991年 - Sir Tim Berners-Lee發明瞭萬維網

  • 1991 - 1995年 - 裸機時代

  • 1995年 web hosting

  • 1999年 - 軟體即服務(SaaS)概念由Salesforce引入

  • 2001年 - VMWare發布ESXi,"伺服器虛擬化"成為了一件大事

  • 2002-2006-AWS提出IaaS,人們開始談論"雲計算"

  • 2009年 Heroku提出"平臺即服務"(PaaS)

  • 2011年 - Envolve / Firebase,實時資料庫即服務

  • 2012年 - Parse.com和第一個後端即服務(BaaS)

  • 2013年 - Docker,"容器比虛擬機好"

  • 2013-2015 - Kubernetes / Swarm / Nomad / CoreOs(containers at scale)

  • 2014年 - AWS Lambda推出(FaaS)

AWS lambda誕生了,無伺服器這個詞與FaaS一起出現在舞臺上,雖然大多數人認為Lambda是無伺服器的起點,但是containerization 將無伺服器遷移推向第一個高潮,隨著containerization的出現,全球領先的雲服務提供商開始向客戶提供"付費即用"的概念以及最需要的非功能性需求,支持使用其基礎架構運營業務。


如果從字面上來看,Serverless由「Server」(伺服器)+「less」(詞根)組成,然而,Serverless是代表無伺服器嗎?要說起Serverless還要從亞馬遜的Lambda說起。AWS在2014年推出的Lambda無伺服器計算服務架構,率先吹響了無伺服器運算革命的號角。

  可能不少人要蒙b了,無伺服器?難道要革了這些硬體伺服器廠商的命嗎?

 Serverless架構是什麼?

  先別急,這裡需要先澄清一下,Serverless其實並不代表不需要伺服器或者是「無伺服器」了,而是,作為開發者來說,再也不用去操伺服器的心,計算資源作為服務而不是伺服器的概念而出現。Serverless裡面的Server代表著服務,也就是說,它是一種構建和管理基於微服務架構的完整流程,允許你在服務部署級別而不是伺服器部署級別來管理你的應用部署,你甚至可以去管理某個具體功能或埠的部署,這就能讓開發者快速迭代,更快速地開發軟體。

  上了雲計算,你就能省心了?

  在很多CIO/CTO看來,IT團隊在工作中有很多阻礙,例如,軟體開發人員很難集中精力做研發,開發者很多時候在做沒有價值或者低價值的事情,比如說,IT人員需要花很多時間在解決各種網路問題、運維問題、應付宕機或者安裝修補漏洞等等。

  那麼,上雲(公有雲)就一勞永逸了嗎? 答案是,並不是。公有雲提供的虛機服務,雖然不用管理硬體的伺服器,但是,雲上的虛擬機和實體的伺服器管理差不了太多,還是要處理運維問題,比如說安全補丁、系統監控、應用管理等等。

  那麼,DevOps呢?

  很多人以為,開發人員學會了DevOps就能夠解決運維的問題,實際上,這也是不切實際的。開發者和運維人員可能無法通力合作, DevOps就像一個「理想國」,然而事實並不那麼美好。DevOps成功的關鍵,在於IT架構的自動化。但即使,用戶上雲了,系統管理需要手動界面去設定,這樣就發揮不了DevOps應該達到的效果。

  Serverless的好處:以亞馬遜Lambda為例

  正如本文開頭所說的,Lambda讓你不用去操心伺服器部署、容量和伺服器的擴展、容錯、伺服器上選什麼操作系統等等。你的應用程序只需要和多個第三方的API或服務打交道,也可以自我創建一個無伺服器的API。

  舉例來說,比如要架構一個視頻的服務,以前需要用一堆伺服器,再設計出一套上傳、解碼、轉碼的架構。使用一個Lambda function,當AWS探測到用戶定義的時間,比如上傳了一個視頻文件,Lambda自動運行響應的程序,結束後關閉程序。提高了效率,讓用戶和開發者專註業務上。

  Serverless的本質是方法論的轉變

  可以說,Serverless是一種思維方式和方法論的轉變,從過去的「構建一個框架運行在一臺伺服器上,對多個事件進行響應。」轉變為「構建或使用一個微服務或微功能去響應一個事件,不用關心底層的伺服器和計算資源。」

  Serverless將是兵家必爭之地?

  亞馬遜領先發布Lambda之後,其他雲計算廠商也逐漸跟進:如Google、微軟、IBM等。

  微軟在2016年推出了Azure Function,Google推出Cloud Function,而IBM在BlueMix上推出了OpenWhisk無伺服器運算服務,還將其開源。

  目前,Serverless受到了很多開發者的青睞,可以預見的是,Serverless作為一種新的理念,將會給未來的IT行業發展以很多的想像空間,或將成為一種顛覆性和決定性的競爭籌碼。


一言蔽之,Serverless可以理解為「函數即服務」(Function as a Services,FaaS),與大家熟悉的微服務相比,「函數」(Function)的粒度更加細小。當然,這是一種異常簡潔有效的外包操作模式,由服務提供商去負責搞定伺服器、資料庫、應用邏輯,大大降低了基礎設施的成本和人力資源成本。


推薦閱讀:
相關文章