Concurrent Job Processor adalah program Command Line Interface (CLI) berkinerja tinggi yang dirancang untuk memproses ribuan tugas secara asinkron. Proyek ini mendemonstrasikan implementasi Worker Pool Pattern, manajemen memori yang ketat (memory-safe), dan praktik DevSecOps (Shift-Left Security).
- Worker Pool Architecture (Fan-Out/Fan-In): Mencegah resource exhaustion dengan membatasi jumlah goroutine yang berjalan secara bersamaan.
- Race-Free State Aggregation: Menggunakan
sync/atomicuntuk menjamin integritas data (thread-safe) tanpa bottleneck darisync.Mutex. - Graceful Shutdown: Mendukung propagasi pembatalan (cancellation) ke seluruh unit kerja menggunakan
context.Contextdan menangkap sinyal OS (SIGINT/SIGTERM). - Zero Goroutine Leaks: Orkestrasi saluran (channel) yang aman dipadukan dengan
sync.WaitGroup. - DevSecOps Ready: Terintegrasi penuh dengan GitHub Actions untuk menjalankan Unit Tests, Race Detector, Staticcheck (Linter), GoSec (SAST), dan govulncheck secara otomatis pada setiap push.
Proyek ini memisahkan secara ketat antara Input (Job) dan Output (Result) untuk menjunjung tinggi prinsip immutability.
- Dispatcher mengirimkan tugas ke dalam buffered channel.
- Kumpulan Workers (Goroutines) mengambil tugas dari saluran, memprosesnya, dan mengirimkan hasil ke saluran hasil.
- Aggregator mengumpulkan hasil secara aman menggunakan instruksi atomic di tingkat CPU.
- Jika pengguna menekan
Ctrl+Catau batas timeout tercapai, sinyal akan disebarkan dan seluruh worker akan berhenti secara elegan tanpa merusak status memori.
- Go versi 1.25 atau lebih baru.
Kloning repositori dan lakukan kompilasi binary:
git clone [https://github.com/Azzt17/concurrent-job-processor.git](https://github.com/Azzt17/concurrent-job-processor.git)
cd concurrent-job-processor
go build -o bin/processor ./cmd/processor/Gunakan parameter flag untuk mengatur perilaku pemrosesan:
# Menjalankan dengan konfigurasi default (5 pekerja, 100 tugas)
./bin/processor
# Menjalankan dengan konfigurasi kustom
./bin/processor -workers 8 -jobs 1000 -timeout 15s -buffer 20Daftar Flag yang Tersedia:
- -workers (int): Jumlah goroutine pekerja konkuren (default: 5).
- -jobs (int): Jumlah total tugas yang akan disimulasikan (default: 100).
- -timeout (duration): Batas waktu maksimum eksekusi sebelum dihentikan paksa (default: 30s).
- -buffer (int): Ukuran buffer saluran antrian tugas dan hasil (default: 10).
Repositori ini menerapkan pengujian otomatis multi-lapis untuk mendeteksi kerentanan di fase awal pengembangan:
- Functional Testing: Memastikan seluruh pekerjaan dieksekusi dengan benar.
- Concurrency Audit: Menggunakan go test -race untuk memblokir kode yang rentan terhadap Data Race.
- Static Analysis: Menggunakan staticcheck untuk mencegah penggunaan anti-pattern dan efisiensi memori.
- SAST (Static Application Security Testing): Terintegrasi dengan gosec untuk memindai pola kode berbahaya (misal: CVE, kriptografi lemah).
- Dependency Audit: Menggunakan govulncheck untuk memastikan tidak ada kerentanan rantai pasok (supply chain attacks).
Dikembangkan sebagai bagian dari eksplorasi DevSecOps dan arsitektur sistem konkuren.