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) <[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。
有关使用资源导入管道的加速器的帮助,请访问 加速器论坛。