Spring Boot Serverless 實戰系列“架構篇” 首發 | 光速入門函式計算
簡介:如何以 Serverless 的方式執行 Spring Boot 應用?
作者 | 西流(阿里雲函式計算專家)
在雲原生體系中,有大量的平臺都可以執行 Spring Boot 應用,例如虛擬機器、容器等。但其中最有吸引力的,是以 Serverless 的方式執行 Spring Boot 應用。我將通過《Spring Boot Serverless 實戰》系列文章,從架構,部署,監控、效能、安全等 5 個篇章來分析 Serverless 平臺執行 SpringBoot 應用的優劣。
為了讓分析更有代表性,我選擇了 Github 上 star 數超過 50k 的電商應用
Mall 架構簡介
Mall 是一套電商系統,包括前臺商城系統及後臺管理系統,基於 Spring Boot + MyBatis 實現。前臺商城系統包含首頁門戶、商品推薦、商品搜尋、商品展示、購物車、訂單流程、會員中心、客戶服務、幫助中心等模組。後臺管理系統包含商品管理、訂單管理、會員管理、促銷管理、運營管理、內容管理、統計報表、財務管理、許可權管理、設定等模組。
Mall 的架構如下圖所示,分為閘道器層,應用層,資料儲存層。請求首先通過閘道器到達 Spring Boot 應用服務。閘道器實現負載均衡,流量控制等功能。應用層包含 3 個 Spring Boot 應用和1個前端應用:
- mall-admin:後臺商城管理系統
- mall-portal:前臺商城系統
- mall-search:於Elasticsearch的商品搜尋系統
- Mall-admin-web:mall-admin 的前端展示,基於 Vue+Element 實現
Mall 使用了 MySQL,Redis,MongoDB,ElaisticSearch 等多種資料庫。主要業務資料儲存在 MySQL,快取資料儲存在 Redis,使用者行為分析資料儲存在 MongoDB,搜尋資料儲存在 ElasticSearch 中。Spring Boot 應用服務間使用 RabbitMQ 實現非同步通訊。
Serverless 計算平臺-函式計算簡介
函式計算的產品優勢總結為:
- 高效免運維:聚焦業務邏輯開發,無需關心伺服器購買、自動伸縮等運維操 作;
- 彈性高可用:預留例項系統不自動回收,可長駐不銷燬,消除冷啟動帶來的延時毛刺;
- 按需低成本:按量付費模型按實際使用計算資源計費、資源利用率高;
- 穩定高可靠:函式計算分散式叢集化部署,支援多可用區;
函式計算提供全面的可觀測和問題診斷能力,但是其最突出的特點還是內建了閘道器層能力,能夠實現縮容到 0,快速的自動伸縮。
函式計算的這些特點,使其很適合 Spring Boot 這類 Web 應用。使用函式計算,開發者只需要專注於 SpringBoot 應用邏輯的實現,而不再費心應用執行環境的搭建、部署、監控等無差別的工作。
Mall 應用 Serverless 架構總覽
Mall 是一個非常標準的 3 層架構 Web 應用,改造為 Serverless 架構非常容易,架構如下所示。由於函式計算內建了閘道器服務,自動拉起例項執行應用,因此開發者只需要上傳應用程式碼即可。
函式計算內建了日誌收集和展示能力。開發者為函式計算指定
函式計算也提供了一系列工具,幫助開發者通過 Jenkins CICD 工具釋出應用。我們將在後續的文章中進一步展示。
在函式計算平臺執行 Spring Boot
在演示阿里雲函式計算平臺上執行 Web 應用前,先為大家介紹以下幾個概念:
函式計算的服務資源對應微服務。一個服務下可以建立多個函式,這些函式共享服務級別的配置,包括日誌、許可權、VPC 網路訪問配置等等。一般來說,開發者根據業務場景設計微服務架構,為每一個微服務建立函式計算的服務。然後再根據需求,將微服務變為更細粒度的函式。比如有些邏輯是計算密集型的,可以將它拆分為另一個函式,配置不同的例項規格,既滿足效能要求,又優化了成本。按照微服務的理念,一個服務下的函式個數不宜太多。
函式是執行開發者程式碼的基本單位。函式的粒度可以很細,比如對應 1 個 API,也可以較粗,對應一組 API。不同的函式配置不同的例項規格。函式計算提供了各種語言的執行時,也提供 custom runtime/custom container 和語言無關的執行時。如果只是用函式計算實現片段程式碼,可以使用相關語言的執行時。在我們的場景下,因為要無縫遷移 SpringBoot 應用,我們會選擇 custom container 執行時。Mall 專案已經支援了將 Mall 應用自動打包為容器映象,因此只需要將映象上傳至阿里雲容器映象倉庫,並在函式上指定相關資訊即可。
為函式配置 HTTP 觸發器後,函式可通過 HTTP 請求的方式呼叫。函式計算配套的 Serverless Devs 工具會為 HTTP 觸發器生成測試域名,開發者可以方便的除錯和執行 Web 應用。
原文連結
本文為阿里雲原創內容,未經允許不得轉載。