天天看點

下一代無伺服器的發展形态: Serverless2.0

6 月 25 日,在上海召開的 KubeCon 2019 大會上,騰訊雲重磅釋出了下一代無伺服器的發展形态:Serverless2.0。本文将以 Serverless 的概念、發展、形态、應用以及技術實作展開,進一步介紹騰訊雲針對 Serverless 2.0 的形态演進以及發展思考。

注:文章内容整理自騰訊雲進階産品經理黃文俊在 KubeCon 2019 上的演講,演講主題為《下一代無伺服器的發展形态:Serverless2.0 》。

Serverless 及其發展

Serverless 無伺服器概念,是指滿足無需購買、管理、運維伺服器,使用者按需使用、按使用量付費,同時平台或産品可以根據使用量自動彈性擴縮容等這幾個特性的産品或服務。

目前,Serverless 又被分為了 BaaS 和 FaaS,Baas 包含了存儲、資料庫、隊列、緩存等各種形态的 Serverless 服務;而 FaaS 通常指的是函數即服務 Function as a Service 産品。

下一代無伺服器的發展形态: Serverless2.0

在目前雲中提供的計算産品形态中,包含了虛拟機、容器與雲函數。無論使用虛拟機還是容器,除了要關注自身業務代碼之外,還需要有複雜的運維管理工作,例如管理啟動程序、打安全更新檔、選擇開發架構、控制通路權限等等。而通過使用雲函數,使用者僅需按規範進行業務代碼的編寫,就可以對外提供服務。程序的啟動時機以及運作所在的伺服器運維可以完全交給平台。但目前的雲函數産品,在開發方式上和已有的基于 vm 或容器的開發方式有所不同。在基于 vm 或容器的開發模式中,通過使用架構處理 http 請求,啟動監聽,并由外部指令或腳本來啟動程序,是目前開發者都熟悉的業務編寫模式。

下一代無伺服器的發展形态: Serverless2.0

而使用雲函數,http 請求會被轉變為一個個的事件,業務代碼可以直接針對事件進行處理,并按要求傳回資料即可。這種由事件觸發,接收 event 消息,并根據業務邏輯進行資料處理的雲函數模型,是目前 serverless 的主要模式。這種模式的函數,我們稱為 event function。

下一代無伺服器的發展形态: Serverless2.0

事件驅動的核心要素,是能夠有豐富的事件源,通過打通各種産品和雲函數,使得各産品均可以成為雲函數的事件源。這種情況下,函數就成為了産品間的粘合劑,通過承載事件或資料從一個産品流轉到另外一個産品,一個函數流轉到另外一個函數,在這個過程中實作資料處理,最終建立業務邏輯。目前的事件觸發的 FaaS 形态,在針對業務的削峰填谷、為無狀态應用提供彈性的并行處理能力,以及類似 crontab 定時任務這些場景中,提供了極大的優勢。但是同時,目前的雲函數,具有通路延時高、運作時長受限、無法直接通路、狀态持久化等問題,同時由于開發方式的變化,導緻已有的業務,也無法直接向 Serverless 架構遷移,無法做到類似從虛拟機到容器的遷移。

Tencent Cloud Serverless 2.0 

對于已有的 Serverless 産品,以及在産品推廣過程中的業務上線的痛點、客戶聲音,我們重新梳理了 Serverless 産品的發展路線,并将其定義為 Serverless2.0。

event function 

在 Serverless 2.0 中,我們将從客戶的實際使用場景出發,進行了産品的梳理。針對事件驅動的函數,定義為 event function。事件函數仍然遵循現有的函數觸發模式,并将持續增加與騰訊雲其他各産品的對接,持續豐富應用場景,例如與日志服務對接,提供日志記錄處理;與資料庫對接,由資料修改動作觸發函數運作;與雲監控告警對接,針對告警事件可以進行自動化代碼處理等。

下一代無伺服器的發展形态: Serverless2.0

而針對 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 響應。

下一代無伺服器的發展形态: Serverless2.0

通過這種模式,我們可以專注于業務邏輯的開發,而将原有基于 vm 或容器中需要考慮的擴縮容、程序啟動、并發處理等事情都交給平台來解決。而針對實際業務,通常不僅僅是單個函數就可以實作。在 Serverless 架構中,單個 function 通常僅提供獨特單一的功能實作,整個應用通常是由多個函數、以及圍繞着函數的資料存儲、檔案存儲、消息隊列、api 管理等多種資源構成。我們從面向 Application 角度出發,基于全套 serverless 架構,進行了 serverless 編排架構的設計。通過編排架構,我們可以将應用相關的資源統一到一起,不僅包括了函數,同樣會包含資料庫、檔案存儲、消息隊列、api 管理等多種資源。

下一代無伺服器的發展形态: Serverless2.0

無論從應用開發、還是調試部署,開發部署架構均将為我們帶來難度的降低、效率的提升。

http service 

産品形态中提供的 http service,在同樣對外提供 url 通路位址,支援應用直接通路的基礎上,我們提供了針對已有代碼或架構的支援。基于常用架構已經開發完成的業務代碼,可以無縫遷移至 http service 中,直接開始以 serverless 模式對外提供服務。而服務中原有提供的高性能通訊協定如 websocket,gRPC,同樣可以通過 http service 對外提供。

下一代無伺服器的發展形态: Serverless2.0

通過使用 http service 形态,使用者無需了解容器、鏡像,而是仍然同目前 serverless 的使用模式一樣,同使用雲函數一樣,通過送出已經開發完成的代碼包,就可以開始對外提供服務。

Serverless 2.0 上下遊能力建設

Serverless 2.0,關注的不僅僅是計算、開發模式、使用方式,而是要從更全面的角度來支援 Serverless 架構或應用的發展。

下一代無伺服器的發展形态: Serverless2.0

通過協助開發者更好的使用産品、提供全流程的開發管理支援、運維監控、調試支援等,進行全方面的發力,才可以真正去推動 serverless 架構或應用的落地。

工具建設

為了協助開發者更好的進行開發、調試、上線、釋出,騰訊雲 serverless 團隊從多個方面入手,提供可以滿足多種開發場景的相關工具或能力。

下一代無伺服器的發展形态: Serverless2.0

通過提供指令行工具,我們可以在本地開發環境中實作項目建立、本地調試打包、一鍵部署上線

而通過 vscode 插件以及正在持續擴充的更多開發 IDE 插件,函數的本地管理、開發調試、上線釋出,可以通過開發 IDE 直接可視化操作。将函數的線上線下管理,與代碼的編寫調試,都整合在一個界面中完成。

為了友善使用者進行代碼的調整或檢視,我們也通過提供 web ide,可以在控制台上實時的開發調試,達到與本地開發調試的相同體驗。

針對已經進行了 git 托管的代碼,我們也增加了 git 對接能力;通過與使用者 git 打通,以及依賴包的線上安裝,提供了更簡單的代碼送出部署能力,進一步簡化操作過程,友善開發者。

DevOps 

在 Serverless 的 DevOps 方面,通過與 coding.net 的合作,我們提供了 Serverless 的 DevOps 方案。通過打通 coding.net 的 DevOps 平台,從項目建立開始,我們就可以進入完全适配 Serverless 的全管理流程中。

下一代無伺服器的發展形态: Serverless2.0

無論是項目管理、需求管理、代碼管理,還是 CI 持續內建、test 測試管理、制品庫管理、CD 持續部署,Serverless 架構應用都可以适配整個 DevOps 流程,協助使用者建構完全雲原生的 Serverless DevOps 過程。而如果已有 DevOps 或 CICD 系統的使用者,Serverless 2.0 也可以通過提供通用方案及工具,協助使用者完成整合及融入,在已有流程中實作針對 Serverless 應用的适配。由于 serverless 本身的平台排程、按需啟動的特性,無法提供和虛拟機或容器類似的登入到環境、手工操作的能力。是以,在協助使用者排障、保障運作的透明性方面,serverless 平台需要做的更多。

運維監控

除了通過對接雲的日志服務和監控服務,支援基于日志和監控的多種查詢、過濾、告警之外,我們還在規劃更多為使用者提升調試能力的工具建設,例如通過調用鍊追蹤,可以跟蹤請求的經過的各個産品、服務或函數;通過故障現場捕捉,可以抓取函數運作失敗時的現場及事件,便于進一步分析代碼故障;而應用性能分析,可以了解到函數内部的代碼或子產品性能,便于進一步提升應用性能。

下一代無伺服器的發展形态: Serverless2.0

多種工具的建設,目标都是期望為客戶提供更多的分析排障支援,提升運作的透明性,降低對于 serverless 架構的運維擔憂。

技術能力

回到産品實作的底層技術上,針對騰訊雲 serverless 2.0 中提供的三種形态,目前采用了相同的技術架構,包括了微虛拟機、容器、排程平台等多種基礎能力;通過采用相同底層能力,提供了高度的産品可擴充能力。

下一代無伺服器的發展形态: Serverless2.0

在 Serverless 平台通常碰到的延遲性能方面,通過應用機器學習,預熱,擴充政策等多種技術,極大的降低了冷啟動。通過目前平台分析,目前 97%的事件型函數啟動延遲均低于 200ms,對業務基本做到了極低感覺,滿足了各種場景的應用。多可用區、多叢集、自動運維、平台監控技術的應用,進一步的在提升整體産品的可靠性及安全性。

應用案例

與 2018 年 9 月,由騰訊雲和微信聯合推出的小程式雲開發解決方案,将 Serverless 機率推向了廣大的國内小程式開發者,獲得了大量的客戶及使用。小程式雲開發解決方案,通過整合騰訊雲的對象存儲,雲資料庫,雲函數,形成了一套可以直接提供給最終開發者的解決方案,帶來了一站式的開發體驗。

下一代無伺服器的發展形态: Serverless2.0

原有小程式開發過程中,針對後端服務,使用者需要自行完成伺服器搭建,存儲選擇,資料庫配置、負載均衡配置等各種操作。而通過使用小程式雲開發,使用者可以直接獲得開箱即用的雲能力。存儲、資料庫、以及作為背景服務的函數,直接由小程式端發起調用,而無需自行管理通訊鍊路、業務擴縮、通路安全等問題。通過與小程式開發 IDE 整合,使用者可以在 IDE 中同時完成小程式端,以及後端雲函數的開發、調試、部署,以及檔案存儲、資料庫的的管理工作,大大減輕了開發及管理工作量。小程式雲開發為 Serverless 概念及應用在國内市場中的推廣,起到了及其重要的作用。

下一代無伺服器的發展形态: Serverless2.0

最後,再次回顧一下核心内容。針對 Serverless 目前的通路延遲、開發模式、業務遷移等痛點,騰訊雲 Serverless 2.0 将通過 event function、http function、http service 三種形态來分别依據場景提供解決方案。同時,針對 Serverless 架構,将通過開發工具建設,項目管理支援、DevOps 能力、監控運維、性能提升等全方位能力,來不斷滿足使用者訴求,打造極緻的産品和技術體驗,全面的支援使用者向 Serverless 架構發展。

作者:大鵝聊雲

連結:https://juejin.im/post/5d19bc7cf265da1bc07e5147

來源:掘金

著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請注明出處。

轉載于:https://my.oschina.net/u/3799788/blog/3068145