小程式 Serverless: 解放生產力,驅動研發效能提升

支付寶技術團隊發表於2019-02-25

**摘要**:以“數字金融新原力(The New Force of Digital Finance)”為主題,螞蟻金服ATEC城市峰會於2019年1月4日於上海如期舉辦。ATEC移動開發專場分論壇上,螞蟻金服前端技術專家袁收納帶來了主題為《小程式 Serverless: 解放生產力,驅動研發效能提升》的精彩分享。


演講中,袁收納分享了螞蟻金服Serverless架構的技術特點及設計框架。對比目前小程式的傳統開發流程,展示了Serverless架構高效簡潔的優勢。

![在這裡插入圖片描述](https://img-blog.csdnimg.cn/2019022420554524.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NDMyNjU4OQ==,size_16,color_FFFFFF,t_70)

**袁收納 螞蟻金服前端技術專家**               


## 小程式開發現狀


首先來看一下在目前小程式開發的情況下應該如何處理。

![在這裡插入圖片描述](https://img-blog.csdnimg.cn/20190224205602780.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NDMyNjU4OQ==,size_16,color_FFFFFF,t_70)

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


 1. 小程式的技術開發人員開發小程式端上業務,實現小程式 UI,體驗端的互動邏輯等。 

 2. 後臺的技術開發人員需要透過相應的後端語言(java/nodejs/c#等)來開發後臺業務。這裡的後臺業務包含登入、許可權、資料操作、業務邏輯控制等。後臺的技術開發人員需要透過相應的後端語言(java/nodejs/c#等)來開發後臺業務。這裡的後臺業務包含登入、許可權、資料操作、業務邏輯控制等。

 3. 前後端人員開發好邏輯後進行部署聯調 

 4. 服務部署後,需要運維的人員來處理環境問題、監控、容災等問題,以確保服務的持續可用前後端人員開發好邏輯後進行部署聯調 服務部署後,需要運維的人員來處理環境問題、監控、容災等問題,以確保服務的持續可用服務部署後,需要運維的人員來處理環境問題、監控、容災等問題,以確保服務的持續可用前後端人員開發好邏輯後進行部署聯調 服務部署後,需要運維的人員來處理環境問題、監控、容災等問題,以確保服務的持續可用

 5. 最後,安全的人員需要為應用制定安全規則,搭配相應的安全處理方案,確保服務的安全可靠,不被惡意攻擊最後,安全的人員需要為應用制定安全規則,搭配相應的安全處理方案,確保服務的安全可靠,不被惡意攻擊

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


**人力成本**


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


**資源成本**


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


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


所以,我們需要使用一種更加簡單、高效的開發方式


## 更簡單的Serverless開發方式


透過上述的分析,我們能看到傳統模式不利於我們小程式的快速佈局,我們需要採用一種更高效的研發方式來實現快速佈局,這種方式就是 Serverless 模式。採用螞蟻的 Serverless 產品 後端雲服務,我們可以用更高效、簡單的方式快速實現穩定、可靠的小程式後臺服務。

![在這裡插入圖片描述](https://img-blog.csdnimg.cn/20190224205819316.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NDMyNjU4OQ==,size_16,color_FFFFFF,t_70)

**BaaS**


模組後端級服務。一般情況下,在開發小程式的後臺資料服務時,開發團隊需要在雲上購買相關的簡訊服務來供前端使用。在有了BaaS之後,開發團隊可以透過小程式本身直接操作,例如傳送簡訊的功能,現在可以直接透過小程式完成,而不需要後端參與,因此大大節省了開發成本。


**服務託管**


目前的情況下,無論是前端應用還是後端應用,都需要後臺來處理很多東西,開發者還會去購買雲ECS、購買域名並進行域名備案等工作,以上這些步驟都是不可避免的。在服務託管模式中,資料庫、域名、證照以及整套安全防控均為服務性體系。在這種模式下,開發者只需要把自己業務邏輯實現好提交給平臺,平臺會完成系統部署並掛到閘道器上。簡而言之,開發者無需再關心底層環境、資料以及伺服器的各種配置等,取而代之的是把程式碼提供給小程式平臺,由平臺完成這一系統操作。


**函式計算**


函式計算是比較簡單的計算單元,我們可以採用函式計算來處理一些簡單的非同步、批處理操作,例如批次化操作、批次化處理圖象以及處理一些比較耗資源的資料。基於非同步事件以及按量付費的函式計算,我們無需再搭建大規模的計算叢集,只需透過函式計算即可快速、低成本地實現計算能力,串接業務。

## **螞蟻小程式 Serverless服務結構**

Serverless的服務大結構分為如下圖所示四層:

![在這裡插入圖片描述](https://img-blog.csdnimg.cn/20190224205841682.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NDMyNjU4OQ==,size_16,color_FFFFFF,t_70)

**第一層,阿里生態支援層。**


Serverless支援所有阿里的生態,為開發者提供十分靈活的接入方案無縫接入支付寶高德等服務,並允許開發者直接使用這些服務。


**第二層,統一接入層。**


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


在傳統的模式中,如果我們需要將小程式部署到多個端上,那我們需要基於每個端的登入體系實現認證,這個對開發者來說成本還是蠻高的。


在螞蟻 Serverless 服務中,我們提供了統一接入能力,客戶不再需要去處理各個端上的認證差異,透過 Serverless 服務提供的統一 api 即可快速實現認證,大大縮減開發時間。


**第三層是Serverless架構的核心層**,其具有檔案儲存,資料儲存,服務託管,函式計算等諸多能力。接下來就為大家詳細介紹這以上幾種能力。


**檔案儲存;**


在現在的移動網際網路中,我們有大量的資源需要使用上傳、下載。在傳統的模式中,我們需要購買儲存、cdn、域名、證照等,然後再使用後端服務進行檔案的存取操作,整體還是比較複雜的。同時,當使用者在移動端情況下做營銷或紅包投放時,使用者資源的訪問量是很大的,會出現後臺承載量有限、開發成本昂貴等問題。


基於這個場景,小程式 Serverless 平臺為開發者提供了基於 CDN 的檔案 BaaS 服務,透過我們封裝良好的 SDK,開發者只需將檔案透過介面上傳,即可直接享受到 CDN 的能力,為檔案帶來最佳的訪問效能以及海量的訪問量。


**資料儲存;**


在資料儲存方面,小程式 Serverless 服務針對不同的小程式場景提供了不同的解決方案。


對中小型小程式來說,小程式可以透過客戶端的SDK運算元據庫裡的資料,無需服務端參與,即可完成資料的存取操作。在此過程中,平臺為使用者的資料提供了嚴格的管控以及靈活的 DSL 配置,開發者可以根據自己的業務需求定義資料的訪問策略,讓客戶端可以安全、靈活地訪問資料


DSL 樣例如下:

```

{

 // 規則的範圍是 comment 這個集合

 "comments": {

  // 所有人可讀".read": true,

  // 只有當操作者(請求來源)和資源所有者是同一個人時可寫

  ".write": "request.auth.userId == resource.auth.userId",

  // 所有人可以進行其他操作

  "*": true

 },

 // 規則的範圍是所有集合

 "*": {

   // 所有人可以進行任何操作

   "*": true

  }

}

```


對於複雜後端邏輯的小程式來說,小程式 Serverless 提供了基於服務託管的後端解決方案,透過服務託管,開發者可以獲得和開發後端應用一樣的體驗,開發者可以對資料持有最大的自由操作權,可以完全按照自己的業務體系定義。


**服務託管;**


在傳統模式中,開發者需要花費大量的精力去做環境的搭建、系統部署、運維等事項,同時,還需花費很高的成本去實現高可用等可用性方案,成本高,價效比低。


基於這個場景,小程式 Serverless 服務提供了服務託管的解決方案。透過服務託管,開發者無需再關係底層環境、後端運維的各種細節。開發者只需將業務程式碼提交到雲端即可,雲端會自動完成程式碼的構建、部署等各種事項。讓開發者真正的無需關心底層運維即可快速實現後端業務。


使用服務託管模式,開發者可以獲得如下優勢:


開發者無需單獨購買域名證照,無需再進行域名備案,大大縮短新專案上線週期

 開發者無需關心雲上覆雜後端環境的搭建,只需將精力集中在業務邏輯的開發上即可,大大縮短研發時間

服務託管方案為後臺服務提供了彈性伸縮的能力,以及跨機房容災的能力,開發者不再需要花費大量精力大量資源去搭建複雜的容災伸縮機制,只需接入服務託管即可一鍵具備可靠的容災能力。

 服務託管採用按量付費機制,只在有真實業務產生時才會產生費用,和 ecs 相比,成本能大大縮減。

**函式計算;**


函式計算是一種更輕量的服務託管,是一個個單一的後端計算單元。透過函式計算,開發者可以將原有的複雜計算邏輯拆分為多個計算函式,然後透過事件或者http 方式串接起計算業務,在實現對業務解耦的同時也能縮短對後端資源成本的依賴。


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


**資料分析能力;**


基於螞蟻金融科技的資料能力,我們為使用者提供多樣化的資料分析能力。基於我們提供的資料能力,使用者可以更好地對業務進行決策,對系統進行最佳化,實現更高的業務價值。


**安全管控能力:**


基於螞蟻多年的安全積累,小程式 Serverless 服務為執行其上的應用提供了專業的安全管控。從接入層的防 ddos, 到鏈路層的證照驗證,再到資料層的內容安全控制。我們為客戶提供了全方位的安全控制,保障使用者的業務能持續安全執行,免受惡意攻擊。同時,螞蟻專業的安全團隊也在不斷監控管理,為使用者服務的安全做更進一步的防控


**第四層,螞蟻的生態能力層:**


透過開放平臺,小程式可以直接分享到螞蟻生態帶來的紅利,開發者可以基於信用來做租借,基於會員來做紅包等。在傳統的方案中,我們在接入螞蟻生態時成本較高,需要進行很多的安全處理。在小程式 Serverless 服務中,平臺和螞蟻開放平臺進行了打通,使用者無需再關心原有複雜的接入方式,無需再關心簽名等安全措施,只需透過我們的sdk,即可直接呼叫螞蟻開放介面,大大縮短研發時間。一筆支付的時間,可以從四五個小時,縮短到十分鐘,甚至對比較熟練的使用者,五分鐘就可以搞定。


## Serverless後端解決方案

![在這裡插入圖片描述](https://img-blog.csdnimg.cn/20190224210048547.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NDMyNjU4OQ==,size_16,color_FFFFFF,t_70)

基於函式計算與服務託管,小程式 Serverless 服務提供了一整套的後端解決方案,旨在為開發者提供最簡潔高效的後端研發模型。


對小程式開發者來說,透過小程式 Serverless 服務的後端解決方案開發將會變得非常簡單,只需執行如下的操作即可:


在 ide 中編寫後臺服務程式碼以及 function 程式碼後將程式碼透過 ide 提交到雲端

根據業務需求配置 function 觸發器

在小程式端透過 sdk 直接請求後臺的服務介面

整個過程開發者無需關心雲上基礎設施的搭建以及相關的運維管控,只需實現實現業務邏輯即可,簡單高效


## Serverless客戶端解決方案


對於一些輕量化的場景,我們只需執行簡單的一些資料操作即可。基於這種場景,小程式 Serverless 服務提供了客戶端解決方案。

![在這裡插入圖片描述](https://img-blog.csdnimg.cn/20190224210105648.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NDMyNjU4OQ==,size_16,color_FFFFFF,t_70)

區別於後端解決方案,客戶端解決方案的核心是平臺把後面的服務透過服務化能力直接輸送給小程式,小程式可透過客戶端的方案直接操作相應的服務而無需後端的參與。


假如一個商家給顧客發促銷簡訊,透過平臺的SDK不需要經過任何伺服器,發簡訊發推送等功能小程式都可以直接實現。實現過程中,通訊鏈路接入安全防控體系,透過這條鏈路的資料將都有安全保障。


## Serverless與螞蟻開放能力

在原有模式下,建立一個芝麻信用或者建立一個支付可能需要半天或者一天的時間, 其中涉及到認證、授信、鑑權等多種複雜操作。 為了給開發者提供便利,小程式 Serverless 平臺和螞蟻開放平臺進行了互信打通,開發者透過平臺開發時無需再關心原有的複雜認證流程,只需採用我們的 sdk 呼叫相應介面即可,簡潔高效。

![在這裡插入圖片描述](https://img-blog.csdnimg.cn/20190224210122303.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NDMyNjU4OQ==,size_16,color_FFFFFF,t_70)


## Serverless帶來的優勢


Serverless方式會為開發者帶來多方面的優勢:


**研發率的提升**


在傳統模式中,我們需要大量的資源、人力投入。協同成本高,時間週期長。比如在傳統的方案中,我們需要備案域名,購買證照,這部分至少需要 40 天的時間,這部分時間無法節省,成本非常高。在具備域名的情況下,由於使用者還需處理龐大的後端底層業務,按目前的統計情況來看,實現一箇中小規模的小程式還需 21 天左右,整體基本需要2 個月時間。


在 Serverless模式中,由於複雜的底層邏輯都已託管,域名等也已由平臺提供,使用者只需完成自己業務邏輯的開發即可,整體的開發時間能從以往的 21 天縮短到 5 天,大大提升了研發效率。

![在這裡插入圖片描述](https://img-blog.csdnimg.cn/20190224210143681.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NDMyNjU4OQ==,size_16,color_FFFFFF,t_70)

**安全性的保證。**


對於一般規模的團隊來說,安全是一個比較容易忽略的話題。但是現在網際網路時代攻擊無處不在,我們的業務可能隨時會受到別人的惡意攻擊,提供一套安全可靠的防控保障業務的健康尤為重要。


在傳統模式中,實現系統的安全可靠我們需要有專業的安全人員介入,並且需要在雲端購買大量的安全資源。和實現高可用一樣,我們需要投入很多的資源和成本,價效比很低。


得益於螞蟻多年來的安全積累,小程式 Serverless 服務為使用者的服務提供了全方位的安全管控,全方面保障使用者業務的安全。舉例來說,我們為使用者提供瞭如下安全控制:


 - 接入層控制: 在接入層控制上,平臺為所有應用提供了 ddos 的流量防護以及防火牆的防護,保障業務流量的安全性。 內容安全控制:

 - 針對所有上傳到平臺的資源,我們都會自動做風險識別,對於涉黃、涉政、暴力等有法律風險、輿論等風險的資源進行實時管理,確保不會給使用者業務帶來風險。

 - 訪問控制: 針對客戶端的 BaaS 服務,我們為開發者提供了基於 DSL的安全控制策略,開發者可以根據業務需求對資料進行強管控,保障資料不發生非法訪問以及洩漏。比如資料儲存服務的規則如下  控制檯控制:

 - 對於使用者的控制檯操作,我們接入了螞蟻專業的風控體系,對登入使用者進行精確的風控校驗,即使使用者非法獲取到賬號密碼也無法直接操作控制檯,確保使用者後臺不會被惡意操作。


對於安全方案,basement 正在不斷補充最佳化,透過 basement,使用者無需單獨支付費用,即可享有專業的安全控制,價效比極高

![在這裡插入圖片描述](https://img-blog.csdnimg.cn/20190224210204264.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NDMyNjU4OQ==,size_16,color_FFFFFF,t_70)

**產品的可靠性。**


在傳統的模式中,由於受限於成本、技術等限制,大多數的應用都是單節點、單機房執行。這種情況的容災能力是很弱的,如果當機或者機房網路異常都會造成服務的中斷,勢必會影響到業務。


如果要實現高可用,在傳統模式中,我們需要投入大量的底層資源、開發、運維資源,實現複雜度高,成本高,對於一般規模的應用來說價效比很低


在使用小程式 Serverless的模式中,平臺原生支援了同城多機房的容災能力。所有服務的資料都會進行多機房的互備,同時在應用層,我們也提供了動態的切換能力,可以保障使用者的服務在單機房故障時能持續可靠繼續服務,保障業務的穩定性。


同時,平臺為上面執行的所有服務提供高可用能力的同時不針對高可用收費,使用者無需付費即可享受到專業的高可用服務,價效比極高

![在這裡插入圖片描述](https://img-blog.csdnimg.cn/20190224210249307.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NDMyNjU4OQ==,size_16,color_FFFFFF,t_70)

**更低的成本**


在傳統模式中,我們需要大量的人力投入,資源投入,這對公司來說是一筆不小的成本,我們從兩個方面來看:


1.  人力成本


在傳統模式中,我們需要前端 + 後端 + 運維 + 安全等多個角色的協同,人力投入大,成本高


在 Serverless 模式中,只需一個全棧的前端工程師即可完成小程式的開發,人力投入小,成本低,收益高


2.   資源成本


在傳統模式中,不管業務是否在執行,都需要為底層的眾多資源付費。這些資源包含伺服器、資料庫、負載均衡、監控、安全等產品,對於 dau 不高或者訪問集中化的應用來說,這種付費方式成本很高。


在 Serverless 模式中,所有的資源都是按量付費,只有真正發生了使用才會收費。同時,對於安全、高可用等能力,使用者無需付費。所以,在使用小程式 Serverless 服務的情況下,使用者只需花費原有模式 50% 以下的資金投入即可快速實現一個可靠、穩定、安全的小程式服務。

![在這裡插入圖片描述](https://img-blog.csdnimg.cn/20190224210304495.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NDMyNjU4OQ==,size_16,color_FFFFFF,t_70)


## 混合部署模式


對於已有服務的開發者來說,可以採用兩種方式接入到螞蟻小程式 Serverless 服務中,我們稱之為混合部署模式:


1.     對於現有自購 ecs 的開發者,可以透過服務託管的形式直接將應用部署到平臺中即可直接使用。


2.     對於稍大規模的商家或者SV,在後臺已經搭建了整個叢集,這樣的業務是沒有辦法直接遷移的。對於這種情況平臺提供了透過後端服務或者函式直接呼叫現有服務的方案。透過這些方式,把使用者現有的後端的程式碼直接部署到平臺中,並透過平臺投放到多個渠道上面,讓業務能快速落地。

![在這裡插入圖片描述](https://img-blog.csdnimg.cn/20190224210315479.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NDMyNjU4OQ==,size_16,color_FFFFFF,t_70)


## 總結


總體來說Serverless方案能給開發者帶來以下優勢:首先能夠帶來人力上、時間成本上、資金成本上的節省。更重要的是方案可以讓使用者能以最簡單最高效的方式上線業務,在目前電子商業瞬息萬變的節奏中,先發制人,達到最快佔領市場份額並攻城略地的效果。

點選[閱讀更多](),檢視更多詳情


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

相關文章