根据 SimSpace Weaver 研究构建超大规模游戏或应用

2023-11-16

在 2022 年 AWS Re:Invent 会议上发布了一项激动人心的服务 AWS SimSpace Weaver。本技术参考 AWS 多年来在云中的深入分析经验解决了许多开发者面临的最大困难:如何构建一个后端系统,完成世界(计算能力)的分割和状态同步?一般来说,如果从零开始建立这样的系统,需要几个高级工程师几个月甚至几年的努力才能实现。

SimSpace Weaver 虚幻世界模拟是解决规模高密度前提下的主要服务。它通过将庞大的世界划分为相同尺寸的区域来实现这一目标。这项服务的发布展示了 AWS 在更多场景中的潜力:

  1. 可作为元宇宙、数字城市、校运会甚至军事领域等大规模模拟仿真应用软件使用。
  2. 在游戏领域,未来会有一些超大型的 MMORPG(如魔兽)可以在云中代管。

本文将包括以下几点:

  1. 介绍 AWS SimSpace Weaver 服务 (基本知识,对 SimSpace Weaver 有基本的了解)
  2. 了解 SimSpace 的工作流 (初级知识,介绍 SimSpace Weaver 每个引擎的工作流)

注:本文不介绍如何集成编码。作者将在后面开另一篇文章 0 逐步描述游戏代码访问的过程,欢迎关注。

本节将介绍一些重要的定义及其架构图,让大家快速掌握 SimSpace Weaver 服务。

  • Schema:游戏的关键环境变量, JSON 格式。
  • Schema:游戏的关键环境变量, JSON 格式。本地环境一般在工程根目录下 yaml 文档。在线环境一般在 build 或是 tools 目录下 yaml 文档。
  • Partition:

    全球计算能力的分区通常根据位置的类别进行划分。 大范围的分区规定为左上右下。

  • Resource Unit

  • 代表每个 Partition 后边所需的 CPU 和 memory 资源,类似器皿。
  • Worker:EC2 案例,由 SimSpace 代管,包括多个 Partition。

    Clock:

      一般来说,每秒模拟实体的时钟频率和频率是 Hz 表明。数值越大越光滑。

    • Apps
    • 应用软件分为以下三种:

    • Spatial App:务必,由 SimSpace 代管;每个 Partition 都要有一个 spatial app 支持;承担实体的生命周期管理。
    Custom App:
  • 不必要,自己管理;可以自己创建实体,但使用权必须转让给 Spatial App;以固定的方式获取事物和实体信息;将节点暴露到客户端。

  • Service App:非必需,由 SimSpace 代理管理;通过固定阅读获取事物和实体信息;将节点暴露到客户端。
  • State Fabric
  • 一个全球交换的内存数据库,类似 redis,每个实体的实时动态存储在里面。

  • State Fabric
  • 一个全球交换的内存数据库,类似 redis,每个实体的实时动态存储在里面。实体检索通常使用空间坐标。

Entities

    实体可以在世界上随意移动物体。unreal 中 actor, unity 里的 gameObject。

  • Domain
  • 逻辑上一组是一样的 apps,包括编码、可执行程序、配备等。

  • Authority Transfer:

      指实体在每个服务器之间的权限交付。

  • Replication:

    没有权限的实体信息同步。

Subscription:

在游戏中以实体状态更新的形式获得各种系统的东西。

  • 定阅一般比具体范围大,以获得更好的实体团队体验效果。

  • 因为实体会先进入下一个 Partition 热情的范畴,然后提前在这个范畴 Partition 生成一个 remote replication。

每个 Worker 能够有多个 Partition, Partition 内代管着 Spatial App 他们会消耗的应用程序 Resource Unit 相应的资源。

    每一个 Worker 系统运行最多可以管理,代表一个节点 10 台 EC2。

  • 每一个 Worker 系统运行最多可以管理,代表一个节点 10 台 EC2。

  • State Fabric 记录所有需要同步实体的重要信息:部分。

Service/Custom App 只关心自己对应的 Worker 实体在其兴趣范围内。它们之间的区别通常是 Service App 只有阅读,没有互动;而且 Custom App 能够承担形成实体接受客户端的互动。

使用 AWS SimSpace Weaver 以前,确保您有以下依赖:

    • AWS 账户和必要权限可参考连接

    • 当地的开发工具,参考链接

    SDK 介绍
  • 作为托管服务,我们必须首先掌握它 SDK 文档。如果您想获得最新版本,可以参考链接。
  • create-project: 建立 unreal 项目,带两个模板

PathfindingSample 单 Worker

MultiWorkerPathfindingSample 多 Worker

    docker-create-image: 形成当地的 docker 环境

  • dowload-unity-package: 获得 unity 项目

  • packaging-tool:器皿配备,装包编译,模版项目

    • 项目结构

    • 通过上面的 create-project 指令建立的项目基本结构如下:

  • build:打出存储和放置目录

  • cloudformation:上云模板文件

  • dependencies (unreal):demoframework

App 步骤模板编码

Utility 编码

Call back 事件驱动编码

    • src (unreal):项目源码

    • tools:不同环境的工具脚本,schema 等

    • CLI 指令

  • 产生的项目在 tools 在目录下,有一个 weaver- rojectname}-cli.bat,提供了很多 console 指令,常见指令如下:

    • Control

    • Start-simulation/Delete-simulation

  • Start-app/Stop-app

Start-clock/Stop-clock

Info

List-simulations/Describe-simulation

List-apps/Describe-app

根据 SimSpace Weaver 研究构建超大规模游戏或应用

这节会介绍 SimSpace Weaver 在各种游戏引擎中开发工作流。

  • 假如我们需要这样做
  • BOYE

    (自研模块)的集成需要考虑几个方面 App 如何使用生命周期和生命周期? SDK,可参考链接。

解压 SDK 后就会有 unreal 项目,给予基本文件,项目目前只支持 UE5。不能直接用客户端做,必须得到 UE5 如何操作源代码,可参考官方文件。

  • 在编译源代码之前,需要对源代码进行编译 做以下改动:
  • 当地工作流

可以在编辑器中跑下去,应注意 Client 数量和 Partition 数量配对。

    云端工作流

  • 根据cmd,所有的包和环境变量都将放置在cmd中 S3 目录。

SimSpace 后台会依据 CLI 最后,我们可以根据客户端的指令操作后台 endpoint 连接就可以了。

Console 上面还提供了已经编译过的客户端,可以参考云构建 SimSpace Weaver 应用软件。

  • 环境变量:

    • 本地:项目根目录下

    • 云端:build 或是 tools 目录下

    SDK 项目:

介绍:根据不同的颜色属描述不同的颜色 Worker,其中,任何运动的小球都会在跨区成功后改变相应的色调。

  • 当地工作流:可以直接在编辑器里 Standalone 方式运行。

      在 Play in Standalone Game 在区域内,添加参数

    • 在 如果制定了 2×2 的地区,则 Player Number of Client=4

    • 云工作流:

  • 云端构建 SimSpace Weaver 应用软件

根据当地调整的游戏包装专用服务器,然后启用启动命令

# 专用服务器是根据模块指令形成的

#将专用服务器打包成 weaver 需要服务器格式

#上传到服务器和 schema 到 S3,并且运行模拟

  1. 根据 SDK 的 download-unity-package 组装,将提供适用的基本文档 2021.3.7 版本完成后,必须通过 package manager 组装。
  2. Unity 版本实际上是在 C 的 SDK 做了一层 C# 实际插座可参考插件的封装 Runtime 目录下边的 API 插口。
  3. 云工作流:
主要通过 Unity 来设置,并提供 AWS 设置自己的窗口建立项目,提交环境变量和包装。

云工作流:

    主要通过 Unity 设置并提供 AWS 设置自己的窗口建立项目,提交环境变量和包装。请参考以下项目的例子。

  • 当地工作流:

根据 unity 包装,每次选择相应的场景包装,而不是 all in one。

因此,我们在包装完成后会有 spatial,custom 或 servcie 可执行程序。

    再根据 schema 配备的 grid 数量按顺序开始 spatial, 然后 custom 或是 service,最后,启动客户端。

  • 您可以参考以下项目的例子。

    • 环境变量 (Schema):

    • 本地:项目根目录下

    • 云端:build 或是 tools 目录下

    SDK 项目:

简介:模拟蚁巢游戏,蚂蚁的一些属可以设置不同的分区。

  • 当地工作流

      先后在 unity 的 Building Setting 中装包对应环境的场景。例如 Spatial App 就只点选 AntSpatialApp,Custom App 就只是点选 ViewAgentApp。

    • 可执行程序形成后,对应 build 目录下,将 Assets 中的 yaml 文件拷贝来了,记得重命名为 schema。

    • 按以下顺序启动 Spatial *4 → Custom  →  Client Editor。

  • 最终效果如下图所示:

    • 云端工作流

组装 SimSpace软件,打开 unity→windows→aws

    创建一个 SimSpace 项目,非 unity 项目

    设定好 schema 文档,而且上传至 S3,请注意,我们只在这里添加了它 Spatial, Custom 并没 Service。

    依据 schema 不同的文档形成 app 所需的可执行程序,随后上传至 S3。

    然后去 S3 确定下面的文档是否都在,应该有一个 schema 和一个 app 的桶,如下图:

    到 SimSpace Weaver 创建一个操作面板 simulation,参考设备如下,明确后会有一个 cloudformation 拉起相关环境。

    需要手动将 clock 运行,这样,世界就会开始模拟。

刚开始的时候就开始了 Spatial App 服务 X4,需要自己手动操作 Custom App 服务,能通过 cloudwatch 查询:

  • 等 Custom App 运行之后,对外掌握 endpoint,然后将客户端连接到过去。

  • 我相信通过本文的解释,我们会对它进行解释 AWS SimSpace Weaver 这个产品有一定的了解。它非常适合大规模空间模拟 AWS 独特的服务器调度算法及其流畅的物理权限控制和切换系统,帮助开发者设计应用程序或游戏而不受技术限制规模和体量。利用托管服务器管理技术,开发者可以支持数十万到数百万的实体模拟。使用“流畅”的权限交接,也会带来无感知的边界转换,让游戏或使用可以达到前所未有的感觉。对于流行引擎的应用,将进一步降低启动层本。

  • 自然,它也有一定的局限性。目前首先比较多 10 台 EC2 限制是很难做到无模拟;第二,在一些特殊精度要求很高的同步场景中,FPS 游戏,冒险游戏,他们通常必须在前台和后台同步帧数 60Hz,甚至几百 Hz,这个数值是 SimSpace 目前无法做到的。

  • 但令人欣慰的是,现在很多游戏都在使用,AWS SimSpace Weaver 处理他们需要的情况已经足够好了。例如在 Re:Invent 2022 在会议上,一些合作伙伴利用这项服务创造了一个真正的城市,并将其放置 100w 个人生活在中间,参考 AWS SimSpace Weaver and uCrowds City Demo。

Youtube 上介绍 SimSpace Weaver

AWS SimSpace Weaver官方文档

AWS App SDK

SimSpace Weaver CLI指令 云端搭建 SimSpace Weaver 应用软件 如何编译源码? UE5 AWS SimSpace Weaver and uCrowds City Demo
标签: 超大规模   研究   可以   项目   实体