问题描述
我正在设计一个拥有数亿个有状态参与者的系统,如何控制状态的保存位置?
我想将集群配置为由具有附加存储的VM组成,以容纳将要保存的大量参与者状态,然后将StateManager配置为使用VM的附加磁盘。
感谢您的时间。
解决方法
- 修改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",...
},
This github repo似乎在描述您的需求。
- 要更改单个服务的状态管理器,您需要对
IActorStateManager
和IActorStateProvider
进行自定义实现,并在调用中传递它们以注册您的Actor类型:ActorRuntime.RegisterActorAsync
。 / li>