Page History
Info |
---|
이장을 통해 추가적으로 알게 되는것
|
메시징(유입차량)에따른 톨게이트 구현은 , 트래픽 처리연마를 위한 좋은 샘플입니다.
구현하려고 하는 톨게이트 모델
- 하이패스와 현금게이트 비율은 3:7이며 비율 조정이 유연해야함 - 실세계는 큰 공사가 필요함
- 하이패스는 기달림이 없음 - 실세계는 30km이하로 저속운행
- 현금 게이트는 1~10초 랜덤한 대기발생 - 실세계는 정산원의 능력과 운전자의 능력이 복합적으로 반영됨
- 동일 Type게이트에서 공평한 대기 분배가 이루어지고 Type이 다른것의 성능 차이는 감수해야함 - 실 세계는 줄을 잘서거나 ,교통법규를 준수하지 않으면 빠르게 통과할수도 있음
액터 구현
하이패스 게이트
Code Block | ||||
---|---|---|---|---|
| ||||
public HigPassGateActor() { id = Guid.NewGuid().ToString(); logger.Info($"하이패스 액터 생성:{id}"); ReceiveAsync<string>(async msg => { //하이패스는 그냥 지나가면됨 logger.Debug($"{msg}"); }); } |
현금정산소 게이트
Code Block | ||||
---|---|---|---|---|
| ||||
public CashGateActor() { rnd = new Random(); id = Guid.NewGuid().ToString(); logger.Info($"현금정산게이트 액터 생성:{id}"); ReceiveAsync<string>(async msg => { //현금정산에 걸리는시간 1~10초 int delay = rnd.Next(1000, 10000); await Task.Delay(delay); logger.Debug($"{msg}-{delay}"); }); } |
액터 성능전략 적용
라우터구성
Code Block | ||||
---|---|---|---|---|
| ||||
actor.deployment { /highpass-gate-pool { router = round-robin-pool nr-of-instances = 3 } /cashpass-gate-pool { router = smallest-mailbox-pool nr-of-instances = 7 } } |
...
라우터에 대한 심화학습 : https://getakka.net/articles/actors/routers.html
스레드풀 구성
Code Block | ||||
---|---|---|---|---|
| ||||
# 처리속도가 빨라 동시 처리량이 작게 필요한 경우 fast-dispatcher { type = Dispatcher throughput = 2 } # 처리속도가 느려 동시 처리량 확보가 필요한 경우(8번째 동시처리는 7번째 동시처리중 하나가 끝날때를 기다림) slow-dispatcher { type = Dispatcher throughput = 7 } |
...
더 자세한 심화학습을 하고자 한다면 다음 문서 참고 : https://doc.akka.io/docs/akka/current/dispatchers.html
액터 생성코드
Code Block | ||||
---|---|---|---|---|
| ||||
AkkaLoad.RegisterActor( "highpass", actorSystem.ActorOf(Props.Create<HighPassGateActor>() .WithDispatcher("fast-dispatcher") .WithRouter(FromConfig.Instance), "highpass-gate-pool" )); AkkaLoad.RegisterActor( "cashpass", actorSystem.ActorOf(Props.Create<CashGateActor>() .WithDispatcher("slow-dispatcher") .WithRouter(FromConfig.Instance), "cashpass-gate-pool" )); |
...