# 概念解释

使用微信云托管的过程中,如果你对一些专业的名词的背后含义或原理有所困惑,可以参考这里,我们整理出常见的名词,并用尽可能通俗易懂的语句来加以解释。

如果你还是不太明晰,我们在大部分解释最后都推荐了延展阅读,你可以继续精进阅读来补充自己的认知。

# 环境

微信云托管的最大单位,包含一整套资源,包括容器、数据库等资源,也就是说一个环境拥有的能力可以独立提供完整的服务,不需要依赖其他的资源,各个环境相互独立、资源隔离。

环境内资源之间可以通过内网调用,不同环境之间可以通过配置相同的 VPC 从而实现内网联通,如果是跨账号,则需要配置 VPC 间的对等连接或者云联网,可以参照此文档实施,或者通过公网调用。

不同环境的计费和资源包结算也是完全独立的。

在实际开发中,建议每一个正式环境都搭配一个测试环境,所有功能先在测试环境测试完毕后再上到正式环境。

账号首次使用时,会展示部署过程,期间会创建一个环境,你可以根据自身业务需求再创建一个环境用于测试或正式生产。

想要了解更多,请前往环境介绍文档

# VPC

每个微信云托管环境都对应着一个腾讯云上的VPC,以保证同一个环境内的资源之间可以通过内网访问,而不同环境的资源不会相互影响,更加安全高效。

只有需要额外在腾讯云上购买其他云产品配合微信云托管使用时,才需要关注具体的 VPC 信息。微信云托管与同一个 VPC 下的其他腾讯云产品都可以内网互通,在腾讯云控制台开通/购买其他云产品时请确保和对应的微信云托管环境的 VPC 信息一致。

微信云托管当前仅支持腾讯云上海地域VPC。

想要了解更多,请前往腾讯云文档

# 服务

服务是提供业务功能的主体,从现实感知角度上,一个服务对应一个域名,也就是调用方可以通过固定的域名访问到这个服务,不受服务更新迭代的影响。

服务的每次更新,都会产生一个新的版本,因此服务下可能包含多个版本。但服务在线上运行时只能有一个版本(一般是最新的版本)接入流量,响应请求。

特殊情况:在服务升级的过程中,如果需要灰度测试,可以同时有新旧两个版本都接入流量,这就是金丝雀部署。服务升级结束后,必须将所有流量都接入到新版本,或者全部回退到旧版本。

你需要根据业务需求,自行划分服务范畴,可以是一个功能(微服务的一个模块),也可以是几个功能的复杂组合(单一服务)。业务划分为不同的服务之后,不同服务之间就可以各自独立迭代,减少互相耦合影响;也可以各自独立扩缩容,更加精细地控制成本。

服务创建时,系统会分配一个公网域名。服务不支持通过 ip 访问。

想要了解更多,请前往服务介绍

# 版本

版本是由「开发者提供镜像启动的容器实例」和相关配置组成的集合体,切实拥有运行的资源,可以直接发布到线上接入流量。 版本的新建需要镜像(即使是代码,也要先完成构建镜像后才能建立版本)。

一个服务下有多个版本,支持最多2个版本有流量(服务灰度过程中),超过2个以上的其他版本可以存在,但没有流量接入。

想要了解更多,请前往版本介绍

# Docker镜像

Docker镜像是一种封装格式,其中包含业务代码、所需的全部依赖项、要使用的操作系统以及运行服务所需的其他任何内容。因此,镜像一旦构建完成,以上所有信息就都被固化,云托管不会感知镜像具体内容,容器实例运行过程中镜像内容也不会变化。

想了解更多,请前往Docker官网

# 发布单

版本每次发布都会生成1张发布单,发布结束/取消后结束发布流程,在发布过程中调整发布版本的流量比例进行上线对外服务。

发布单包含发布过程中的所有操作流水,一个服务同一时间点只能存在1张发布单,如需发布其他版本需先取消发布或者结单。

如果部署发布中存在发布单时,全量发布策略的流水线任务不可运行/运行失败,需要结束当前部署发布中的发布单。

想要了解更多,请前往部署发布

# 流水线

容器化部署与传统服务器部署的其中一大区别在于:每次修改代码都必须重新构建镜像、新建版本并发布,不能直接登录容器实例进行代码的修改。 流水线就是提升这套流程效率的工具。微信云托管集成提供的——自动化研发交付流水线,提供灵活易用的持续集成、持续验证、 持续发布功能,支持可视化配置。代码

支持手动触发、定时触发、推送触发、合并触发等多种触发方式。

想了解更多,请前往流水线介绍

# 配置文件

开发者在配置流水线时,除了项目代码,还需要与之匹配的一系列配置,例如规定服务以多大规格存在实例,实例的最多最少数量,监听端口,扩缩容条件等。 这些都是在手动新建版本时,在控制台里需要填写配置的,但流水线自动化运行过程中,不可能中断到控制台来填写配置。 因此需要在代码仓库中添加一个配置文件,用来取代控制台填写。

container.config.json 文件,支持带有注释的json(即 jsonc,可以用 jsonc-parser - npm (npmjs.com) 进行解析)。

使用流水线时必须要用到,否则流水线新建不成功。

但在版本列表中手动新建版本时,会优先使用在控制台上新建版本页面中填写的配置,此时代码仓库中的配置文件内容将不会生效。

默认配置文件模板内容如下,业务可自行根据需求进行更改,放置到代码的根目录下。

{
  // Listening port
  "containerPort": 80,
  // Dockerfile Route
  "dockerfilePath": "Dockerfile",
  // Build directory
  "buildDir": "",
  // Minimum number of instances
  "minNum": 0,
  // Maximum number of instances
  "maxNum": 50,
  // cpu Nuclear number
  "cpu": 0.25,
  // Memory size, in G
  "mem": 0.5,
  // Type of Expansion and Reduction Capacity
  "policyType": "cpu",
  // Expansion Volume Index Threshold
  "policyThreshold": 60,
  // Environment variable
  "envParams": {},
  // Log collection path
  "customLogs": "stdout",
  // Start-Up Detection Delay
  "initialDelaySeconds": 2
}

# Dockerfile

Dockerfile 是 Docker 打包镜像所需要的一种配置文件,Docker会根据 Dockerfile中的命令来对项目代码进行打包。

你可以在网络上找到你项目所属语言和框架的 Dockerfile 文件指引,或者参考官方模板中配套的Dockerfile。

一般你的项目在成型之后,DockerFile不会经常变动,除非你需要安装一些软件时才会增加修改。

我们会提供不同语言的dockerfile示例,业务可自行根据需求进行更改,放置到代码的根目录下。

想了解更多,请前往Docker官网

# 端口监听

你的项目在容器实例运行时,一定要暴露一个端口。在本机开发时,localhost:8080 中的 8080 就是端口号。

在微信云托管中,由于这个端口号是你业务项目中自己设定的,系统无法自动获取,必须依赖你通过新建版本时控制台填写/流水线 container.config.json 配置文件中设置,来告知云托管我的服务在哪个端口,这样才能够正确的连接内外。

微信云托管默认为 80 端口,如果没有找到则部署失败,监听端口必须为1~61000之间的整数且不能为9100。

# 构建目录

在云托管构建镜像时,默认使用根目录构建。如果需要构建的文件在子文件夹内部,可以指定相关目录。

比如你仓库中有 docsrc 两个文件夹,但 dockerfile 和构建代码在 src 中,就可以在版本创建时指定,或者在配置文件中指定以 src 为目录构建。

# 容器规格

版本产生的容器实例自身指标,包含 CPU 和内存。容器规格也是计费的依据,无论容器实际使用率多少,都将按照所声明的容器规格计费。 适当增加容器规格,可以提高业务的启动速度和运行速度。 微信云托管的弹性伸缩,只会产生容器实例数量的变化,单个容器的规格不会改变。

目前微信云托管下容器实例支持的规格如下:

CPU 核心数量 支持的内存
0.25 0.5GB 、 1GB 、 2GB
0.5 1GB 、 2GB 、 3GB 、 4GB
1 1 - 8 GB(整数)
2 4 - 16 GB(整数)
4 8 - 32 GB (整数)
8 16 - 32 GB (整数)
12 24 - 48 GB (整数)
16 32 - 64 GB (整数)

# 实例数量

指当前服务版本在自动扩缩容时可达到的最大实例数及最小实例数。最小值下限为 0,最大值上限为 50。默认最小值为 0,最大值为 50。

如服务想要低成本模式,可设置实例数最小值为0,当版本在30min内无访问时,云托管自动将该版本缩容至0以达到服务无流量0成本,但再次收到请求时会经历冷启动。

如服务想要高可用模式,可设置实例数最小值为非0,则无论是否有访问,都将保持最小数量的容器实例,实现服务常驻,但也会持续产生费用。

# 扩缩容条件

当达到你设定的扩缩容条件时,云托管会自动会创建/删除一个实例,冷却 15 秒后,检测是否再次达到条件,如果满足条件则继续扩缩容,如此反复直至实例数量达到副本个数的最小值/最大值,或不再满足扩缩容条件时停止自动扩缩容。

目前支持 CPU内存 使用率作为扩缩容条件,即当前实例 CPU/内存 使用率超过设定值后,若实例数小于最大副本个数,则创建出一个新的实例。默认值为 60%。

# 日志采集路径

可设置目录或文件,支持设置多个路径。采集到的日志可以在控制台日志页面中查看。默认路径为 stdout。

# 环境变量

因为基于容器部署,每次代码变更都需要重新构建镜像、新建版本。因此建议将需要动态引用的值,以环境变量的方式抽出来进行管理。 用户所需的环境变量,直接传入容器中。以 key value 的形式可配置多个。容器内使用可以参考这里

# 微信令牌

云托管服务使用微信开放接口时所需的access-token。详细微信令牌介绍

# webshell

容器的 web 终端,可通过 webshell 登录到容器中,默认支持sh。 webshell仅能用于查看容器内信息,直接通过 webshell 对容器内容进行写操作是不能持久的,因为容器会自动恢复到镜像所固化的状态,即版本部署成功时的状态。