Manajemen Job Asynchronous Menggunakan NodeJS

Pernah terbayangkan ketika job asynchronous yang dilakukan memakan banyak memori dalam sekali waktu eksekusi? Hal ini menyebabkan server bisa cepat ngehang.

Kemaren sempat membuat apps kecil kecilan menggunakan NodeJS untuk mempermudah pekerjaan operasional di kantor. Apps ini adalah sebuah crawler yang akan dijalankan dalam waktu tertentu setiap hari nya. Setelah aplikasi selesai dibuat, ternyata setiap kali eksekusi apps tersebut memakan banyak memori yang mengakibatkan server ngehang dan aplikasi lain jadi terganggu.

samuel zeller vpR0oc4X8Mk unsplash min - Catatan Mbobs

Alhasil terpikirkan untuk memecah proses tersebut menjadi proses proses kecil. Setelah googling kesana kemari akhirnya ketemu module tiny-async-pool (rekomendasi dari teman juga). Module ini ringan dan mudah digunakan.

Nah, ini contoh cara menggunakan module tiny-async-pool nya

Pertama install modul nya dulu

npm install tiny-async-pool --save

Kemudian buat fungsi yang digunakan untuk eksekusi

let Apps = function(data){
  return new Promise((resolve,reject)=>{
    console.log("Data ke",data);
    resolve();  
  });
}

Siapkan data inputan dalam bentuk array

let dataInput = [0,2,3,4,5,6]

Kemudian pecah job menjadi bagian bagian kecil

const timeout = data => new Promise(resolve => setTimeout(() => {
Apps(data).then(()=>{
   resolve(i)
})}
, 30000));
return asyncPool(2, dataInput, timeout).then(results => {  ....});

30000 : waktu timeout per job (30s)
2 : merupakan jumlah maksimal job yang berjalan secara bersamaan

Jadi, ketika menggunakan modul tiny-async-pool tidak perlu khawatir proses asynchronous saling bertabrakan dan memakan memori banyak. Oh iya, ini termasuk multithreading bukan ya? Hehe.

Photo by Mārtiņš Zemlickis on Unsplash

Subscribe
Notify of
guest
0 Comments
Oldest
Newest Most Voted
Inline Feedbacks
View all comments