tails5555 / Our_Title_Academy_2018_Server

2018 우리들의 제목학원 - Back End[URL 리펙토링]
MIT License
2 stars 0 forks source link

@Scheduled 어노테이션 #4

Open tails5555 opened 5 years ago

tails5555 commented 5 years ago

Spring 3 버전 부터 지원을 하는 기능입니다. 이번 프로젝트에서 실시간 랭킹에 대해서 30분 간격으로 설정하여 Redis 에 있는 데이터를 비우고 다시 채울 때와 새벽 1시 마다 n일 단위로(길게 잡으면 좋긴 하지만 데이터의 수에 따라 케바케로 두는 것이 좋음.) 중복되지 않은 요청을 설정할 때 사용합니다.

그렇지만 Scheduled 어노테이션 중에 cron 표현식을 통해서 일정 시간 간격을 설정할 수 있는데 이를 짧게 하면 오버헤드에 대한 문제점도 고려해야 합니다. 이번 프로젝트에서 시간 간격을 많게는 하루, 적게는 30분 단위로 잡아서 오버헤드에 끼치는 영향을 최소화 했지만 실제로 통계 관련 프로젝트를 진행할 때 짧은 시간에 방대한 데이터 계산이 들어올 때 오버헤드에 대하여 어떻게 대처해야 할까?

J-minkuk commented 5 years ago

단순하게 예를 들자면, 갱신해야 하는 데이터들의 database table의 pk에 해당하는 id가 있다고 가정하자. 그럼 이 id를 2, 3, 4, 5 ... 로 나눴을 때 나머지가 0인 것들만 처리하도록 스케줄러를 여러 개두면 되지 않을까 ?? (id가 1인 것은 따로 처리해야할 듯)

실시간 랭킹의 대상이 무엇이냐에 따라, 각 스케줄러에 고르게 분배하도록 나누는 기준이 바뀔 듯 하다.

tails5555 commented 5 years ago

답변 감사드립니다 😃 프로젝트 뿐만 아니라 랭킹 서버를 만들어 보는 연습 차원에서 진행할 때 참고하도록 하겠습니다!