【云服务】巧用蚂蚁金服技术栈快速搭建自己的业务环境

技术栈介绍

技术栈 2.0 产品提供灵活强大的自定义技术栈能力,在蚂蚁金服金融科技(简称“金融科技”)的公有云上为您提供 SOFA Boot 技术栈,在私有云上为您提供 SOFA4 技术栈。更重要的是,该产品支持任意的自定义技术栈部署及对已有技术栈的灵活扩展,以满足您的定制化需求。

产品优势

  • 提供简洁、灵活、强大的自定义技术栈能力,让您可以部署任意技术栈的应用。
  • 统一环境参数管理,通过参数允许您对发布做更加灵活的控制,同时也支持包含各种特殊字符的参数。
  • 应用一处构建处处部署。
  • 降低发布时对网络的依赖,提升发布成功率。
  • 提供缓存管理,减少重复发布相同技术栈应用所需的时间。
  • SOFA Boot 系统技术栈支持 CentOS 6.5 与 CentOS 7.2 多操作系统。
  • 跨租户分享,共筑行业生态。
  • 公有云上提供限额能力。
  • 支持技术栈及技术栈包克隆。

产品组成

技术栈 2.0 产品主要由三部分组成:自定义技术栈包、控制台系统、xDeploy 2.0 框架。自定义的技术栈需要定义生命周期中的五个步骤:

  • 环境初始化
  • 安装依赖
  • 部署
  • 检查服务
  • 关闭服务

这五个步骤会被 xDeploy 2.0 框架驱动,从而组成不同的操作,比如:部署操作、回滚操作、上线操作等。通过在控制台中上传自定义技术栈包,您可以在发布部署过程中使用这些操作,而无需关心 xDeploy 2.0 的工作细节。

应用场景

使用系统技术栈 SOFA Boot(公有云)或者 SOFA4(私有云)开发的应用可以在金融科技平台上进行灵活的发布部署。

  • 如果系统技术栈的依赖的版本不符合需求,您可以先下载该系统技术栈包,更换包里面的依赖,然后自定义技术栈并上传新的技术栈包,这样就可以更新系统技术栈的依赖,从而满足需求。

  • 如果系统技术栈不能满足需求,您可以自己制作技术栈包,通过新建自定义技术栈生成新的技术栈。同时还提供了在不同租户之间分享技术栈的功能,让更多的技术栈为您所用。

术语 说明
技术栈 应用程序所依赖的框架,如:Java、Python、PHP 等。
技术栈版本 技术栈的每一次发布都是一个新的版本,一个应用程序依赖某个技术栈的版本。
技术栈包 技术栈版本打包之后的文件被称为技术栈包。
应用发布包 为了进行发布,将应用代码和所关联的资源等进行编译打包后所产生的文件包。
技术栈克隆 基于一个已有的技术栈版本,创建一个完全相同的技术栈版本。
技术栈包克隆 将一个技术栈包从原有的技术栈版本复制到新的技术栈版本。
技术栈版本使用量 正在使用该技术栈版本的应用服务实例的数量。
xDeploy 2.0 驱动技术栈生命周期的框架。
技术栈包生命周期 包括环境初始化、安装依赖、部署、检查服务状态、停止服务这五个阶段。
AntX SOFA 技术栈应用的配置文件。

本文以 Spring Boot 技术栈为例,介绍如何创建并发布一个基于 Spring Boot 的应用。整体过程分为以下 5 步:

  1. 制作 Spring Boot 技术栈包
  2. 创建技术栈版本
  3. 创建应用并关联技术栈
  4. 创建应用服务实例并关联技术栈版本
  5. 上传应用发布包并进行发布部署

通过这篇文档,您可以熟悉自定义技术栈的流程,创建并使用任意一种技术栈。

1、制作 Spring Boot 技术栈包

通用目录结构

任意一个技术栈包的根目录名必须名是自定义的技术栈的名称,根目录下一般包含以下一级子目录:

  • conf:存放技术栈配置文件,可以为空,也可以没有。
  • lifecycle:存放生命周期代码。目前有如下命名固定的代码文件, 没有后缀(请勿在 lifecycle 中存放任何其它语义的以 ac_ 开头的文件,ac_ 是金融科技的专属前缀):
    • ac_setup
    • ac_init_env
    • ac_deploy
    • ac_check_service
    • ac_shutdown
  • resources:存放技术栈的依赖、生命周期代码的依赖等。如果您的技术栈足够简单,无需任何依赖,那么 resources 也可以为空。

Spring Boot 技术栈目录结构

注意:Spring Boot 技术栈没有 conf 目录。

  • lifecycle:包含以下生命周期脚本,均为 Python 代码,理论上您可以使用任何语言来编写这些生命周期脚本。
    • ac_setup:建议提供,该脚本包含 Spring Boot 所需要的 JDK 的安装步骤, 主要代码逻辑为读取 resources 目录下的 JDK 文件,然后解压、安装、配置环境变量。
    • ac_init_env:可选,该脚本会紧邻 ac_deploy 被调用前执行,一般会执行一些部署前的处理任务,目前仅有系统提供的 SOFA 技术栈会用到,自定义技术栈(如本例的 Spring Boot)则不会用到。
    • ac_deploy:建议提供,该脚本包含 Spring Boot 应用程序包的启动过程,核心启动命令为:
      java -jar spring-boot.jar
    • ac_check_service:建议提供,该脚本利用 curl 命令检测 Spring Boot 应用是否启动。
    • ac_shutdown:建议提供,该脚本可直接停止 Spring Boot 应用。
  • resources:包含 JDK 1.8 的压缩包以供 Spring Boot 使用。

生成 Spring Boot 技术栈包

将所有这些脚本和依赖压缩到 spring-boot.tgz 文件中即可生成 Spring Boot 技术栈包。所有代码可以参见 Spring Boot 技术栈包代码(提交工单 联系技术支持团队提供该代码)。

2、创建技术栈版本

  1. 进入控制台并选择 产品与服务 > 应用管理 > 技术栈管理 进入默认的 技术栈 列表页。
  2. 点击页面左上方的 创建 进入 创建技术栈 页面。其中:
    • 基本信息 部分:
      • 技术栈:选择 Spring Boot。
      • 技术栈版本:填写 1.0.0-SpringBoot-mytest。
      • 支持操作系统:选择 CentOS 6.5 64 Bit。
    • 技术栈包 部分:在所在地域选择上传压缩好的 Spring Boot 技术栈包 spring-boot.tgz 文件。
  3. 点击 发布 等待文件上传完毕并发布成功。

3、创建应用并关联技术栈

  1. 进入控制台并选择 产品与服务 > 应用管理 > 应用列表 进入默认的应用列表页。
  2. 点击页面左上方的 创建应用 进入创建应用页面,其中:
    • 应用名:填写 SpringBootDemo。
    • 技术栈:选择 技术栈2.0架构,然后选择 Spring Boot 技术栈。
  3. 点击 确定,一个关联 Spring Boot 技术栈的应用就创建完毕。

4、创建应用服务实例并关联技术栈版本

  1. 进入控制台并选择 产品与服务 > 发布部署服务 > 应用服务 > 服务实例列表 进入应用服务实例列表页。
  2. 点击页面左上方的 创建服务实例 进入创建应用服务实例页面,其中:
    • 服务实例名称:填写 SpringBootDemoInstance。
    • 应用:选择刚才创建的 SpringBootDemo。
    • 技术栈版本:选择之前创建好的技术栈版本 1.0.0-SpringBoot-mytest。
  3. 点击 确定,一个关联 1.0.0-SpringBoot-mytest 的应用服务实例就创建完毕。

5、上传应用发布包并进行发布部署

  1. 制作一个 Spring Boot 的应用发布包,可以参考 How to Build a Spring Boot Application,也可以直接使用金融科技平台提供的 Spring Boot 应用发布包(提交工单 联系技术支持团队提供该应用发布包)。
  2. 选择 产品与服务 > 发布部署服务 > 应用服务 > 发布包管理 进入默认的发布包管理列表页面。
  3. 在创建的应用 SpringBootDemo 右侧,点击 管理 进入应用发布包管理页面。
  4. 点击 +上传发布包 上传第 1 步中制作出来的应用发布包。
  5. 创建云服务器,绑定云服务器到刚创建的应用。
  6. 回到应用发布包管理页面,在刚刚上传成功的应用发布包右侧,点击 发布 按钮,弹出 发布部署 窗口,在弹窗中点击 立即发布 进入发布部署流程,即可以看到一个 Spring Boot 的应用进入发布部署流程了。

视频教程

本视频教程详细全面地讲解了如何使用金融科技平台部署您的自定义技术栈应用,涵盖编写代码、制作技术栈、购买资源、发布部署等金融科技 DevOps 产品族常用功能。

通过观看本视频,作为研发工程师或运维工程师,您将学会如何使用金融科技平台部署您的任意技术栈的应用。

https://cloud.video.taobao.com/play/u/3390345763/p/1/e/6/t/1/50076766111.mp4

其他进阶

本位介绍如何通过控制台对当前已有的技术栈进行编辑、克隆、废弃或删除操作,搜索技术栈,阐述了 xDeploy2.0 与技术栈包的运行原理。

编辑技术栈

若要对技术栈的基本信息进行编辑,可进行如下操作:

  1. 选择 产品与服务 > 应用管理 > 技术栈管理 进入技术栈列表页。
  2. 点击需要编辑的技术栈右侧的 编辑 按钮,进入技术栈编辑页面,编辑完后,点击 确定 或 发布 即可对所做的修改进行保存或发布。

克隆技术栈

若要对技术栈进行克隆,可进行如下操作:

  1. 选择 产品与服务 > 应用管理 > 技术栈管理 进入技术栈列表页。
  2. 点击需要编辑的技术栈右侧的 克隆 按钮,进入克隆之后的技术栈的编辑页面,编辑完信息后,点击 确定 或 发布 即可对所做的修改进行保存或发布。

废弃技术栈

若要废弃技术栈,可进行如下操作:

  1. 选择 产品与服务 > 应用管理 > 技术栈管理 进入技术栈列表页。
  2. 点击需要编辑的技术栈右侧的 废弃 按钮,填写废弃原因,然后点击 确认 即可废弃该技术栈。也可以进行批量操作。

删除技术栈

若要删除一个技术栈,需保证该技术栈没有被任何应用服务实例引用。具体操作如下:

  1. 选择 产品与服务 > 应用管理 > 技术栈管理 进入技术栈列表页。
  2. 点击需要删除的技术栈右侧的 删除 按钮。也可以进行批量操作。

搜索技术栈

在技术栈列表页,可以使用各种搜索条件对技术栈进行搜索,搜索条件包括:技术栈版本名称、状态、发布时间、支持地域、操作系统、技术栈名称、技术栈来源。

xDeploy2.0 与技术栈包的运行原理

当您使用技术栈 2.0 进行一个发布操作时,您的 ECS 在 StarAgent 的驱动下首先会去下载 download_env_v2.py 这个 Python 脚本,然后运行该脚本。download_env_v2.py 会根据接收到的参数从 OSS 上下载技术栈包和 xDeploy2.0 的压缩包,并安装 xDeploy2.0。如果您在进行发布部署时勾选了 从缓存安装,那么 download_env_v2.py 的代码就会从 ECS 的特定缓存目录中去寻找缓存,如果命中则直接从缓存解压技术栈,而无需下载。以下是技术栈的缓存路径:

/home/admin/.buildpack/cache/

xDeploy2.0 里包含了驱动技术栈生命周期的代码,例如: batch_download.pycheckapp_v2.pydeploy_v2.pyinit_env_v2.pyreboot_v2.pyrollback_v2.pysoftware_setup_v2.py 等,这些代码会去驱动技术栈包 lifecycle 目录里的 ac_check_serviceac_deployac_init_envac_setupac_shutdown 这些应用生命周期基本步骤的代码。

xDeploy2.0 里的这些生命周期驱动代码是采用 Python 写的,这些代码通过以下这行核心代码对任意技术栈的 lifecycle 下的基本步骤代码进行调用:

os.system("%s %s"%(step_file_path,sys_argvs))

其中 step_file_path 是基本步骤代码的路径,sys_argvs 是上层业务系统传递的参数。 所以 lifecycle 下的生命周期基本步骤代码可以用 Python、Shell、Ruby、Perl 等等 ECS 上默认安装的语言编写。建议您确认一下 ECS 上是否装有您使用的语言环境。

接收的参数

您的代码会接收到很多命令行参数,例如:

  • ac.env 开头的参数,包括以下信息:
名称 作用
region_id 区域的 ID
tenant_name 租户名称
datecenter_name 可用区的唯一标识
appname 应用名
workspace_id 工作空间的 ID
paas_id 云服务器的 ID
workspace_name 工作空间的唯一标识
customer_id 企业的 ID
iaas_id 云服务器的 IaaS ID
  • bp. 开头的参数,这类参数是从控制台界面上输入的参数。包括技术栈的环境参数和应用服务实例详情页输入的环境参数。应用服务实例的环境参数优先级高于技术栈的环境参数。

  • 其它参数则是上游业务系统传递下来的,比如 version 参数,表示当前发布包的版本,同时也是这个发布包的路径,如果 version 是 V20171101,那么下载的发布包就会放到 /home/admin/release/V20171101/ 目录下。

注意事项

  • 避免您的技术栈生命周期脚本产生过多日志(控制台日志,如 Shell 脚本的 echo 命令,Python 脚本的print 调用等),否则会被截断,给您排查问题带来不便。建议将过多的日志,尤其是安装软件依赖产生的日志全部重定向到日志文件中,而不是输出到控制台中。

  • 若您的技术栈脚本是使用 Python 编写,注意 Python 的 print 调用会缓存输出内容,可能会导致您最终在金融科技发布部署产品中看到的日志条目有延迟或乱序现象。您可以尝试在 .py 文件头部加入#!/usr/bin/python -u 来避免该问题。

常见问题

如何在发布部署时替换应用发布包的配置参数

以 Spring Boot 应用为例,参见 快速开始,在 application.properties 文件中添加键值对:bp.username=antcloud,然后在 Java 代码中读取键值对:

 
 

@RequestMapping("/SpringBoot")

 

@RestController

 

public class WidgetController {

 

@Value("${bp.username}")

 

private String username;

   
 

@RequestMapping(value = "/hello", method = RequestMethod.GET, produces = {MediaType.APPLICATION_JSON_VALUE})

 

public String helloSpringBoot() {

 

return "Hello " + username + "!";

 

}

 

}

若要在发布部署时替换掉 username 的值,可执行以下操作:

  1. 选择 产品与服务 > 发布部署服务 > 应用服务 > 服务实例列表 进入服务实例管理页面, 选择使用了 Spring Boot 的应用服务实例,点击该服务实例名或实例右侧的 详情 进入实例详情页。
  2. 在页面底部的资源信息模块,切换到 环境参数 标签,添加一个新的键值对(键为 username;值为 world),并保存。
  3. 然后进行 发布部署 操作,应用发布成功之后,便可以在页面上看到新的值:“Hello world”。

如何在云上进行调试

我们经常需要对自定义的技术栈包进行修改、上传、发布部署并调试,同时观察结果。为简化该流程,技术栈 2.0 产品提供了 调试模式。您可以在创建技术栈时勾选 调试模式,调试模式意味着您在发布技术栈后,仍可以对该技术栈进行任意修改,从而方便您在云上对技术栈进行集成测试,但调试模式的技术栈无法共享给任何租户。发布之后取消调试模式则无法再次开启调试模式,取消调试模式之后,技术栈可重新分享给其他租户。

如何修改系统提供的 SOFA Boot 技术栈依赖

系统提供的 SOFA Boot 技术栈依赖如下:

  • 如果操作系统为 CentOS 6.5,则对应的是 Tengine 2.0.0 版本,cronolog 1.7.0 版本或 JDK 1.7.1_71 版本。
  • 如果操作系统为 CentOS 7.2,则对应的是 Tengine 2.1.14 版本,cronolog 1.7.0 版本或 JDK 1.7.0_80 版本。

若要修改这些依赖的版本,可执行以下操作:

  1. 选择 产品与服务 > 应用管理 > 技术栈管理 进入技术栈列表页,找到系统提供的 SOFA Boot 技术栈,点击 详情 进入技术栈详情页面。
  2. 下载技术栈包并解压,替换掉 resources/centos6.5 与 resources/centos7.2 目录中的相关依赖软件包,如:将 centos 7.2 的 JDK 1.7.0_80.tgz 删掉,加上您需要的 JDK 版本的 .tgz 包,注意保持后缀为 tgz 并且文件名称含有 JDK 字样。
  3. 重新压缩技术栈包,创建新的技术栈并使用该技术栈包即可。

如何解决技术栈相关日志不在发布部署产品中显示的问题

  • 避免您的技术栈生命周期脚本产生过多日志(控制台日志,如 Shell 脚本的 echo 命令,Python 脚本的print 调用等),否则会被截断,给您排查问题带来不便。建议将过多的日志,尤其是安装软件依赖产生的日志全部重定向到日志文件中,而不是输出到控制台中。

  • 若您的技术栈脚本是使用 Python 编写,注意 Python 的 print 调用会缓存输出内容,可能会导致您最终在金融科技发布部署产品中看到的日志条目有延迟或乱序现象。您可以尝试在 .py 文件头部加入#!/usr/bin/python -u 来避免该问题。

ad:上云就上阿里云 享数字化转型市场占有率超过第2-5名总和,云产品通用红包¥1888,可叠加官网常规优惠使用点击领取

猜你喜欢

转载自blog.csdn.net/xia296/article/details/89476997
今日推荐