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

简介:本篇中为各位讲述如何将 Mall 应用部署到函数计算平台上。为了让分析更有代表性,我选择了 Github 上 star 数超过 50k 的电商应用 mall 作为示例。

作者:西流

导读: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.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 

1.png

2.2 生成 Mall 应用容器镜像

执行 maven 打包命令,生成 Docker 镜像,本地是 Java8 或者 Java11 环境均可。

sudo -E mvn package

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

2.png

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

3.png

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

首先登录阿里云镜像仓库控制台,选择个人版实例,根据提示让 docker 登录阿里云镜像仓库。

4.png

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

5.png

根据之前的步骤,我们已经在本地生成了 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 的镜像地址。

6.png

(建议:上面的镜像地址最好使用  registry-vpc.cn-hangzhou.aliyuncs.com/fc-demo/mall-admin:1.0-SNAPSHOT 形式)

2.5 部署 Mall 应用到函数计算平台

执行 s deploy 命令,部署成功后,您将看到对应的访问网址。

7.png

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

(注意:Serverless 的特点是系统默认在请求到达后才创建实例,所以第一次启动时间比较长,称之为冷启动。Mall 应用启动一般需要 30s 左右。后面我们将在性能调优文章中来回顾这个问题,使用一系列手段优化。)

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

8.png

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

9.png

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。

10.png

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

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-SNAPSHOTsudo docker push registry.cn-hangzhou.aliyuncs.com/quanxi-hryang/mall-admin-web:1.0-SNAPSHOT

修改项目根目录下的 s.yaml ,和部署 mall-admin 类似,根据您的配置调整 accessregion ,将 image 改为上一步推送成功的镜像地址。

11.png

执行 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. 部署应用到函数计算平台

原文链接

本文为阿里云原创内容,未经允许不得转载。 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/511633.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

押宝云原生,Ampere Computing打响服务器芯片变革关键一枪

“闯龙潭,越虎穴”这句话用来形容在服务器领域披荆斩棘的Arm架构服务器器芯片似乎最为合适不过。所谓“龙潭”“虎穴”指的便是雄霸服务器芯片市场数载的intel与AMD,而他们所属的x86架构,更是数据中心芯片领域的绝对主流。然而云原生时代的到…

阿里云实时数仓Hologres年度发布,解读数仓新趋势

简介:阿里云实时数仓Hologres年度发布,解读数仓新趋势。 1月7日,阿里云实时数仓Hologres发布最新版本,在成本、可用性、在线高可用等多方面进行了能力升级,行存吞吐提升100%,列存吞吐提升30%,支…

服务发现与配置管理高可用实践

简介:本篇是微服务高可用最佳实践系列分享的开篇,系列内容持续更新中,期待大家的关注。 作者:三辰|阿里云云原生微服务基础架构团队技术专家,负责 MSE 引擎高可用架构 本篇是微服务高可用最佳实践系列分享…

联想首次详解混合云Lenovo xCloud五大优势,如何打造智能化数字底座

多年积累之后,联想混合云品牌Lenovo xCloud主打云原生、智能运维、私有云、多云管理4大产品家族,9款通用解决方案,覆盖客户“建云、上云、用云和管云”的全部场景 6月10日,联想举办“弹性韧性悟性——多云混合时代Lenovo xCloud提…

阿里云何川:开放兼容的云,计算巢帮助合作伙伴云化升级

简介:保障业务稳定性,提供安全的云上互联网,助力合作伙伴实现规模化,打通多渠道分发。 12月21日,在阿里云弹性计算年度峰会上,阿里云弹性计算高级产品专家何川发表了题为《开放兼容的云,计算巢…

只用两个自定义 Hooks 就能替代 React-Redux ?

作者 | 👽来源 | 前端Sharing前言之前有朋友问我,React Hooks 能否解决 React 项目状态管理的问题。这个问题让我思索了很久,最后得出的结论是:能,不过需要两个自定义 hooks 去实现。那么具体如何实现的呢?…

java queue源码_Java高并发系列之ArrayBlockingQueue源码解析

JUC包下定义了一个接口:BlockingQueue。其实现类有ArrayBlockingQueue等。本文先来介绍一下ArrayBlockingQueue。从字面可以看出,ArrayBlockingQueue是一种基于数组的阻塞队列,阻塞队列在线程池中会经常使用到。首先来看看ArrayBlockingQueue…

圆桌对话:云时代下,企业运维面临的挑战与机遇

简介:四位企业运维大咖展开对话,讨论“云时代下,企业运维面临的挑战与机遇”。 编者按:上云,已经成为了企业势不可挡的选择。云计算所拥有的“软件定义一切”的特性,推动了敏捷弹性、DevOps、智能运维和基…

揭晓阿里云神龙团队拿下TPCx-BB排名第一的背后技术

简介:近日,TPC Benchmark Express-BigBench(简称TPCx-BB)公布了最新的世界排名,阿里云自主研发的神龙大数据加速引擎获得了TPCx-BB SF3000排名第一的成绩。TPCx-BB测试分为性能与性价比两个维度。其中,在性能维度,在本…

聊聊分布式一致性算法协议 Paxos

作者 | 码哥字节来源 | 码哥字节Google的粗粒度锁服务Chubby的设计开发者Burrows曾经说过:所有一致性协议本质上要么是Paxos要么是其变体。网上有很多讲解Paxos算法的文章,但是质量层次不齐。今天笔者带大家深入聊一下PaxosPaxos是什么?Paxos…

java jdk myeclipse_java初体验(JDK+myeclipse)

前一段时间突击了C语言,主要是针对文件的操作,学习C的目的就是利用C处理oracle数据文件,在脱离oracle软件的情况下,提取出特定表的数据。行链接和行迁移再加上cluster表搞的头大,暂且一放,学习下java,了解下…

专访阿里云王伟民:一站式全链路,阿里云向云原生数据库2.0跃迁

简介:阿里云连续第二年进入Gartner《全球云数据库魔力象限》领导者象限,意味着国产数据库正在迅速崛起。 数据库与操作系统、中间件并称为基础软件,“核高基”中的“基”指的就是这三类基础软件产品,它们在软件产业中有举足轻重的…

媒体声音 | 云数据库,谁才是领导者?

简介:你们从2021年Gartner云数据库管理系统魔力象限中看到了什么…… 2021年新冠疫情进入第二年,对全球的社会、经济而言是不平凡之年,这句话也可用于概括云数据库的发展。随着中国厂商逐步进入全球云数据库市场重要舞台,我们也看…

再聊数据中心网络

作者 | 鲜枣课堂来源 | 小枣君本着“将通信科普到底”的原则,今天,我再继续聊一下这个话题。故事还是要从头开始说起。1973年夏天,两名年轻的科学家(温顿瑟夫和罗伯特卡恩)开始致⼒于在新⽣的计算机⽹络中,…

面向中后台复杂场景的低代码实践思路

简介:现实中,业务场景多,迭代频繁,变化快到跟不上,规则可能由多人掌握,无法通过一个人了解全貌; 还有业务所在行业固有的复杂度和历史包袱,这些问题都会让我们感到痛苦。 除了逻辑问…

阿里云发布云数据中心专用处理器CIPU, 构建新一代云计算架构体系

6月13日,阿里云智能总裁张建锋在峰会上正式发布CIPU(Cloud infrastructure Processing Units),这是为新型云数据中心设计的专用处理器,未来将替代CPU成为云计算的管控和加速中心。 在这个全新体系架构下,C…

Java依赖冲突高效解决之道

简介:由于阿里妈妈联盟团队负责业务的特殊性,系统有庞大的对外依赖,依赖集团六七十个团队服务及N多工具组件,通过此文和大家分享一下我们积累的一些复杂依赖有效治理的经验,除了简单技术技巧的总结外,也会探…

多分支集成发布各种坑怎么填?

简介:一文为你详细介绍云效分支模式的原理及实践,云效 Flow 这套灵活高效的分支模式可以让用户只关心集成和发布哪些特性分支,而对发布分支创建和管理、分支间合并等一系列工作,托付给云效完成。 小明的研发团队要发布一个版本&a…

Gartner:中国企业构建边缘计算解决方案最佳实践

作者 | Gartner研究总监 李晶 供稿 | Gartner 随着中国企业数字化成熟度和渗透度的不断提升,基础设施和运营 (I&O) 团队和领导者所需要提供的数字基础设施的位置也在逐渐增加,从云端、数据中⼼,延伸到了⽹络边缘,并且每个位置…

php生成pdf文档,PHP生成PDF文件类库大全[开源]

虽然 PHP 有附 PDFlib ,不过使用起来实在有点复杂。(PHP 说明文件中的范例)FPDF虽然现在已经停止更新了,但 FPDF 可谓是元老级的 PDF 链接库,短短的几行程序就可以产生出 PDF 档案。最可怕的是现今的PHP PDF 链接库大多是由 FPDF 衍生出来的。…