SimSpace Weaver の主要なコンセプト - AWS SimSpace Weaver

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

SimSpace Weaver の主要なコンセプト

シミュレーションやゲームは、それを実行するコンピューターによって制限されます。仮想化世界の規模と複雑さが増すにつれて、処理性能は低下し始めます。計算に時間がかかり、システムのメモリが不足し、クライアントのフレームレートが低下します。リアルタイムのパフォーマンスを必要としないシミュレーションでは、これは煩わしいだけである可能性があります。あるいは、処理の遅延が増えるとコストが増加する、ビジネスクリティカルな状況となる可能性があります。シミュレーションやゲームにリアルタイムのパフォーマンスが必要な場合、パフォーマンスの低下は間違いなく問題です。

パフォーマンスの限界に達したシミュレーションの一般的なソリューションは、シミュレーションを単純化することです。多くのユーザーがいるオンラインゲームでは、仮想化世界のコピーを異なるサーバー上に作成し、ユーザーをサーバー全体に分散させることで、スケールの問題に対処することがよくあります。

SimSpace Weaver は仮想化世界を空間的に分割し、その一部を AWS クラウド で実行されるコンピュートインスタンスのクラスターに分散させることで、スケールの問題を解決します。コンピュートインスタンスは連携して、シミュレーション世界全体をパラレル処理します。シミュレーション世界は、その中のすべてのものと、それに接続するすべてのクライアントにとって、単一の統合空間のように見えます。ハードウェアのパフォーマンスの限界のためにシミュレーションを単純化する必要はもうありません。代わりに、クラウドにコンピューティング容量を追加することもできます。

SimSpace Weaver の仕組み

シミュレーションは、その中にオブジェクトが存在する世界で構成されます。一部のオブジェクト (人や乗り物など) は動いて何かをします。他のオブジェクト (木や建物など) は静的です。SimSpace Weaver では、エンティティはシミュレーション世界内のオブジェクトです。

シミュレーション世界の境界を定義し、それをグリッドに分割します。グリッド全体で動作するシミュレーションロジックを作成する代わりに、グリッドの 1 つのセルで動作するシミュレーションロジックを作成します。SimSpace Weaver では、空間アプリケーションとは、グリッドのセルのシミュレーションロジックを実装するプログラムです。これには、そのセル内のすべてのエンティティのロジックが含まれます。空間アプリケーションの所有領域は、空間アプリケーションが制御するグリッドセルです。

注記

SimSpace Weaver では、「アプリケーション」という用語は、アプリケーションのコードまたはそのコードの実行中のインスタンスを指す場合があります。

2 次元のグリッドに分割されたシミュレーション世界のマップ
シミュレーション世界はグリッドに分割されています

シミュレーション世界をグリッドに分割します 各空間アプリケーションは、そのグリッド内の 1 つのセルに対してシミュレーションロジックを実装します。

SimSpace Weaver はグリッドのセルごとに空間アプリケーションコードのインスタンスを実行します。すべての空間アプリケーションインスタンスはパラレル実行されます。基本的に、SimSpace Weaver はシミュレーション全体を複数の小規模なシミュレーションに分割します。小規模なシミュレーションはそれぞれ、シミュレーション世界全体の一部を処理します。SimSpace Weaver では、これらの小規模なシミュレーションを AWS クラウド 内の複数の Amazon Elastic Compute Cloud (Amazon EC2) インスタンス (ワーカーと呼ばれる) に分散して実行できます。単一のワーカーで複数の空間アプリケーションを実行できます。

エンティティはシミュレーション世界内を移動できます。エンティティが別の空間アプリケーションの所有領域 (グリッド内の別のセル) に入ると、新しい領域の空間アプリケーションの所有者がエンティティの制御を引き継ぎます。シミュレーションが複数のワーカーで実行される場合、エンティティはあるワーカーの空間アプリケーションの制御から別のワーカーの空間アプリケーションの制御に移る可能性があります。エンティティが別のワーカーに移動すると、SimSpace Weaver は基盤となるネットワーク通信を処理します。

サブスクリプション

世界の空間アプリケーションビューは、それ自体が所有する領域です。シミュレーション世界の別の場所で何が起きているかを調べるために、空間アプリケーションはサブスクリプションを作成します。サブスクリプション領域はシミュレーション世界領域全体のサブセットです。サブスクリプション領域には、空間アプリケーション独自の所有領域など、複数の所有領域の一部を含めることができます。 SimSpace Weaver は空間アプリケーションに、サブスクリプション領域内で発生するすべてのエンティティイベント (入力、終了、作成、更新、削除など) を通知します。

観測可能なセルが 1 つしかない世界グリッド
世界の空間アプリケーションビュー

世界の空間アプリケーションビューは、所有領域であり、世界グリッド内の 1 つのセルです。

1 つの観測可能なセルと、別のセルと周囲のセルの一部にまたがる別の観測可能な領域がある世界グリッド
サブスクリプション領域が追加された空間アプリケーションビュー

空間アプリケーションは、サブスクリプションを使用してシミュレーション世界の別の場所で何が起こっているかを調べます。サブスクリプション領域には、複数のグリッドセルとセルの一部を含めることができます。

例えば、物理的に相互作用するエンティティをシミュレーションするアプリケーションでは、所有領域の空間的境界のすぐ向こう側にあるエンティティについて知る必要がある場合があります。これを実現するために、アプリケーションは所有領域の境界となる領域をサブスクライブできます。サブスクリプションを作成すると、アプリケーションはその領域のエンティティイベントに関する通知を受け取り、エンティティを読み取ることができます。もう 1 つの例として、領域を所有するアプリケーションに関係なく、200 メートル先にあるすべてのエンティティを確認する必要がある自動走行車があります。車両用アプリケーションでは、表示可能な領域をカバーする軸に沿ったバウンディングボックス (AABB) としてフィルターを使用してサブスクリプションを作成できます。

シミュレーションの空間的側面を管理する必要のないシミュレーションロジックを作成できます。カスタムアプリケーションは 単一のワーカーで実行される実行可能なプログラムです。カスタムアプリケーションのライフサイクル (開始と停止) を制御します。シミュレーションクライアントはカスタムアプリケーションに接続して、シミュレーションを表示したり操作したりできます。また、すべてのワーカーで実行されるサービスアプリケーションを作成することもできます。SimSpace Weaver はシミュレーションを実行するすべてのワーカーでサービスアプリケーションのインスタンスを起動します。

カスタムアプリケーションとサービスアプリケーションは、エンティティイベントについて学習したりエンティティを読み取ったりするためのサブスクリプションを作成します。これらのアプリケーションは空間的ではないため、所有領域はありません。サブスクリプションを使用することが、シミュレーションの世界で何が起こっているのかを知る唯一の方法です。

SimSpace Weaver の使用方法

SimSpace Weaver を使用する際の主な手順は以下のとおりです。

  1. SimSpace Weaver アプリケーション SDK を統合する C++ アプリケーションを作成して構築します。

    1. アプリケーションは API コールを行ってシミュレーション状態とやりとりします。

  2. 一部のアプリケーションを通じてシミュレーションを表示したり操作したりするクライアントを作成します。

  3. シミュレーションをテキストファイルで構成します。

  4. アプリケーションパッケージとシミュレーション構成をサービスにアップロードします。

  5. シミュレーションを開始します。

  6. カスタムアプリケーションを、必要に応じて起動または停止します。

  7. クライアントをカスタムアプリケーションまたはサービスアプリケーションに接続して、シミュレーションを表示または操作します。

  8. Amazon CloudWatch Logs でシミュレーションログを確認します。

  9. シミュレーションを停止します。

  10. シミュレーションをクリーンアップします。

シミュレーションスキーマ

シミュレーションスキーマ (またはスキーマ) は、シミュレーションの構成情報を含む YAML フォーマットのテキストファイルです。SimSpace Weaver はシミュレーションの開始時にスキーマを使用します。SimSpace Weaver アプリケーション SDK の配布可能パッケージには、サンプルプロジェクトのスキーマが含まれています。自身のスキーマの開始ポイントとしてこれを使用できます。シミュレーションスキーマの詳細については、「SimSpace Weaver シミュレーションスキーマリファレンス」を参照してください。

ワーカーおよびリソースユニット

ワーカーは、シミュレーションを実行する Amazon EC2 インスタンスです。シミュレーションスキーマでワーカータイプを指定します。SimSpace Weaver はワーカータイプを、サービスが使用する特定の Amazon EC2 インスタンスタイプにマッピングします。SimSpace Weaver はワーカーを自動的に起動および停止し、ワーカー間のネットワーク通信を管理します。SimSpace Weaver はシミュレーションごとにワーカーセットを起動します。シミュレーションが異なれば、使用するワーカーも異なります。

ワーカーで使用できるコンピューティング (プロセッサおよびメモリ) 容量は、コンピュートリソースユニット (またはリソースユニット) と呼ばれる論理ユニットに分割されます。リソースユニットは、一定量のプロセッサおよびメモリの容量を表します。

注記

以前はコンピュートリソースユニットをスロットと呼んでいました。ドキュメントには、現在でもこの過去の用語が使用されている可能性があります。

シミュレーションクロック

各シミュレーションには独自のクロックがあります。API コールまたは [SimSpace Weaver] コンソールを使用してクロックを起動および停止します。シミュレーションはクロックが動作しているときにのみ更新されます。シミュレーションのすべての操作は、ティックと呼ばれる時間セグメント内で行われます。クロックはすべてのワーカーに各ティックの開始時間を通知します。

クロックレート (またはティックレート) は、クロックが通知する 1 秒あたりのティック数 (ヘルツ、または Hz) です。シミュレーションに必要なクロックレートは、シミュレーションスキーマの一部です。ティックのすべての操作は、次のティックが開始される前に完了する必要があります。このため、実効クロックレートは目的のクロックレートよりも低くなる可能性があります。実効クロックレートが目的のクロックレートより高くなることはありません。

パーティション

パーティションは、ワーカーの共有メモリの一部です。各パーティションにはシミュレーション状態データの一部が格納されます。

空間アプリケーションのパーティション (空間アプリケーションパーティションまたは空間パーティションとも呼ばれます) には、空間アプリケーションの所有領域内のすべてのエンティティが含まれます。SimSpace Weaver は各エンティティの空間的位置に基づいて、空間アプリケーションパーティションにエンティティを配置します。つまり、SimSpace Weaver は互いに空間的に近いエンティティを同じワーカーに配置しようとします。これにより、所有していないエンティティについてアプリケーションが必要とする知識の量を最小限に抑え、所有しているエンティティをシミュレートできます。

ステートファブリック

ステートファブリックは、すべてのワーカー上の共有メモリ (すべてのパーティションの集まり) のシステムです。シミュレーションのすべての状態データが格納されます。

ステートファブリックは、エンティティをそのエンティティの各データフィールドの初期データと更新ログのセットとして記述するカスタムバイナリフォーマットを使用します。このフォーマットを使用すると、シミュレーション時間内の前の時点におけるエンティティの状態にアクセスし、それを現実世界の特定の時点にマップし直すことができます。バッファのサイズには限りがあり、バッファ内のサイズを超えて時間を戻すことはできません。SimSpace Weaver は各フィールドの更新ログ内の現在のオフセットへのポインタを使用し、フィールド更新の一部としてポインタを更新します。SimSpace Weaver は共有メモリを使用して、これらの更新ログをアプリケーションのプロセス空間にマッピングします。

このオブジェクトフォーマットではオーバーヘッドが少なく、シリアル化のコストもかかりません。また、SimSpace Weaver はこのオブジェクトフォーマットを使用してインデックスフィールド (エンティティの位置など) を解析および識別します。

エンティティ

エンティティは、シミュレーションにおけるデータの最小の構成要素です。エンティティの例としては、アクター (人や乗り物など) や静的オブジェクト (建物や障害物など) があります。エンティティには、SimSpace Weaver に永続データとして保存できるプロパティ (位置や向きなど) があります。エンティティはパーティション内に存在します。

アプリケーション

SimSpace Weaverアプリケーションは、各シミュレーションティックを実行するカスタムロジックを含む、ユーザーが記述するソフトウェアです。ほとんどのアプリケーションの目的は、シミュレーションの実行時にエンティティを更新することです。アプリケーションは SimSpace Weaver アプリケーション SDK の API を呼び出して、シミュレーション内のエンティティに対してアクション (読み取りや更新など) を実行します。

アプリケーションと必要なリソース (ライブラリなど) を.zip ファイルとしてパッケージ化し、SimSpace Weaver にアップロードします。アプリケーションはワーカーの Docker コンテナで実行されます。SimSpace Weaver は各アプリケーションに一定数のワーカーのリソースユニットを割り当てます。

SimSpace Weaver は各アプリケーションに 1 つ (1 つのみ) のパーティションの所有権を割り当てます。アプリケーションとそのパーティションは同じワーカー上にあります。各パーティションにはアプリケーション所有者が 1 人しかいません。アプリケーションは、パーティション内のエンティティを作成、読み取り、更新、および削除できます。アプリケーションはパーティション内のすべてのエンティティを所有します。

アプリケーションには、空間アプリケーションカスタムアプリケーションサービスアプリケーションの 3 種類があります。ユースケースやライフサイクルによって異なります。

注記

SimSpace Weaver では、「アプリケーション」という用語は、アプリケーションのコードまたはそのコードの実行中のインスタンスを指す場合があります。

空間アプリケーション

空間アプリケーションは、シミュレーションに空間的に存在するエンティティの状態を更新します。例えば、ティックごとに速度、形状、サイズに基づいてエンティティを移動したり衝突させたりする Physics アプリケーションを定義できます。この場合、SimSpace Weaver は Physics アプリケーションの複数のインスタンスをパラレル実行して、ワークロードのサイズを処理します。

SimSpace Weaver は空間アプリケーションのライフサイクルを管理します。シミュレーションスキーマで空間アプリケーションパーティションの配置を指定します。シミュレーションを起動すると、SimSpace Weaver は空間アプリケーションのパーティションごとに空間アプリケーションを起動します。シミュレーションを停止すると、SimSpace Weaver は空間アプリケーションをシャットダウンします。

他の種類のアプリケーションはエンティティを作成できますが、エンティティを更新できるのは空間アプリケーションだけです。他の種類のアプリケーションでは、作成したエンティティを空間ドメインに転送する必要があります。SimSpace Weaver はエンティティの空間位置を使用して、そのエンティティを空間アプリケーションのパーティションに転送します。これにより、エンティティの所有権が空間アプリケーションに転送されます。

カスタムアプリケーション

カスタムアプリケーションを使用してシミュレーションを操作します。カスタムアプリケーションはサブスクリプションを使用してエンティティデータを読み取ります。カスタムアプリケーションはエンティティを作成できます。ただし、エンティティをシミュレーションに含めて更新するには、アプリケーションがエンティティを空間アプリケーションに転送する必要があります。SimSpace Weaver はネットワークエンドポイントをカスタムアプリケーションに割り当てることができます。シミュレーションクライアントはネットワークエンドポイントに接続してシミュレーションを操作できます。シミュレーションスキーマでカスタムアプリケーションを定義しますが、(SimSpace Weaver API コールを使用して) 起動および停止するのはユーザーの責任です。ワーカー上でカスタムアプリケーションインスタンスを起動した後は、SimSpace Weaver はそのインスタンスを別のワーカーに転送しません。

サービスアプリケーション

サービスアプリケーションは、すべてのワーカーで読み取り専用プロセスを実行する必要がある場合に使用できます。例えば、大規模なシミュレーションを行っていて、シミュレーション内を移動して表示されているエンティティだけをユーザーに表示する表示クライアントが必要な場合は、サービスアプリケーションを使用できます。この場合、1 つのカスタムアプリケーションインスタンスではシミュレーション内のすべてのエンティティを処理することはできません。すべてのワーカーで起動するようにサービスアプリケーションを構成できます。これらのサービスアプリケーションはそれぞれ、割り当てられたワーカーのエンティティをフィルタリングして、関連するエンティティだけを接続しているクライアントに送信できます。これにより、閲覧中のクライアントは、シミュレーション空間内を移動する際にさまざまなサービスアプリケーションに接続できます。シミュレーションスキーマでサービスアプリケーションを設定します。SimSpace Weaver はサービスアプリケーションを自動的に起動および停止します。

アプリケーションの要約

以下の表は、SimSpace Weaver アプリケーションのタイプ別の特性をまとめたものです。

  空間アプリケーション カスタムアプリケーション サービスアプリケーション
エンティティの読み込み

はい

はい

はい

エンティティの更新

はい

いいえ

いいえ

エンティティを作成する

はい

はい*

はい*

ライフサイクル

管理対象 (SimSpace Weaver が制御)

管理対象外 (ユーザーが制御)

管理対象 (SimSpace Weaver が制御)

起動方法

スキーマの指定に従って、SimSpace Weaver が空間パーティションごとに 1 つのアプリケーションインスタンスを起動します。

ユーザーが各アプリケーションインスタンスを起動します。

スキーマの指定に従って、SimSpace Weaver が各ワーカーで 1 つ以上のアプリケーションインスタンスを起動します。

クライアントが接続できる

いいえ

はい

はい

* カスタムアプリケーションまたはサービスアプリケーションでエンティティを作成する場合、空間アプリケーションがエンティティの状態を更新できるように、アプリケーションはそのエンティティの所有権を空間アプリケーションに転送する必要があります。

ドメイン

SimSpace Weaver ドメインは、同じ実行可能なアプリケーションコードを実行し、同じ起動オプションとコマンドを持つアプリケーションインスタンスの集まりです。ドメインは、その中に含まれるアプリケーションの種類 (空間ドメイン、カスタムドメイン、サービスドメイン) で呼ばれます。アプリケーションはドメイン内で設定します。

サブスクリプションとレプリケーション

アプリケーションは空間領域へのサブスクリプションを作成して、その領域内のエンティティイベント (入力、終了、作成、更新、削除など) を学習します。アプリケーションは、所有していないパーティション内のエンティティのデータを読み取る前に、サブスクリプションからのエンティティイベントを処理します。

パーティションはアプリケーションと同じワーカーに存在できますが (ローカルパーティションと呼ばれます)、別のアプリケーションがそのパーティションを所有できます。パーティションは別のワーカー (リモートパーティションと呼ばれます) に存在することもできます。サブスクリプションがリモートパーティションに対するものである場合、ワーカーはレプリケーションと呼ばれるプロセスを通じてリモートパーティションのローカルコピーを作成します。次に、ワーカーはローカルコピー (複製されたリモートパーティション) を読み取ります。ワーカー上の別のアプリケーションが同じティックでそのパーティションから読み取る必要がある場合、ワーカーは同じローカルコピーを読み取ります。