6 月 25 日,在上海召開的 KubeCon 2019 大會上,騰訊雲重磅發佈了下一代無服務器的發展形態:Serverless2.0。本文將以 Serverless 的概念、發展、形態、應用以及技術實現展開,進一步介紹騰訊雲針對 Serverless 2.0 的形態演進以及發展思考。git
注:文章內容整理自騰訊雲高級產品經理黃文俊在 KubeCon 2019 上的演講,演講主題爲《下一代無服務器的發展形態:Serverless2.0 》。web
Serverless 及其發展數據庫
Serverless 無服務器概念,是指知足無需購買、管理、運維服務器,用戶按需使用、按使用量付費,同時平臺或產品能夠根據使用量自動彈性擴縮容等這幾個特性的產品或服務。小程序
目前,Serverless 又被分爲了 BaaS 和 FaaS,Baas 包含了存儲、數據庫、隊列、緩存等各類形態的 Serverless 服務;而 FaaS 一般指的是函數即服務 Function as a Service 產品。後端
在目前雲中提供的計算產品形態中,包含了虛擬機、容器與雲函數。不管使用虛擬機仍是容器,除了要關注自身業務代碼以外,還須要有複雜的運維管理工做,例如管理啓動進程、打安全補丁、選擇開發框架、控制訪問權限等等。而經過使用雲函數,用戶僅需按規範進行業務代碼的編寫,就能夠對外提供服務。進程的啓動時機以及運行所在的服務器運維能夠徹底交給平臺。但當前的雲函數產品,在開發方式上和已有的基於 vm 或容器的開發方式有所不一樣。在基於 vm 或容器的開發模式中,經過使用框架處理 http 請求,啓動監聽,並由外部命令或腳原本啓動進程,是當前開發者都熟悉的業務編寫模式。微信小程序
而使用雲函數,http 請求會被轉變爲一個個的事件,業務代碼能夠直接針對事件進行處理,並按要求返回數據便可。這種由事件觸發,接收 event 消息,並根據業務邏輯進行數據處理的雲函數模型,是當前 serverless 的主要模式。這種模式的函數,咱們稱爲 event function。api
事件驅動的核心要素,是可以有豐富的事件源,經過打通各類產品和雲函數,使得各產品都可以成爲雲函數的事件源。這種狀況下,函數就成爲了產品間的粘合劑,經過承載事件或數據從一個產品流轉到另一個產品,一個函數流轉到另一個函數,在這個過程當中實現數據處理,最終創建業務邏輯。當前的事件觸發的 FaaS 形態,在針對業務的削峯填谷、爲無狀態應用提供彈性的並行處理能力,以及相似 crontab 定時任務這些場景中,提供了極大的優點。可是同時,當前的雲函數,具備訪問延時高、運行時長受限、沒法直接訪問、狀態持久化等問題,同時因爲開發方式的變化,致使已有的業務,也沒法直接向 Serverless 架構遷移,沒法作到相似從虛擬機到容器的遷移。緩存
Tencent Cloud Serverless 2.0 安全
對於已有的 Serverless 產品,以及在產品推廣過程當中的業務上線的痛點、客戶聲音,咱們從新梳理了 Serverless 產品的發展路線,並將其定義爲 Serverless2.0。服務器
event function
在 Serverless 2.0 中,咱們將從客戶的實際使用場景出發,進行了產品的梳理。針對事件驅動的函數,定義爲 event function。事件函數仍然遵循現有的函數觸發模式,並將持續增長與騰訊雲其餘各產品的對接,持續豐富應用場景,例如與日誌服務對接,提供日誌記錄處理;與數據庫對接,由數據修改動做觸發函數運行;與雲監控告警對接,針對告警事件能夠進行自動化代碼處理等。
而針對 http 場景,經過提供 http function 和 http service 兩種形態,更好的支持網絡訪問處理的場景。接下來,將對 http function 和 http service 兩種模式進行進一步的解讀說明。
http function
經過使用 http function,函數能夠直接提供外部可訪問到的 url 地址,不管是 app 應用,web 應用,仍是微信小程序,均可以經過發起 http 調用,訪問 url 來調用函數。而云函數開發中一般的 event 事件結構,優化爲 http request、http response 結構,更符合 Web 服務開發的習慣。經過 request 結構,能夠獲取到 http 請求的相關信息,而經過 response 結構,能夠自行構造出所需的 http 響應。
經過這種模式,咱們能夠專一於業務邏輯的開發,而將原有基於 vm 或容器中須要考慮的擴縮容、進程啓動、併發處理等事情都交給平臺來解決。而針對實際業務,一般不只僅是單個函數就能夠實現。在 Serverless 架構中,單個 function 一般僅提供獨特單一的功能實現,整個應用一般是由多個函數、以及圍繞着函數的數據存儲、文件存儲、消息隊列、api 管理等多種資源構成。咱們從面向 Application 角度出發,基於全套 serverless 架構,進行了 serverless 編排框架的設計。經過編排框架,咱們能夠將應用相關的資源統一到一塊兒,不只包括了函數,一樣會包含數據庫、文件存儲、消息隊列、api 管理等多種資源。
不管從應用開發、仍是調試部署,開發部署框架均將爲咱們帶來難度的下降、效率的提高。
http service
產品形態中提供的 http service,在一樣對外提供 url 訪問地址,支持應用直接訪問的基礎上,咱們提供了針對已有代碼或框架的支持。基於經常使用框架已經開發完成的業務代碼,能夠無縫遷移至 http service 中,直接開始以 serverless 模式對外提供服務。而服務中原有提供的高性能通信協議如 websocket,gRPC,一樣能夠經過 http service 對外提供。
經過使用 http service 形態,用戶無需理解容器、鏡像,而是仍然同當前 serverless 的使用模式同樣,同使用雲函數同樣,經過提交已經開發完成的代碼包,就能夠開始對外提供服務。
Serverless 2.0 上下游能力建設
Serverless 2.0,關注的不只僅是計算、開發模式、使用方式,而是要從更全面的角度來支持 Serverless 架構或應用的發展。
經過協助開發者更好的使用產品、提供全流程的開發管理支持、運維監控、調試支持等,進行全方面的發力,才能夠真正去推進 serverless 架構或應用的落地。
工具建設
爲了協助開發者更好的進行開發、調試、上線、發佈,騰訊雲 serverless 團隊從多個方面入手,提供能夠知足多種開發場景的相關工具或能力。
經過提供命令行工具,咱們能夠在本地開發環境中實現項目建立、本地調試打包、一鍵部署上線
而經過 vscode 插件以及正在持續擴展的更多開發 IDE 插件,函數的本地管理、開發調試、上線發佈,能夠經過開發 IDE 直接可視化操做。將函數的線上線下管理,與代碼的編寫調試,都整合在一個界面中完成。
爲了方便用戶進行代碼的調整或查看,咱們也經過提供 web ide,能夠在控制檯上實時的開發調試,達到與本地開發調試的相同體驗。
針對已經進行了 git 託管的代碼,咱們也增長了 git 對接能力;經過與用戶 git 打通,以及依賴包的在線安裝,提供了更簡單的代碼提交部署能力,進一步簡化操做過程,方便開發者。
DevOps
在 Serverless 的 DevOps 方面,經過與 coding.net 的合做,咱們提供了 Serverless 的 DevOps 方案。經過打通 coding.net 的 DevOps 平臺,從項目建立開始,咱們就能夠進入徹底適配 Serverless 的全管理流程中。
不管是項目管理、需求管理、代碼管理,仍是 CI 持續集成、test 測試管理、製品庫管理、CD 持續部署,Serverless 架構應用均可以適配整個 DevOps 流程,協助用戶構建徹底雲原生的 Serverless DevOps 過程。而若是已有 DevOps 或 CICD 系統的用戶,Serverless 2.0 也能夠經過提供通用方案及工具,協助用戶完成整合及融入,在已有流程中實現針對 Serverless 應用的適配。因爲 serverless 自己的平臺調度、按需啓動的特性,沒法提供和虛擬機或容器相似的登陸到環境、手工操做的能力。所以,在協助用戶排障、保障運行的透明性方面,serverless 平臺須要作的更多。
運維監控
除了經過對接雲的日誌服務和監控服務,支持基於日誌和監控的多種查詢、過濾、告警以外,咱們還在規劃更多爲用戶提高調試能力的工具建設,例如經過調用鏈追蹤,能夠跟蹤請求的通過的各個產品、服務或函數;經過故障現場捕捉,能夠抓取函數運行失敗時的現場及事件,便於進一步分析代碼故障;而應用性能分析,能夠了解到函數內部的代碼或模塊性能,便於進一步提高應用性能。
多種工具的建設,目標都是指望爲客戶提供更多的分析排障支持,提高運行的透明性,下降對於 serverless 架構的運維擔心。
技術能力
回到產品實現的底層技術上,針對騰訊雲 serverless 2.0 中提供的三種形態,目前採用了相同的技術架構,包括了微虛擬機、容器、調度平臺等多種基礎能力;經過採用相同底層能力,提供了高度的產品可擴展能力。
在 Serverless 平臺一般碰到的延遲性能方面,經過應用機器學習,預熱,擴展策略等多種技術,極大的下降了冷啓動。經過當前平臺分析,目前 97%的事件型函數啓動延遲均低於 200ms,對業務基本作到了極低感知,知足了各類場景的應用。多可用區、多集羣、自動運維、平臺監控技術的應用,進一步的在提高總體產品的可靠性及安全性。
應用案例
與 2018 年 9 月,由騰訊雲和微信聯合推出的小程序雲開發解決方案,將 Serverless 機率推向了廣大的國內小程序開發者,得到了大量的客戶及使用。小程序雲開發解決方案,經過整合騰訊雲的對象存儲,雲數據庫,雲函數,造成了一套能夠直接提供給最終開發者的解決方案,帶來了一站式的開發體驗。
原有小程序開發過程當中,針對後端服務,用戶須要自行完成服務器搭建,存儲選擇,數據庫配置、負載均衡配置等各類操做。而經過使用小程序雲開發,用戶能夠直接得到開箱即用的雲能力。存儲、數據庫、以及做爲後臺服務的函數,直接由小程序端發起調用,而無需自行管理通信鏈路、業務擴縮、訪問安全等問題。經過與小程序開發 IDE 整合,用戶能夠在 IDE 中同時完成小程序端,以及後端雲函數的開發、調試、部署,以及文件存儲、數據庫的的管理工做,大大減輕了開發及管理工做量。小程序雲開發爲 Serverless 概念及應用在國內市場中的推廣,起到了及其重要的做用。
最後,再次回顧一下核心內容。針對 Serverless 當前的訪問延遲、開發模式、業務遷移等痛點,騰訊雲 Serverless 2.0 將經過 event function、http function、http service 三種形態來分別依據場景提供解決方案。同時,針對 Serverless 架構,將經過開發工具建設,項目管理支持、DevOps 能力、監控運維、性能提高等全方位能力,來不斷知足用戶訴求,打造極致的產品和技術體驗,全面的支持用戶向 Serverless 架構發展。