Jika Anda memiliki tugas yang ingin Anda jalankan hanya sekali pada sekelompok server, secara berkala apa yang akan menjadi cara terbaik untuk mencapai ini? Definisi cluster dalam hal ini adalah 2 atau lebih server identik dengan sesi terdistribusi duduk di belakang load balancer.
Use Case: Anda memiliki tugas yang mahal untuk dijalankan yang seharusnya hanya dijalankan sekali per X jam. Pekerjaan ini misalnya dapat mengulangi banyak catatan dan memperbarui status mereka.
- Skenario terburuk adalah bahwa menjalankan pekerjaan dua kali membuat data Anda tidak valid.
- Skenario terbaik adalah pekerjaan menggunakan sumber daya di semua server Anda.
Ringkasan Persyaratan:
- Pekerjaan itu masih harus berjalan bahkan jika salah satu node sedang down.
- Pekerjaan hanya harus dijalankan sekali per jadwal.
- Jika beberapa pekerjaan dijadwalkan pada waktu yang sama atau pada waktu yang tumpang tindih, maka jumlah pekerjaan yang berjalan didistribusikan secara merata di antara server.
- Mesin harus memiliki basis kode yang sama dan disinkronkan melalui NTP.
- Konfigurasi mungkin berbeda antara simpul dan simpul, berdasarkan variabel lingkungan.
- Pekerjaan harus dimulai tepat waktu atau dalam interval waktu yang ditentukan yang diberikan. (misalnya 5 menit)
Solusi yang memungkinkan
- Tetapkan satu simpul sebagai simpul utama, ini tidak berfungsi karena melanggar 1 di atas.
- Buat permintaan agar penyeimbang muatan menyeimbangkan untuk memulai pekerjaan. Sayangnya ini memiliki efek samping bahwa jika Anda memiliki beberapa pekerjaan berjalan pada saat yang sama mereka semua dapat dijalankan oleh mesin yang sama.
Ini harus dijalankan di Jawa, dalam wadah servlet. Namun itu bukan coding pekerjaan yang saya cari.
Tentunya ini adalah masalah terpecahkan dengan solusi terbaik yang diketahui.
Pertanyaan terkait. /programming/5949038/schedule-job-executes-twice-on-cluster
Ini bukan duplikat karena solusinya tidak mencukupi sesuai dengan 5 persyaratan yang diberikan di atas. Solusi yang paling banyak dipilih mengalami masalah balapan, dan solusi kedua melanggar persyaratan 3