Dalam bidang sistem ketersediaan tinggi, memastikan bahwa tugas penting tertentu dijalankan dengan sinkronisasi yang tepat dan tanpa kondisi balapan adalah hal yang paling penting. Di sinilah Shed Lock berperan. Sebagai pemasok Shed Lock, saya di sini untuk memandu Anda melalui proses mengonfigurasi Shed Lock untuk lingkungan dengan ketersediaan tinggi.
Memahami Kunci Gudang
Shed Lock adalah perpustakaan yang menyediakan kunci terdistribusi untuk tugas terjadwal dalam aplikasi Java. Dalam sistem ketersediaan tinggi, beberapa contoh aplikasi mungkin mencoba menjalankan tugas terjadwal yang sama secara bersamaan. Hal ini dapat menyebabkan masalah integritas data, pemrosesan duplikat, dan masalah lainnya. Shed Lock memecahkan masalah ini dengan menggunakan penyimpanan bersama (seperti database) untuk mengelola kunci. Hanya satu instance yang dapat memperoleh kunci pada satu waktu, memastikan bahwa tugas tersebut dijalankan hanya sekali.
Prasyarat
Sebelum kita mulai mengonfigurasi Shed Lock, pastikan Anda memiliki yang berikut:
- Aplikasi Java yang berjalan pada infrastruktur ketersediaan tinggi. Ini bisa berupa sekumpulan server dalam sebuah cluster, yang diterapkan di lingkungan cloud seperti AWS atau Google Cloud.
- Basis data yang dapat digunakan sebagai penyimpanan bersama untuk kunci. Pilihan populer termasuk MySQL, PostgreSQL, dan H2.
- Maven atau Gradle dikonfigurasi untuk mengelola dependensi.
Langkah 1: Tambahkan Dependensi
Langkah pertama adalah menambahkan dependensi Shed Lock ke proyek Anda. Jika Anda menggunakan Maven, tambahkan yang berikut ini ke file Andapom.xml:
<dependency> <groupId>net.javacrumbs.shedlock</groupId> <artifactId>shedlock-spring</artifactId> <version>4.42.0</version> </dependency> <dependency> <groupId>net.javacrumbs.shedlock</groupId> <artifactId>shedlock-provider-jdbc-template</artifactId> <version>4.42.0</version> </ketergantungan>
Untuk Gradle, tambahkan baris ini ke file Andabuild.gradle:
implementasi 'net.javacrumbs.shedlock:shedlock-spring:4.42.0' implementasi 'net.javacrumbs.shedlock:shedlock-provider-jdbc-template:4.42.0'
Langkah 2: Konfigurasikan Penyedia Kunci
Penyedia kunci bertanggung jawab untuk berinteraksi dengan penyimpanan bersama (database dalam kasus kami) untuk mengelola kunci. Berikut ini contoh cara mengonfigurasi penyedia kunci menggunakan SpringTemplat Jdbc:
impor net.javacrumbs.shedlock.core.LockProvider; import net.javacrumbs.shedlock.provider.jdbc.template.JdbcTemplateLockProvider; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.jdbc.core.JdbcTemplate; impor javax.sql.DataSource; @Konfigurasi kelas publik ShedLockConfig { @Bean public LockProvider lockProvider(DataSource dataSource) { kembalikan JdbcTemplateLockProvider baru( JdbcTemplateLockProvider.Configuration.builder() .withJdbcTemplate(new JdbcTemplate(dataSource)) .usingDbTime() .build() ); } }
Dalam contoh ini, kita membuat aJdbcTemplateLockProviderkacang yang menggunakan yang disediakanSumber Datauntuk berinteraksi dengan database. ItumenggunakanDbTime()metode menunjukkan bahwa kita ingin menggunakan waktu sistem database untuk manajemen kunci.
Langkah 3: Konfigurasikan Shed Lock di Spring
Selanjutnya, kita perlu mengaktifkan Shed Lock di aplikasi Spring kita. Kita dapat melakukan ini dengan menambahkan@EnableSchedulerLockanotasi ke kelas konfigurasi utama kami:
import net.javacrumbs.shedlock.spring.annotation.EnableSchedulerLock; import org.springframework.context.annotation.Configuration; import org.springframework.scheduling.annotation.EnableScheduling; @Configuration @EnableScheduling @EnableSchedulerLock(defaultLockAtMostFor = "PT30S") public class AppConfig { // Kode konfigurasi di sini }
Itu@Aktifkan Penjadwalananotasi mengaktifkan kemampuan penjadwalan Spring, dan@EnableSchedulerLockmengaktifkan Kunci Gudang. ItudefaultLockAtMostForatribut menentukan waktu maksimum kunci dapat ditahan. Dalam hal ini, kunci akan terbuka secara otomatis setelah 30 detik.
Langkah 4: Terapkan Kunci ke Tugas Terjadwal
Sekarang, kita dapat menerapkan kunci pada tugas terjadwal kita. Berikut ini contohnya:
import net.javacrumbs.shedlock.spring.annotation.SchedulerLock; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Service; @Layanan public class ScheduledTaskService { @Scheduled(fixedRate = 60000) @SchedulerLock(name = "myScheduledTask", lockAtMostFor = "PT10M", lockAtLeastFor = "PT1M") public void myScheduledTask() { // Logika tugas di sini System.out.println("Mengeksekusi tugas terjadwal..."); } }
Itu@SchedulerLockanotasi digunakan untuk menerapkan kunci padatugas terjadwal sayametode. Itunamaatribut adalah pengidentifikasi unik untuk kunci. ItulockAtMostForatribut menentukan waktu maksimum kunci dapat ditahan, danlockAtLeastFormenentukan waktu minimum kunci akan ditahan.
Langkah 5: Pengaturan Basis Data
Kita perlu membuat tabel di database untuk menyimpan informasi kunci. Untuk database MySQL, pernyataan SQL untuk membuat tabel adalah sebagai berikut:
BUAT TABEL shedlock( nama VARCHAR(64) BUKAN NULL, lock_until TIMESTAMP(3) BUKAN NULL, terkunci_pada TIMESTAMP(3) BUKAN NULL, dikunci_oleh VARCHAR(255) BUKAN NULL, KUNCI UTAMA (nama) );
Untuk database lain seperti PostgreSQL, pernyataan SQL serupa, namun tipe datanya mungkin perlu disesuaikan dengan spesifikasi database.
Pertimbangan Tambahan untuk Ketersediaan Tinggi
Dalam sistem ketersediaan tinggi, kita perlu mempertimbangkan beberapa faktor tambahan:
- Replikasi Basis Data: Jika Anda menggunakan database yang direplikasi, pastikan tabel kunci direplikasi dengan benar. Keterlambatan apa pun dalam replikasi dapat menyebabkan beberapa instance memperoleh kunci secara bersamaan.
- Latensi Jaringan: Latensi jaringan yang tinggi antara instance aplikasi dan database dapat memengaruhi perolehan dan pelepasan kunci. Pertimbangkan untuk menggunakan database yang secara geografis dekat dengan server aplikasi Anda.
- Pemulihan Kegagalan: Menerapkan mekanisme pemulihan kegagalan yang tepat. Jika sebuah instance gagal saat menahan kunci, kunci tersebut harus dilepaskan secara otomatis setelahnya
lockAtMostForwaktu telah berlalu.
Tautan Produk Terkait
Jika Anda mencari kunci berkualitas tinggi untuk aplikasi lain, Anda mungkin tertarik dengan kunci kamiDorong Kunci,Kunci Pintu Kayu, DanKunci Pintu Bulat.
Hubungi Kami untuk Pengadaan
Kami memahami pentingnya solusi kunci yang andal dalam sistem ketersediaan tinggi. Sebagai pemasok Shed Lock, kami berkomitmen untuk menyediakan produk dan dukungan terbaik bagi Anda. Jika Anda tertarik untuk membeli Shed Lock untuk proyek ketersediaan tinggi Anda atau memiliki pertanyaan tentang konfigurasinya, kami mendorong Anda untuk menghubungi kami. Mulailah percakapan dengan kami untuk mendiskusikan kebutuhan spesifik Anda dan jelajahi bagaimana Shed Lock kami dapat meningkatkan kinerja dan keandalan sistem Anda.


Referensi
- Dokumentasi resmi Shed Lock, "https://www.javacrumbs.net/shedlock/"
- Dokumentasi Spring Framework, "https://docs.spring.io/spring-framework/docs/current/reference/html/"
