2011-07-12 11 views
14

Mam warstwę identycznych serwerów aplikacji za równoważnikiem obciążenia. Ze względów operacyjnych mam ograniczenie, że konfiguracja aplikacji na obu serwerach aplikacji musi być taka sama, aby węzły mogły być łatwo dodawane i usuwane. Wszystkie serwery aplikacji korzystają z tej samej bazy danych. Serwery aplikacji nie są/nie będą klastrowane.Używanie kwarcu do planowania pojedynczego zadania przez wiele bezstanowych serwerów aplikacji

To działało dobrze do tej pory, ale teraz chciałbym mieć zaplanowaną pracę, która będzie wykonywana na dokładnie jednym z serwerów aplikacji. Wszystkie serwery aplikacji będą działały z mechanizmem kwarcowym i mają ten sam harmonogram uruchamiania zadań. Wyzwalacz uruchomi się na każdym serwerze aplikacji, ale chciałbym, aby tylko jeden serwer aplikacji faktycznie wykonał zadanie - w zasadzie wszystkie zaczynają wyścig, a tylko jeden faktycznie się uruchamia, pozostałe serwery aplikacji po prostu ignorują zadanie. Chodzi o to, że jeśli stracimy serwer aplikacji, to zamiast niego uruchomi się zadanie, a jeśli dodamy nowe serwery aplikacji, to oni przyjdą z kolei przy uruchomionych zadaniach.

Planowałem to zrobić, mając w bazie danych tabelę "blokowania zadań", którą wszystkie serwery powinny przeczytać przed rozpoczęciem pracy i rozpoczynać pracę tylko, jeśli praca jest "odblokowana". Serwer aplikacji, który najpierw tworzy aktualizację do tabeli, zasadniczo zablokuje inne, aktualizując tabelę do stanu uruchomionego/resetując ją na końcu zadania.

Przed zbudować to, będę wdzięczny za wejście od tych z większym doświadczeniem z kwarcu:

a) Czy mogę podpiąć do Quartz to zachowanie tak, że nie muszą być wykonane na jedno miejsce pracy podstawa? To znaczy. programiści mogą dodawać nowe miejsca pracy, nie martwiąc się o blokowanie zadań, ponieważ są one usuwane.

b) Czy kwarc zapewnia jakiekolwiek wbudowane mechanizmy, aby osiągnąć coś podobnego do powyższego, więc nie muszę go samemu staczać?

Dzięki!

Odpowiedz

18

Czy uważasz, że to zadziała dla Ciebie? http://quartz-scheduler.org/documentation/quartz-2.x/configuration/ConfigJDBCJobStoreClustering

Wyciąg z linkiem

klastrowania obecnie działa tylko z JDBC-Jobstore (JobStoreTX lub JobStoreCMT) i zasadniczo działa poprzez każdy węzeł udziału klastra tej samej bazy danych.

Równoważenie obciążenia następuje automatycznie, a każdy węzeł klastra uruchamia zadania tak szybko, jak to tylko możliwe. Po uruchomieniu wyzwalacza, pierwszym węzłem, który go uzyska (przez umieszczenie na nim blokady) jest węzeł, który go uruchomi. "

+0

Nie wiem, jak to przegapiłem:/Dzięki. – Scruffers

+0

Jeśli uważasz, że moja odpowiedź jest przydatna, nie zapomnij oznaczyć jej jako "zaakceptowanej odpowiedzi" – Sap

+0

Tworzenie klastrów przy użyciu kwarcu jest rozwiązaniem dla środowiska klastrowego, –

Powiązane problemy