本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
重要概念SimSpace Weaver
模擬或遊戲受限於執行模擬或遊戲的電腦。隨著虛擬世界的規模和複雜性的增加,處理效能開始降低。計算所花費的時間較長,系統記憶體不足,而且用戶端畫面播放速率下降。對於不需要實時性能的模擬,這可能只是令人討厭。或者,這可能是業務關鍵情況,因為處理延遲的增加導致成本增加。如果您的模擬或遊戲需要即時效能,那麼效能降低絕對是個問題。
達到效能限制的模擬的常見解決方案是簡化模擬。有許多用戶的在線遊戲通常通過在不同的服務器上複製他們的虛擬世界並將用戶分散到他們之間來解決擴展問題。
SimSpace Weaver透過在空間上劃分虛擬世界,並將片段分配到中執行的計算執行個體叢集,藉此解決擴展問題AWS 雲端。運算執行個體共同運作,以 parallel 處理整個模擬世界。您的模擬世界顯示為一個單一的集成空間,對於其中的所有內容以及連接到該世界的所有客戶。由於硬體效能限制,您不再需要簡化模擬。您可以改為在雲端中新增更多運算容量。
SimSpace Weaver 的運作方式
您的模擬由一個包含物件的世界組成。一些物體(例如人和車輛)移動並做事情。其他物件 (例如樹木和建築物) 是靜態的。在中SimSpace Weaver,圖元是模擬世界中的物件。
您可以定義模擬世界的邊界並將其分割為網格。而不是建立在整個網格上運作的模擬邏輯,而是建立在網格的一個儲存格上運作的模擬邏輯。在中SimSpace Weaver,空間應用程式是您撰寫的程式,可為網格的儲存格實作模擬邏輯。這包括該儲存格中所有實體的邏輯。空間應用程式的擁有權區域是空間應用程式控制的網格儲存格。
注意
在中SimSpace Weaver,術語「app」可以指應用程式的程式碼或該程式碼的執行中執行個體。
![]() 您的模擬世界分為一個網格您可以將模擬世界劃分為網格。每個空間應用程式都會為該網格中的單一儲存格實作模擬邏輯。 |
SimSpace Weaver為網格的每個儲存格執行空間應用程式程式碼執行個體。所有空間應用程式執行個體並行執 parallel。基本上,SimSpace Weaver將整體模擬劃分為多個較小的模擬。每個較小的模擬都可以處理整體模擬世界的一部分。 SimSpace Weaver可以將這些較小的模擬分發及執行個體上,並執行這些較小的模擬至AWS 雲端. 單一 Worker 可以執行多個空間應用程式。
圖元可以在模擬世界中移動。如果實體進入另一個空間應用程式的擁有權區域 (網格中的另一個儲存格),則新區域的空間應用程式擁有者會接管實體的控制權。如果您的模擬在多個 Worker 上執行,則實體可能會從一個 Worker 上的空間應用程式控制項移至不同 Worker 上的空間應用程式。當實體移至不同 Worker 時,會SimSpace Weaver處理基礎網路通訊。
訂閱
空間應用程序的世界觀是其自己的所有權區域。為了找出在模擬世界的另一個部分發生了什麼,空間應用程序創建了一個訂閱。訂閱區域是整體模擬世界區域的一個子集。訂閱區域可以包含多個擁有權區域的一部分,包括空間應用程式自己的擁有權區域。 SimSpace Weaver通知空間應用程式發生在訂閱區域內的所有實體事件 (例如,輸入、結束、建立、更新和刪除)。
![]() 空間應用程式的世界觀空間應用程序的世界觀是它的所有權區域,這是世界網格中的一個單元格。 |
![]() 帶有添加訂閱區域的空間應用程序視圖空間應用程序使用訂閱來了解模擬世界的另一個部分發生了什麼。訂閱區域可以包含多個網格儲存格和儲存格的一部分。 |
例如,模擬實體交互的應用程序可能需要了解超出其所有權區域空間邊界的實體。為此,該應用程序可以訂閱與其所有權區域邊界的區域。創建訂閱後,應用程序會收到有關這些區域中實體事件的通知,並且可以讀取實體。另一個例子是自動駕駛汽車,無論哪個應用程序擁有該區域,都需要查看前面 200 米的所有實體。(AABB)該車輛的應用程序可以創建帶有過濾器的訂閱,作為涵蓋可視區域的軸對齊邊界框。
您可以建立不負責管理模擬空間層面的模擬邏輯。自訂應用程式是在單一 Worker 上執行的可執行程式。您可以控制自訂應用程式的生命週期 (開始和停止)。模擬用戶端可以連線至自訂應用程式,以檢視模擬或與模擬互動。您也可以建立在每個 Worker 上執行的服務應用程式。 SimSpace Weaver在執行模擬的每個 Worker 上啟動服務應用程式執行個體。
自訂應用程式和服務應用程式會建立訂閱,以了解實體事件和讀取實體。這些應用程序沒有所有權區域,因為它們不是空間的。使用訂閱是他們可以找出模擬世界中發生的事情的唯一方法。
您如何使用SimSpace Weaver
使用時SimSpace Weaver,以下是您遵循的主要步驟:
撰寫並建置整合C++應用程式 SDK 的SimSpace Weaver應用程式。
您的應用程式會進行 API 呼叫,以便與模擬狀態互動。
撰寫可透過某些應用程式檢視您的模擬並與其互動的用戶端。
在文字檔中規劃模擬。
將您的應用程式套件和模擬設定上傳至服務。
開始您的模擬。
視需要啟動和停止您的自訂應用程式。
將用戶端 Connect 至您的自訂或服務應用程式,以檢視模擬或與其互動。
在亞馬遜日誌中檢查您的模擬CloudWatch日誌。
停止您的模擬。
清理您的模擬。
模擬綱要
模擬資料架構 (或資料架構) 是YAML格式化的文字檔,其中包含模擬的規劃資訊。 SimSpace Weaver啟動模擬時會使用您的資料架構。SimSpace Weaver應用程式 SDK 可散發套件包含範例專案的結構描述。您可以使用這個做為自有結構描述的起點。如需模擬資料架構的資訊,請參閱SimSpace Weaver 模擬結構描述參考。
工作者與資源單位
工作者是執行模擬的 Amazon EC2 執行個體。您可以在模擬資料架構中指定 Worker 類型。 SimSpace Weaver將您的工作者類型對應到服務使用的特定 Amazon EC2 執行個體類型。 SimSpace Weaver為您啟動和停止您的員工,並管理員工之間的網路通訊。 SimSpace Weaver為每個模擬啟動一組工作者。不同的模擬使用不同的工作者。
Worker 上可用的運算 (處理器和記憶體) 容量分為邏輯單位,稱為計算資源單位 (或資源單位)。資源單位代表固定數量的處理器和記憶體容量。
注意
我們先前將計算資源單位稱為插槽。您可能仍會在我們的文件中看到上一個術語。
模擬時鐘
每個模擬都有自己的時鐘。您可以使用 API 呼叫或SimSpace Weaver主控台來啟動和停止時鐘。模擬只有在時鐘執行時才會更新。模擬中的所有作業均在稱為刻度的時間段內進行。時鐘向所有員工宣布每個刻度的開始時間。
時脈速率 (或刻度速率) 是時脈宣布的每秒刻度數 (赫茲或 Hz)。模擬所需的時脈速率是模擬結構描述的一部分。刻度線的所有操作必須在下一個刻度開始之前完成。因此,有效時脈速率可以低於所需的時脈速率。有效時脈速率不會高於所需的時脈速率。
資料分割
磁碟分割是 Worker 上共用記憶體的區段。每個分割區都保存模擬狀態資料的一部分。
空間應用程式的磁碟分割 (也稱為空間應用程式磁碟分割或空間分割區) 包含空間應用程式擁有權區域中的所有實體。 SimSpace Weaver根據每個實體的空間位置,將實體置於空間應用程式磁碟分割中。這表示SimSpace Weaver會嘗試將空間上彼此靠近的實體放置在同一個 Worker 上。這樣可以最大限度地減少應用程序所需的知識量,它不擁有的實體來模擬它擁有的實體。
国家面料
狀態結構是所有 Worker 上共享內存(所有分區的集合)的系統。它會保留模擬的所有狀態資料。
State Fabric 使用自訂二進位格式,針對該實體的每個資料欄位,將實體描述為一組初始資料和更新記錄檔。使用此格式,您可以存取模擬時間中上一個點的圖元狀態,並將其對映回真實時間中的某個點。緩衝區具有有限的大小,並且不可能回到超出緩衝區中的內容。 SimSpace Weaver使用指向每個字段更新日誌中當前偏移量的指針,並在字段更新過程中更新指針。 SimSpace Weaver使用共享內存將這些更新日誌映射到應用程序的進程空間。
此物件格式會導致低額外負荷且無序列化成本。 SimSpace Weaver也會使用此物件格式來剖析和識別索引欄位 (例如實體位置)。
實體
圖元是模擬中最小的資料建置區塊。實體的範例包括演員 (例如人員和車輛) 和靜態物件 (例如建築物和障礙物)。實體具有可儲存為永久性資料的屬性 (例如位置和方向)SimSpace Weaver。實體存在於磁碟分割內。
應用程式
SimSpace Weaver應用程序是您編寫的軟件,其中包含運行每個模擬刻度的自定義邏輯。大多數應用程式的目的是在模擬執行時更新實體。您的應用程式會呼叫SimSpace Weaver應用程式 SDK 中的 API,以對模擬中的實體執行動作 (例如讀取和更新)。
您可以將應用程式及其所需資源 (例如程式庫) 封裝為 .zip 檔案,然後將它們上傳到SimSpace Weaver。應用程式在背景工作上的 Docker 容器中執行的應用程式。 SimSpace Weaver在 Worker 上為每個應用程序分配固定數量的資源單元。
SimSpace Weaver為每個應用程式指派一個 (且只有一個) 分割區的擁有權。應用程式及其分割區位於同一個 Worker 上。每個分區只有一個應用程序所有者。應用程式可以建立、讀取、更新及刪除分割區中的實體。一個應用程序擁有其分區中的所有實體。
有三種類型的應用程序:空間應用程序,自定義應用程序和服務應用程序。它們因使用案例和生命週期而異。
注意
在中SimSpace Weaver,術語「app」可以指應用程式的程式碼或該程式碼的執行中執行個體。
空間 App
空間應用程式會更新模擬中空間上存在的圖元的狀態。例如,您可以定義一個Physics
應用程序,該應用程序負責根據其速度,形狀和大小為每個刻度移動和衝突實體。在此情況下,SimSpace Weaver會 parallel 執行Physics
應用程式的多個執行個體,以處理工作負載的大小。
SimSpace Weaver管理空間應用程式的生命週期。您可以在模擬結構描述中指定空間應用程式分割區的排列。啟動模擬時,請為每個空間應用程式分割區SimSpace Weaver啟動空間應用程式。當您停止模擬時,會SimSpace Weaver關閉您的空間應用程式。
其他類型的應用程式可以建立實體,但只有空間應用程式可以更新實體。其他類型的應用程式必須將其建立的實體傳輸至空間網域。 SimSpace Weaver使用實體的空間位置,將實體移至空間應用程式的分割區。這會將實體的擁有權轉移至空間應用程式。
自訂 App
您可以使用自訂應用程式與模擬互動。自定義應用程序使用訂閱讀取實體數據。自訂應用程式可以建立實體。不過,應用程式必須將實體轉移至空間應用程式,才能將實體包含在模擬中並進行更新。您可以將網路端點SimSpace Weaver指派給自訂應用程式。模擬客戶端可以連接到網絡端點以與模擬進行交互。您可以在模擬結構描述中定義自訂應用程式,但您有責任啟動和停止它們 (使用SimSpace Weaver API 呼叫)。在 Worker 上啟動自訂應用程式執行個體之後,SimSpace Weaver不會將執行個體轉移給其他背景工作。
服務應用
當您需要在每個 Worker 上執行唯讀程序時,可以使用服務應用程式。例如,如果您有一個大型模擬,並且您需要一個檢視用戶端,該用戶端會在模擬中移動並僅向使用者顯示可見實體,則可以使用服務應用程式。在這種情況下,單個自定義應用程序實例無法處理模擬中的所有實體。您可以將服務應用程式設定為在每個 Worker 上啟動。然後,每個服務應用程式都可以篩選其指派 Worker 上的實體,並僅將相關實體傳送至其連線的用戶端。然後,您的觀看客戶端可以在模擬空間中移動時連接到不同的服務應用程序。您可在模擬結構描述中設定服務應用程式。 SimSpace Weaver為您啟動和停止服務應用程式。
App 摘要
下表摘要列出不同類型之SimSpace Weaver應用程式的特性。
空間 App | 自訂 App | 服務應用 | |
---|---|---|---|
讀取實體 |
是 |
是 |
是 |
更新實體 |
是 |
否 |
否 |
建立實體 |
是 |
是* |
是* |
生命週期 |
管理(SimSpace Weaver控制它。) |
未受管理 (您可以控制它。) |
管理(SimSpace Weaver控制它。) |
啟動方法 |
SimSpace Weaver為每個空間分區啟動一個應用程序實例,如模式中指定的那樣。 |
啟動每個應用程式執行個體。 |
SimSpace Weaver根據結構描述中的指定,在每個 Worker 上啟動一個或多個應用程式執行個體。 |
用戶端可以連線 |
否 |
是 |
是 |
* 當自訂應用程式或服務應用程式建立實體時,應用程式必須將實體的擁有權轉移到空間應用程式,以便空間應用程式可以更新實體的狀態。
網域
SimSpace Weaver網域是執行相同可執行應用程式程式碼且具有相同啟動選項和命令的應用程式執行個體集合。我們會依包含的應用程式類型來參考網域:空間網域、自訂網域和服務網域。您可以在網域中設定應用程式。
訂閱和複寫
應用程式會建立空間區域的訂閱,以了解該區域中的實體事件 (例如,輸入、結束、建立、更新和刪除)。應用程式會先處理訂閱中的實體事件,然後再讀取未擁有之分割區中實體的資料。
分區可以存在於與應用程序相同的 Worker 上(這稱為本地分區),但另一個應用程序可以擁有該分區。分割區也可以存在於不同的 Worker 上 (這稱為遠端磁碟分割)。如果訂閱是遠端磁碟分割,Worker 會透過稱為複寫的程序建立遠端磁碟分割的本機副本。然後 Worker 會讀取本機副本 (複製的遠端磁碟分割)。如果 Worker 上的另一個應用程式需要在同一個刻度上從該磁碟分割讀取,則 Worker 會讀取相同的本機副本。