2017-05-15 4 views
0

우리는 다양한 고객을 보유한 앱을 보유하고 있습니다. 우리는 클라이언트가 대용량 CSV 파일 가져 오기와 같은 장기 실행 작업을 수행 할 수 있도록합니다. 현재 우리는 한 번에 클라이언트 당 1 개의 가져 오기만을 허용하고 단일 작업에서 전체 가져 오기를 실행함으로써 공정성을 유지합니다.Sidekiq - 한 명의 고객이 모든 직원을 사용하지 못하도록하십시오.

10,000 줄의 CSV를 10,000 줄의 가져 오기로 가져 오는 것과 같이 큰 작업을 많은 작은 작업으로 분할하고 싶습니다. 이 문제는 하나의 긴 작업이 모든 처리 능력을 사용할 수 있으며 일반적으로 동시에 실행되어 신속하게 완료되는 다른 클라이언트의 짧은 작업을 연기하는 것입니다.

수천 명의 고객이 있으며 매일/매주 추가됩니다.

설정 파일을 수천 개의 대기열을 해킹하지 않고 클라이언트간에 공정하게 공유하는 방법이 있습니까? (This question은 비슷하지만 실제로 좋은 대답은 아닙니다.)

답변

0

낮은 우선 순위 대기열에 가져 오기 작업을 넣습니다. 짧은 작업을 우선 순위가 낮은 항목보다 먼저 선택하도록 기본 작업에 넣습니다.

+0

예. 우리는 이미 그렇게합니다. 그러나 한 클라이언트의 가져 오기 시간은 1 시간이고 다른 클라이언트의 가져 오기 시간은 1 초가 걸릴 수 있습니다. 그것이 내가 생각하고있는 시나리오입니다. 우리는 직업 규모에 의해 우선 순위를 정할 수 있지만, 그것은 광기로 이어질 수 있습니다. 나는 공정하게 계정별로 자원을 할당하는 깨끗한 방법을 원할 것이다. 어쩌면 Enterprise Rate Limiting 동시성이 도움이 될 수 있다고 생각했지만, 그렇게 할 것이라고는 생각하지 않습니다. –

+0

잘 말씀 드렸듯이, 수입이 많은 작은 일로 나눠지면 그건 중요하지 않습니다. –

+0

어느 정도까지 그렇습니다. 위의 예에서 25 개의 스레드와 1 시간 작업이 2.4 분으로 실행되도록 완벽하게 조정하면 몇 초의 작업을 가진 사람이 2.4 분 정도 기다려야한다는 것을 의미합니다. 그 후에? –