Spring Boot Serverless 实战系列“部署篇” | Mall 应用
作者:西流
關注【Serverless】公眾號,后臺回復 “學習” 即可獲得 Serverless 技術資源包!
導讀:
Spring Boot 是基于 Java Spring 框架的套件,它預裝了 Spring 的一系列組件,讓開發者只需要很少的配置就可以創建獨立運行的應用程序。在云原生的環境中,有大量的平臺可以運行 Spring Boot 應用,例如虛擬機、容器等。但其中最有吸引力的,是以 Serverless 的方式運行 Spring Boot 應用。
我將通過一系列文章,從架構,部署,監控、性能、安全等 5 個方面來分析 Serverless 平臺運行 Spring Boot 應用的優劣。我們在上一篇的“Spring Boot on FC 架構篇”中,對 Mall 應用架構以及 Serverless 平臺有了一個基本的介紹,我會在本篇中為各位講述如何將 Mall 應用部署到函數計算平臺上。為了讓分析更有代表性,我選擇了 Github 上 star 數超過 50k 的電商應用 mall 作為示例。
前置條件
準備階段:
-
您需要有一個阿里云的賬戶;
-
您需要有一臺能通過公網 ip 訪問的機器,安裝 MySQL,Redis 等 Mall 應用依賴的軟件;
-
您需要在運行依賴軟件的機器上安裝 Git, Docker,Java 和 Maven 軟件;
-
您需要安裝并配置 Serverless Devs 工具。
注意,如果您使用了云主機,請先檢查主機對應的安全組配置是否允許入方向的網絡請求。一般的主機在創建后,對于入方向的網絡端口訪問做了嚴格限制。我們需要手動允許訪問 MySQL 的 3306 端口,Redis 的 6379 端口等。如下圖所示,我手動設置了安全組,允許所有入方向的網絡請求。
部署依賴軟件
Mall 應用依賴 MySQL,Redis,MongoDB,ElasticSearch,RabbitMQ 等軟件。這些軟件在云上都有對應的云產品。在生產環境,推薦使用云產品獲得更好的性能和可用性。在個人開發或者 POC 原型演示場景下,我們選擇一臺 VM 來容器化部署所有依賴的軟件。
1.1?Clone 代碼倉庫
git clone https://github.com/hryang/mall國內訪問 Github 網絡不太好,如果 clone 太慢,可使用 Gitee 地址。
git clone https://gitee.com/aliyunfc/mall.git1.2?構建和運行 Docker 鏡像
在代碼根目錄的 docker 文件夾下,有每個依賴軟件對應的 Dockerfile。運行代碼根目錄下的 run.sh 腳本,會自動構建所有依賴軟件的 Docker 鏡像,并在本機運行。
sudo bash docker.sh1.3?驗證依賴軟件運行狀態
執行 Docker ps 命令,檢查依賴軟件是否正常運行。
sudo docker ps部署 Mall 應用
2.1 修改 Mall 應用配置
修改下面?3 個 yaml 文件,將其中的???host???字段改成您第 1 步安裝 MySQL 等軟件的節點公網 ip,如圖所示:
??mall-admin/src/main/resources/application-prod.yml??
??mall-portal/src/main/resources/application-prod.yml??
??mall-search/src/main/resources/application-prod.yml??
2.2 生成 Mall 應用容器鏡像
執行 maven 打包命令,生成 Docker 鏡像,本地是 Java8 或者 Java11 環境均可。
sudo -E mvn package成功后,將顯示如下成功信息。
執行???sudo docker images??,應該能看到 mall/mall-admin,mall/mall-portal,mall/mall-search 的 1.0-SNAPSHOT 版本的鏡像。
2.3 將鏡像推送到阿里云鏡像倉庫
首先登錄阿里云鏡像倉庫控制臺,選擇個人版實例,根據提示讓 docker 登錄阿里云鏡像倉庫。
然后創建命名空間。如下圖所示,我們創建了名為 quanxi-hryang 的命名空間。
根據之前的步驟,我們已經在本地生成了 mall/mall-admin, mall/mall-portal, mall/mall-search 的鏡像。
執行下面的命令,將 mall-admin 鏡像推送到杭州區域,??quanxi-hryang???命名空間下的鏡像倉庫。
請將下面命令中的 ???cn-hangzhou???和???quanxi-hryang???修改為您自己的鏡像倉庫地域和命名空間。mall/mall-portal,mall/mall-search 以此類推。
sudo docker tag mall/mall-admin:1.0-SNAPSHOT registry.cn-hangzhou.aliyuncs.com/quanxi-hryang/mall-admin:1.0-SNAPSHOT sudo docker push registry.cn-hangzhou.aliyuncs.com/quanxi-hryang/mall-admin:1.0-SNAPSHOT2.4 修改 Serverless Devs 工具的應用定義
我們使用 Serverless Devs 工具來定義和部署應用。在項目根目錄下,有???s.yaml???文件,這是 Serverless Devs 工具的項目定義文件。這里面定義了函數計算的資源。
如下圖所示,我們在函數計算上定義了名為 mall-admin 服務及其下的 mall-admin 函數。函數中定義了 port,內存大小,超時時間,運行時等屬性。紅框中的內容是您需要根據自己的配置修改的。
-
??access???是您使用???s config???配置的身份,默認是 default。如果您采用默認設置,那么這里不需要更改。
-
??region???是您要部署的地域,有 cn-hangzhou,cn-shanghai,cn-beijing,cn-shenzheng 等選項。
-
函數使用了 custom-container 運行時,需要指定鏡像地址。請將 s.yaml 中的鏡像地址改為您上一步推送的 mall-admin 鏡像地址。同理,也需要在 s.yaml 中更改 mall-portal,mall-search 的鏡像地址。
(建議:上面的鏡像地址最好使用 ?registry-vpc.cn-hangzhou.aliyuncs.com/fc-demo/mall-admin:1.0-SNAPSHOT 形式)
2.5 部署 Mall 應用到函數計算平臺
執行???s deploy???命令,部署成功后,您將看到對應的訪問網址。
在瀏覽器中輸入生成的網址,如果顯示 “暫未登錄或 token 已經過期”,說明服務部署成功。
(注意:Serverless 的特點是系統默認在請求到達后才創建實例,所以第一次啟動時間比較長,稱之為冷啟動。Mall 應用啟動一般需要 30s 左右。后面我們將在性能調優文章中來回顧這個問題,使用一系列手段優化。)
訪問對應的 swagger api 調試頁面 host/swagger-ui.html,就能調試相關的后端 API 了。
2.6 查看應用日志
我們在???s.yaml???中為每個服務都設置了???logConfig:auto???,代表 serverless-devs 工具會自動為服務創建日志庫(LogStore),所有的服務都共享一個日志庫。應用所有的日志都輸出到。
- 您可以使用???s logs???命令查看所有服務某個時間點的日志;
- 也可以使用???s mall-admin logs???查看 mall-admin 函數的日志;
- 也可以使用???s mall-admin logs -t???以跟隨模式實時顯示當前時間點之后的日志;
- 也可以使用???s mall-admin logs --keyword=abc???查看包含關鍵詞 abc 的日志。
s logs 對于您了解服務運行情況和問題診斷非常有用。例如我們執行???s mall-admin logs -t???進入跟隨模式,然后在瀏覽器中訪問???mall-admin???服務的 endpoint,就能看到整個應用的啟動和請求處理日志。
2.7 部署 Mall 前端項目
Mall 也提供了一個前端界面,基于 Vue+Element 實現。主要包括商品管理、訂單管理、會員管理、促銷管理、運營管理、內容管理、統計報表、財務管理、權限管理、設置等功能。該項目同樣可以無縫運行在函數計算上。
首先在所在機器上安裝 nodejs12 和 npm,并下載項目源代碼。
git clone https://github.com/hryang/mall-admin-web國內訪問 github 網絡不太好,如果 clone 太慢,可使用下面的代理地址。
git clone https://gitee.com/aliyunfc/mall-admin-web.git(注意:必須是 nodejs 12 或者 14,太新的 node 版本會編譯失敗)
修改???config/prod.env.js?? ,將其中的 BASE_API 改為之前在函數計算上部署成功的 mall-admin 的 endpoint。
在項目根目錄執行下面的命令,構建前端項目。
npm install npm run build運行成功后,會生成 dist 目錄。運行項目根目錄下的 docker.sh 腳本,生成鏡像。
sudo bash docker.sh運行???docker images???命令,將看到 mall/mall-admin-web 鏡像已經成功生成了。將鏡像推送到阿里云鏡像倉庫。
同理,請將下面命令中的???cn-hangzhou???和???quanxi-hryang???修改為您自己的鏡像倉庫地域和命名空間。
sudo docker tag mall/mall-admin-web:1.0-SNAPSHOT registry.cn-hangzhou.aliyuncs.com/quanxi-hryang/mall-admin-web:1.0-SNAPSHOT sudo docker push registry.cn-hangzhou.aliyuncs.com/quanxi-hryang/mall-admin-web:1.0-SNAPSHOT修改項目根目錄下的???s.yaml???,和部署 mall-admin 類似,根據您的配置調整???access???, ??region???,將???image???改為上一步推送成功的鏡像地址。
執行???s deploy?? ,當部署成功后,就能看到 mall-admin-web 服務的網址。通過瀏覽器訪問,將看到登錄頁面。填入密碼???macro123???,就能看到完整的效果。
(注意:第一次由于冷啟動,登錄頁面可能會報超時錯誤。重新刷新頁面即可。我們將在后面的性能調優文章中優化冷啟動性能。)
總結
由于 Serverless 平臺內置了網關,負責路由,實例拉起/運行/容錯/自動擴縮容等功能,因此開發者上傳應用代碼包或者鏡像后,就已經發布了一個彈性高可用的服務。總結起來,只要完成下面 5 步就在函數計算平臺上完整部署了 Mall 應用。后續對應用的更新,只需要重復步驟 4 和 5。由此可見,Serverless 將環境配置和運維等重復性的工作免除了,開發運維效率大幅提升。
文中網址匯總
1)Spring Boot:
??https://spring.io/projects/spring-boot??
2)Mall:
??https://github.com/macrozheng/mall??
3)Serverless Devs 安裝文檔:
??http://serverless-devs.com/zh-cn/docs/installed/cliinstall.html??
點擊??此處??,即可查看更多函數計算信息!
總結
以上是生活随笔為你收集整理的Spring Boot Serverless 实战系列“部署篇” | Mall 应用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 2021 阿里云容器服务年度盘点:企业级
- 下一篇: Spring Boot Serverle