浅析Serverless
近兩年來,Serverless 概念在開發者中交流的越來越多,主題分享呈現爆發趨勢。有人說:Serverless 正在改變未來軟件開發的模式和流程,它就是云計算的未來。
在一個應用中包含了多個功能,如訂單創建、訂單查詢和訂單修改等。應用數據存儲在外部數據庫中。數據庫和應用一樣,也部署在數據中心的主機上,由用戶負責運維。
開發人員進行業務開發時,需要關心很多和服務器相關的服務端開發工作,比如存儲和計算資源、緩存、消息服務、數據庫,以及防止服務器被安全攻擊,負載均衡和橫向擴展能力,考慮服務器容災穩定性等非專業邏輯的開發。這些服務器的運維和開發知識、經驗極大地限制了開發者進行業務開發的效率。
傳統的架構:
應用被部署在Serverless平臺之上。應用的功能點變成若干個函數定義,部署于FaaS之中。數據仍然存放在后端數據庫中。應用函數通過訪問后端的數據庫服務(BaaS)獲取訂單數據。
Serverless 場景下,客戶端需要通過 API 網關 Baas 來訪問函數 FaaS 服務,然后在通過函數計算做數據庫鏈接實現數據庫的寫入和拉取。
在Serverless架構下。當用戶完成應用開發后,軟件應用將被部署到指定的運行環境,這個運行環境不再是具體的一臺或多臺服務器,而是支持Serverless的云計算平臺。Serverless云計算平臺保證該主機提供應用正常運行所需的計算資源。在訪問量升高時,云計算平臺動態地增加應用的部署實例。當應用空閑一段時間后,云計算平臺自動將應用從主機中卸載,并回收資源。
Serverless服務架構:
相相同點:
1.兩個應用都存在一個邏輯層,負責處理用戶請求;
2.兩個應用的數據都存儲在應用外部的數據庫中。
不同點:
1.Serverless架構的應用部署于Serverless平臺之上,由Serverless平臺提供運行所需的計算資源。
2.在Serverless架構下,由于應用的邏輯分散成了若干個函數,推薦通過API網關對這些函數邏輯進行統一的管控(如流量控制、安全管控、版本管理等)
詳解Serverless:
無服務器計算是一種云計算執行模型,云廠商提供程序運行的服務器,并動態管理機器資源的分配。云廠商基于應用程序消耗的實際資源量進行定價,而不是用戶預先購買的容量。
Serverless并不能按字面上理解為無服務器,而是說對應用開發者而言,不再需要操心大部分跟服務器相關的事務,比如應用運行環境配置、負載均衡、日志搜集、系統監控等,這些事情統統交給Serverless平臺即可,應用開發者唯一需要做的就是編寫應用代碼,實現業務邏輯。
Serverless主要的兩個特征是:免運維,按資源的使用量付費
目前業界的各類Serverless實現按功能而言,主要為應用服務提供了兩個方面的支持:函數即服務(Function as a Service,FaaS)以及后臺即服務(Backend as aService,BaaS)
那么下面來說說IaaS,PaaS,Saas,FaaS和BaaS
以做披薩生意為例,如果從買設備,制作,銷售都是自己一個人做,未免會太過于勞累,所以需要別人的服務來讓這個生意更好做,下面就是一些讓別人服務你的方法:
1.IaaS
別人給你提供廚房,爐子,煤氣這些基礎設施,你去制作
2.PaaS
除了別人給你提供的基礎設施之后,還有人幫你做餅皮,自己只需要把其他配料撒上去,之后還有人幫你烤
自己能決定的就是這個披薩的味道
3.SaaS
自己不參與制作,直接用別人做好的披薩,自己只需要包裝一下,給披薩打上自己的logo賣出去就可以
?
4.BaaS
提供了一些服務讓你選擇,別人提供了烤披薩,調配料這些服務,用哪個就可以點哪個
5.FaaS
比提供某一項服務更加具體,具體到某一項服務的具體內容
c技術特點:
按需加載
應用的加載(load)和卸載(unload)由Serverless云計算平臺控制。這意味著應用不總是一直在線的。只有當有請求到達或者有事件發生時才會被部署和啟動。當應用空閑至一定時長時,應用會被自動停止和卸載。 事件驅動
應用的加載和執行由事件驅動,通過將不同事件來源(EventSource)的事件(Event)與特定的函數進行關聯,實現對不同事件采取不同的反應動作。
狀態非本地持久化
云計算平臺自動控制應用實例的加載和卸載,且應用和服務器完全解耦,應用不再與特定的服務器關聯。因此應用的狀態不能,也不會保存在其運行的服務器之上,不能做到傳統意義上的狀態本地持久化
應用函數化
每一個調用完成一個業務動作,應用會被分解成多個細顆粒度的操作。由于狀態無法本地持久化,這些細顆粒度的操作是無狀態的。
依賴服務化
所有應用依賴的服務都是一個個后臺服務(BackendService),應用通過BaaS方便獲取,而無須關心底層細節。
?
Serverless的局限性:
可移植性
Serverless應用的實現在很大程度上依賴于Serverless平臺及該平臺上的FaaS和BaaS服務。不同IT廠商的Serverless平臺和解決方案的具體實現并不相同。
安全性
在Serverless架構下,用戶不能直接控制應用實際所運行的主機。不同用戶的應用,或者同一用戶的不同應用在運行時可能共用底層的主機資源。對于一些安全性要求較高的應用,這將帶來潛在的安全風險。
性能
當一個Serverless應用長時間空閑時將會被從主機上卸載。當請求再次到達時,平臺需要重新加載應用。應用的首次加載及重新加載的過程將產生一定的延時。對于一些對延時敏感的應用,需要通過預先加載或延長空閑超時時間等手段進行處理。
執行時長
Serverless的一個重要特點是應用按需加載執行,而不是長時間持續部署在主機上。目前,大部分Serverless平臺對FaaS函數的執行時長存在限制。因此Serverless應用更適合一些執行時長較短的作業。?
技術成熟度
目前Serverless相關平臺、工具和框架還處在一個不斷變化和演進的階段,開發和調試的用戶體驗還需要進一步提升。
?
如何實現FaaS?
微服務和FaaS的差別在于粒度,微服務是功能級別,FaaS 是函數級別。server 要實現FaaS,首先必須將單體應用演進到微服務,然后才能進一步地分解到函數級別,實現FaaS。
總結
以上是生活随笔為你收集整理的浅析Serverless的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 2021天梯赛题解
- 下一篇: 2017年网易校招题 买苹果