前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >“0” 代码改动,半小时迁移商城业务上微服务平台TSF

“0” 代码改动,半小时迁移商城业务上微服务平台TSF

作者头像
腾讯云中间件团队
发布2021-07-21 12:10:44
1.2K0
发布2021-07-21 12:10:44
举报

导读

腾讯云微服务平台(Tencent Service Framework,简称TSF),是一个围绕应用和微服务的 PaaS 平台,提供一站式应用全生命周期管理、服务注册治理、APM、微服务网关等企业级能力。在享受TSF强大功能之前,很多客户都面临如何改造业务系统,以完成对TSF适配的技术难题。为了满足这些需求,我们将演示如何通过TSF最新的“云原生应用”能力,以最小的成本,帮助客户将Spring Cloud应用部署到TSF,快速体验产品的高阶功能。

背景介绍

Spring Cloud提供了微服务系统架构的一站式解决方案,并利用Spring Boot的开发便利性巧妙地简化了分布式系统基础设施的开发,如服务发现注册、配置中心、消息总线、负载均衡、断路器、数据监控、分布式调用链等,通过Spring Cloud提供的一套简易的编程模型,我们可以在 Spring Boot 的基础上轻松地实现微服务项目的构建。

然而,这仅仅是帮助开发者开发微服务应用带来了便利,最终开发出的应用需要在生产环境运行起来,因此,我们还需要:

1.稳定的运行环境,如虚机环境或者容器环境,并能对微服务应用进行生命周期管理

2.高可用的注册中心,Spring Cloud虽然支持使用 Eureka、 Zookeeper或 Consul实现服务注册发现,但需要我们自行搭建并保证其高可用

3.统一的控制平面对服务进行治理,Spring Cloud整合了大量的服务治理组件,但没有一个统一的控制平面进行管理,这对大规模的微服务治理带来了不少的压力

4.可视化的数据运营服务,如日志服务、监控服务、分布式调用链服务,如Spring Cloud通过引入Sleuth实现分布式调用链,并和Zipkin、HTrace、ELK兼容,但这些后端服务需要我们自行搭建并保证其稳定性

也就是说,我们开发者开发完应用、构建好Jar包也只是第一步,要让应用稳定运行和持续运营,还需要一个微服务平台来满足上面的要求,这正是TSF——腾讯微服务平台 (Tencent Service Framework)的价值所在:

1. TSF 提供了一站式应用生命周期管理服务。提供从应用部署到应用运行的全流程管理,包括创建、删除、部署、回滚、扩容、下线、启动和停止应用并支持版本回溯能力。

2. TSF 提供了高效的服务注册发现能力。支持秒级的服务注册发现并提供本地注册信息缓存、服务实例注册发现异常告警、注册中心跨 AZ 区容灾等完善的高可用保障机制。

3. TSF 提供了细粒度服务治理能力。支持服务和 API 多级服务治理能力,通过配置标签形式进行细粒度的流量控制,实现灰度发布、就近路由、熔断限流、服务容错、访问鉴权等功能。

4. TSF 提供了立体化应用数据运营。提供完善应用性能指标监控和分布式调用链分析、服务依赖拓扑、日志服务工具,帮助您高效分析应用性能瓶颈及故障问题排查。

目前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 服务部署商城系统的环境。

开源商城系统 https://github.com/macrozheng/mall-swarm

中间件部署服务器准备

1. 参考环境配置建议 购买云服务器

2. 安装 DockerDocker Compose

3. 下载 mall-demo程序包,并将其上传到云服务器中。

4. 进入 tsf-demo-public/document/docker 目录,执行如下命令,等待下载和容器拉起完成。

代码语言:javascript
复制
docker-compose -f docker-compose-env.yml up -d

下载时间根据实际网络带宽可能需等待几分钟到几十分钟不等。

5. 执行下面的命令创建 RabbitMQ 的virtual_host,用户和权限,需要等RabbitMQ启动完成,如果下面的命令报错,再次执行。

代码语言:javascript
复制
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" ...

云服务器 https://buy.cloud.tencent.com/cvm

Docker https://docs.docker.com/engine/install/

Docker Compose https://docs.docker.com/compose/install/

mall-demo程序包 https://github.com/supergunme/tsf-demo-public

1分钟快速上云

前提条件:

安装Maven

操作步骤:

1.下载 mall-demo程序包 到本地。

2. 在 tsf-demo-public 根目录下执行如下命令,进行依赖初始化,耗时根据网速可能不同。

代码语言:javascript
复制
mvn clean

3.进入每个项目的src/main/resource目录,根据已经部署的容器所有的云服务器地址,修改application.yml文件中的连接信息。

(若在本地安装调试可以忽略本步骤,即在本地安装docker和所有基础组件,在本地启动Spring Cloud调试。)

代码语言:javascript
复制
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

4. 进入mall-mbg项目的src/main/resource目录,修改generator.properties文件中mysql的连接信息,修改localhost为指定主机名/IP。

5. 在tsf-test/根目录下,执行如下命令将项目进行打包。

代码语言:javascript
复制
mvn clean package -DskipTests

6. 在target目录下,可看到生成的jar程序包。

代码语言:javascript
复制
需上传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自带监控能力,故可以略过

Maven https://maven.apache.org/install.html

mall-demo程序包 https://github.com/supergunme/tsf-demo-public

部署应用到TSF

以部署mall-search服务为例,介绍在TSF上部署一个应用的流程。

1. 新建集群

- 登录 TSF 控制台,左侧导航栏选择【集群】,单击新建,创建一个名为mall-demo的集群。

- 单击集群操作栏的【导入云主机】,将购买的云服务器全部导入到集群中。

2. 新建日志配置项

在左侧导航栏选择【日志服务】>【日志配置】,单击【新建日志配置项】,创建日志采集规则。

3. 创建并部署应用

1. 在左侧导航栏选择【应用管理】,单击【新建应用】,创建一个名为mall-search的应用。

2.单击【提交】后,在提醒弹窗“是否前往倒入程序包,并部署应用”中单击【确认】,前往上传程序包。

3. 在程序包管理页面,单击【上传程序包】,将mall-search-1.0-SNAPSHOT.jar程序包上传到TSF平台。

4. 单击【提交】后,在弹窗“已上传完程序包,是否部署应用”中选择【前往部署】,前往创建部署组。

5. 在左侧导航栏选择【应用管理】,单击【新建应用】,创建一个名为mall-search的应用。

  • 集群:选择3.1步骤中创建的集群
  • 日志配置项:选择步骤3.2中创建的日志配置项
  1. 单击【保存&下一步】,选择要部署的云主机,单击【部署应用】
  2. 在部署应用页面,选择刚刚上传的程序包版本,健康检查建议勾选“存活检查”和“就绪检查”,因为项目已经集成actuator,如图填写请求路径即可,端口号根据application.yml中定义填写。

        3. 单击【完成】,完成应用部署。

4. 查看部署结果

重复本章节3.0步骤依次将所有服务部署到TSF上,服务部署顺序建议:服务网关mall-gateway --> mall-auth --> mall-admin --> mall-portal --> mall-search --> mall-demon。

当完成所有的服务部署,部署结果如下。

结果验证

验证服务依赖功能:

通过部署前端页面,验证服务依赖功能

1. 登录中间件部署服务器,在服务器上安装 Node.js

2. 下载前端代码,地址 mall-admin-web

3. 在项目根目录下执行如下命令,安装前端项目所需的第三方依赖。

代码语言:javascript
复制
npm install

4. 修改dev.env.js文件中的 BASE_API配置为网关服务的端口,示例如下:IP 为gateway 服务机器内网IP,port为服务的端口号。

代码语言:javascript
复制
http://IP:PORT/mall-admin

5. 执行如下命令运行前端项目。

代码语言:javascript
复制
npm run dev

6. 访问前端页面,地址:http://中间件服务器的外网IP: 8090,体验服务。

7. 登录 TSF 控制台,在【依赖分析】>【服务依赖拓扑】页面,选择命名空间和时间后,可看到如下图的依赖关系。. 执行如下命令运行前端项目。

Node.js https://nodejs.org/dist/v8.9.4/node-v8.9.4-x64.msi

mall-admin-web https://github.com/macrozheng/mall-admin-web

验证服务限流功能:

服务限流详细介绍请参考服务限流

  • 典型业务问题:后端业务被高频恶意访问,导致核心业务链路阻塞,系统瘫痪。
  • 场景:用户频繁访问拉取商品列表接口。
  • 需求:保证核心服务 mall - admin 被每秒中最多被请求20次。
  • 规则配置:在TSF控制台服务治理页面找到 mall-admin 服务,进入服务详情页面,配置服务限流规则。

服务限流 https://cloud.tencent.com/document/product/649/19046

效果验证:

验证服务鉴权功能:

服务鉴权详细介绍请参考服务鉴权。

  • 电商典型场景:后端敏感业务需要对访问权限进行控制。
  • 场景:对于后台商品管理模块,仅支持有权限的服务对它进行访问。例如,在这个场景中,我们限制gateway微服务可以不访问mall admin微服务,所有从gateway发起的请求都会被拒绝。
  • 配置方式:在 TSF 控制台服务治理页面找到mall-admin服务,进入服务详情页面,配置服务鉴权规则。

效果验证:

一键自动化部署

当应用非常多,不希望使用控制台逐个部署怎么办呢?或者已经使用了jenkins、travis等工具,如何对接到TSF平台上呢?我们可以参考下面的操作来进行实践。

mall-demo程序包中的deploy.py脚本支持自动上传和部署一个新的应用到现有的集群中,默认选择集群中可用实例中的第一个实例机器部署应用。

1. 在deploy目录下的deploy.py文件中配置secret_id,secret_key,clusterId 和 namespace 等参数

参数

说明

path(必选)

程序包路径

applicationName(必选)

应用名称

appId(必选)

账号appId

groupName(可选)

默认采用和应用名称同名,不可重复

microserviceType(可选)

默认“NATIVE" 云原生应用。否,填写 “N”

applicationType(可选)

默认“V”表示虚拟机部署

pkgVerstion(可选)

上传的程序包版本号,默认当前时间戳,时间戳格式:”YYYYmmddHHMMSS“

2. 在travis.yml中添加脚本任务和任务所需的执行参数。依次是程序包路径,应用名和appId。

代码语言:javascript
复制
- ./scripts/deploy.py mall-demo/target/mall-demo-1.0-SNAPSHOT.jar "test" "1234567890"

3. 提交commit,并且推送到远程分支,自动触发Travis CI 流程。Travis 流程执行成功。在deploy目录下的deploy.py文件中配置secret_id,secret_key,clusterId 和 namespace 等参数。

4. 登录 TSF 控制台,可看到新的应用、部署组和运行实例。

总结

Spring Cloud微服务架构核心是开发端SDK框架和后端支撑服务如注册中心Eureka,通过引入SDK依赖和相关服务治理注解,开发人员能快速实现一个微服务应用,但对于后端支撑服务,特别是要支撑生产环境大规模的微服务接入,将面临巨大挑战;而这恰恰是TSF微服务平台的价值所在,TSF提供了强大的后端支撑服务能力,无论是注册中心、数据运营中心还是服务治理控制中心,都具备工业级别的高可用性。

腾讯微服务平台TSF的接入为云上迁移的用户提供了强大的后端支撑服务能力,实现弹性开发,低运维治理。从上述场景可看出,云原生与微服务框架相得益彰,二者相结合可以发挥最大优势。用户可彻底摆脱对云平台框架的依赖,专注于软件产品的开发和落地。

免费体验馆

消息队列CKafka

分布式、高吞吐量、高可扩展性的消息服务,具备数据压缩、同时支持离线和实时数据处理等优点。

扫码即可免费体验

免费体验路径:云产品体验->基础->消息队列CKafka

消息队列TDMQ

一款基于 Apache 顶级开源项目 Pulsar 自研的金融级分布式消息中间件。其计算与存储分离的架构设计,使得它具备极好的云原生和 Serverless 特性,用户按量使用,无需关心底层资源。

扫码点击“立即使用”,即可免费体验

微服务平台TSF

稳定、高性能的技术中台。一个围绕着应用和微服务的 PaaS 平台,提供应用全生命周期管理、数据化运营、立体化监控和服务治理等功能。TSF 拥抱 Spring Cloud 、Service Mesh 微服务框架,帮助企业客户解决传统集中式架构转型的困难,打造大规模高可用的分布式系统架构,实现业务、产品的快速落地。

扫码点击“免费体验”,即可免费体验

微服务引擎TSE

灵活、轻量级、可插拔的组件化微服务解决方案,主要包括三大部分:注册中心、配置中心和服务治理中心。作为一款组件化的产品,每个部分的能力都可以单独使用。适用于微服务架构中的服务注册发现、分布式配置、分布式协调、服务治理等场景。

扫码点击“立即申请”,即可免费体验

弹性微服务TEM

面向微服务应用的 Serverless PaaS 平台,实现资源 Serverless 化与微服务架构的完美结合,提供一整套开箱即用的微服务解决方案。弹性微服务帮助用户创建和管理云资源,并提供秒级弹性伸缩,用户可按需使用、按量付费,极大程度上帮用户节约运维和资源成本。让用户充分聚焦企业核心业务本身,助力业务成功。

扫码点击“立即申请”,即可免费体验

往期

推荐

《服务器又崩了?深度解析高可用架构的挑战和实践》

《Kratos技术系列|从Kratos设计看Go微服务工程实践》

《Pulsar技术系列 - 深度解读Pulsar Schema》

扫描下方二维码关注本公众号,

了解更多微服务、消息队列的相关信息!

解锁超多鹅厂周边!

戳原文,了解更多腾讯微服务平台相关信息

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2021-07-20,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 腾讯云中间件 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 《服务器又崩了?深度解析高可用架构的挑战和实践》
  • 《Pulsar技术系列 - 深度解读Pulsar Schema》
相关产品与服务
云服务器
云服务器(Cloud Virtual Machine,CVM)提供安全可靠的弹性计算服务。 您可以实时扩展或缩减计算资源,适应变化的业务需求,并只需按实际使用的资源计费。使用 CVM 可以极大降低您的软硬件采购成本,简化 IT 运维工作。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档