CDN Q&A
CDN Q&A
1. 什么是 UOS CDN?和传统的 CDN 服务相比 UOS CDN 有什么区别和优势?
UOS CDN 是 Unity 官方推出的一个基于 CDN 的资源管理系统。在实际使用过程中,UOS CDN 会为 Release 创建 CDN 地址(参见 问题.13),因此在完成创建和配置之后,即可兼容其他传统的 CDN 服务的后续操作和使用。
但是和传统的 CDN 服务相比,UOS CDN 还具备强大完善的资源和版本管理功能:
- UOS CDN 自带资源版本功能,资源文件上传时只上传内容发生过变化的文件(参见 概念篇 中的Bucket/Entry/Release/Badge等相关概念)
- UOS CDN 支持 下载序列分析 和 AB包冗余检测
- UOS CDN 可以便捷地对接常用的开源管理包:xasset,Addressables,YooAsset,xLua,HybridCLR,ILRuntime。
此外,UOS CDN 可以在 UOS 平台上一站式集成其他 UOS 应用和功能:可以搭配 UOS RemoteConfig 实现远程版本管理,灰度发布,A/B testing等功能(参见 动态加载示例)。
2. UOS CDN 收费吗?
UOS CDN 目前对所有用户免费开放试用,试用期间享受20GB免费额度。 试用流量用尽后系统将自动转为正式用户并开启计费。如有需要也可提前 联系我们 提前转为正式用户,以便获得更稳定更优质的服务支持。
产品正式上线后,您需要支付的费用为: 非阶梯计价,无门槛 0.15元/GB; 如想获取低至 0.0?元/GB 的价格,欢迎 联系我们。
3. UOS CDN 支持海外版本吗?
如果你需要在海外使用 UOS CDN 的服务 请 联系我们 获得更多关于海外CDN的支持。
4. 我的游戏有多平台,应该如何管理不同平台的资源包?
不同平台的资源可以使用不同的桶(Bucket)进行管理,创建不同的存储桶来分别管理不同平台的资源,常见的桶名:王者荣耀--Android, 王者荣耀--iOS, 王者荣耀-Windows 。
5. 我想在已经发版的游戏中固定我的资源包,应该如何操作?
创建一个新的 Release ,在 Release 详情页面点击 「根据 Release ID」 获取当前 Release 唯一 URL前缀。在游戏代码中使用 URL前缀 + 资源名称 获取对应资源。
锁定版本号可以使已经发布的游戏不会因为后续资源更新而导致老版本游戏资源发生变更。
6. 我想让我的游戏永远指向我最新发布的资源,应该如何操作?
请使用 latest 徽章进行资源管理。 创建一个新的 Release ,在最新的 Release 详情页面点击 「根据 Badge」 获取带有 latest 徽章的URL前缀。在游戏代码中使用 URL前缀 + 资源名称 获取对应资源。 使用 latest 徽章可以让所有已经发布的老版本使用最新版本的资源(注意latest徽章始终指向最新版本资源,不能自主切换),并且不需要在每次发布新版本时调整资源前缀的代码。
7. 我想要灵活的版本控制,应该如何操作?
推荐使用徽章(Badge)进行资源版本管理,灵活易用的版本控制,Badge 是一个可以在不同 Release 之间进行不停动态切换的标签。常用 Badge 名称如:Prod、 Stage、 Test 等。
为已经创建的好的 Release 分配一个 Badge ,在 Release 详情页面点击 「根据 Badge」 获取当前 Badge 唯一 URL前缀, URL中 Badge 可以随意换成你已经创建的 Badge 。在游戏代码中使用 URL前缀 + 资源名称 可以获取到对应资源。
Badge 的常见用法:
- 在测试阶段可以不断的更新资源并创建新的 Release ,将 Test 徽章分配到需要测试的 Release 上。测试包就可以根据这个 Badge 获取到对应 Release 下的资源。
- 在已发版的游戏中可以使用带 Prod 徽章的URL进行打包,上线新版本时,只需要将 Prod 徽章移到已经完成测试的 Release 上即可。
- 如果发现新上线的资源有问题,需要版本回滚,此时只需将 Prod 徽章移到之前没有问题的 Release 上即可。
- 使用 Badge ,不需要在每次发布新版本时调整资源前缀的代码。并且可以灵活方便地控制资源版本的升级和回滚。
8. 我有自己的资源版本管理系统,不想使用 UOS CDN 的版本管理系统可以吗?
可以。可以只使用 UOS CDN 的存储功能。
使用上传工具(CLI, Package)将内容上传到 UOS CDN。 并配置下载内容的URL如下,可直接获取桶内资源。
https://a.unity.cn/client_api/v1/buckets/{bucketId}/entry_by_path/content/?path=文件名
例如:我已经使用xasset进行打包了,应该如何搭配 UOS CDN? 参考 xasset 快捷操作。
9. 每次使用CLI同步文件夹资源的时候会重复上传吗?
不会,CLI会分析需要上传文件夹内文件资源并与远端资源进行对比,每次仅上传有更改的文件。不会重复上传资源。
10. UOS CDN 缓存时长
- 如果使用 Badge 标签的话,在 Assign 新的 Badge 之后系统存在1分钟的缓存。
- 如果直接使用桶内资源(不通过 Release / Badge),上传新的资源后系统会有5分钟的缓存。
- 如果你打了 Release,通过 ReleaseId 访问,无缓存,实时生效。
- CDN 加速: UOS CDN 已默认开启了CDN加速,无需手动配置。
11. CDN的资源下载链接,有哪几种格式?
UOS CDN 支持 根据 Release ID 或者 根据 Badge 两种方式来获取托管的资源,在获取具体的 Entry 资源时可以 参数模式 或者 路径模式 来指定具体的文件路径:
依据 | 模式类型 | 链接 |
|---|---|---|
| 根据 Release ID | 路径模式 | https://a.unity.cn/client_api/v1/buckets/{bucketId}/releases/{releaseId}/content/{filePath} |
| 根据 Release ID | 参数模式 | https://a.unity.cn/client_api/v1/buckets/{bucketId}/releases/{releaseId}/entry_by_path/content/?path={filePath} |
| 根据 Badge | 路径模式 | https://a.unity.cn/client_api/v1/buckets/{bucketId}/release_by_badge/{badgeName}/content/{filePath} |
| 根据 Badge | 参数模式 | https://a.unity.cn/client_api/v1/buckets/{bucketId}/release_by_badge/{badgeName}/entry_by_path/content/?path={filePath} |
由于unity引擎以及小游戏平台在缓存下载文件,计算缓存ID时会把URL里?之后的部分丢弃,因此建议使用不带?的格式访问UOS的资源。
12. 程序无法处理跳转,如何直接获取 CDN 的资源地址?
可以使用 CDN Release 资源中的 CDN映射 来直接获取 CDN地址。每次创建 Release 的时候 UOS 已经生成一份资源名到 CDN 下载地址的映射关系文件,方便代码里无法处理307跳转的客户直接下载资源。(映射文件可以在 Bucket 的 RELEASES 页面,点击具体 Release,在 Release 详情页面的“CDN映射”处查看)
映射文件中的 "_uos_cdn_endpoint_" 字段是CDN路径前缀,其他字段是原始资源名到 CDN资源名 的映射关系。
13. 如何使用传输压缩?
根据需求传入对应的 header 即可,Http1/Http2/Http3 都支持传入 Accept-Encoding: [压缩模式] 的 header 来指定压缩,目前支持 gzip 和 br 两种。
14. 小程序/小游戏真机无法正常使用?
问题描述:服务在Unity编辑器,小程序/小游戏开发工具中均可正常使用,但真机环境下小程序无法正常访问服务器。
解决方案:请添加下列域名至平台白名单:
https://a.unity.cnhttps://a.unity3dcloud.cnhttps://a2.unity3dcloud.cnhttps://a3.unity3dcloud.cn
15. CDN遇到下载慢时如何排查?
向我们提供如下信息:
- 提供资源的完整URL
- 访问 DNS检测工具 获取客户端IP地址
- 打开浏览器,在开发者模式下访问资源,会产生两个请求,在后者的Headers存在 X-Ws-Request-Id, 截取一张包含此信息的完整图片

16. CDN下载时如何保存文件名?
UOS CDN 下载资源时默认使用md5做为资源的下载文件名,如需下载时指定文件名,可以在原有资源下载路经中增加查询参数 filename={你需要下载的文件名}
使用示例:
- 路径模式:
https://a.unity.cn/client_api/v1/buckets/[bucketId]/content/file_name.txt?filename=file_name.txt
- 参数模式:
https://a.unity.cn/client_api/v1/buckets/[bucketId]/entry_by_path/content/?path=file_name.txt&filename=file_name.txt
17. CDN Promote 示例
假定:
- 桶A 初始包含文件 [ A B ]。
- 桶B 初始包含文件 [ A C ]。
在接下来的操作中,我们对 桶A 进行了一系列修改:
- 将文件 A 修改为 A1,并新增文件 D。此时 桶A [ A1 B D ];
- 对 桶A 打了一个 Release1。此时 Release1 [ A1 B D ];
- 打完 Release1 后,将文件 A1 修改为 A2。此时 桶A [ A2 B D ]。
接着,我们将 桶A 的 Release1 Promote 到 桶B。 最终状态如下:
- 桶A 中的文件为 [ A2 B D ]。
- 桶B 中的文件变为 [ A1 B D ],并且新增了一个版本标记 Release1,使其状态与 桶A 的 Release1 一致。
18. CDN Release 版本为何不能删除
CDN 的 Release 版本不能删除,核心原因和 Git 的 Release 类似:它是固化的历史数据快照,本质是用来记录关键状态的 “存档”。
这些版本一旦创建,就相当于定格了某一时刻的资源状态,目的是确保历史可追溯(比如排查问题时回溯旧版本),同时可能被老业务、旧页面等依赖。如果删除,会导致历史记录丢失,还可能让依赖它的业务出问题。