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