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

 2023-10-21 阅读 29 评论 0

摘要:作者 | 西流(阿里云函數計算專家) Spring Boot 是基于 Java Spring 框架的套件,它預裝了 Spring 一系列的組件,開發者只需要很少的配置即可創建獨立運行的應用程序。 ? 在云原生體系中,有大量的平臺都可以運行 Spring Boot 應用,例

技術專題banner.png 作者 | 西流(阿里云函數計算專家)

Spring Boot 是基于 Java Spring 框架的套件,它預裝了 Spring 一系列的組件,開發者只需要很少的配置即可創建獨立運行的應用程序。 ?

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

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

Mall 架構簡介

?

Serverless架構,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 計算服務。開發者無需管理服務器等基礎設施,用戶在上傳好代碼包或者容器鏡像后,函數計算會自動準備好計算資源,并且以彈性、可靠的方式運行代碼。

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

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

java微服務架構實戰?函數計算提供全面的可觀測和問題診斷能力,但是其最突出的特點還是內置了網關層能力,能夠實現縮容到 0,快速的自動伸縮。

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

Mall 應用 Serverless 架構總覽

Mall 是一個非常標準的 3 層架構 Web 應用,改造為 Serverless 架構非常容易,架構如下所示。由于函數計算內置了網關服務,自動拉起實例運行應用,因此開發者只需要上傳應用代碼即可。 ?

應用實例在函數計算平臺上運行,能夠自由的訪問其他服務,因此和 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

Mybatis框架、更多內容關注 Serverless 微信公眾號(ID:serverlessdevs),匯集 Serverless 技術最全內容,定期舉辦 Serverless 活動、直播,用戶最佳實踐。

版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。

原文链接:https://hbdhgg.com/4/158343.html

发表评论:

本站为非赢利网站,部分文章来源或改编自互联网及其他公众平台,主要目的在于分享信息,版权归原作者所有,内容仅供读者参考,如有侵权请联系我们删除!

Copyright © 2022 匯編語言學習筆記 Inc. 保留所有权利。

底部版权信息