Setiap aplikasi SchedulerX mendukung hingga 1.000 pekerjaan secara default. Ketika beban kerja Anda memerlukan puluhan ribu pekerjaan periodik yang dijadwalkan secara individual—masing-masing dengan waktu pemicunya sendiri—batas ini menjadi penghambat. SchedulerX menyediakan fitur auto scaling dan shared container pool untuk menghilangkan batasan 1.000 pekerjaan tanpa membebani agent.
Kapan Anda memerlukan pekerjaan periodik individual
Setiap pekerjaan periodik dalam SchedulerX berjalan sesuai jadwalnya sendiri. Pekerjaan terdistribusi MapReduce tidak dapat menggantikan pekerjaan periodik individual karena semua tugas dalam satu pekerjaan MapReduce dieksekusi secara bersamaan. Skenario berikut biasanya memerlukan 10.000 hingga 100.000+ pekerjaan mandiri:
| Scenario | Why individual jobs are needed | Scale |
|---|---|---|
| IoT device control | Setiap sakel Internet of Things (IoT) menyalakan atau mematikan perangkat pada waktu yang berbeda. Satu pekerjaan mandiri per sakel. | 10.000–100.000+ pekerjaan |
| Alert rule evaluation | Sistem pemantauan mengevaluasi aturan alert sekali per menit. Aturan kompleks membutuhkan waktu lebih lama dan dapat menghambat siklus pemicu berikutnya. Satu pekerjaan mandiri per aturan mencegah aturan lambat menunda yang lain. | 10.000–100.000+ pekerjaan |
| Enterprise scheduling platform | Sebuah tim membangun platform penjadwalan internal di atas SchedulerX dan menyediakan API PoP untuk pembuatan pekerjaan. Seiring adopsi meningkat, jumlah total pekerjaan mencapai 100.000+. | 100.000+ pekerjaan |
Cara kerja auto scaling dan shared container pool
Dua mekanisme ini bekerja sama untuk mendukung jumlah pekerjaan yang tinggi:
Auto scaling — Saat jumlah pekerjaan suatu aplikasi mencapai batas 1.000, SchedulerX secara otomatis membuat sub-aplikasi. Hal ini mendistribusikan pekerjaan ke beberapa aplikasi logis sekaligus tetap memungkinkan pengelolaan terpadu. Anda tidak perlu mengelola sub-aplikasi secara manual.
Shared container pool — Secara default, setiap pemicu pekerjaan mengalokasikan container pool-nya sendiri untuk eksekusi. Pada skenario dengan lebih dari 10.000 pekerjaan, hal ini dengan cepat menghabiskan memori dan CPU agent, sehingga agent menjadi tidak responsif. Dengan mengaktifkan shared container pool, semua pekerjaan dapat berbagi satu container pool, sehingga konsumsi sumber daya tetap terkendali terlepas dari jumlah pekerjaan.
Without shared pool (default): With shared pool:
Job 1 trigger → Container pool 1 Job 1 trigger ─┐
Job 2 trigger → Container pool 2 Job 2 trigger ──┤
Job 3 trigger → Container pool 3 Job 3 trigger ──┼→ Shared container pool (size: 128)
... ... ... │
Job N trigger → Container pool N Job N trigger ─┘
→ Agent memory exhausted → Bounded resource usageAktifkan auto scaling dan shared container pool
Prosedur berikut menggunakan aplikasi Spring Boot sebagai contoh. Untuk jenis aplikasi lain, lihat Quick start > Connect an agent to SchedulerX.
Langkah 1: Ajukan permintaan auto scaling
Fitur auto scaling tidak tersedia secara self-service. Hubungi SchedulerX technical support untuk mengaktifkannya pada aplikasi Anda.
Setelah auto scaling diaktifkan, SchedulerX akan membuat sub-aplikasi setiap kali jumlah pekerjaan suatu aplikasi mencapai 1.000.
Langkah 2: Verifikasi versi agent
Buka file pom.xml Anda dan pastikan versi dependensi agent SchedulerX adalah 1.2.1 atau lebih baru.
Versi agent sebelum 1.2.1 tidak mendukung shared container pool. Jika versi Anda lebih lama, perbarui nomor versi dalam deklarasi dependensi sebelum melanjutkan.
Langkah 3: Aktifkan shared container pool
Tambahkan properti berikut ke file konfigurasi Spring Boot Anda (misalnya, application.properties):
# Aktifkan shared container pool agar semua pekerjaan menggunakan satu pool yang sama
spring.schedulerx2.shareContainerPool=true
# Tetapkan ukuran container pool
spring.schedulerx2.sharePoolSize=128| Property | Description |
|---|---|
spring.schedulerx2.shareContainerPool | Jika diatur ke true, semua pekerjaan berbagi satu container pool alih-alih masing-masing membuat pool-nya sendiri. |
spring.schedulerx2.sharePoolSize | Menentukan ukuran shared container pool. Nilai contoh adalah 128. |
Tanpa shared container pool yang diaktifkan, setiap pemicu pekerjaan membuat container pool-nya sendiri. Pada skenario dengan lebih dari 10.000 pekerjaan, hal ini dengan cepat menghabiskan memori dan CPU agent, sehingga agent menjadi tidak responsif.
Praktik terbaik produksi
Sesuaikan ukuran pool
Mulailah dengan ukuran pool 128 seperti pada contoh konfigurasi, lalu pantau penggunaan CPU dan memori agent. Sesuaikan ukuran tersebut berdasarkan karakteristik pekerjaan dan konsumsi sumber daya Anda.
Sebarkan jadwal pekerjaan
Hindari mengelompokkan waktu pemicu pada detik yang sama. Saat ribuan pekerjaan menggunakan ekspresi CRON yang identik (misalnya, 0 * * * * ? untuk setiap menit pada detik ke-0), semuanya dijalankan secara bersamaan dan menciptakan lonjakan beban pada agent.
Sebarkan ekspresi CRON ke detik yang berbeda:
# Alih-alih semua pekerjaan pada detik ke-0:
0 * * * * ? # Semua 10.000 pekerjaan dijalankan pada :00
# Sebarkan ke 60 detik:
0 * * * * ? # Pekerjaan 1–167 dijalankan pada :00
1 * * * * ? # Pekerjaan 168–334 dijalankan pada :01
2 * * * * ? # Pekerjaan 335–501 dijalankan pada :02
...
59 * * * * ? # Pekerjaan 9834–10000 dijalankan pada :59Hal ini mendistribusikan beban lebih merata sepanjang waktu dan mengurangi beban konkuren puncak pada agent.
Pantau pembuatan sub-aplikasi
Periksa Konsol SchedulerX secara berkala untuk memastikan sub-aplikasi dibuat sesuai harapan saat jumlah pekerjaan bertambah.
Tangani kegagalan eksekusi pekerjaan
Pada jumlah pekerjaan yang tinggi, kegagalan pekerjaan individual merupakan hal yang wajar. Rancang pekerjaan Anda agar bersifat idempotent sehingga retry tidak menghasilkan efek samping duplikat. Konfigurasikan nilai timeout yang sesuai untuk mencegah pekerjaan lambat menghambat shared container pool.
Kuota dan batasan
| Item | Value | Notes |
|---|---|---|
| Pekerjaan per aplikasi (sebelum auto scaling) | 1.000 | Gunakan auto scaling untuk melampaui batas ini |
| Versi agent minimum untuk shared container pool | 1.2.1 | Versi sebelumnya tidak mendukung fitur ini |
| Ukuran shared container pool (konfigurasi contoh) | 128 | Dapat dikonfigurasi melalui properti sharePoolSize |
Untuk mengaktifkan auto scaling dan meningkatkan jumlah total pekerjaan melebihi 1.000, hubungi SchedulerX technical support.