支付寶小程式 Serverless 服務架構演進 | mPaaS 線下沙龍 CodeDay#1 分享實錄

支付寶技術團隊發表於2019-05-17
文章概要:
隨著雲端計算的深入,Serverless 這種全新的架構模式正在受到越來越多人的關注。透過 Serverless,開發者可以從繁雜的底層基礎實施中解放出來,專心聚焦於業務實現,快速鋪開業務。
本文整理於藍訣在 mPaaS 自辦沙龍 CodeDay#1 現場分享《支付寶小程式 Serverless 服務架構演進》,聚焦我們對於 Serverless 的思考以及小程式 Serverless 平臺的相關操作實踐。
作者: 藍訣,螞蟻金服前端技術專家。
現場影片(複製到瀏覽器中開啟):

小程式開發現狀

支付寶小程式 Serverless 服務架構演進 | mPaaS 線下沙龍 CodeDay#1 分享實錄

在傳統模式中,當我們需要去開發一個小程式的時候,我們依舊需要採用像開發傳統 App 一樣的方式進行業務開發。在整體業務開發中,我們需要多個覺得的協同,大致來說,我們需要如下的一些流程:

  • 小程式的技術開發人員開發小程式端上業務,實現小程式 UI,體驗端的互動邏輯等。
  • 後臺的技術開發人員需要透過相應的後端語言(Java/Node.JS/C#等)來開發後臺業務。這裡的後臺業務包含登入、許可權、資料操作、業務邏輯控制等。
  • 前後端人員開發好邏輯後進行部署聯調。
  • 服務部署後,需要運維的人員來處理環境問題、監控、容災等問題,以確保服務的持續可用。
  • 最後,安全的人員需要為應用制定安全規則,搭配相應的安全處理方案,確保服務的安全可靠,不被惡意攻擊。

從以上流程我們能看出,在現有的模式中,我們開發一個小程式的成本其實蠻高的。從兩個地方來看,一個是人力成本,一個是資源成本。

> 人力成本

在上述模式中,我們一個小程式需要 3-4 個角色的參與才能確保我們的小程式能持續穩定的服務。這對小規模的小程式或者孵化階段的小程式來說人員投入是非常大的。

> 資源成本

在傳統的模式中,為了能讓我們的小程式穩定執行起來,我們需要購買大量的資源。最常見的就是 ECS * 2 + RDS + SLB + 域名 + 證照 等,如果我們要做安全控制,還需購買雲上的安全設施,比如 ddos 防禦等。這些資源不管我們業務量多大,我們都需要持續付費,對使用者來說,這個成本是非常高的。

綜上,我們能看出,在傳統的模式中,人力成本和資源成本兩大投入會成為制約小程式快速佈局落地的攔路虎。如果我們在小程式業務中還是使用傳統的開發模式,那我們業務的整體賦能將會來的不夠經濟、快速。

所以,我們需要使用一種更加簡單、高效的開發方式,這就是業界現在很火熱的 Serverless。接下來我們來看看什麼是 Serverless,我們怎麼來實現 Serverless。

Serverless 定義

Serverless 是一個現在非常火熱的詞,每個雲廠商都在做自己的 Serverless。那麼,什麼是 Serverless 呢,讓我們先看下面這張圖:

支付寶小程式 Serverless 服務架構演進 | mPaaS 線下沙龍 CodeDay#1 分享實錄

> 引言

首先,我們將我們後臺開發中常用的雲元件分為三部分:

【計算能力】

計算能力是後臺服務中最核心的能力,透過計算能力,我們可以將後臺程式碼部署到 (物理機/虛擬機器/容器) 等之上,以提供服務能力。當我們採用雲上的 虛擬機器/容器 等方案部署業務的時候,我們來看看我們會面臨什麼樣的問題:

1.複雜的環境問題

當我們在雲上購買 ecs 等計算資源後,我們拿到的是完全初始化的環境。為了部署後臺服務,我們需要按照我們的後端語言去部署相應的技術環境。比如 Java 需要部署 JRE/Nginx、Nodejs 需要部署 Node/Nginx 等。對於新手來說,這是一個非常耗時的操作,成本也比較高。

2.高可用實現成本高

當使用獨立 ecs 搭建服務的使用,我們為了實現高可用需要複雜的配置。比如請求層負載均衡配合,資料庫多機房備份等等,這同樣需要很高的資金和人力成本。

【儲存與中介軟體】

儲存是中介軟體是構建後臺系統的必備元件,比如常用的資料儲存、檔案儲存、訊息中介軟體等。這塊的使用成本相對計算能力來說相對簡單一些,不過我們也會面臨資料庫最佳化、資料擴容、cdn 配置等各種問題。

【網路&安全】

網路和安全是平時開發者最容易忽略的恰恰又是最重要的部分,在網路上,我們需要做好流量的管控、流量的排程。在安全上,我們需要做圖片、影片等內容的安全控制,接入層的 ddos 防禦等。這不僅需要花費我們大量的資金,還需要專業的人花費大量的精力。

綜上,目前的後端基礎設施給我們帶來了如上的問題,那麼我們有沒有什麼好的解法呢?

我們將上面的三大部分進行如下處理:

  • 對於計算能力:將底層環境、部署、可用性、彈性等各種運維操作進行整合化封裝。 統一抽象為 Compute 服務。開發者只需將後臺程式碼提交給 Compute,Compute 即會自動構建、部署、彈性。以此解決環境複雜、高可用成本高等各種計算層問題。
  • 對於儲存於中介軟體 :將各種後端能力進行介面服務化封裝,形成 BaaS,開箱即用,無需再關心接入、容災、擴容等各種問題。
  • 對於網路 & 安全 :這是後臺服務的基礎預設能力,可直接雲化,作為支撐,讓開發者無需關心即可享受安全可靠的後臺基礎設施。

> 定義

基於上述理念就是 Serverless 的本質。Serverless 透過對後臺各種能力的雲化封裝,讓後端能力服務化、介面化,開箱即用。大大縮減了開發者的實現成本,讓開發者從原有複雜的基礎設施中解脫出來,專心聚焦於業務邏輯。

所以,我們對 Serverless 能得到如下定義:

  • Serverless = Compute + BaaS

支付寶小程式 Serverless 服務架構演進 | mPaaS 線下沙龍 CodeDay#1 分享實錄

螞蟻金服小程式 Serverless

基於我們對 Serverless 的理解,我們實現了小程式 Serverless 平臺。透過小程式 Serverless, 開發者即可零成本使用如上所述的各種方案。

> 架構

支付寶小程式 Serverless 服務架構演進 | mPaaS 線下沙龍 CodeDay#1 分享實錄

> 統一多渠道認證

小程式的一個核心特點就是能透過一個小程式快速佈局到多個端上,以便快速吸收各個端上的流量,為業務帶來紅利。

在傳統的模式中,如果我們需要將小程式部署到多個端上,那我們需要基於每個端的登入體系實現認證。一般來說就是需要接入各個平臺的 Oauth 能力,然後透過 Oauth 認證來實現自己平臺的安全認證,整體的複雜性與成本相對較高。

在小程式 Serverless 中,我們將多端的能力進行了聚合和抽象,形成統一的 API。開發者只需接入統一的 API,即可當小程式執行在支付寶時使用支付寶的認證體系,當小程式執行在淘寶時使用淘寶的認證體系,非常便利和高效。

> 核心服務能力

核心服務能力是小程式 Serverless 提供的核心後端能力,主要分為 BaaS 以及 Compute 兩個核心部分。

> BaaS

【儲存解決方案】

  • Storage

在現在的移動網際網路中,我們有大量的資源需要使用上傳、下載。在傳統的模式中,我們需要購買儲存、CDN、域名、證照等,然後再使用後端服務進行檔案的存取操作。

小程式 Serverless 提供了檔案儲存的 BaaS 服務,小程式封裝好的的 SDK 即可一鍵實現檔案的上傳。依託於 Serverless 底層的 CDN 元件,小程式只需將檔案投放到 Serverless 平臺即可享受 CDN 的加速能力,天然具備高併發能力。

  • Database

Serverless 基於 MongoDB 提供了資料儲存的 BaaS 能力,開發者無需購買資料庫、管理資料庫、運維資料庫,透過 Basement 提供的 SDK 即可快速實現資料操作。如果需要事務支援,也可以透過函式計算訪問資料儲存服務,實現資料的可靠操作。

支付寶小程式 Serverless 服務架構演進 | mPaaS 線下沙龍 CodeDay#1 分享實錄

【多媒體解決方案】

移動 App 中存在著大量的多媒體檔案,包含圖片、影片、音訊等。根據不同的業務場景,我們需要對多媒體檔案進行處理,比如圖片壓縮、圖片水印、影片壓縮等。

在原有模式中,實現多媒體檔案處理需要安裝 C++ 等各種元件,採用 BaaS 化方案可以直接透過 API 方式快速接入,大大提升效率

支付寶小程式 Serverless 服務架構演進 | mPaaS 線下沙龍 CodeDay#1 分享實錄

【安全方案】

在業務中我們有大量安全處理需求,比如需要對使用者提交的文字資訊進行敏感詞掃描,對圖片影片進行鑑黃等。大量的識別需要基於機器學習的能力,這對於大多數開發者來說是一個非常複雜的問題。對於這種場景,同樣可以採用 BaaS 的方案 API 化,開箱即用

支付寶小程式 Serverless 服務架構演進 | mPaaS 線下沙龍 CodeDay#1 分享實錄

> Compute

【App Service】

透過前面的介紹以及對 Serverless 中計算能力的分析,針對計算能力,我們可以採用 App Service 的方案來進行抽象。針對前面的各項痛點,我們採用如下方案解決:

【自動化構建部署】

將所有的環境部署相關問題進行映象化封裝,實現自動化。從開發者提交程式碼即可自動化構建,然後根據技術棧自動化部署。這樣即可解決環境相關的各種部署問題。

【高可用】

對於高可用,屬於服務平臺的技術核心能力。將高可用作為雲端自帶能力,為上層業務預設具備高可用能力是 Serverless 的核心。

支付寶小程式 Serverless 服務架構演進 | mPaaS 線下沙龍 CodeDay#1 分享實錄

【函式計算】

函式計算是輕量級的後端執行單元,可透過 http 觸發以及事件觸發,我們可以將功能封裝成一個個獨立的函式計算單元,然後透過不同的請求或者事件串接,以達到業務的解耦和快速迭代。

Serverless 官方提供豐富的業務雲函式,使用者開箱即用,無需再去處理底層複雜的邏輯。比如我們有一個圖片水印的函式,專門負責處理圖片的水印,我們在上傳檔案後,只需觸發一下水印函式即可對檔案實現水印處理,無需我們在應用裡進行復雜的處理邏輯,和業務真正解耦。

螞蟻金服大生態

透過開放平臺,小程式可以直接分享到螞蟻生態帶來的紅利:開發者可以基於信用來做租借,基於支付來做紅包等。在傳統的方案中,我們在接入螞蟻生態時成本較高,需要進行很多安全處理。而在 Serverless 模式下,Serverless 和螞蟻開放平臺進行了打通,使用者無需再關心原有複雜的接入方式,無需再關心簽名等安全措施,只需透過我們的 Funciton SDK,即可直接呼叫螞蟻開放介面,大大縮短研發時間。


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69904796/viewspace-2644727/,如需轉載,請註明出處,否則將追究法律責任。

相關文章