《2017年會是Serverless爆發之年嗎?》要點:
本文介紹了2017年會是Serverless爆發之年嗎?,希望對您有用。如果有疑問,可以聯系我們。
中小型公司,尤其是互聯網行業的創業公司,本身并沒有太多的技術人員,如果設計系統時需要考慮諸多的技術問題,例如Web應用服務器如何配置、數據庫如何配置、消息服務中間件如何搭建等等,那對于他們來說人員成本、系統成本會很高,Serverless架構的出現,讓這種情況可能可以大幅度改善.
在目前主流云計算IaaS(Infrastructure-as-a-Service,基礎設施即服務)和PaaS(Platform-as-a-Service,平臺即服務)中,開發人員進行業務開發時,仍然需要關心很多和服務器相關的服務端開發工作,比如緩存、消息服務、Web應用服務器、數據庫,以及對服務器進行性能優化,還需要考慮存儲和計算資源,考慮負載均衡和橫向擴展能力,考慮服務器容災穩定性等非專業邏輯的開發.這些服務器的運維和開發知識、經驗極大地限制了開發者進行業務開發的效率.設想一下,如果開發者直接租用服務或者開發服務而無須關注如何在服務器中運行部署服務,是否可以極大地提升開發效率和產品質量?這種去服務器而直接使用服務的架構,我們稱之為Serverless架構(無服務器架構).
2014年,云廠商AWS推出了“無服務器”的范式服務.
其實,最初“無服務器”意在幫助開發者擺脫運行后端應用程序所需的服務器設備的設置和管理工作.這項技術的目標并不是為了實現真正意義上的“無服務器”,而是指由第三方供應商負責后端基礎結構的維護,以服務的方式為開發者提供所需功能,例如數據庫、消息,以及身份驗證等.這種服務基礎結構通常可以叫做后端即服務(Backend-as-a-Service,BaaS),或移動后端即服務(MobileBackend-as-a-service,MBaaS).
現在,無服務器架構是指大量依賴第三方服務(也叫做后端即服務,即“BaaS”)或暫存容器中運行的自定義代碼(函數即服務,即“FaaS”)的應用程序,函數是無服務器架構中抽象語言運行時的最小單位,在這種架構中,我們并不看重運行一個函數需要多少CPU或RAM或任何其他資源,而是更看重運行函數所需的時間,我們也只為這些函數的運行時間付費.無服務器架構中函數可以多種方式觸發,如定期運行函數的定時器、HTTP請求或某些相關服務中的某個事件.
以帶有服務功能邏輯的傳統面向客戶端的三層應用為例(一個典型的電子商務應用網站).一般來說包含客戶端、服務端程序、數據庫,服務端用Java開發完成,客戶端用JavaScript.
采用這種架構,服務端需要實現諸多系統邏輯,例如認證、頁面導航、搜索、交易等都需要在服務端完成.如果采用Serverless架構來對該應用進行改造,則架構如圖所示:
Serverless架構相比于傳統面向客戶端的三層應用架構,有以下幾方面的差異:
1. Amazon的Lambda產品
2014年11月14日,AWS發布了AWS Lambda.AWS Lambda是市面上最早,也是最為成熟的Serverless框架之一.該服務最遲支持Node.js,現在也支持Java和Python.它與Alexa Skills Kit(軟件開發工具包)緊密集成,亞馬遜提供交互式控制臺和命令行工具,以便上傳和管理代碼片段.
2. Google Cloud Functions
Google是為服務架構的最前沿公司,除了推動Kubernetes,Google還投資了Cloud Functions,該架構可以在其公共云基礎設施上運行.
3. Iron.io
Iron.io最初是為企業級應用提供微服務.Iron.io是用Go語言編寫的,用于處理高并發、高性能計算服務,并已經集成Docker服務,提供一種完整的微服務平臺.
4. IBM OpenWhisk
2016年2月的InterConnect大會,IBM發布了OpenWhisk,這種事件驅動型開源計算平臺可以用來替代AWS Lambda.OpenWhisk平臺讓廣大開發人員能夠迅速構建微服務,從而可以響應諸多事件,比如鼠標點擊或收到來自傳感器的數據,并執行代碼.事件發生后,代碼會自動執行.
5. Serverless Framework
Serverless Framework是無服務器應用框架和生態系統,旨在簡化開發和部署AWS Lambda應用程序的工作.Serverless Framework作為Node.js NPM模塊提供,填補了AWS Lambda存在的許多缺口.它提供了多個樣本模板,可以迅速啟動AWS Lambda開發.
6. Azure WebJobs
Azure Web的應用功能,可以與Web、API應用相同的上下文中運行程序或腳本.可以上傳并運行可執行文件,例如cmd、bat、exe、psl等等.WebJobs提供SDK用于簡化針對Web作業可以執行的常見任務,例如圖像處理、隊列處理、RSS聚合、文件維護,以及發送電子郵件等等.
1. 按需使用計算服務執行代碼
Serverless架構是SOA概念的自然延伸.在Serverless架構中,所有自定義代碼作為孤立的、獨立的、細粒度的函數來編寫和執行,這些函數在AWS Lambda之類的無狀態計算服務中運行.開發人員可以編寫函數,執行常見的任務.在比較復雜的情況下,開發人員可以構建更復雜的管道,編排多個函數調用.
2. 編寫單一用途的無狀態函數
單單負責處理某一項任務的函數很容易測試,并穩定運行.通過以一種松散編排的方式將函數和服務組合起來,能夠構建易于理解、易于管理的復雜后端系統.
為lambda等計算服務編寫的代碼應該以無狀態方式進行構建,這樣會讓無狀態功能很強大,讓平臺得以迅速擴展,處理數量不斷變化的請求或者事件.
3. 設計基于推送的、事件驅動的管道
可以構建滿足任何用途的服務器架構.系統可以一開始就構建成無服務器,也可以逐步設計現有的單體型應用程序,以便充分發揮這種架構的優勢.最靈活、最強大的無服務器設計是事件驅動型的.
構建事件驅動的、基于推送的系統常常有利于降低成本和系統復雜性,但是要注意,并不是任何情況下都是適當的或者容易實現的.
4. 創建更強大的前端
由于Lambda的定價基于請求數量、執行時間段以及分配的內存量,所以代碼執行需要越快越好.數據簽名的令牌讓前端可以與不同的服務直接通信.相比之下,傳統系統中所有通信經由后端服務器來實現.讓前端與服務進行通信有助于減少創建環節、盡快獲得所需的資源.
5. 與第三方服務集成
如果第三方服務能提供價值,并減少自定義代碼,那么自然它們就很有價值.開發人員可以通過引入第三方服務來減少自己實現各種業務邏輯的需要,可以減少小型公司的開發成本,避免價格、性能、可用性等要素上的劣勢.
隨著移動和物聯網應用蓬勃發展,伴隨著面向服務架構(SOA)以及微服務架構(MSA)的盛行,造就了Serverless架構平臺的迅猛發展.在Serverless架構中,開發者無須考慮服務器的問題,計算資源作為服務而不是服務器的概念出現,這樣開發者只需要關注面向客戶的客戶端業務程序開發,后臺服務由第三方服務公司完全或者部分提供,開發者調用相關的服務即可.Serverless是一種構建和管理基于微服務架構的完整流程,允許我們在服務部署級別而不是服務器部署級別來管理應用部署,甚至可以管理某個具體功能或端口的部署,這就能讓開發者快速迭代,更快速地交付軟件.
這種新興的云計算服務交付模式為開發人員和管理人員帶了很多好處.它提供了合適的靈活性和控制性級別,因而在IaaS和PaaS之間找到了一條中間道路.由于服務器端幾乎沒有什么要管理的,Serverless架構正在徹底改變軟件開發和部署流程,比如推動了NoOps模式的發展.
作者:麥克周,來自微信公眾號:聊聊架構
轉載請注明本頁網址:
http://www.snjht.com/jiaocheng/4258.html