이벤트
3월 17일 오후 9시 - 3월 21일 오전 10시
모임 시리즈에 참여하여 동료 개발자 및 전문가와 함께 실제 사용 사례를 기반으로 확장 가능한 AI 솔루션을 빌드합니다.
지금 등록이 문서의 적용 대상: ✔️ Orleans 7.x 및 이후 버전
이 문서의 적용 대상: ✔️ Orleans 3.x 및 이전 버전
조직 활성화는 필요에 따라 Orleans 런타임에 의해 조직의 임시 실제 구현으로 자동 만들어지는 조직 클래스의 메모리 내 인스턴스입니다.
활성화 컬렉션은 사용되지 않는 조직 활성화를 메모리에서 제거하는 프로세스입니다. 개념적으로는 .NET에서 메모리의 가비지 컬렉션이 작동하는 방식과 유사합니다. 그러나 활성화 컬렉션은 특정 조직 활성화가 유휴 상태인 기간만 고려합니다. 메모리 사용량은 요인으로 사용되지 않습니다.
활성화 컬렉션의 일반적인 프로세스에는 구성된 기간(컬렉션 기간 제한) 동안 전혀 사용되지 않은 조직 활성화를 주기적으로 검사하는 사일로의 Orleans 런타임이 포함됩니다. 조직 활성화가 해당 기간 동안 유휴 상태가 되면 비활성화됩니다. 비활성화 프로세스는 조직의 OnDeactivateAsync() 메서드를 호출하는 런타임에 의해 시작되고 사일로의 모든 데이터 구조에서 조직 활성화 개체에 대한 참조를 제거하여 완료되므로 메모리는 .NET GC에 의해 회수됩니다.
따라서 애플리케이션 코드에 부담을 주지 않고 최근에 사용된 조직 활성화만 메모리에 유지되는 반면 더 이상 사용되지 않는 활성화는 자동으로 제거되고 여기에 사용되는 시스템 리소스는 런타임에 의해 회수됩니다.
조직 활성화 컬렉션에 대해 "활성 상태"로 간주되는 항목
조직 활성화 컬렉션에 대해 "활성 상태"로 간주되지 않는 항목
수집 기간 제한
이 시간이 지나면 유휴 상태인 조직 활성화가 컬렉션의 대상이 되며 이를 컬렉션 기간 제한이라고 합니다. 기본 컬렉션 기간 제한은 15분이지만 전역적으로 또는 개별 조직 클래스에 대해 변경할 수 있습니다.
이 시간이 지나면 유휴 상태인 조직 활성화가 컬렉션의 대상이 되며 이를 컬렉션 기간 제한이라고 합니다. 기본 수집 기간 제한은 2시간이지만 전역적으로 또는 개별 조직 클래스에 대해 변경할 수 있습니다.
조직 활성화는 DelayDeactivation 메서드를 호출하여 자체 컬렉션을 지연할 수 있습니다.
protected void DelayDeactivation(TimeSpan timeSpan)
이 호출은 이 활성화가 최소한 지정된 기간 동안 비활성화되지 않도록 합니다. 구성에 지정된 활성화 컬렉션 설정보다 우선하지만 취소하지는 않습니다. 따라서 이 호출은 활성화 컬렉션 설정에 지정된 것 이상으로 비활성화를 지연하는 또 다른 후크를 제공합니다. 이 호출은 활성화 컬렉션을 신속하게 처리하는 데 사용할 수 없습니다.
양수 timeSpan
값은 "해당 시간 동안 이 활성화의 컬렉션 방지"를 의미합니다.
음수 timeSpan
값은 "DelayDeactivation
호출의 이전 설정을 취소하고 일반 활성화 컬렉션 설정에 따라 이 활성화가 동작하도록 함"을 의미합니다.
시나리오:
활성화 컬렉션 설정은 기간 제한을 10분으로 지정하고, 조직이 DelayDeactivation(TimeSpan.FromMinutes(20))
호출을 수행하면 이 활성화가 최소 20분 동안 수집되지 않습니다.
활성화 컬렉션 설정은 기간 제한을 10분으로 지정하고, 조직이 DelayDeactivation(TimeSpan.FromMinutes(5))
호출을 수행하면 추가 호출이 없는 경우 이 활성화가 10분 후에 수집됩니다.
활성화 컬렉션 설정은 기간 제한을 10분으로 지정하고, 조직이 DelayDeactivation(TimeSpan.FromMinutes(5))
호출을 수행하고 7분 후에 이 조직에 대한 또 다른 호출이 있는 경우 0시간부터 17분 후에 활성화가 수집됩니다(추가 호출이 수행되지 않은 경우).
활성화 컬렉션 설정은 기간 제한을 10분으로 지정하고, 조직이 DelayDeactivation(TimeSpan.FromMinutes(20))
호출을 수행하고 7분 후에 이 조직에 대한 또 다른 호출이 있는 경우 0시간부터 20분 후에 활성화가 수집됩니다(추가 호출이 수행되지 않은 경우).
DelayDeactivation
은 지정된 시간이 만료되기 전에 조직 활성화가 비활성화되지 않을 것이라고 100% 보장하지 않습니다. 특정 실패 사례는 조직의 '조기' 비활성화를 일으킬 수 있습니다. 즉, DelayDeactivation
메모리의 그레인 활성화를 영원히 또는 특정 사일로 '고정'하는 수단으로 사용할 수 없습니다. DelayDeactivation
은 시간이 지남에 따라 조직이 비활성화되고 다시 활성화되는 총 비용을 줄이는 데 도움이 될 수 있는 최적화 메커니즘일 뿐입니다. 대부분의 경우 DelayDeactivation
을 전혀 필요가 없습니다.
또한 조직 활성화는 DeactivateOnIdle() 메서드를 호출하여 다음 번에 유휴 상태가 될 때 비활성화하도록 런타임에 지시할 수도 있습니다.
protected void DeactivateOnIdle()
조직 활성화는 현재 어떠한 메시지도 처리하지 않는 경우 유휴 상태로 간주됩니다. 조직이 메시지를 처리하는 동안 DeactivateOnIdle
을 호출하면 현재 메시지 처리가 완료되는 즉시 비활성화됩니다. 조직에 대해 대기 중인 요청이 있는 경우 다음 활성화로 전달됩니다.
DeactivateOnIdle
은(는) 구성 또는 DelayDeactivation
에 지정된 활성화 컬렉션 설정보다 우선합니다.
참고
설정은 호출된 조직 활성화에만 적용되며 이 형식의 다른 조직 활성화에는 적용되지 않습니다.
GrainCollectionOptions를 사용하여 활성화 컬렉션을 구성할 수 있습니다.
mySiloHostBuilder.Configure<GrainCollectionOptions>(options =>
{
// Set the value of CollectionAge to 10 minutes for all grain
options.CollectionAge = TimeSpan.FromMinutes(10);
// Override the value of CollectionAge to 5 minutes for MyGrainImplementation
options.ClassSpecificCollectionAge[typeof(MyGrainImplementation).FullName] =
TimeSpan.FromMinutes(5);
})
조직을 활성 상태로 유지하려면 Orleans.KeepAliveAttribute를 조직 구현에 적용합니다. KeepAlive
특성은 유휴 활성화 수집기에 의한 조직 수집을 방지하도록 Orleans 런타임에 지시합니다. 수집을 방지하는 것은 자주 사용되지 않지만 잠재적인 만들기 오버헤드를 피하기 위해 활성 상태를 유지하려는 조직에 유용합니다.
public interface IPlayerGrain : IGrainWithGuidKey
{
Task<IGameGrain> GetCurrentGame();
Task JoinGame(IGameGrain game);
Task LeaveGame(IGameGrain game);
}
[KeepAlive]
public class PlayerGrain : Grain, IPlayerGrain
{
private IGameGrain _currentGame;
public Task<IGameGrain> GetCurrentGame()
{
return Task.FromResult(_currentGame);
}
public Task JoinGame(IGameGrain game)
{
// Omitted for brevity.
return Task.CompletedTask;
}
public Task LeaveGame(IGameGrain game)
{
// Omitted for brevity.
return Task.CompletedTask;
}
}
앞의 코드는 유휴 활성화 수집기가 PlayerGrain
을(를) 수집하는 것을 방지합니다.
.NET 피드백
.NET은(는) 오픈 소스 프로젝트입니다. 다음 링크를 선택하여 피드백을 제공해 주세요.
이벤트
3월 17일 오후 9시 - 3월 21일 오전 10시
모임 시리즈에 참여하여 동료 개발자 및 전문가와 함께 실제 사용 사례를 기반으로 확장 가능한 AI 솔루션을 빌드합니다.
지금 등록학습