當前位置:
首頁 > 科技 > 小程序·雲服務的系統架構和運維實現

小程序·雲服務的系統架構和運維實現

  作者 | 關賀宇

之前,開發者想要開發一個小程序,常規流程是:要考慮買什麼樣的伺服器,匹配哪些資源(如存儲應用、資料庫等),此外,還要考慮各種初始化,與服務埠關聯等問題。這些工作全部梳理完成可能要花費數天時間。有了「小程序 · 雲服務」以後,開發者不用考慮後端複雜的技術操作,並且開發過程非常簡單,在幾分鐘之內就能完成後端環境的搭建,也能在 1、2 天內開發一個小程序。為進一步了解小程序 · 雲服務適用的業務場景、系統架構與架構演進等,InfoQ 專訪了支付寶小程序·雲服務團隊,揭秘支付寶小程序·雲服務如何幫助開發者快速地開發小程序。

小程序·雲服務解決的難點和痛點

螞蟻金服擁有海量的實名制優質用戶,並通過支付寶 App 構建起各種商業和生活服務場景,同時支付寶體系內也積累了數千萬 B 端商戶,對於商戶而言,如何服務好客戶是關鍵。在這樣的背景之下,構建一個能幫助商戶提升用戶體驗的平台就至關重要。而支付寶小程序就提供了這樣一個平台。對於支付寶小程序,開發者最初採用傳統的研發模式。傳統的研發模式只解決了小程序前端界面的問題。後端服務還是需要開發者自行購買伺服器、證書、資料庫、CDN 等基礎資源,並且需要進行部署和運維。如果需要使用支付寶的服務(比如獲取訪問用戶的信息),還需要對接支付寶開放平台,進行授權和程序配置。這一系列問題導致了開發者還沒接觸代碼,就已經消耗了大量的時間和資源在伺服器和配置環節上。



  • 小程序·雲服務保障小程序後端無憂

小程序 · 雲服務是針對小程序提供的基於雲端的服務,提供雲應用和 Serverless 後端雲服務兩大解決方案,目的是解決小程序後端服務的問題。小程序·雲服務讓開發者不需要關心證書、運維、擴容,不需要關心被黑客攻擊,只需要專註寫好自己的代碼和業務邏輯即可。

雲應用

是一個有伺服器解決方案,利用螞蟻金融科技應用 PaaS 平台等基礎能力,為開發者提供成熟的技術服務,比如一鍵構建雲端環境(應用、伺服器、資料庫、域名、HTTPS 證書等),IDE 中一鍵發布部署,應用資源監控等。雲應用保持原有開發者熟悉的模式,使開發者快速開發運維雲端應用。

Serverless 後端雲服務

是一個無伺服器解決方案,開發者只要開通服務就能使用函數計算、資料庫、文件 CDN 等核心服務。Serverless 後端雲服務因其具備 Serverless 優勢,可以實現彈性提供服務資源,對商戶而言節省了大量的硬體資源。開發過程中也無需關心伺服器的運維、部署和配置,並且天然可以調用支付寶的服務介面,是真正的開箱即用服務。

小程序·雲服務的架構和技術選型

雲應用和 Serverless 後端雲服務兩種解決方案相對應的開發架構並不相同。

雲應用的框架結構和核心能力

雲應用依託於螞蟻金融科技的應用 PaaS 平台、監控分析平台以及分散式中間件平台,針對小程序的場景進行封裝優化。應用 PaaS 平台提供完善的環境資源管理、發布部署(灰度發布、藍綠髮布)、彈性伸縮等能力。監控分析平台提供物理資源監控預警,應用日誌監控預警等核心能力。分散式中間件提供常用的分散式中間件,比如消息中間件,微服務治理平台等。在 IDE 和 Web 控制台端,雲應用對上述能力進行封裝,以最簡潔的方式提供給用戶,並同時針對小程序場景提供自動分配二級域名及證書,雲伺服器內置 MySQL 資料庫、IDE 自動生成調用螞蟻開放平台開放能力(支付、信用、安全等)的代碼等功能。如果用戶希望更深度地使用螞蟻金融科技的能力,也可以直接在螞蟻金融科技的官網中進行更加複雜的運維操作如分組發布、灰度發布等。


雲應用架構圖

雲應用在 IDE 端提供了豐富的插件能力,讓開發者在 IDE 端可以直接和後端雲服務進行無縫交互。這些插件能力包括:一站式開通螞蟻金融科技、一站式構建雲端測試和生產環境、一鍵發布部署應用代碼、重啟、停止應用、日誌查看等能力。

對於 Node.js 應用類型,這些能力直接集成在了螞蟻小程序開發者工具當中。對於 Java 應用類型,這些能力以插件的形式,集成到開發者熟悉的 IntelliJ IDEA 中。

除了將雲端能力集成進 IDE 當中,雲應用還提供了 Web 控制台,供開發運維人員在 Web 頁面上對應用進行運維操作。在 Web 控制台上,用戶可以對測試生產環境、資源、應用進行管理,同時提供可視化的監控頁面,對應用資源進行監控預警。對於測試生產環境的管理,雲應用提供了構建、刪除測試和生產環境。對於伺服器,雲應用提供了重啟、修改密碼、Webshell 等功能。對於應用,雲應用提供了上傳發布包、發布回滾應用、查看發布歷史等功能。

雲應用為後端開發者提供了足夠的靈活性,目前支持三種類型的技術棧:Node.js (Egg)、Java(Spring Boot)、Java (Sofa Boot)。如果選擇了 Sofa Boot,就可以使用 SOFAStack 金融級分散式中間件的能力,比如消息中間件等。SOFAStack 在雲應用中的定位是解決大型分散式應用對於分散式中間件的需求,這些中間件都經過了「雙十一」的檢驗,具備金融級的高可用性。

Serverless 後端雲服務的架構和優化

Serverless 後端雲服務依託於螞蟻金融科技底層的容器、計算、存儲、中間件等產品,針對小程序場景進行優化封裝,為用戶提供完善的小程序 Serverless 開發體驗。


Serverless 後端雲服務架構

接入能力:

Serverless 後端雲服務提供了安全可靠的多渠道接入能力。通過統一多渠道接入方案,Serverless 後端雲服務目前實現了高德、支付寶小程序的接入支持,開發者無需關心端上的差異,只需按標準方式開發小程序即可將小程序投遞到高德以及支付寶的客戶端。同時,Serverless 後端雲服務為開發者提供了統一的域名和證書,開發者無需單獨購買,開箱即用。

為了給小程序提供安全可靠的運行環境,Serverless 後端雲服務在全鏈路籤名的同時,也在接入層做了統一的 DDoS 防禦以及螞蟻金服的流量鏡像管控,實時管控請求流量,助力小程序安全穩定運行。

核心能力:

基於 MongoDB 提供的數據存儲,基於 CDN 和 OSS 提供的文件儲存,基於 SMS 提供的簡訊等 BaaS 服務,為了給開發者提供更多的能力,Serverless 後端雲服務後續還會提供更多的 BaaS 服務,便於開發者實現快速開發。

基於螞蟻金融科技的 Knative 方案,Serverless 後端雲服務提供了函數計算以及應用引擎的能力,在為用戶提供服務託管、彈性伸縮等能力的同時,還採用了按量計費的方式為用戶節省後端成本。

基於螞蟻金服多年的風控和安全積累,Serverless 後端雲服務為用戶提供了 DDoS、防火牆、內容安全、風控識別等安全能力的集成,讓開發者在託管服務端的同時還能享受到安全可靠的防護體系,保障業務的安全。

基於螞蟻金服多年的容災思想,Serverless 後端雲服務對所有的能力都進行了同城雙機房的部署,對於所有數據都進行實時備份。同時,基於螞蟻金融科技強大的中間件體系,實現了應用層的容災切換能力,全方位保障客戶服務的穩定可靠。螞蟻開放能力是螞蟻多年的技術、業務積累,能幫助小程序拓寬更多的業務邊界。為了簡化開發者的授權以及接入開放平台的成本,Serverless 後端雲服務和開放平台進行互信打通,讓開發者無需再處理繁瑣認證流程即可快速使用螞蟻開放能力。

Serverless 後端雲服務需要將用戶原有的運維、容災、安全等業務都進行統一的集成管控,整體的複雜度較高。

小程序·雲服務的架構優化

小程序·雲服務於 2018 年 7 月初啟動,最初的方向是提供一站式的雲服務,讓小程序開發者可以更加方便地為小程序開發後端代碼。小程序·雲服務的第一個版本於 2018 年 9 月在雲棲大會上亮相,當時已經具備了雲應用和 Serverless 後端雲服務兩種開發模式。但是用戶在試用雲服務的過程中,需要經常在 IDE 和 Web 控制台之間來回切換,不太方便。經過內部多輪討論之後,確定了以開發者為中心的模式,用極致簡潔的思路,將儘可能多的能力集成到 IDE 中,實現開發者不用脫離 IDE,就可以輕鬆使用後端雲服務。後續開通螞蟻金融科技、構建應用測試生產環境等功能都會在 IDE 中進行開放。


  • 小程序·雲服務的版本選擇

為了兼顧不同的後端開發者群體,雲服務提供了雲應用和 Serverless 後端雲服務兩個版本,其中雲應用是有伺服器的後端開發,並提供了 Node.js (Egg)、Java(Spring Boot)、Java(Sofa Boot)三種開發框架,給後端開發者提供儘可能多的靈活性。同時,隨著 Serverless 的概念越來越被開發者接受,雲服務也提供了 Serverless 後端雲服務,這是一個無伺服器的版本,目前支持 Node.js 開發語言。相較於雲應用,Serverless 後端雲服務更加輕量級,無需開發者介入過多即可實現後端運維操作。Serverless 後端雲服務提供了 BaaS + FaaS 的能力,目前主要存在兩大技術瓶頸:一個是 MongoDB 的調度,一個是容器的冷啟動。

針對 MongoDB 的調度問題,為了平衡成本與資源使用率,Serverless 後端雲服務把 MongoDB 池設置為不同規格的實例。對業務量較小的用戶提供小實例,隨著用戶業務量的增長,當小實例無法滿足業務需求時,為用戶提供更大的實例。所以,基於業務情況開發一套 MongoDB 的調度體系,每隔幾小時監測一次業務情況,如果業務增長到一定閾值,就將其自動遷移到規格更高的 MongoDB 實例中,保障 DB 服務的使用性能。

容器的冷啟動在函數計算和雲引擎中是一個不能避免的問題,Serverless 後端雲服務基於 Knative 的思想,對容器冷啟動進行優化。核心點是提供 Runtime 的預熱池,當有請求進來時,從預熱池找到對應的 Runtime,然後掛載代碼後直接運行。運行後保持 2min,如果 2min 內無請求,則將 Runtime 返回預熱池。

小程序·雲服務的安全性如何保證?

開放是小程序·雲服務的一個重要的業務變革方向,隨著用戶數和業務數的增加,如何保證小程序的安全性呢?小程序·雲服務團隊給出的解決方案是:

(1)在控制台上,雲服務集成了螞蟻的風控能力,保障控制台不會被惡意用戶入侵。

(2)在訪問鏈路上,對所有的請求都進行了簽名,避免被篡改。所有的訪問鏈路都採用 https 方式,避免中間人攻擊。同時,所有的請求都需要基於支付寶 OAuth 登錄態進行驗證,確保匿名身份無法訪問服務。

(3)在接入層上,接入了雲端的防 DDoS 能力以及螞蟻的流量鏡像能力,對流入流量進行控制,避免請求的惡意攻擊。

(4)對於文件上傳,會對所有的文件都進行安全掃描,避免上傳涉黃、涉政等文件。

小程序·雲服務對於開發者的價值

小程序·雲服務的目的是為構建小程序的後端提供極致的便利性,將螞蟻金融科技的能力通過最簡潔的方式帶給開發者去使用,通過提供雲應用(有伺服器)和 Serverless 後端雲服務(無伺服器)兩種方式,並將產品能力集成在了 IDE 當中,實現開發者接入成本的最小化。



  • 雲應用對於開發者的價值

雲應用主要為開發者提供如下能力:

(1)  極簡構建雲端環境(應用、伺服器、域名、HTTPS 證書等);

(2)  IDE 一鍵部署、啟停雲端應用;

(3)  靈活的語言框架(Java、Node.js);

(4)  應用資源監控預警;

(5)  深度集成螞蟻金服開放能力(支付、信用、安全等)。

為了讓開發者更方便地使用螞蟻金服的開放能力(支付、信用、安全等),雲應用在IDE插件中可以根據用戶簽約的能力包,自動生成調用相應開放能力的代碼,顯著降低用戶在這方面的開發成本。

雲應用在提供各種便利性的同時,也給開發運維人員提供了完全自主可控的能力,開發運維人員可以登錄到雲端伺服器上去查看日誌、排查問題,有完全的自主權。



  • Serverless 後端雲服務對於開發者的價值

Serverless 後端雲服務作為原生服務,已經集成在小程序開發者工具中。作為開發者首先要擁有支付寶賬號,然後創建或加入小程序應用,下載安裝支付寶小程序開發者工具,便可以開始開發。

在小程序開發者工具中,使用 Serverless 後端雲服務提供的 API(對開發者而言是一個全局變數),可以直接調用資料庫、文件存儲和雲函數服務,還可以免配置直接調用支付寶開放平台的海量 OpenAPI。支付寶優質的用戶群體和螞蟻金服提供的開放能力對於開發者而言非常重要,尤其是 Serverless 後端雲服務無需配置就能連接幾億用戶資源和使用這些服務。

Serverless 後端雲服務的數據存儲沿用了 MongoDB 的語法,雲函數基於 Node.js 進行開發,這些都是現在非常流行的編程語言,對開發者來說學習成本低,易於上手。為了幫助開發者完成更加複雜的程序,Serverless 後端雲服務陸續會增加更多服務類型,與新技術結合,從而更好服務開發者。

為方便開發者交流小程序開發過程中遇到的問題,歡迎大家掃描下方二維碼,或添加小助手微信 KY1022828,備註「小程序技術交流」,即可進群與各路小程序開發大神過招,還有最新的活動資訊與技術乾貨分享。

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 InfoQ 的精彩文章:

上午還在寫Bug,下午突然「被離職」,咋整?
十年行業趨勢與實踐探索,下一個技術關注點是?

TAG:InfoQ |