Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

Code Block
languagec#
themeEmacs
# 기본 스레드 풀 사용처리속도가 빨라 동시 처리량이 작게 필요한 경우
fast-dispatcher {
	type = Dispatcher
	throughput = 2
}

# 기본 스레드 풀 사용처리속도가 느려 동시 처리량 확보가 필요한 경우(8번째 동시처리는 7번째 동시처리중 하나가 끝날때를 기다림)
slow-dispatcher {
	type = Dispatcher
	throughput = 7
}

스레드 풀까지 고려한 설정을 일반적으로 할 필요는 없지만, 더 깊이있는 최적화를 한다고하면

위와같이 액터의 메시지 처리에 사용되는 스레드를 분리할수 있고 최적화 할수 있다.

라우터가 보통 라우터 설정이 스케일 아웃을 위한 기능이라고 한다고하면, Dispatcher 를 통한 스레드 효율성 전략은

...

스레드가 무조건 많다고 많이 처리할수 있는것이 아니기때문에 , 최적화값을 찾아내는것은 찾아내는것은 어려운일중에 하나다

더 자세한 심화학습을 하고자 한다면 다음 문서 참고 : https://doc.akka.io/docs/akka/current/dispatchers.html


최종 설정이 적용된 코드

Code Block
languagec#
themeEmacs
            services.AddAkkaActor<HigPassGateActorProvider>((provider, actorFactory) =>
            {
                var actor = actorFactory.ActorOf(Props.Create<HigPassGateActor>()
                    .WithDispatcher("fast-dispatcher")
                    .WithRouter(FromConfig.Instance), "highpass-gate-pool");
                return () => actor;
            });

            services.AddAkkaActor<CashGateActorProvider>((provider, actorFactory) =>
            {
                var actor = actorFactory.ActorOf(Props.Create<CashGateActor>()
                    .WithDispatcher("slow-dispatcher")
                    .WithRouter(FromConfig.Instance), "cashpass-gate-pool");
                return () => actor;
            });

라우터 전략과 각 라우티에 사용된 액터에 스레드 사용전략을 복합적으로적용한 코드

지금 까지 설정한 내용이 항상 최적화된 상태로 작동됨을 보장할수는 없다. 

메시지를 분산처리 해야하는 네트워크 환경에서 튜닝을 할수 있냐? 없냐? 의 차이는 아주 크다. 



변경 소스 : https://github.com/psmon/AkkaForNetCore/commit/b24003bf16289e171111057174a970c9e45ef2ed

...