# 概念解释

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

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

## 环境

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

环境内资源之间可以通过内网调用，不同环境之间可以通过配置相同的 VPC（或内网互联）从而实现内网联通，如果是跨账号，则需要配置 VPC 间的对等连接或者云联网，可以参照[此文档](https://cloud.tencent.com/document/product/215/30101)实施，或者通过公网调用。

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

在实际开发中，**建议每一个正式环境都搭配一个测试环境**，所有功能先在测试环境测试完毕后再上到正式环境。
> 账号首次使用时，会展示部署过程，期间会创建一个环境，你可以根据自身业务需求再创建一个环境用于测试或正式生产。

想要了解更多，请前往[环境介绍文档](/minigame/dev/wxcloudrun/src/guide/env/index)

## VPC

**2022 年 7 月后创建的环境没有独立 VPC 的概念**

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

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

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

想要了解更多，请前往[腾讯云文档](https://cloud.tencent.com/product/vpc)

## 服务

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

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

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

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

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

想要了解更多，请前往[服务介绍](/minigame/dev/wxcloudrun/src/guide/service/index)

## 版本

版本是由「开发者提供镜像启动的容器实例」和相关配置组成的集合体，切实拥有运行的资源，可以直接发布到线上接入流量。

版本的新建需要镜像（即使是代码，也要先完成构建镜像后才能建立版本）。

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

想要了解更多，请前往[版本介绍](/minigame/dev/wxcloudrun/src/guide/service/version)

## Docker 镜像

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

想了解更多，请前往[Docker 官网](https://www.docker.com/)

## 发布单

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

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

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

想要了解更多，请前往[部署发布](/minigame/dev/wxcloudrun/src/guide/service/online)

## 流水线

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

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

想了解更多，请前往[流水线介绍](/minigame/dev/wxcloudrun/src/guide/service/pipeline)

## Dockerfile

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

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

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

我们会提供不同语言的 Dockerfile[示例](/minigame/dev/wxcloudrun/src/quickstart/index)，业务可自行根据需求进行更改，放置到代码的根目录下。

想了解更多，请前往[Docker 官网](https://docs.docker.com/engine/reference/builder/)

## 端口监听

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

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

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

## 构建目录

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

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

## 容器规格

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

## 实例数量

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

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

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

## 扩缩容条件

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

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

## 日志采集路径

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

## 环境变量

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

## 微信令牌

云托管服务使用微信开放接口时所需的 Access Token。[详细微信令牌介绍](/minigame/dev/wxcloudrun/src/guide/weixin/token)

## webshell

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