Sidekiq 작업 동시성 문제

멀티 팟 환경에서 Sidekiq를 실행할 때 문제가 발생하고 있습니다.

시나리오 1:
개발 환경에서는 단일 레플리카(단일 팟 실행)를 사용하며, 여기서는 문제가 없습니다.
참고로, forum_url/sidekiq/busy를 확인해 보니 (1개 프로세스 실행 중)입니다.

시나리오 2:
프리프로덕션 및 프로덕션 환경에서는 레플리카가 하나 이상(단일 팟 이상 실행)입니다. Sidekiq 동시성 문제를 겪고 있습니다(작업은 실행 중이지만 코드 실행이 건너뛰어짐).

참고로,
forum_url/sidekiq/busy를 확인해 보니 (1개 이상의 프로세스 실행 중)입니다. 각 팟당 Sidekiq 프로세스가 1개씩 실행되고 있습니다.

수정해 주십시오,
Sidekiq 프로세스를 하나 이상 실행하는 것이 괜찮은가요?
만약 괜찮지 않다면, 작업 동시성 문제를 어떻게 해결해야 하나요?

참고로, 우리는 Discourse Docker를 사용하고 있습니다.

따라서 어떤 단계를 따라야 하는지 알려주시면 감사하겠습니다. 미리 감사드립니다.

정확히 “동시성” 문제가 무엇인지 말씀해 주실 수 있나요? 좀 더 자세히 설명해 주시겠어요? 정확히 어떤 부분이 순서대로 실행되지 않고 있나요?

Sidekiq 작업이 큐에 추가된다고 해서 전체 실행 순서가 보장되는 것은 아닙니다. 서로 다른 우선순위를 가진 여러 큐가 존재하기 때문에 일부 작업이 다른 작업보다 먼저 실행될 수 있습니다.

또한 "코드 실행 건너뛰기"라고 하셨는데, 이 부분도 자세히 설명해 주실 수 있나요? 어떤 코드인가요? 작업이 실행될 때 코드가 건너뛰어지는 일은 없습니다. /logs를 확인해서 아무것도 깨지지 않는지 점검해 보셨나요?

그리고 문제가 근본적으로 발생하고 있는 원인이 될 수 있는, 지원되지 않는 설치 환경을 사용하고 계실 수도 있다는 점을 인지해 두시기 바랍니다…

@merefield 님, 답변 감사드립니다

정확히 “동시성(concurrency)” 문제가 무엇을 의미하시나요? 자세히 설명해 주실 수 있을까요? 정확히 어떤 작업이 순서를 어기나요?

위에서 언급했듯이, preprod와 production 환경에서는 sidekiq 프로세스가 하나 이상 실행되고 있습니다.

확신은 없습니다! 멀티 워커 프로세스 때문에 잡(job)이 어떤 프로세스를 선택해야 하는지 혼란스러워하는 것 같습니다.

또한 “코드 실행을 건너뜀(skipping code execution)”에 대해서도 설명해 주실 수 있을까요? 어떤 코드인가요? 잡이 실행되면 코드는 건너뛰어지지 않습니다. /logs를 확인하여 아무것도 깨지지 않았는지 확인해 보셨나요?

우리는 CSV 파일로 일부 사용자 정의 데이터를 내보내는 사용자 정의 sidekiq 잡을 실행하고 있습니다. 이 잡은 주기적으로 실행됩니다. 가끔 파일 내보내기가 수행되지 않습니다. 잡은 아무런 오류 메시지 없이 실행됩니다.

예를 들어:

테스트 목적으로 이 트리거 버튼을 클릭하면 잡은 실행되지만, 가끔 파일 내보내기가 수행되지 않습니다.

참고로, Dev 환경에서는 동일한 코드가 실행되지만 sidekiq 워커 프로세스가 하나뿐입니다. 여기서는 정상적으로 작동합니다. prod/preprod에서 sidekiq 프로세스가 하나 이상 실행되기 때문에 문제가 발생하는 것 같다는 의문이 듭니다.

/logs를 확인하여 아무것도 깨지지 않았는지 확인해 보셨나요?

네, 잡과 관련된 어떤 오류도 받지 않았습니다.

지원되지 않는 설치 버전을 실행하고 있을 수 있다는 점도 유의하세요

우리는 최신 버전의 discourse를 실행하고 있습니다.

감사합니다

동시성(concurrency)을 전제로 해야 합니다. 이것은 멀티스레드 배치 시스템이니까요.

여기서 Kubernetes를 사용하는 사람들도 몇 명 있지만, 이는 여기서 지원되지 않습니다.

무슨 일이 일어나고 있는지 파악하려면 작업(job)에 일부 로깅을 추가해야 할 것 같습니다.

이것은 당신 자신의 커스텀 코드인 것이 맞죠?

저희는 이미 사용자 정의 코드에 로깅을 추가했습니다. 저희 코드에는 문제가 없습니다.

네

네, Kubernetes 클러스터를 사용하고 있습니다.

한 가지 질문이 있습니다!

Sidekiq은 프로세스를 하나만 실행해야 하나요? 아니면 Sidekiq 프로세스를 하나 이상 실행하는 것이 괜찮나요?

적절한 배치 시스템처럼, Sidekiq는 동시에 여러 작업을 처리하도록 설계되어 있습니다. 그렇지 않으면 확장성이 떨어지겠죠.

작업을 설계할 때 이 점을 반드시 고려하세요.