우리의 설정은 자동 확장 기능을 갖춘 AWS EC2에 배포된 Python Flask 애플리케이션으로 구성되어 있으며 MySQL 데이터베이스를 활용합니다.
또한 별도의 Linux 시스템에 예약된 작업이 있는데, 이 작업은 10초마다 트리거되어 https://api.example.com
.
애플리케이션은 pm2에서 실행됩니다.
최근 이러한 예약된 작업으로 인해 데이터 중복 문제가 발생했습니다. cron 작업은 10초마다 실행되도록 올바르게 설정되어 있지만 동일한 작업이 마이크로초의 간격으로 동시에 실행되는 경우도 관찰되었습니다. API 로그를 활성화하면 이러한 발생이 확인되었습니다.
이러한 작업이 10초마다 API URL에 도달하도록 예약되어 있을 때 어떻게 동시에 실행되는지는 혼란스럽습니다. 우리는 이 문제를 진단하는 데 도움이 될 수 있는 방법이나 도구뿐만 아니라 이러한 동시 작업 실행을 방지하기 위한 전략에 대한 조언을 구하고 있습니다.
답변1
작업의 단일 복사본을 확인하지 않고 반복적인 작업을 실행하는 경우, 특히 짧은 간격으로 문제가 발생할 수 있습니다.
당신이 할 수 있는 일은 API 호출의 실행 시간을 측정하고 가장 큰 간격으로 일정을 설정하는 것입니다.그리고작업 복사본 하나만 실행되도록 검사를 구현합니다. 이미 실행 중인 경우 건너뛰도록 작업을 설정하고 일종의 경보를 보내 예약된 간격을 (다시) 재검토할 수 있습니다.
물론 건너뛴 작업의 대기열을 구성할 수 있지만 이는 작업의 성격에 따라 많이 달라집니다. 그리고 대기열이 지속적으로 증가할 위험이 있습니다.