2011-01-13 5 views
1

나는 다중 사용자 트리 편집 응용 프로그램을 작성 중입니다. 백그라운드 프로세스에 resque gem을 사용합니다. 런타임 다중 사용자 충돌을 피하기 위해 명령 패턴을 사용하고 resque 큐에 사용자 작업을 저장하려고합니다. 따라서 누군가 다른 사람을 삭제하면 다른 사용자가 해당 분기의 자식을 편집 할 수 없습니다.명령 패턴을 구현하기 위해 resque 사용하기

resque 작업자가 5 초 간격으로 작업을 확인하기 때문에 작업은 처음에는 대기열에서 느리게 실행됩니다. 편집 인터페이스가 상당히 느려집니다.

내가 필요로하는 것이지만,이 일을하는 더 우아한 방법이 있는지 궁금합니다. 또한, : 프로세스는 Worker 인스턴스에 대해 사용되지 않는 메소드입니다.

답변

2

나는 당신의 디자인 접근법이 다소 건전하다고 생각하지만 Redis/Resque는 적절하지 않을 수 있습니다. 당신이 원하는 것은 Resque와 비슷한 매우 빠른 in-memory 큐입니다.하지만 폴링 지연은 없습니다.

저는 MemCached를 사용할 수 있다고 확신합니다.하지만 다른 옵션이있을 수 있습니다. 대기중인 명령을 특정 간격으로 가져와야하는 모든 솔루션은 협업 편집에 허용되는 성능을 제공하지 않을 수 있습니다. 단, 100ms마다 또는 더 자주 폴링하는 것이 좋습니다.

마지막으로 명령을 순차적으로 (한 번에 하나씩) 처리 할 수있는 단일 큐에 모든 작업을 배치하는 경우 너무 많은 명령이 오기 때문에 대기열이 백업 될 수있는 상황이 발생하게됩니다 안으로, 그들은 빨리 가공하고 있지 않다. 이 때문에 트리의 각 요소가 버전 관리되고 버전/업데이트가 변경되면 모든 하위 요소가 새 버전으로 업데이트되는 버전 관리를 사용하면 더 확장 성있는 솔루션을 얻을 수 있습니다. 이렇게하면 이전 버전 번호의 편집이 거부됩니다.

어쨌든 .. 행운을 비네, 해결할 중요한 문제처럼 들리 네요.

+0

나는 리스크/재 다이얼 속도에 깊은 인상을 받았으며, GUI에 대해 10-20 밀리 초 미만의 대기 시간이 있다면 신경 쓸 필요가 없다. Resque는 또한 특정 작업을위한 별도의 프로세서를 즉시 사용할 수있게합니다. 그래서 지금은 memcached 또는 inmemory 솔루션으로 전환해야 할 강력한 이유가 없습니다. – dimus

관련 문제