当前位置: 首页 > 后端技术 > Java

SpringBootServerless实战系列《部署》-商城应用简介_0

时间:2023-04-01 17:14:32 Java

:本文将告诉您如何在函数计算平台上部署商城应用。为了让分析更具有代表性,我选择了Github上50k以上star的电商应用商城作为例子。作者:细柳指南:SpringBoot是一套基于JavaSpring框架的套件。它预装了一系列Spring组件,允许开发人员使用很少的配置创建独立的应用程序。在云原生环境中,有大量的平台可以运行SpringBoot应用,比如虚拟机、容器等。但其中最吸引人的是以无服务器方式运行SpringBoot应用程序。通过系列文章,我将从架构、部署、监控、性能、安全五个方面分析在Serverless平台上运行SpringBoot应用的优缺点。在之前的《FC架构上的SpringBoot》中,我们对Mall应用架构和Serverless平台进行了基本的介绍。在本文中,我将告诉您如何将商城应用程序部署到函数计算平台。为了让分析更具有代表性,我选择了Github上50k以上star的电商应用商城作为例子。前提准备阶段:需要有阿里云账号;需要有一台可以通过公网ip访问的机器,安装MySQL、Redis等商城应用依赖的软件;需要在运行依赖软件的机器上安装Git、Docker、Java、Maven软件;您需要安装和配置ServerlessDevs工具。注意,如果您使用云主机,请先检查主机对应的安全组配置是否允许入站网络请求。通用主机创建后,严格限制入站方向的网口访问。我们需要手动允许访问MySQL的3306端口,Redis的6379端口等。如下图所示,我手动设置安全组允许所有传入的网络请求。部署依赖软件商城应用依赖MySQL、Redis、MongoDB、ElasticSearch、RabbitMQ等软件。这些软件在云端都有相应的云产品。在生产环境中,建议使用云产品以获得更好的性能和可用性。在个人开发或者POC原型演示场景下,我们选择一个VM来容器化部署所有依赖的软件。1.1克隆代码仓库gitclonehttps://github.com/hryang/mall国内访问Github网络不是很好,如果克隆太慢,可以使用Gitee地址。gitclonehttps://gitee.com/aliyunfc/mall.git1.2构建并运行Docker镜像在代码根目录下的docker文件夹下,每个依赖的软件对应一个Dockerfile。运行代码根目录下的run.sh脚本,所有依赖该软件的Docker镜像都会自动构建并在本地运行。sudobashdocker.sh1.3验证依赖软件运行状态执行dockerps命令查看依赖软件是否正常运行。sudodockerps部署商城应用2.1修改商城应用配置修改以下3个yaml文件,host字段改为你在步骤1中安装MySQL等软件的节点的公网ip,如图:mall-admin/src/main/resources/application-prod.ymlmall-portal/src/main/resources/application-prod.ymlmall-search/src/main/resources/application-prod.yml2.2生成商城应用容器镜像执行maven打包命令生成DockerMirroring,本地环境可以是Java8或者Java11。sudo-Emvnpackage成功后,会显示如下成功信息。执行sudodockerimages,你应该可以看到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改为自己的镜像仓库区域和命名空间。商城/商城门户、商城/商城搜索等。sudodockertagmall/mall-admin:1.0-SNAPSHOTregistry.cn-hangzhou.aliyuncs.com/quanxi-hryang/mall-admin:1.0-SNAPSHOTsudodockerpushregistry.cn-hangzhou.aliyuncs.com/quanxi-hryang/mall-admin:1.0-SNAPSHOT2.4修改ServerlessDevs工具的应用定义我们使用ServerlessDevs工具来定义和部署应用。项目根目录下有s.yaml文件,是ServerlessDevstool的项目定义文件。这定义了函数计算的资源。如下图所示,我们在函数计算上定义了一个名为mall-admin的服务和其下的一个mall-admin函数。函数中定义了端口、内存大小、超时和运行时间等属性。红框内的内容是你需要根据自己的配置修改的。access是你用sconfig配置的身份,default是default。如果您使用默认设置,则无需在此处进行更改。region是你要部署的区域,有cn-杭州、cn-上海、cn-北京、cn-深圳等选项。函数使用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将商城应用部署到函数计算平台,并执行sdeploy命令,部署成功,会看到对应的访问URL。在浏览器中输入生成的URL。如果显示“尚未登录或令牌已过期”,则表示服务部署成功。(注:Serverless的特点是请求到达后系统默认创建一个实例,所以第一次启动时间比较长,称为冷启动,商城应用启动一般需要30s左右.我们会在后面的性能调优文章中讨论Reviewthisproblem并使用一系列手段进行优化。)访问对应的swaggerapi调试页面host/swagger-ui.html,就可以调试相关的后端API。2.6查看应用日志我们在s.yaml中为每个服务设置logConfig:auto,也就是说serverless-devs工具会自动为该服务创建一个日志库(LogStore),所有服务共享一个日志库。应用的所有日志都输出到.可以使用slogs命令查看某个时间点所有服务的日志;也可以使用small-adminlogs查看mall-admin功能的日志;也可以使用small-adminlogs-t以followmodeLaterlogs实时显示当前时间点;您还可以使用small-adminlogs--keyword=abc查看包含关键字abc的日志。s日志对于您了解服务的运行方式和诊断问题非常有用。比如我们执行small-adminlogs-t进入如下模式,然后在浏览器中访问mall-admin服务的端点,就可以看到整个应用的启动和请求处理日志。2.7部署商城前端项目商城也提供了前端接口,基于Vue+Element实现。主要包括商品管理、订单管理、会员管理、推广管理、运营管理、内容管理、统计报表、财务管理、权限管理、设置等功能。这个项目也可以在函数计算上无缝运行。首先在你的机器上安装nodejs12和npm,并下载项目源码。gitclonehttps://github.com/hryang/mall-admin-web国内访问github网络不是很好,如果clone太慢,可以使用下面的代理地址。gitclonehttps://gitee.com/aliyunfc/mall-admin-web.git(注意:必须是nodejs12或14,太新的node版本会编译失败)修改config/prod.env.js,BASE_API修改为在函数计算上部署成功的mall-admin端点。在项目根目录下执行以下命令构建前端项目。`npminstallnpmrunbuild`运行成功后,会生成一个dist目录。运行项目根目录下的docker.sh脚本生成镜像。sudobashdocker.sh运行dockerimages命令,你会看到mall/mall-admin-web镜像已经成功生成。将镜像推送到阿里云镜像仓库。同样,请将以下命令中的cn-hangzhou和quanxi-hryang修改为自己的镜像仓库区域和命名空间。sudodockertagmall/mall-admin-web:1.0-SNAPSHOTregistry.cn-hangzhou.aliyuncs.com/quanxi-hryang/mall-admin-web:1.0-SNAPSHOTsudodockerpushregistry.cn-hangzhou.aliyuncs.com/quanxi-hryang/mall-admin-web:1.0-SNAPSHOT修改项目根目录下的s.yaml,类似部署mall-admin,根据自己的配置调整权限和区域,image改成之前的镜像地址上一步推送成功。执行sdeploy,部署成功后可以看到mall-admin-web服务的url。通过浏览器访问,您将看到登录页面。填写密码macro123以查看完整效果。(注意:第一次由于冷启动,登录页面可能会报超时错误,请刷新页面。我们会在后续的性能调优文章中优化冷启动性能。)总结由于serverless平台内置网关,负责路由、实例启动/运行/容错/自动扩缩容等,开发者上传应用代码包或镜像后,一个弹性高的可用服务已发布。综上所述,只要完成以下5个步骤,商城应用就完全部署在了函数计算平台上。对于应用程序的后续更新,只需重复步骤4和5。可以看出,Serverless省去了环境配置、运维等重复性工作,大大提高了开发和运维的效率。Clone项目代码找到一个VM,运行脚本一键安装MySQL、Redis等依赖软件。修改应用配置中的host项,填写值为步骤2中的VM公网ip生成应用镜像,推送到阿里云镜像仓库部署应用到函数计算平台原文链接本文为原创阿里云内容,未经许可不得转载。