2016-12-26 1 views
1

클러스터 환경에서 석영 + 스프링을 사용하여 작동하는 작업이 거의 없습니다. 이러한 작업은 클러스터 환경에서 실행되도록 설정되지 않으므로 각 작업은 보유한 인스턴스 수에 따라 여러 번 실행됩니다. 이러한 작업은 AWS 환경에서 실행됩니다. 그래서 우리는 얼마나 많은 인스턴스가 동적으로 증가하거나 감소 할 수 있는지를 확신하지 못합니다. 그래서 우리는 코드를 리팩토링하는 중입니다.석영 스프링 설계 제안

문제는 특정 활동을 기반으로 사용자에게 이메일을 보내는 작업의 예를들 수 있습니다. 우리가 이메일을 보낼 필요가있는 곳에 매일 1000 명의 사용자가있을 수 있습니다.

현재 클러스터 환경에서 실행되도록 설정되어 있지 않으므로 각 인스턴스는 작업을 실행하고 작업에 대한 전자 메일을 사용자에게 보냅니다. 그래서 만약 내가 3 인스턴스가 실행되면, 작업은 3 번 실행되며 동일한 이메일은 사용자에게 3 번 전송됩니다.

우리는 쿼츠 jdbc를 사용하여 작업이 한 번만 실행되도록 결정했습니다.

나는 아래 부분을 수행하는 방법에 대한 제안을 찾고 있습니다.

내가 300 명의 사용자에게 전자 메일을 보내야한다고 말하면서 1 명의 인스턴스에서 사용자를 선택하고 300 명의 사용자에게 전자 메일을 보내면 모든 인스턴스에서 DB에서 300 명의 사용자를 얻고 나중에 동일한 작업을 수행해야합니다. 다른 인스턴스도 300 명의 사용자를 처리하는 데 참여합니다. 무엇이 최선의 방법일까요? 나는 임시 테이블에 300 명의 사용자를 저장하고 DB에서 사용자를 뽑아 내고 싶지 않습니다. 거기에 300 명의 사용자를 memcached와 같은 전역 메모리에 저장할 수 있고 다른 인스턴스에서 데이터를 가져올 수있는 방법이 있습니다 (사용자를 처리하는 동안 일종의로드 균형 조정). memcache를 사용하고 싶지 않으므로 다른 옵션을 사용하거나 가장 좋은 방법으로 디자인을 진행할 수 있습니다.

+0

DB에 레코드를 삽입하는 응용 프로그램입니까? 또는 귀하의 응용 프로그램은 DB에서 레코드를 선택하고 전자 메일을 보내고 있습니까? –

+0

이 응용 프로그램은 나머지 서비스를 사용하는 사용자의 목록을 가져올 것이고 각 사용자는 다른 휴식 서비스를 호출하여 전자 메일을 보내 게됩니다. – prred

답변

0

몇 달 전에 우리는 같은 문제가 있습니다. 우리는 아래에서 볼 수 있듯이 job이라는 테이블을 작성하여 스케줄러가 실행 중인지 만 제어합니다.

+-----------+--------------+------+-----+---------+----------------+ 
| Field  | Type   | Null | Key | Default | Extra   | 
+-----------+--------------+------+-----+---------+----------------+ 
| id  | bigint(20) | NO | PRI | NULL | auto_increment | 
| createdAt | datetime  | NO |  | NULL |    | 
| updatedAt | datetime  | NO |  | NULL |    | 
| version | int(11)  | YES |  | NULL |    | 
| running | tinyint(4) | YES |  | NULL |    | 
| scheduler | varchar(255) | YES | UNI | NULL |    | 
+-----------+--------------+------+-----+---------+----------------+ 

기본적으로 제 인스턴스 때 스케줄러 1 (연속) 속성을 '실행 "세트를 시작할 때 0 (정지)으로 설정 마무리. 이 방법

문제 :

  • 모든 스케줄러 테이블 (중복 코드)를 확인하는 코드의 같은 무리가있다.
  • 이 묶음을 잊어 버리면 스케줄러가 올바르게 작동하지 않습니다.

가장 좋은 해결책은 아니지만 완화 된 방식으로 작동합니다.

+0

응답 해 주셔서 감사합니다.하지만이 질문은 주로 석영 jdbc 지원을 사용할 계획이므로 도움이되지 않습니다. 첫 번째 작업에서 얻은 사용자 목록을 처리하는 동안로드 균형 조정을 수행하는 방법에 대해 설명합니다. – prred