1. 程式人生 > 其它 >Spring Boot Serverless 實戰系列“架構篇” | 光速入門函式計算

Spring Boot Serverless 實戰系列“架構篇” | 光速入門函式計算

簡介:如何以 Serverless 的方式執行 Spring Boot 應用?

作者:西流(阿里雲函式計算專家)

Spring Boot 是基於 Java Spring 框架的套件,它預裝了 Spring 一系列的元件,開發者只需要很少的配置即可建立獨立執行的應用程式。

在雲原生體系中,有大量的平臺都可以執行 Spring Boot 應用,例如虛擬機器、容器等。但其中最有吸引力的,是以 Serverless 的方式執行 Spring Boot 應用。我將通過《Spring Boot Serverless 實戰》系列文章,從架構,部署,監控、效能、安全等 5 個篇章來分析 Serverless 平臺執行 SpringBoot 應用的優劣。

為了讓分析更有代表性,我選擇了 Github 上 star 數超過 50k 的電商應用 Mall 作為示例。這是該系列文章的第一篇,本文會從架構角度對 Spring Boot 應用的 Serverless 化進行分析。

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 計算平臺 - 函式計算簡介

函式計算(Function Compute)是目前國內唯一入選 Forrester 領導者現象的 Faas 產品,是一項事件驅動的全託管 Serverless 計算服務。開發者無需管理伺服器等基礎設施,使用者在上傳好程式碼包或者容器映象後,函式計算會自動準備好計算資源,並且以彈性、可靠的方式執行程式碼。

函式計算的產品優勢總結為:

  • 高效免運維:聚焦業務邏輯開發,無需關心伺服器購買、自動伸縮等運維操作
  • 彈性高可用:預留例項系統不自動回收,可長駐不銷燬,消除冷啟動帶來的延時毛刺
  • 按需低成本:按量付費模型按實際使用計算資源計費、資源利用率高
  • 穩定高可靠:函式計算分散式叢集化部署,支援多可用區

函式計算提供全面的可觀測和問題診斷能力,但是其最突出的特點還是內建了閘道器層能力,能夠實現縮容到 0,快速的自動伸縮。

函式計算的這些特點,使其很適合 Spring Boot 這類 Web 應用。使用函式計算,開發者只需要專注於 SpringBoot 應用邏輯的實現,而不再費心應用執行環境的搭建、部署、監控等無差別的工作。

Mall 應用 Serverless 架構縱覽

Mall 是一個非常標準的 3 層架構 Web 應用,改造為 Serverless 架構非常容易,架構如下所示。由於函式計算內建了閘道器服務,自動拉起例項執行應用,因此開發者只需要上傳應用程式碼即可。

應用例項在函式計算平臺上執行,能夠自由的訪問其他服務,因此和 MySQL,Redis,RabbitMQ 等服務的訪問方式相同。

函式計算內建了日誌收集和展示能力。開發者為函式計算指定阿里雲日誌服務的 LogStore,打到標準輸出的日誌會自動收集到日誌服務查詢、展示。開發者也可將日誌投遞到自己的日誌處理系統中,但需要做一些額外的配置。在本次示例中(見文末阿里雲日誌服務網址),我們會採用阿里雲日誌服務來處理應用日誌。

函式計算也提供了一系列工具,幫助開發者通過 Jenkins CICD 工具釋出應用。我們將在後續的文章中進一步展示。

在函式計算平臺上執行 Spring Boot

在演示阿里雲函式計算平臺上執行 Web 應用前,先為大家介紹以下幾個概念:

服務

函式計算的服務資源對應微服務。一個服務下可以建立多個函式,這些函式共享服務級別的配置,包括日誌、許可權、VPC 網路訪問配置等等。一般來說,開發者根據業務場景設計微服務架構,為每一個微服務建立函式計算的服務。然後再根據需求,將微服務變為更細粒度的函式。比如有些邏輯是計算密集型的,可以將它拆分為另一個函式,配置不同的例項規格,既滿足效能要求,又優化了成本。按照微服務的理念,一個服務下的函式個數不宜太多。

函式

函式是執行開發者程式碼的基本單位。函式的粒度可以很細,比如對應 1 個 API,也可以較粗,對應一組 API。不同的函式配置不同的例項規格。函式計算提供了各種語言的執行時,也提供 custom runtime/custom container 和語言無關的執行時。如果只是用函式計算實現片段程式碼,可以使用相關語言的執行時。在我們的場景下,因為要無縫遷移 SpringBoot 應用,我們會選擇 custom container 執行時。Mall 專案已經支援了將 Mall 應用自動打包為容器映象,因此只需要將映象上傳至阿里雲容器映象倉庫,並在函式上指定相關資訊即可。

HTTP 觸發器

為函式配置 HTTP 觸發器後,函式可通過 HTTP 請求的方式呼叫。函式計算配套的 Serverless Devs 工具會為 HTTP 觸發器生成測試域名,開發者可以方便的除錯和執行 Web 應用。

原文連結
本文為阿里雲原創內容,未經允許不得轉載。