Unity 加速器是一个缓存代理,它会保留团队导入的资源的副本,以加快团队协作的速度。加速器的目标是帮助团队缩短迭代时间。当您的团队在同一个本地网络上工作时,加速器会协调资源共享,这样您就不需要重新导入项目的部分内容。这是通过 资源导入管道 v2 Unity 编辑器功能实现的。
当您在本地网络上安装加速器时,Unity 编辑器(版本 2019.3 或更高版本;请参见下面的 Unity 编辑器 要求)会与它通信,以存储和检索其他团队成员需要、已更改或已构建的资源。加速器会保留这些资源的临时副本,以避免浪费时间和带宽来检索或重新导入它们。
在您的团队定期工作的每个网络上安装一个加速器。您必须在本地网络上有一台可以托管加速器的机器。在选择主机时,请考虑以下要求
您的 Unity 项目必须使用 Unity 引擎的 2019.3 或更高版本。
您可以直接下载并安装 Unity 加速器,并在安装过程中取消选中注册令牌
注意:如果在 Linux 系统上安装加速器,请参阅 验证您的加速器版本。
您还可以通过 Docker Hub 安装加速器。
在每个平台上,您都可以从命令行运行安装程序。如果您使用 --help
参数执行安装程序,它将显示可用的各种选项。要运行没有任何提示的完整安装,您应该为以下内容提供值
--storagedir
设置加速器存储文件和配置的目录。--registration-token
指定在创建加速器后在 开发者仪表板 中提供的令牌。--mode
无人值。这将使用默认值或来自其他提供的选项标志的值。Contents/MacOS/installbuilder.sh
)。安装加速器时,安装向导的最后一步将显示以下格式的 IP 地址和端口,以供您在编辑器中参考
[IP]:[Port]
要将您的编辑器配置为使用该加速器作为资源管道版本 2 缓存服务器,请按照以下步骤操作
您可以选择从默认值选择不同的命名空间前缀,如果您希望确保与其他项目的隔离。您还可以根据需要单独禁用上传或下载。例如,您可能希望构建系统仅启用上传,而开发人员的编辑器仅启用下载。请注意,TLS/SSL 选项仅是 2020.1 及更高版本编辑器中的功能,并且加速器也必须配置为 TLS。
在主编辑器视图中,您可以通过查看右下角的状态栏来检查加速器连接(仅在 2020.1 及更高版本的编辑器中)。
如果您愿意,您可以配置加速器以通过全局设置使用,除非项目设置覆盖,否则它将默认用于所有项目。要配置全局设置,请选择编辑 > 首选项…菜单项
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。
有关更多信息,请参阅 命令行参数。
加速器具有内置仪表板,用于快速监控和配置更改。
有关如何找出仪表板 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 编辑器日志 查看调试信息。
以下代码块显示了使用资源导入管道 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
加速器作为每个平台的后台进程运行。
通过在“设置”菜单中搜索“服务”一词或在“运行”对话框(WIN + R)中运行“_services.msc_”来打开“服务面板”。接下来,在结果列表中找到“Unity 加速器”服务。在左侧面板上会出现“停止服务”或“重新启动服务”选项。
从终端运行 launchctl
命令以从 LaunchControl 实用程序控制“com.unity.accelerator”服务。有关更多信息,请访问 https://www.launchd.info/。
使用 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 编辑器未在使用它,则可能有多种原因导致此问题。以下故障排除选项可能有助于您解决此问题
每个项目贡献者必须使用 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) <sst-ops@unity3d.com>
要将密钥下载到您的 GPG 存储中,请使用以下命令之一
$ gpg --keyserver https://collab-accelerator.cloud.unity3d.com/ --search-key "sst-ops@unity3d.com"
$ 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) <sst-ops@unity3d.com>" [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) <sst-ops@unity3d.com>" [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。
有关使用资源导入管道的加速器的帮助,请访问 加速器论坛。
Did you find this page useful? Please give it a rating:
Thanks for rating this page!
What kind of problem would you like to report?
Thanks for letting us know! This page has been marked for review based on your feedback.
If you have time, you can provide more information to help us fix the problem faster.
Provide more information
You've told us this page needs code samples. If you'd like to help us further, you could provide a code sample, or tell us about what kind of code sample you'd like to see:
You've told us there are code samples on this page which don't work. If you know how to fix it, or have something better we could use instead, please let us know:
You've told us there is information missing from this page. Please tell us more about what's missing:
You've told us there is incorrect information on this page. If you know what we should change to make it correct, please tell us:
You've told us this page has unclear or confusing information. Please tell us more about what you found unclear or confusing, or let us know how we could make it clearer:
You've told us there is a spelling or grammar error on this page. Please tell us what's wrong:
You've told us this page has a problem. Please tell us more about what's wrong:
Thank you for helping to make the Unity documentation better!
Your feedback has been submitted as a ticket for our documentation team to review.
We are not able to reply to every ticket submitted.