Spring Cloud 原生应用”0“改造迁移上TSF
最近更新时间: 2024-10-17 17:10:00
操作场景
TSF 支持原生 Spring Cloud 应用无侵入接入,无需改造即可直接接入 TSF,享受服务注册与发现、服务治理、应用监控和调用链跟踪等功能。
本文档以一个 [开源商城系统] 为示例,为您介绍将原生 Spring Cloud 应用迁移到 TSF 的方法。
该系统由以下几部分组成:
模块 | 说明 |
---|---|
mall-admin | 后台管理系统 |
mall-auth | 角色认证模块 |
mall-gateway | 网关模块,请求入口 |
mall-portal | 前台商城系统 |
mall-search | 商品检索模块 |
mall-demo | 用来测试 API 的样例工程 |
mall-monitor | Spring 自带的监控模块,TSF 自带监控能力,因此可以略过 |
环境准备
环境配置建议
注意:
以下配置仅做建议,具体以您的实际业务需求为主。
开发环境:指含有 mall demo 程序源码的计算环境。
部署环境:指购买的云主机,并且运用 TSF 服务部署商城系统的环境。
环境 | 环境分类 | 配置 |
---|---|---|
开发环境 | - | CPU: 4核内存:8GB 网络:50Mbps |
部署环境 | 中间件部署服务器 | 配置:1台云主机CPU:4核内存:8GB网络:50Mbps |
部署环境 | 微服务部署服务器 | 配置:每个服务1台云主机CPU:1核内存:2GB网络:20Mbps,按量计费磁盘:50GB |
中间件部署服务器准备
参考环境配置建议 【购买云服务器】 。
安装 【Docker】 和 【Docker Compose】 。
下载 【mall-demo程序包】 ,并将其上传到云服务器中。
进入
tsf-demo-public/document/docker
目录,执行如下命令,等待下载和容器拉起完成。docker-compose -f docker-compose-env.yml up -d
下载时间根据实际网络带宽可能需等待几分钟到几十分钟不等。
执行下面的命令创建 RabbitMQ 的 virtual_host、用户和权限,需要等 RabbitMQ 启动完成,如果下面的命令报错,再次执行。
docker exec -it rabbitmq /init.sh 正常情况下屏幕会显示如下: Adding user "mall" ... Setting tags for user "mall" to [administrator] ... Adding vhost "/mall" ... Setting permissions for user "mall" in vhost "/mall" ...
迁移上云
步骤1. 准备应用程序包
前提条件
操作步骤
下载 mall-demo程序包 到本地。
在
tsf-demo-public
根目录下执行如下命令,进行依赖初始化,耗时根据网速可能不同。mvn clean
进入每个项目的
src/main/resource
目录,根据已经部署的容器所有的云服务器地址,修改 application.yml 文件中的连接信息。若在本地安装调试可以忽略本步骤,即在本地安装docker和所有基础组件,在本地启动Spring Cloud调试。
yml
# mysql中替换localhost为内网IP
url: jdbc:mysql://localhost:3306/mall?useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai
# redis中替换localhost为内网IP
host: localhost
# rabbitmq中替换localhost为内网IP
host: localhost
# mongo中替换localhost为内网IP
host: localhost
# ES中替换127.0.0.1为内网IP
uris: 127.0.0.1:9200
进入 mall-mbg 项目的
src/main/resource
目录,修改 generator.properties 文件中 MySQL 的连接信息,修改localhost为指定主机名/IP。在
tsf-demo-public
根目录下,执行如下命令将项目进行打包。mvn clean package -DskipTests
在 target 目录下,可看到生成的 jar 程序包。
需上传jar包本地路径 mall-admin/target/mall-admin-1.0-SNAPSHOT # 后台管理系统 mall-auth/target/mall-auth-1.0-SNAPSHOT # 角色认证模块 mall-gateway/target/mall-gateway-1.0-SNAPSHOT # 网关模块,请求入口 mall-portal/target/mall-portal-1.0-SNAPSHOT # 前台商城系统 mall-search/target/mall-search-1.0-SNAPSHOT # 商品检索模块 两个可选部署的服务 mall-demo/target/mall-demo-1.0-SNAPSHOT # 用来测试API的样例工程 mall-monitor/target/mall-monitor-1.0-SNAPSHOT # Spring自带的监控模块,TSF自带监控能力,故可以略过
步骤2. 部署应用到 TSF
以部署 mall-search 服务为例,介绍在 TSF 上部署一个应用的流程。
2.1 新建集群
登录 【TSF 控制台】,左侧导航栏选择【集群】,单击新建,创建一个名为 mall-demo 的集群。
单击集群操作栏的【导入云主机】,将购买的云服务器全部导入到集群中。
2.2 新建日志配置项
在左侧导航栏选择【日志服务】>【日志配置】,单击【新建日志配置项】,创建日志采集规则。
2.3 创建并部署应用
- 在左侧导航栏选择【应用管理】,单击【新建应用】,创建一个名为 mall-search 的应用。
单击【提交】后,在提醒弹窗“是否前往倒入程序包,并部署应用”中单击【确认】,前往上传程序包。
在程序包管理页面,单击【上传程序包】,将 mall-search-1.0-SNAPSHOT.jar 程序包上传到TSF平台。
单击【提交】后,在弹窗“已上传完程序包,是否部署应用”中选择【前往部署】,前往创建部署组。
在部署组页面,单击【新建部署组】,填写部署组信息。
集群:选择2.1步骤中创建的集群
日志配置项:选择步骤2.2中创建的日志配置项
单击【保存&下一步】,选择要部署的云主机,单击【部署应用】。
在部署应用页面,选择刚刚上传的程序包版本,健康检查建议勾选“存活检查”和“就绪检查”,因为项目已经集成 actuator,如图填写请求路径即可,端口号根据 application.yml 中定义填写。
健康检查:
- 单击【完成】,完成应用部署。
2.4 查看部署结果
重复本章节2.3步骤依次将所有服务部署到TSF上,服务部署顺序建议:服务网关 mall-gateway -> mall-auth -> mall-admin -> mall-portal -> mall-search -> mall-demon。
当完成所有的服务部署,部署结果如下。
部署结果验证
步骤1. 验证服务依赖功能
通过部署前端页面,验证服务依赖功能
登录中间件部署服务器,在服务器上安装 【node.js】 。
下载前端代码,地址 [mall-admin-web] 。
在项目根目录下执行如下命令,安装前端项目所需的第三方依赖。
npm install
- 修改 dev.env.js 文件中的 BASE_API 配置为网关服务的端口,示例如下:IP 为gateway 服务机器内网 IP,port 为服务的端口号。
http://IP:PORT/mall-admin
- 执行如下命令运行前端项目。
npm run dev
访问前端页面,地址:
http://中间件服务器的外网 IP: 8090
,体验服务。登录 【TSF 控制台】,在【依赖分析】>【服务依赖拓扑】页面,选择命名空间和时间后,可看到如下图的依赖关系。
步骤2. 验证服务治理功能
2.1 验证服务限流功能
服务限流详细介绍请参考【服务限流】 。
典型业务问题:后端业务被高频恶意访问,导致核心业务链路阻塞,系统瘫痪。
场景:用户频繁访问拉取商品列表接口。
需求:保证核心服务 mall - admin 被每秒中最多被请求20次。
规则配置:在TSF控制台服务治理页面找到 mall-admin 服务,进入服务详情页面,配置服务限流规则。
效果验证:
2.2 验证服务鉴权功能
服务鉴权详细介绍请参考【服务鉴权】 。
电商典型场景:后端敏感业务需要对访问权限进行控制。
场景:对于后台商品管理模块,仅支持有权限的服务对它进行访问。例如,在这个场景中,我们限制gateway微服务可以不访问mall admin微服务,所有从gateway发起的请求都会被拒绝。
配置方式:在 【TSF 控制台】 服务治理页面找到 mall-admin 服务,进入服务详情页面,配置服务鉴权规则。
效果验证:
自动化部署
当应用非常多,不希望使用控制台逐个部署怎么办呢? 或者已经使用了 jenkins、travis 等工具,如何对接到 TSF 平台上呢?我们可以参考下面的操作来进行实践。
【mall-demo 程序包】 中的 deploy.py 脚本支持自动上传和部署一个新的应用到现有的集群中,默认选择集群中可用实例中的第一个实例机器部署应用。
- 在 deploy 目录下的 deploy.py 文件中配置 secret_id、secret_key,clusterId 和 namespace 等参数。
参数 | 是否必选 | 说明 |
---|---|---|
path | 必选 | 程序包路径 |
applicationName | 必选 | 应用名称 |
appId | 必选 | 账号 APPID |
groupName | 可选 | 默认采用和应用名称同名,不可重复 |
microserviceType | 可选 | 默认“NATIVE" 云原生应用。否,填写 “N” |
applicationType | 可选 | 默认“V”表示虚拟机部署 |
pkgVerstion | 可选 | 上传的程序包版本号,默认当前时间戳,时间戳格式:”YYYYmmddHHMMSS“ |
- 在 travis.yml 中添加脚本任务和任务所需的执行参数。依次是:程序包路径、应用名和 APPID。
- ./scripts/deploy.py mall-demo/target/mall-demo-1.0-SNAPSHOT.jar "test" "1234567890"
提交 commit,并且推送到远程分支,自动触发 Travis CI 流程。Travis 流程执行成功。
登录 【TSF 控制台】,可看到新的应用、部署组和运行实例。 应用: 部署组: 运行实例: