天天看點

Spring Boot Serverless 實戰系列“架構篇” 首發 | 光速入門函數計算Mall 架構簡介Serverless 計算平台-函數計算簡介Mall 應用 Serverless 架構總覽在函數計算平台運作 Spring Boot 

Spring Boot Serverless 實戰系列“架構篇” 首發 | 光速入門函數計算Mall 架構簡介Serverless 計算平台-函數計算簡介Mall 應用 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個前端應用:

Spring Boot Serverless 實戰系列“架構篇” 首發 | 光速入門函數計算Mall 架構簡介Serverless 計算平台-函數計算簡介Mall 應用 Serverless 架構總覽在函數計算平台運作 Spring Boot 
  • 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 架構非常容易,架構如下所示。由于函數計算内置了網關服務,自動拉起執行個體運作應用,是以開發者隻需要上傳應用代碼即可。

Spring Boot Serverless 實戰系列“架構篇” 首發 | 光速入門函數計算Mall 架構簡介Serverless 計算平台-函數計算簡介Mall 應用 Serverless 架構總覽在函數計算平台運作 Spring Boot 

應用執行個體在函數計算平台上運作,能夠自由的通路其他服務,是以和 MySQL,Redis,RabbitMQ 等服務的通路方式相同。

函數計算内置了日志收集和展示能力。開發者為函數計算指定

阿裡雲日志服務

的 LogStore,打到标準輸出的日志會自動收集到日志服務查詢、展示。開發者也可将日志投遞到自己的日志處理系統中,但需要做一些額外的配置。在本次示例中(見文末阿裡雲日志服務網址),我們會采用阿裡雲日志服務來處理應用日志。

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

在函數計算平台運作 Spring Boot 

在示範阿裡雲函數計算平台上運作 Web 應用前,先為大家介紹以下幾個概念:

1、服務

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

2、函數

函數是運作開發者代碼的基本機關。函數的粒度可以很細,比如對應 1 個 API,也可以較粗,對應一組 API。不同的函數配置不同的執行個體規格。函數計算提供了各種語言的運作時,也提供 custom runtime/custom container 和語言無關的運作時。如果隻是用函數計算實作片段代碼,可以使用相關語言的運作時。在我們的場景下,因為要無縫遷移 SpringBoot 應用,我們會選擇 custom container 運作時。Mall 項目已經支援了将 Mall 應用自動打包為容器鏡像,是以隻需要将鏡像上傳至阿裡雲容器鏡像倉庫,并在函數上指定相關資訊即可。

3、HTTP 觸發器

為函數配置 HTTP 觸發器後,函數可通過 HTTP 請求的方式調用。函數計算配套的 Serverless Devs 工具會為 HTTP 觸發器生成測試域名,開發者可以友善的調試和運作 Web 應用。

至此,閱讀本篇後,相信大家已經對 Mall 應用架構以及 Serverless 平台已經有了一個基本的了解。關注“Serverless”公衆号,訂閱 Spring Boot Serverless 實戰系列話題,我們将在下一篇的《 Spring Boot on FC - 部署篇》中為各位詳解如何将 Mall 應用部署到函數計算平台上。

文中涉及連結彙總

Sring Boot:

https://spring.io/projects/spring-boot

Mall:

https://github.com/macrozheng/mall

函數計算:

https://help.aliyun.com/product/50980.html

阿裡雲日志服務:

https://help.aliyun.com/product/28958.html

服務:

https://help.aliyun.com/document_detail/74925.htm

函數:

https://help.aliyun.com/document_detail/52077.html

HTTP 觸發器概述:

https://help.aliyun.com/document_detail/71229.html

Serverless Devs:

http://www.serverless-devs.com/

函數計算FC:

https://www.aliyun.com/product/fc