azure-service-fabric - 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 的信息?
解决方案
垃圾收集(在此上下文中)意味着从内存中删除一个 Actor 对象以释放资源。如果 Actor 有StatePersistence.Persisted
其状态,将在底层的每个副本上写入磁盘ActorService
。即使您没有在 中明确存储任何内容,也会存在StateManager
Actor 的记录(ActorId
用作键)。
作为开发人员,您可以管理 Actor 状态的生命周期。显式删除 Actor 也会删除其状态。
已停用 Actor 的垃圾收集仅清理 Actor 对象,但不会删除存储在 Actor 状态管理器中的数据。当一个参与者重新激活时,它的数据再次通过状态管理器提供给它。如果参与者将数据存储在状态管理器中并且被停用但从未重新激活,则可能需要清理他们的数据。
更多信息在这里。
推荐阅读
- unity3d - 后期处理插件中的隐藏/后期特效/优步着色器时间过长
- json - 弹性搜索如何索引嵌套列表
- c++ - C ++定义一个宏,它接受一个函数并将其传递给其他函数,这可能吗?
- java - Java 8 PriorityQueue 比较器做错了什么?
- html - 如何使图像网格适合所有屏幕分辨率?
- python - Python - 将两个单列列表合并为一个双列列表并打印
- google-cloud-platform - 带有 JWT 令牌的 Google Cloud Storage JSON API
- javascript - Javascript:单击后更改按钮文本更改
- awk - 如何使用 awk 仅打印在某个字段具有最小值的匹配项?
- r - 在 R 中使用循环创建多个图