# 架构特点

## 一、产品功能

微信云托管以容器服务为核心，提供方便易用的存储体系、微信生态、安全鉴权等服务能力；搭配简单易懂的操作面板，集成资源监控，资源告警，流水线等自动化功能，是一站式的后端云服务。

![产品功能图](https://res8.wxqcloud.qq.com.cn/wxdoc/a0fc76f5-d89c-418e-9f14-2487a9f54ce0.png)

## 二、底层架构

微信云托管使用目前主流的容器平台[Docker](https://www.docker.com/)以及容器编排技术[Kubernetes](https://www.kubernetes.org.cn/k8s)（简称 K8S），来管理你的项目。
使用微信云托管需要掌握对 Docker 的使用，但你无需掌握 K8S 的使用方法。因为微信云托管将 K8S 的运维配置完全接手，你不需要关心 K8S 和容器服务如何配置和相互作用，只需要操作微信云托管提供的简单操作面板，就可以轻松的部署服务，大大降低了容器化技术的使用门槛。

当你使用微信生态下的客户端（小程序、公众号），向部署在微信云托管上的后端服务发送请求时，会自动经过微信接入层（内网），并附带微信校验的权威用户信息。

非微信生态下的客户端（普通 WEB 网页、APP），向部署在微信云托管上的后端服务发送请求时，会经过微信云托管公网网关层（所有用户共用，由微信云托管团队维护），并根据域名转发到对应的用户服务。
微信云托管提供默认公网域名，也可以接入自己备案好的自定义域名。

![产品架构图](https://res8.wxqcloud.qq.com.cn/wxdoc/3e6231c3-ec70-4967-a6bc-a09ef3d0ec44.png)

## 三、优势 & 特点

从代码上传到 CI/CD 流水线部署发布，微信云托管提供全链路、低成本、企业级的云原生解决方案，并有以下优势 & 特点：

| 优势 & 特点   | 说明                                                         |
| ------------- | ------------------------------------------------------------ |
| 天然鉴权      | 容器内免鉴权直接获取用户信息 OpenID，UnionID（[更多](/minigame/dev/wxcloudrun/src/development/weixin/index)） |
| 任意语言/框架 | 可以使用任意语言和框架进行开发                               |
| 常驻运行      | 容器内监听请求，每个实例都常驻运行                           |
| 自动扩缩      | 单实例多并发，并自动根据负载情况增加或减少实例数量           |
| 缩容至 0       | 无流量时实例副本数可支持缩容至 0，做到 0 成本                   |
| 20S 扩容       | 突发场景支持 20s 内快速扩容以支持业务需要                      |
| 平滑迁移      | 无需改造/重构现有业务，容器化后即可从服务器或其他容器平台平滑迁移 |
| 使用简易      | 无需理解容器集群复杂概念，免域名配置，小程序 / Web 端使用 SDK `cloud.callContainer` 一行代码即可调用 |
| 细粒度规格    | 超细粒度资源控制，最小规格 0.25 核 0.5G                      |
| 消息推送      | 配置一个微信云托管服务即可接收所有类型消息                       |
| 指定灰度      | 新版本定向灰度给指定人员进行体验测试                         |
| 流水线        | 拥有 CI/CD 流水线能力，支持多种触发方式                         |

## 四、服务模式对比

### 1. 微信云托管与服务器的对比

相比于服务器资源，微信云托管自身具有弹性扩缩、环境隔离以及监控日志等服务能力。

| 模块     | 服务器       | 微信云托管                   |
| -------- | ------------ | ------------------------ |
| 安全     | 公网暴露接口，可能被 DDoS | 通过微信私有协议走内网，无 DDoS 风险             |
| 鉴权     | 自行鉴权     | 免鉴权                   |
| 环境隔离 | 自建       | 开箱即用                    |
| 版本灰度 | 自建        | 开箱即用                     |
| 负载访问 | 自建或单独购买负载均衡产品         | 自带能力，无需配置                   |
| 弹性扩缩 | 单独购买弹性伸缩产品       | 支持                     |
| 监控告警 | 自建         | 开箱即用            |
| 日志服务 | 自建或单独购买日志产品  | 开箱即用                     |
| 成本     | 预购         | 按实际用量计算，精确到秒 |
| 容灾     |要自建         | 自带三园区部署               |

### 2. 微信云托管与 Kubernetes 的对比

面向服务开发而非面向资源开发，无需过多理解集群概念、云内复杂配置，支持缩容到 0 实现无流量时 0 成本，可私有部署，便于迁移，开发成本低，高并发大调用量时成本较低。

| 模块          | Kubernetes         | 微信云托管                   |
| ------------- | ------------------ | ------------------------ |
| 面向对象      | 资源               | 服务                    |
| 安全          | 公网暴露接口       | 微信私有协议             |
| 鉴权          | 自行鉴权           | 免鉴权                   |
| 环境隔离      | 购买/管理节点      | 支持                     |
| 集群/计算节点 | 自主购买/手动管理  | 不感知                   |
| 版本灰度      | 自建（复杂方式）   | 支持                     |
| 负载访问      | 配置 LB             | 数据流                   |
| 弹性扩缩      | 自建               | 支持                     |
| 缩容到 0       | 自建               | 支持                     |
| 监控告警      | 自建               | 支持                     |
| 日志服务      | 自建/第三方        | 支持                     |
| 成本          | Node 服务器粒度计费 | 按实际用量计算，按秒计算 |

### 3. 微信云托管与云函数的对比

云托管可以看做是云函数的高阶版本，更自由灵活，支持任意语言、任意框架、常驻运行，同时也拥有云函数的微信天然鉴权等优势。

| 模块       | 云函数                                                | 云托管                                                       |
| ---------- | ----------------------------------------------------- | ------------------------------------------------------------ |
| 请求并发   | 单实例单并发，多并发时自动拉起多个实例处理            | 单实例多并发，高负载时自动拉起多实例                         |
| 语言/框架  | 开发语言和框架支持有限                                | **任意语言、任意框架**                                       |
| 常驻运行   | 不支持                                                | **支持**                                                     |
| 日志监控   | 基于函数                                              | **基于服务版本**                                             |
| 版本灰度   | 支持按流量灰度                                        | 支持按流量比例/按 URL 参数/按 OpenID 灰度                                 |
| 弹性扩缩容 | 支持                                                  | 支持                                                         |
| 对外服务   | 小程序、Web、HTTP                                     | 小程序、Web、HTTP                                            |
| 上手难度   | **简单**                                              | 中等                                                         |
| 计费方式   | 按请求量计费、按请求次数和每次调用产生的 GBS          | 按容器运行消耗的 CPU、内存、服务产生的外网出流量、服务构建时长 |
| 天然鉴权   | 免鉴权获取 OpenID 等信息                              | 免鉴权获取 OpenID 等信息                                     |
| 云调用     | 免维护 access_token, session_key，免鉴权调用服务端接口 | 免维护 access_token, session_key，免鉴权调用服务端接口        |
