Versions Compared

Key

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

...

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

위 값에대한 최적값은 트래픽의 패턴에 따라 최적값을 찾아야하며, 중요한것은 성능에따라 분리해야한다란것이다.

일반적으로 액터 동시처리능력은 throughput에의해 결정되며 100이상의 값을 충분히 커버한다.

위와 같이 분리한 이유는, 성능이 느린 액터로 인해 동시 처리능력이 충분히 빠른 액터도 대기가 걸릴수 있기때문이다.

즉 동시처리 전체 성능 10이란것을 현금 게이트가 다 점유를 한다고하면, 하이패스에 처리되는 메시지 자체가

대기에 걸릴수 있으며 이것은 우리가 원하는 성능이 아니다.라우터가 보통 스케일 아웃을 위한 기능이라고 한다고하면, Dispatcher 를 통한 스레드 효율성 전략은

스케일 업(단일 노드가 최대로 처리할수 있는능력)과 관련이 있습니다.

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


최종 설정이 적용된 코드

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;
            });

...