作者:西流

重视【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.1Clone 代码库房

git clone https://github.com/hryang/mall

国内拜访 Github 网络不太好,假如 clone 太慢,可运用 Gitee 地址。

git clone https://gitee.com/aliyunfc/mall.git

1.2构建和运转 Docker 镜像

在代码根目录的 docker 文件夹下,有每个依靠软件对应的 Dockerfile。运转代码根目录下的 run.sh 脚本,会主动构建一切依靠软件的 Docker 镜像,并在本机运转。

sudo bash docker.sh

1.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​

Spring Boot Serverless 实战系列“部署篇” | Mall 应用

2.2 生成 Mall 运用容器镜像

履行 maven 打包指令,生成 Docker 镜像,本地是 Java8 或许 Java11 环境均可。

sudo -E mvn package

成功后,将显现如下成功信息。

Spring Boot Serverless 实战系列“部署篇” | Mall 应用

履行​​sudo docker images​​,应该能看到 mall/mall-admin,mall/mall-portal,mall/mall-search 的 1.0-SNAPSHOT 版本的镜像。

Spring Boot Serverless 实战系列“部署篇” | Mall 应用

2.3 将镜像推送到阿里云镜像库房

首要登录阿里云镜像库房控制台,挑选个人版实例,依据提示让 docker 登录阿里云镜像库房。

Spring Boot Serverless 实战系列“部署篇” | Mall 应用

然后创立命名空间。如下图所示,咱们创立了名为 quanxi-hryang 的命名空间。

Spring Boot Serverless 实战系列“部署篇” | Mall 应用

依据之前的过程,咱们已经在本地生成了 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-SNAPSHOT

2.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 的镜像地址。

Spring Boot Serverless 实战系列“部署篇” | Mall 应用

(主张:上面的镜像地址最好运用 registry-vpc.cn-hangzhou.aliyuncs.com/fc-demo/mall-admin:1.0-SNAPSHOT 方式)

2.5 布置 Mall 运用到函数核算渠道

履行​​s deploy​​指令,布置成功后,您将看到对应的拜访网址。

Spring Boot Serverless 实战系列“部署篇” | Mall 应用

在浏览器中输入生成的网址,假如显现 “暂未登录或 token 已经过期”,说明服务布置成功。

(留意:Serverless 的特点是系统默认在恳求抵达后才创立实例,所以第一次发动时刻比较长,称之为冷发动。Mall 运用发动一般需求 30s 左右。后面咱们将在功能调优文章中来回顾这个问题,运用一系列手法优化。)

拜访对应的 swagger api 调试页面 host/swagger-ui.html,就能调试相关的后端 API 了。

Spring Boot Serverless 实战系列“部署篇” | Mall 应用

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,就能看到整个运用的发动和恳求处理日志。

Spring Boot Serverless 实战系列“部署篇” | Mall 应用

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。

Spring Boot Serverless 实战系列“部署篇” | Mall 应用

在项目根目录履行下面的指令,构建前端项目。

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​​改为上一步推送成功的镜像地址。

Spring Boot Serverless 实战系列“部署篇” | Mall 应用

履行​​s deploy​​ ,当布置成功后,就能看到 mall-admin-web 服务的网址。经过浏览器拜访,将看到登录页面。填入密码​​macro123​​,就能看到完好的作用。

(留意:第一次因为冷发动,登录页面或许会报超时错误。重新改写页面即可。咱们将在后面的功能调优文章中优化冷发动功能。)

总结

因为 Serverless 渠道内置了网关,负责路由,实例拉起/运转/容错/主动扩缩容等功能,因此开发者上传运用代码包或许镜像后,就已经发布了一个弹性高可用的服务。总结起来,只要完结下面 5 步就在函数核算渠道上完好布置了 Mall 运用。后续对运用的更新,只需求重复过程 4 和 5。由此可见,Serverless 将环境装备和运维等重复性的作业免除了,开发运维效率大幅提升。

  1. Clone 项目代码
  2. 找到一台 VM,运转脚本一键式装置 MySQL,Redis 等依靠软件
  3. 修正运用装备中 host 这一项,将值填写为过程2中的 VM 公网 ip
  4. 生成运用镜像,并推送到阿里云镜像库房
  5. 布置运用到函数核算渠道

文中网址汇总

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​​

点击​​此处​​,即可检查更多函数核算信息!