Service Fabric 是不是会无限期保留参与者信息?

Posted

技术标签:

【中文标题】Service Fabric 是不是会无限期保留参与者信息?【英文标题】:Does Service Fabric keep actor information indefinitely?Service Fabric 是否会无限期保留参与者信息? 【发布时间】:2021-07-05 02:44:36 【问题描述】:

出于 GDPR 的原因,我需要确保不存储不再需要的客户数据。在查看 Service Fabric Actors 时,我不确定“垃圾收集”的真正含义。

[StatePersistence(StatePersistence.Persisted)]
internal class Actor1 : Actor, IActor1

    public Actor1(ActorService actorService, ActorId actorId) 
        : base(actorService, actorId)
    
    

    public Task PingAsync(CancellationToken cancellationToken)
    
        return Task.CompletedTask;
    

IActorService actorServiceProxy = ActorServiceProxy.Create(
    new Uri("fabric:/MyApp/MyActorService"), partitionKey);
// ...
do

    PagedResult<ActorInformation> page = await actorServiceProxy.GetActorsAsync(continuationToken, cancellationToken);
// ...

在测试环境中枚举 actor instances 时,在我看来,演员信息至少保留了 2 个月,即使演员没有任何存储状态。

我发现多篇文章提到如果演员有剩余状态,我将需要手动删除他们,但在我的情况下,唯一的“状态”将是 actorId“存在”的事实。如果我将用户电子邮件地址等敏感信息用作 actorId,Service Fabric 是否会自行删除有关 actorId 的信息?

【问题讨论】:

【参考方案1】:

垃圾收集(在此上下文中)意味着从内存中删除一个 Actor 对象以释放资源。如果 Actor 具有StatePersistence.Persisted,则其状态将写入底层ActorService 的每个副本上的磁盘。即使您没有在 StateManager 中明确存储任何内容,也会存在 Actor 的记录(使用 ActorId 作为键)。

作为开发人员,您可以自行管理 Actor 状态的生命周期。显式删除 Actor 也会删除其状态。

停用演员的垃圾收集只清理演员 对象,但它不会删除存储在参与者状态中的数据 经理。当一个演员被重新激活时,它的数据再次被制作 通过状态管理器提供给它。在演员存储的情况下 状态管理器中的数据并且被停用但从未重新激活,它 可能需要清理他们的数据。

更多信息here。

【讨论】:

换句话说,只有StatePersistence(StatePersistence.Persisted) 意味着它将创建一些关于演员存在/存在这一事实的状态。因此,如果我想要它消失,我也需要删除它。或者为属性使用不同的值。谢谢

以上是关于Service Fabric 是不是会无限期保留参与者信息?的主要内容,如果未能解决你的问题,请参考以下文章

Service Fabric - 如何保留或保护我的硬编码端口

通过Azure DevOps部署Service Fabric并在Octopus中管理环境变量

Tungsten Fabric SDN — Service Chain — 高级特性

Tungsten Fabric SDN — Service Chain — 高级特性

您是不是可以在本地调试 Service Fabric 群集?

Service Fabric,确定是不是存在特定参与者