服务结构状态配置

问题描述

我正在设计一个拥有数亿个有状态参与者的系统,如何控制状态的保存位置?

我想将集群配置为由具有附加存储的VM组成,以容纳将要保存的大量参与者状态,然后将StateManager配置为使用VM的附加磁盘。

感谢您的时间。

解决方法

  1. 修改ARM模板,以便为每个实例的群集节点配置一个额外的托管磁盘:
"dataDisks": [
    {
        "diskSizeGB": 128,"lun": 0,"createOption": "Empty","caching": "ReadOnly","managedDisk": {
            "storageAccountType": "Premium_LRS"
        }
    }
]
  1. 使用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
  1. 更新群集配置以将状态存储在其他位置。 (请记住,这会更改每个服务的状态存储位置,而不仅仅是您的ActorService。):
"settings": {
    ...
    "nodeTypeRef": "[parameters('vmNodeType0Name')]","dataPath": "F:\\\\SvcFab","durabilityLevel": "Silver",...
},

This github repo似乎在描述您的需求。

  1. 要更改单个服务的状态管理器,您需要对IActorStateManagerIActorStateProvider进行自定义实现,并在调用中传递它们以注册您的Actor类型:ActorRuntime.RegisterActorAsync。 / li>

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...