首页 > 解决方案 > Service Fabric 是否会无限期保留参与者信息?

问题描述

出于 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);
// ...

在测试环境中枚举参与者实例时,在我看来,参与者信息至少保留了 2 个月,即使参与者没有任何存储状态。

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

标签: azure-service-fabricservice-fabric-actor

解决方案


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

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

已停用 Actor 的垃圾收集仅清理 Actor 对象,但不会删除存储在 Actor 状态管理器中的数据。当一个参与者重新激活时,它的数据再次通过状态管理器提供给它。如果参与者将数据存储在状态管理器中并且被停用但从未重新激活,则可能需要清理他们的数据。

更多信息在这里


推荐阅读