2012-06-21 32 views
6

Wiem, że to niesprawiedliwe z facetami z terakoty, ale czy ktoś próbował użyć Hazelcast, aby użyć zaplanowanych zadań w środowisku klastrowym?Planowane prace Hazelcast (wsparcie kwarcu?)

Najprostsza implementacja mogę obraz jest następujące architektury:

  1. Globalna blokada Hazelcast za zapewnienie tylko jeden serwer ma uruchomieniem config kwarcu.
  2. Uruchamianie rzeczywistych zadań jako DistributedTask. (można to zrobić później, w momencie, gdy ciężkie zaplanowane zadania będą wymagały obsługi wyzwalacza DistributedTask)
  3. Gdy tylko serwer z blokadą nie działa, inny serwer otrzymuje blokadę.

Wierzę, że byłoby to wielką zaletą dla ludzi, którzy już mają Hazelcast, ponieważ nie będą wymagać całego środowiska dev-environment, otwierając terakotę przez cały czas.

Na razie zakodowałem najprostsze rozwiązanie polegające na tym, że tylko jeden węzeł odpowiada za uruchamianie kwarcowych wyzwalaczy. Ponieważ używam tylko wywołań podobnych do Cron, może to być dopuszczalne rozwiązanie, jeśli zadbam o tworzenie rozgłaszanych zadań dla ciężkich zadań wyzwalaczy.

Oto mój org.springframework.scheduling.quartz.SchedulerFactoryBean rozszerzenie, które sprawia, że ​​tak się stało:

@Override 
public void start() throws SchedulingException { 
    new Thread(new Runnable() { 
     @Override 
     public void run() { 
      final Lock lock = getLock(); 
      lock.lock(); 
      log.warn("This node is the master Quartz"); 
      SchedulerFactoryBean.super.start(); 
     } 
    }).start(); 
    log.info("Starting.."); 
} 

@Override 
public void destroy() throws SchedulerException { 
    super.destroy(); 
    getLock().unlock(); 
} 

Proszę dać mi znać, jeśli brakuje mi czegoś wielkiego i jeśli można to zrobić.

Dodałem dwa pliki do github. Oto rozszerzenie RAMJobStore:

https://github.com/mufumbo/quartz-hazelcast/blob/master/src/main/java/com/mufumbo/server/scheduler/hazelcast/HazelcastRAMJobStore.java

A oto rozszerzenie Wiosna SchedulerFactoryBean:

https://github.com/mufumbo/quartz-hazelcast/blob/master/src/main/java/com/mufumbo/server/scheduler/hazelcast/SchedulerFactoryBean.java

+1

FYI, istnieje żądanie dotyczące funkcji, aby umieścić rozproszone zaplanowane egzekucje w Hazelcast: https://github.com/hazelcast/hazelcast/issues/115 – ccleve

Odpowiedz

8

Myślałam o tej samej koncepcji jakiś czas temu. Możesz faktycznie zintegrować Hazelcast z quartz-scheduler poprzez implementację interfejsu SPI JobStore. Sprawdź numer RAMJobStore, aby uzyskać informacje na temat implementacji magazynu zadań w oparciu o struktury danych w pamięci i JobStoreTX - klastrowy magazyn oparty na bazach danych.

Interfejs ten jest dość duży, ale powinien być jedynym miejscem wymaganym do przejścia z pamięci RAM lub Terakoty do Hazelcast. Ta ostatnia biblioteka zapewnia już distrubuted przechowywania i blokad, więc powinno być raczej proste.

Czy byłoby wspaniale, gdybyś mógł dzielić się swoją implementacją (GitHub?), Zgadnij, że byłoby to sensowną alternatywą dla gromady Terracotta dla wielu osób.

+0

Witam Tomaz, zaktualizowałem swój post za pomocą linku github do najprostszej implementacji I mógł kiedykolwiek myśleć. Proszę sprawdź to. –