Хранит ли 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 месяца, хотя у актеров не было никакого сохраненного состояния.

Я нашел несколько статей, в которых упоминается, что мне нужно будет удалить акторов вручную, если у них есть оставшееся состояние, но в моем случае единственным состоянием будет тот факт, что существует акторId. Если бы я использовал что-то конфиденциальное, например адрес электронной почты пользователя, в качестве актера, смог бы Service Fabric когда-нибудь самостоятельно удалить информацию об актореId?


person Alex AIT    schedule 09.04.2021    source источник


Ответы (1)


Сборка мусора (в данном контексте) означает, что объект Actor удаляется из памяти для освобождения ресурсов. Если Актер имеет StatePersistence.Persisted, его состояние будет записано на диск на каждой реплике нижележащего ActorService. Даже если вы явно ничего не храните в StateManager, запись об Актере (с использованием ActorId в качестве ключа) будет существовать.

Вам как разработчику решать, управлять жизненным циклом состояния Актера. При явном удалении Актера также удаляется его состояние.

Сборка мусора деактивированных акторов очищает только объект актора, но не удаляет данные, которые хранятся в диспетчере состояний актора. Когда субъект повторно активируется, его данные снова становятся доступными ему через диспетчер состояний. В случаях, когда субъекты хранят данные в диспетчере состояний и деактивируются, но никогда не активируются повторно, может потребоваться очистка их данных.

Дополнительная информация здесь.

person LoekD    schedule 26.04.2021
comment
Другими словами, просто наличие StatePersistence(StatePersistence.Persisted) означает, что он создаст некоторую информацию о том, что актер существует / существовал. Поэтому мне также нужно удалить его, если я хочу, чтобы он исчез. Или используйте другое значение атрибута. Спасибо - person Alex AIT; 26.04.2021
comment
Ага, и добро пожаловать! - person LoekD; 26.04.2021