0

Twilio를 send/receive texts in a Rails 4.2 앱까지 사용하고 있습니다. 한 번에 약 1000 건을 대량으로 보내고 산발적으로받습니다.ActiveJob (resque)에서 사용중인 데이터를 유지하거나 루비 객체에 넣고 객체 ID로 전달해야합니까?

현재 텍스트를받을 때 DB (to, from, body)에 저장 한 다음 해당 레코드를 ActiveJob 작업자에게 전달하여 나중에 처리합니다. 메시지를 보내기 위해 Twilio 매개 변수를 다른 DB에 저장하고 다른 ActiveJob 작업자에게 전달합니다. 나는 종종 일괄 적으로 그것을하고 있기 때문에 두 명의 노동자가있다. 첫 번째 보내는 메시지 작업자가 단일 메시지를 보냅니다. 두 번째 쿼리는 DB를 쿼리하여 메시지를 받아야하는 모든 사용자를 찾고, 보내야하는 각 메시지에 대해 DB 레코드를 만든 다음 해당 레코드를 첫 번째 보내는 메시지 작업자에게 전달합니다. 따라서 두 번째 것은 기본적으로 첫 번째 작업을 처리하기위한 일련의 작업을 만듭니다.

지금 나는 처리를 마친 직원 (들어오고 나가는 직원 모두)을 파견해야합니다. 나는 서버, redis, 또는 resque 내려 놓고 물건을 지속하지 걱정하지만 실제로 이것이 좋은 디자인 패턴인지 모르겠다. 나에게 바닐라 루비 오브젝트를 사용하고 작업자에게 전달하는 방법을 제안했지만 데이터 안정성에 어떤 영향을 미치는지 확신 할 수 없습니다. 그래서이 모든 DB를 만드는 것은 끝났습니다. 바닐라 루비 객체를 만들고 그 객체의 ID를 작업자에게 전달해야합니까?

일체의 통찰력은,

드류

답변

4

감사 당신의 작업에 데이터의 최소 금액을 전송하는 방법이 가장 좋은 방법이라고 나에게 보인다. sidekiq 위키의 '모범 사례'섹션을 확인 : 당신의 큐가 백업하고 그 동안 그 인용 개체 변경 https://github.com/mperham/sidekiq/wiki/Best-Practices

경우는 어떻게? 사이드 키에 상태를 저장하지 말고 간단한 식별자를 저장하십시오. perform 메소드에서 실제로 필요하면 객체를 찾습니다.

안정성 측면에서도 - 작업 대기열에 대해 걱정해야합니다. 그것은 일어난다. 시스템은 장애에 대해 내결함성을 갖도록 설계하거나 높은 신뢰성 보장이있는 작업 대기열 시스템을 찾습니다 (그러나 대기열 시스템이 100 % 메시지 전달을 보장 할 수는 없습니다). Sidekiq pro는 sidekiq (non-pro)보다 안정성이 뛰어나지 만 조금이라도 사전 계획을 세워 작업을 설계하면 충돌 후 데이터베이스를 스캔하고 손실되었을 수있는 작업을 다시 대기시킬 수있는 작업을 생성 할 수 있습니다 .

결함 허용 솔루션을 실제로 소비하는 작업량은 정보가 A 지점에서 B 지점까지 얼마나 중요한지에 달려 있습니다.