2016-09-22 6 views
1

작업에서 여러 작업을 생성하는 것이 안전합니까? 작업자가 비어있는 작업을 시작할 수 있습니까?여러 대기열이있는 Beanstalk 설정 worker : 다른 작업을 생성하는 작업

현재 내 설정은 다음과 같습니다. 나는 일자리가 밀려나기를 기다리는 20 명의 노동자가 있습니다. 작업 중 하나는 iOS 푸시 알림을 보내는 것입니다. iOS의 문제입니다. 대량 메일을 보낼 수 없습니다.

현재 : 내가 한 것은 일괄 적으로 특정 사용자의 목록을 가져 와서 db에서 각 장치 토큰을 가져 와서 알림을 보내기 시작한 것입니다.

시나리오 : 한 주제의 사용자가 1000 명인 경우 1000 명의 사용자와 장치를 모두 가져온 다음 각 장치에서 전송을 시작해야합니다. 이것은 내 대기열에 새로운 직업을 밀어 넣을 것이고 1 명의 작업자는 그 응용 프로그램을 선택할 것이고 다른 작업자는 비어 있으며 들어오는 작업을 기다릴 것입니다. 주어진 시간 동안 사용할 수있는 직업이 없다면, 작업자 1은 모든 작업을 수행해야만합니다.

지금 내가 무슨 작업을하고 있는지. 그 큰 일이 대신 다른 일자리를 만들어서 비어있는 다른 일꾼들이 그 일을하고 일할 수 있다면 안전할까요?

P.S 모든 작업이 1 개의 튜브에서 실행됩니다.

답변

1

나는 꽤 합리적인 것처럼 들리며, 많은 노동자들 사이에 부하가 퍼져 나갔다.

적절한 우선 순위 설정과 같이주의해야 할 몇 가지 사항이 있습니다. 수십 또는 수백 개의 작업을 생성 한 작업보다 우선 순위가 높으면 실제로 작업을 수행하는 경우 수십만 개의 작업이 빠르게 생성되지만 작업자가 작업을 수행하지 않을 수 있으므로 대기열이 꽉 차있다.

우선 순위 사이에 큰 간격을 유지하면 작업에서 중요한 부분을 차지할 수 있습니다. 보다 중요한 고객은 우선 순위가 0에 가까울 수 있으므로 처리되어 작은 고객보다 먼저 전송됩니다.

기타 고려해야 할 사항에는 요율에 제한이있는 계정이 포함됩니다. 초당 10 통의 알림 만하는 경우 20 명을 출근하는 것이 비 스타터가됩니다.

저는 또한 새로운 작업 그룹을 새로운 튜브에 넣을 것입니다 (수십 개의 튜브를 가동하는 것은 비싸지 않습니다). 한 번에 여러 개의 튜브를 볼 수 있지만 (하나의 튜브에서 '가장 중요한'작업을 얻음) 단일 튜브 내에서 여러 유형의 작업을 셀 수 없으므로 유형을 다른 대기열로 분할하면 쉽게 볼 수 있습니다 실행중인 각 유형의 작업 수. 따라서 보내는 프로세스가 올라가고 있다면 분할 작업이 잠시 동안 느려지거나 잠시 동안 더 낮은 우선 순위로 표시 할 수 있습니다.

마지막으로 일괄 처리 작업의 일부 이점을 유지하고 약간의 오버 헤드를 피하기 위해 작업을 1000 + off에서 작업 당 25-50 개의 알림 패킷으로 분할 할 가능성이 큽니다.