我正在设计一个系统,该系统将有数亿个状态参与者,我如何控制状态保存在哪里?
我想将集群配置为由具有连接存储的虚拟机组成,以容纳将要保存的大量参与者状态,然后将StateManager配置为使用虚拟机的连接磁盘。
谢谢你抽出时间。
- 修改ARM模板,该模板为集群节点提供每个实例一个额外的托管磁盘:
"dataDisks": [
{
"diskSizeGB": 128,
"lun": 0,
"createOption": "Empty",
"caching": "ReadOnly",
"managedDisk": {
"storageAccountType": "Premium_LRS"
}
}
]
- 使用PowerShell初始化磁盘:
Get-Disk |
Where PartitionStyle -eq 'Raw' |
Select-Object -First 1 |
Initialize-Disk -PartitionStyle MBR -PassThru |
New-Partition -DriveLetter F -UseMaximumSize |
Format-Volume -FileSystem NTFS -NewFileSystemLabel "Data" -Confirm:$false
- 更新集群配置以将状态存储在其他位置。(请记住,这会更改每个服务的状态存储位置,而不仅仅是您的
ActorService
。(:
"settings": {
...
"nodeTypeRef": "[parameters('vmNodeType0Name')]",
"dataPath": "F:\\SvcFab",
"durabilityLevel": "Silver",
...
},
这个github回购似乎描述了您的需求。
- 要更改单个服务的状态管理器,需要自定义
IActorStateManager
和IActorStateProvider
的实现,并在调用中传递它们以注册Actor类型:ActorRuntime.RegisterActorAsync