版本:Unity 6 (6000.0)
语言:English
去中心化技术 验证解决方案
使用游戏对象

Unity 加速器

概述

Unity 加速器是一个缓存代理,它会保留团队导入的资源的副本,以加快团队协作的速度。加速器的目标是帮助团队缩短迭代时间。当您的团队在同一个本地网络上工作时,加速器会协调资源共享,这样您就不需要重新导入项目的部分内容。这是通过 资源导入管道 v2 Unity 编辑器功能实现的。

当您在本地网络上安装加速器时,Unity 编辑器(版本 2019.3 或更高版本;请参见下面的 Unity 编辑器 要求)会与它通信,以存储和检索其他团队成员需要、已更改或已构建的资源。加速器会保留这些资源的临时副本,以避免浪费时间和带宽来检索或重新导入它们。

Accelerator overview
加速器概述

内容

安装加速器

要求

本地主机要求

在您的团队定期工作的每个网络上安装一个加速器。您必须在本地网络上有一台可以托管加速器的机器。在选择主机时,请考虑以下要求

  • 本地主机必须运行以下操作系统之一
    • Linux(Ubuntu 16.04 或 Ubuntu 18.04)
      对于 Linux,您必须以 root 用户身份安装 Acccelerator。
    • Windows Server 2008R2 / Windows 7 或更高版本(64 位)
    • Mac OS X 10.12 或更高版本(64 位)
  • 本地主机必须有足够的本地存储空间来托管项目的大部分文件,最好是位于与托管操作系统的驱动器分开的固态驱动器上。
  • 本地主机应该拥有尽可能多的内存。最低应为 2GB RAM,但如果有更多可用内存,操作系统将使用它来缓冲缓存的项目,从而提高常用项目的性能。通常建议使用 32GB RAM。
  • 本地主机必须连接到与您的团队相同的网络,或通过允许访问加速器 IP 地址和端口(TCP)的适当防火墙策略进行本地路由。
  • 任何可以访问主机的人员都可以访问您的项目文件,而无论您在 Unity 组织中的权限结构如何。因此,Unity 建议限制该机器,以便只有 组织所有者或管理员 可以访问和与加速器交互。

Unity 编辑器要求

您的 Unity 项目必须使用 Unity 引擎的 2019.3 或更高版本。

通过安装程序安装加速器

您可以直接下载并安装 Unity 加速器,并在安装过程中取消选中注册令牌

  • 下载适用于 Windows 的版本
  • 下载适用于 Mac OS X 的版本
  • 下载适用于 Linux 的版本

注意:如果在 Linux 系统上安装加速器,请参阅 验证您的加速器版本

您还可以通过 Docker Hub 安装加速器。

在“无头”机器上安装加速器

在每个平台上,您都可以从命令行运行安装程序。如果您使用 --help 参数执行安装程序,它将显示可用的各种选项。要运行没有任何提示的完整安装,您应该为以下内容提供值

  • --storagedir 设置加速器存储文件和配置的目录。
  • --registration-token 指定在创建加速器后在 开发者仪表板 中提供的令牌。
  • 对于不应查询任何内容的自动化安装,请使用 --mode 无人值。这将使用默认值或来自其他提供的选项标志的值。
  • 在 Mac OS X 上,您需要挂载磁盘映像 (DMG) 并运行位于安装程序应用程序目录中的二进制文件(位于 Contents/MacOS/installbuilder.sh)。

配置编辑器以使用加速器

安装加速器时,安装向导的最后一步将显示以下格式的 IP 地址和端口,以供您在编辑器中参考

[IP]:[Port]

要将您的编辑器配置为使用该加速器作为资源管道版本 2 缓存服务器,请按照以下步骤操作

  1. 在 Unity 编辑器中,选择编辑 > 项目设置…(Windows)或Unity > 项目设置…(OSX)。
  2. 从左侧菜单中选择编辑器
  3. 缓存服务器部分下,将模式设置为已启用
  4. 使用安装向导中的加速器 IP 地址填写IP 地址
  5. 按下检查连接按钮以测试连接。
Project settings
项目设置

您可以选择从默认值选择不同的命名空间前缀,如果您希望确保与其他项目的隔离。您还可以根据需要单独禁用上传或下载。例如,您可能希望构建系统仅启用上传,而开发人员的编辑器仅启用下载。请注意,TLS/SSL 选项仅是 2020.1 及更高版本编辑器中的功能,并且加速器也必须配置为 TLS。

在主编辑器视图中,您可以通过查看右下角的状态栏来检查加速器连接(仅在 2020.1 及更高版本的编辑器中)。

Project connectivity
项目连接

如果您愿意,您可以配置加速器以通过全局设置使用,除非项目设置覆盖,否则它将默认用于所有项目。要配置全局设置,请选择编辑 > 首选项…菜单项

Project connectivity
项目连接

通过 Docker Hub 安装加速器

Docker Hub 上提供了容器,网址为 https://hub.docker.com/repository/docker/unitytechnologies/accelerator。

首次设置

Unity 建议您使用持久存储区域来托管加速器配置和缓存。要首次设置此项,您需要在首次运行容器时使用以下一个或多个变量(下面将提供一些示例)。仅当启动时未找到配置文件时才会使用这些变量,因此在后续运行中设置这些变量是安全的。

变量 用法
DISABLE_USAGE_STATS 设置为 true 以禁用使用情况统计信息 - 保持使用情况统计信息启用可以帮助通过向 Unity 提供有价值的反馈来改进加速器的功能和性能。
USER 本地内置仪表板的用户名。
PASSWORD 本地内置仪表板的密码。
CERT_HOSTNAME 用于 TLS 支持的主机名。这用于重定向等,并与下面的 CERT_PEM 和 KEY_PEM 一起使用。
CERT_PEM 用于 TLS 支持的 cert.pem 的路径。如果您设置了 CERT_HOSTNAME 但未设置 CERT_PEM,则将假定为 <persist_dir>/cert.pem。
KEY_PEM 用于 TLS 支持的 key.pem 的路径。如果您设置了 CERT_HOSTNAME 但未设置 KEY_PEM,则将假定为 <persist_dir>/key.pem。

要覆盖 TLS 设置,请确保您的 cert.pem 和 key.pem 位于指定的 /agent 路径中,然后包含如下所示的 CERT_HOSTNAME

$ docker run --rm -ti -v "${PWD}/agent:/agent" -e 'CERT_HOSTNAME=myhostname.com' -e 'COLLAB_REGISTRATION_TOKEN=ft0bJvbRD' unitytechnologies/accelerator:latest

后续执行

您还可以设置加速器通常会识别的任何环境变量。请参阅 unity-accelerator --all-help 并查找指示 Default: $SOME_VARIABLE 的选项。如果您不设置以下两个选项,容器将设置它们

变量 用法
UNITY_ACCELERATOR_PERSIST 容器默认值为 /agent。这是 unity-accelerator.cfg 以及其他持久数据(cachedir 可能不同)所在的目录。
UNITY_ACCELERATOR_LOG_STDOUT 容器默认值为 true。如果为 true,则仅将日志输出到标准输出;如果要将实际日志文件写入持久目录,则为 false。

运行容器

我们对我们的 docker 镜像进行了签名,因此我们强烈建议您 启用 Docker 内容信任

$ export DOCKER_CONTENT_TRUST=1

通常,您应该能够像以下这样运行加速器

$ docker run -p 80:80 -p 443:443 -p 10080:10080 -v "${PWD}/agent:/agent" unitytechnologies/accelerator:latest

但是,如果您想选择加速器存储配置和缓存工件的不同位置,您可能可以选择提供其他环境变量配置值,如下所示

$ docker run -p 80:80 -p 443:443 -p 10080:10080 -v "${PWD}/agent:/mnt/another_spot" -e "UNITY_ACCELERATOR_PERSIST=/mnt/another_spot" -e "UNITY_ACCELERATOR_DEBUG=true" unitytechnologies/accelerator:latest

要为本地仪表板设置用户名和密码,您可以使用 USER 和 PASSWORD 环境变量

$ docker run -p 80:80 --env PASSWORD=[PASSWORD] --env USER=[USERNAME] unitytechnologies/accelerator:latest

公开端口

以下是 Unity 加速器使用的端口的默认值:80、443、10080、10443。

源资源安全性

Unity Teams 高级版一起使用时,每个加速器都会收到自己的安全证书,以证明它有权访问您的组织。在加速器上传或下载任何内容之前,发出请求的 Unity 编辑器会使用 SSL/TLS 安全地连接到加速器并验证其真实性。当 Unity 编辑器发现并连接到加速器时,它们会从 Unity Identity 服务接收一个特殊令牌,而不是传递普通的 Unity 用户令牌。这些令牌会验证用户的身份以及对组织内单个项目的访问权限,从而在使用加速器时保护对任何其他组织和项目的访问权限。

或者,您可以在启动 Unity 编辑器时使用 命令行参数 提供加速器缓存服务器配置详细信息。

要指定要使用加速器缓存服务器,请使用 -EnableCacheServer 参数,并要指定地址和端口号,请使用 -cacheServerEndpoint Address:Port,将 Address 和 Port 替换为您缓存服务器的详细信息。

注意:加速器缓存服务器要求您的项目使用 资源数据库 V2 (ADB2)。您可以通过使用 -adb2 参数从命令行启动 Unity 时强制升级到 ADB2。

有关更多信息,请参阅 命令行参数

监控加速器

本地管理员仪表板

加速器具有内置仪表板,用于快速监控和配置更改。

Accelerator configuration
加速器配置

有关如何找出仪表板 URL 的信息,请参阅 命令行工具 部分;但是,如果您知道加速器的 ip 和端口,则只需使用 http://ip:port/dashboard,加速器将处理任何需要的重定向。有关完整的指标监控,请参阅 直接访问加速器指标,并且可以通过其 unity-accelerator.cfg 文件获得加速器的完整配置。

直接访问加速器指标

每个加速器都托管 Prometheus 指标报告 作为 /metrics,您可以从本地网络查询这些报告。

指标 描述
process_resident_memory_bytes 加速器使用的内存量。
uta_agent_sys_cpu_percent 系统使用的 CPU 量。
uta_agent_sys_mem_bytes_used 系统使用的内存量。
uta_agent_protobuf_connects Unity 编辑器连接到资源导入管道服务的次数。
uta_agent_protobuf_bytes_in 从资源导入管道接收的字节数。
uta_agent_protobuf_bytes_out 发送到资源导入管道的字节数。
uta_agent_protobuf_requests{code="0",method="get"} 发送到资源导入管道的项目数。
uta_agent_protobuf_requests{code="1",method="get"} 从发送到资源导入管道的项目中发生的错误数。
uta_agent_protobuf_requests{code="2",method="get"} 从发送到资源导入管道的项目中发生的命名空间错误数量。
uta_agent_protobuf_requests{code="3",method="get"} 资源导入管道为尚未缓存的项目发出的请求数量。
uta_agent_protobuf_requests{code="0",method="put"} 从资源导入管道接收到的项目数量。
uta_agent_protobuf_requests{code="1",method="put"} 从资源导入管道接收到的项目中发生的错误数量。
uta_agent_protobuf_requests{code="2",method="put"} 从资源导入管道接收到的项目中发生的命名空间错误数量。
uta_agent_protobuf_requests{code="0",method="delete"} 资源导入管道发出的删除项目请求数量。
uta_agent_protobuf_requests{code="1",method="delete"} 资源导入管道删除项目时发生的错误数量。
uta_agent_protobuf_requests{code="2",method="delete"} 资源导入管道发出的删除项目请求中发生的命名空间错误数量。
uta_agent_protobuf_requests{code="3",method="delete"} 资源导入管道为尚未缓存的项目发出的删除项目请求数量。
uta_agent_cache_bytes_evicted_unscheduled 在“非计划”传递期间从缓存中驱逐的字节数。非计划驱逐发生在处理请求时磁盘空间不足时。通常,计划的后台驱逐应该能够满足需求,因此此指标值的增加表示服务器超负荷。增加配置的 CacheMinFreeBytes 或 CacheMinFreePercent 可能有助于提供更多空闲空间缓冲区,或者您可能需要升级底层硬件或安装额外的加速器。
uta_agent_cache_files_evicted_unscheduled 与上述 uta_agent_cache_bytes_evicted_unscheduled 指标类似,但计算驱逐的文件数而不是字节数。这可能是更容易发出警报的指标。例如:当文件指标每秒增加超过 1 时发出警报。
uta_agent_protobuf_cache_hits 从缓存中服务资源导入管道请求的数量。
uta_agent_protobuf_cache_misses 无法从缓存中服务资源导入管道请求的数量。
uta_agent_protobuf_cache_bytes_out 从缓存中服务到资源导入管道的字节数。
uta_agent_protobuf_cache_bytes_in 存储到缓存中从资源导入管道接收到的字节数。

Unity 编辑器日志调试

您可以使用 Unity 编辑器日志 查看调试信息。

以下代码块显示了使用资源导入管道 v2 的加速器的示例日志输出。

2019-10-07T11:34:51-0700 Using Asset Import Pipeline V2.
  ...
  2019-08-08T09:04:03-0700 Start importing Assets/Scenes/tame-the-unicorn.png guid(07a0d449dcaef4d2ba104e9d9b350de6)
  2019-08-08T09:04:05-0700 Done importing asset: 'Assets/Scenes/tame-the-unicorn.png' (target hash: 'd5fddd470dd9beedcd7261b6455e436a') in 1.082988 seconds
  2019-08-08T09:04:05-0700 RemoteAssetCache::AddArtifactToCacheServer - artifactKey='Guid(07a0d449dcaef4d2ba104e9d9b350de6) Importer(-1,)' Target hash='d5fddd470dd9beedcd7261b6455e436a'

Querying for cacheable assets in Cache Server:
    86ac778e1a44c9143864797ddacf8cc9:Assets/New Material.mat
RemoteAssetCache - Download - Metadata - success:true, namespace:81e94844d19a16919208533e08183531, key:8d71d5006046bb9d5e4a7172eec3f3b2
RemoteAssetCache - Download - Artifact - success:true, namespace:78b2fdc254b0a4f8a4693a81bb96598a, key:de1eef03efd25a722d1500658bf19038 for asset:'Assets/New Material.mat', time elapsed: 0.005171 seconds
RemoteAssetCache - Download - Artifact - success:true, namespace:78b2fdc254b0a4f8a4693a81bb96598a, key:b19c9d64967a9691abecdb66364ae392 for extension:'Assets/New Material.mat.info', time elapsed: 0.004721 seconds

停止和重新启动加速器服务

加速器作为每个平台的后台进程运行。

Windows

通过在“设置”菜单中搜索“服务”一词或在“运行”对话框(WIN + R)中运行“_services.msc_”来打开“服务面板”。接下来,在结果列表中找到“Unity 加速器”服务。在左侧面板上会出现“停止服务”或“重新启动服务”选项。

Mac OS X

从终端运行 launchctl 命令以从 LaunchControl 实用程序控制“com.unity.accelerator”服务。有关更多信息,请访问 https://www.launchd.info/

Linux

使用 service 控制台实用程序控制“unity-accelerator”服务。有关更多信息,请访问 http://manpages.ubuntu.com/manpages/bionic/man8/service.8.html

维护

加速器服务会在维护期间自动更新自身,目前设置为机器运行加速器的本地时间凌晨 01:00 至 02:00。只有在加速器发现有较新版本可用时才会发生这种情况。

加速器的安装和卸载日志保存在操作系统的标准临时目录中,名为 unity-accelerator-*install.log。加速器的日志保存在存储目录中,名为 unity-accelerator.log

命令行工具

加速器有一组庞大的命令行工具,您可以使用它们来进行故障排除、配置以及通常使用一个或多个加速器。为了方便使用,最好将 unity-accelerator 可执行文件的路径添加到您的 PATH 中。可执行文件安装在运行安装程序时选择的路径中,例如 C:\Program Files\Unity\accelerator。

CLI 工具具有广泛的帮助系统;您可以运行没有任何参数的 unity-accelerator 来开始使用。

$ unity-accelerator
Unity Accelerator v1.0.524+g96c5e18

Run on a local network to speed up transactions with Unity Services.

.....

您还可以运行 unity-accelerator --all-help 以一次性输出所有命令的所有帮助文本。最好通过 less 将输出传递到管道或重定向到文本文件以读取。

在处理特定加速器时,例如重新配置它,最好将您的工作目录更改为与 unity-accelerator.cfg 文件所在的目录相同。您还可以将 UNITY_ACCELERATOR_PERSIST 环境变量设置为该目录,或者您可以尝试记住始终使用 --persist <dir> 选项,但大多数人发现更改工作目录最简单。

一组相当常见的 cli 工具是仪表板工具

$ unity-accelerator dashboard password newaccount
Password: ****
   Again: ****
$ unity-accelerator dashboard list
admin
newaccount
$ unity-accelerator dashboard url
http://172.18.37.249:8080/dashboard/

最后一个工具 dashboard url 用于查找要在浏览器中输入的 URL 以访问内置仪表板。

镜像多个加速器

如果需要,您可以配置多个加速器以镜像相同缓存的数据。您可能希望在同一网络上运行两个镜像加速器以实现高可用性——如果一个加速器崩溃、发生硬件故障或出于任何原因需要维护,则另一个加速器可以进行补偿。您还可以镜像彼此远程的缓存服务器,例如,主办公室可能会将其数据镜像到分支办公室,从而提供其缓存数据的副本供分支办公室使用。

目前,镜像功能仅提供传出数据功能,也称为“推送”或“转发”。您可以推送到或转发到多个加速器,甚至可以将它们链接:A 发送到 B,B 发送到 C,甚至 C 发送回 A。您无需担心循环链;项目会加上时间戳,因此接收加速器将忽略任何其已有的项目。

让我们来看一个示例,其中加速器 A 的 ip:port 为 1.1.1.1:1111,加速器 B 为 2.2.2.2:2222。假设两者最初都没有数据,因此让我们将一个项目放入 A 并注意它不在 B 中。

$ echo test1 | unity-accelerator cache put 1.1.1.1:1111 namespace1 key1
$ unity-accelerator cache get 1.1.1.1:1111 namespace1 key1
test1
$ unity-accelerator cache get 2.2.2.2:2222 namespace1 key1
key not found

现在让我们配置 A 以转发到 B。我们通过更改 A 的配置来实现此目的,因此登录到运行加速器 A 的机器,关闭加速器并

# Shutdown Accelerator A
$ cd <directory where unity-accelerator.cfg is>
$ unity-accelerator config set ProtobufForwardPuts protobuf:2.2.2.2:2222
# Start Accelerator A back up

现在我们应该能够将另一个项目放入 A 的缓存中,并看到它转发到 B。

$ echo test2 | unity-accelerator cache put 1.1.1.1:1111 namespace2 key2
$ unity-accelerator cache get 1.1.1.1:1111 namespace2 key2
test2
$ unity-accelerator cache get 2.2.2.2:2222 namespace2 key2
key not found
# It will take up to a minute before the forwarding occurs, due to how the algorithm works with batching, etc. But within a minute or two you should see...
$ unity-accelerator cache get 2.2.2.2:2222 namespace2 key2
test2

但是,这仅涵盖新数据(放入加速器 A 的任何新项目都将转发到加速器 B),而不涵盖任何现有数据。在我们的示例中,第一个项目仍不在加速器 B 中。

$ unity-accelerator cache get 2.2.2.2:2222 namespace1 key1
key not found

为了解决这种情况,以及在您只想一次转发所有数据的情况下(在从一个加速器切换到新加速器时可能有用),您可以使用“push”命令行工具

$ unity-accelerator cache push 1.1.1.1:1111 2.2.2.2:2222
{"msg":"push completed", "destination":"2.2.2.2:2222", "namespaces":2, "keys":2, "bytes":12, "supercededs":1, "errors":0, "elapsed":"44.054078ms"}
$ unity-accelerator cache get 2.2.2.2:2222 namespace1 key1
test1

push 工具将向第一个加速器发送请求,并要求它将其所有数据发送到第二个加速器。完成后,第一个加速器将发送回“推送完成”响应,并详细说明已执行的操作。

您可以通过运行 unity-accelerator config help | less 并搜索 Forward 来研究其他高级配置选项。您可以指定转发并发性、队列大小、错误处理等。

另请注意,您可能希望更改每个镜像加速器的 MaintenanceStart 和 MaintenanceDuration 的配置值,以便它们不会同时关闭以进行维护。

故障排除

如果您已安装加速器,但某些 Unity 编辑器未在使用它,则可能有多种原因导致此问题。以下故障排除选项可能有助于您解决此问题

检查正在使用的 Unity 编辑器版本

每个项目贡献者必须使用 2019.3 或更高版本的编辑器才能使用加速器。

验证用户是否位于加速器的本地网络中

确保加速器在与遇到问题的项目贡献者相同的局域网上运行。加速器不会影响远程工作的贡献者。

测试加速器的连接

检查遇到问题的机器是否可以访问加速器。

将加速器的主机 IP 地址输入到以下 URL 路径中以显示其运行状况页面

[AcceleratorIP]:[AcceleratorPort]/api/agent-health

如果测试失败,请确保所有主机和网络防火墙都允许访问加速器的侦听 IP 地址和端口(TCP)。您可能需要与网络管理员协调以允许访问此端口。

验证加速器版本

对于 Linux 系统上的加速器安装,所有 Linux 可执行文件都具有签名文件,您可以验证这些文件以确保没有恶意实体篡改您下载的加速器版本。您可以使用受信任版本的 GnuPG 验证签名文件。以下密钥签署了当前版本。包含密钥的公钥块可在 https://collab-accelerator.cloud.unity3d.com/ 获取。

pub     rsa4096 2019-12-02
Key fingerprint = 9BC4 B04D F2E8 74E5 64AA 47E7 6D44 3B8B 002C F61F
uid       Unity Technologies ApS (Accelerator signing key) <[email protected]>

要将密钥下载到您的 GPG 存储中,请使用以下命令之一

$ gpg --keyserver https://collab-accelerator.cloud.unity3d.com/ --search-key "[email protected]"

$ gpg --keyserver https://collab-accelerator.cloud.unity3d.com/ --recv-key 9BC4B04DF2E874E564AA47E76D443B8B002CF62F

要检查您安装的加速器版本是否为原始且未修改的版本,请验证文件的签名。

加速器安装文件附带一个签名文件,该文件可在 https://storage.googleapis.com/unity-accelerator-prd/unity-accelerator-installer.sig 获取。使用此签名文件验证加速器安装程序

$ gpg --verify unity-accelerator-installer.sig unity-accelerator-linux-x64-installer.run

在信任密钥之前,请将指纹与伪造或不受信任的密钥中显示的内容进行比较。信任密钥后,您将看到类似以下内容

gpg: Signature made Thu Jan 16 12:29:14 2020 PST
gpg:                using RSA key 9BC4B04DF2E874E564AA47E76D443B8B002CF61F
gpg: Good signature from "Unity Technologies ApS (Accelerator signing key) <[email protected]>" [ultimate]

这意味着签名有效,并且您信任此密钥。

不正确的密钥

如果您没有正确的分发密钥,则上述命令的输出将如下所示

gpg: Signature made Thu Jan 16 12:29:14 2020 PST
gpg:                using RSA key 9BC4B04DF2E874E564AA47E76D443B8B002CF61F
gpg: Can't check signature: No public key

在这种情况下,您必须按照上述说明获取密钥。

伪造或不受信任的密钥

如果您有具有有效签名的密钥副本,但密钥未标记为受信任或密钥为伪造,则输出将如下所示

gpg: Signature made Thu Jan 16 12:29:14 2020 PST
gpg:                using RSA key 9BC4B04DF2E874E564AA47E76D443B8B002CF61F
gpg: Good signature from "Unity Technologies ApS (Accelerator signing key) <[email protected]>" [unknown]
gpg: WARNING: This key is not certified with a trusted signature!
gpg:          There is no indication that the signature belongs to the owner.
Primary key fingerprint: 9BC4 B04D F2E8 74E5 64AA  47E7 6D44 3B8B 002C F61F

如果密钥已被伪造,则必须使用签名文件验证指纹。如果密钥未标记为受信任,请对其进行编辑以将其标记为受信任。有关更多信息,请参阅 https://www.gnupg.org/gph/en/manual/x334.html

支持

有关使用资源导入管道的加速器的帮助,请访问 加速器论坛

去中心化技术 验证解决方案
使用游戏对象