Sam dan MQ (Part 3)



Siang itu Sam berselancar di dunia maya. Sam masih memikirkan solusi yang tepat untuk menyelesaikan persoalan interoperabiliti modulnya. Belum berhasil dia menemukan solusi yang lebih efisien dari permintaan bosnya kemarin. Saking asiknya dia berselancar, dia kaget berat ketika Sang Bos menepuk pundaknya.

"Waduh Pak, kaget saya...", kata Sam.

"Kamu sih serius banget ngenetnya, kerja sana... ngenet mulu... hehe", Bos tertawa.

"Ini juga kerja Pak, nyari-nyari artikel buat kerjaan. Emang ada apa Pak?", kata Sam.

Bos: "Gini Sam, di web kita kan user bisa share link. Ketika user share link, server kita kan harus ngambil data teks dan gambar dari web lain terus gambar itu di-resize. Proses pengambilan data itu kan lama. Kalo kelamaan sering timeout, jadinya user gagal share link. Sekarang tolong dibuat begitu share link langsung aja diambil linknya terus user dapat notifikasi berhasil. Nanti ada modul yang kerjaannya ngambilin data terus resize gambar. Istilahnya itu Asynchronous Process ya? lupa saya "

Sam: "Iya kayaknya itu pak, Ok nanti saya kerjakan Pak"

Bos: "Harus real time ya, jadi begitu ada tugas ambil data dan resize gambar, modul-modul itu langsung jalan, jangan nunggu dulu. Harapannya user bisa langsung liat hasilnya secepat mungkin. Tolong program pengambil data dan resize gambar bisa dijalankan banyak, jadi bisa pararel, supaya lebih cepat".

Sam: "Ok saya usahakan Pak".

Bagaimana caranya melakukan asynchronous process tersebut? Menurut Sam sebaiknya dibuat tabel process di MySQL sehingga ketika user melakukan share link, dimasukkanlah data process baru yaitu id,link,process,status. Setelah itu di belakang ada program grabber yang akan mengambil data teks dan gambar dari link tersebut serta ada program resizer yang akan meresize. Jadi ketika user melakukan share link, akan ada data baru di tabel process dengan data [{id_share},{link}, grab, false] dan [{id_share}, {link}, resize, false].

Nantinya program grabber akan melakukan check ke tabel process apakah ada process grab yang statusnya false, kalo ada dia akan melakukan tugasnya yaitu mengambil data dan teks dari link dan setelah selesai dia akan mengubah status process tersebut menjadi true. Hal yang sama juga dilakukan oleh program resizer, dia akan mengecek process resize yang masih false dan akan melakukan tugasnya asalkan data gambar yang bersangkutan telah diambil oleh program grabber.

Dengan alur seperti itu memang akan dihasilkan asynchronous process untuk grabber dan resizer, namun yang jadi masalah, koneksi query terus menerus dari kedua program tersebut sangat menguras sumber daya.

Anggaplah sumber daya tidak masalah, Sam juga harus dihadapkan dengan proses pararel. Anggaplah ada dua grabber dan dua cropper, ketika grabber satu mengakses proses ke i, bagaimana memberitahu grabber ke dua untuk tidak melakukan proses ke i? Anggaplah bisa berkomunikasi menggunakan tabel MySQL lain, tapi masalahnya berapa banyak koding yang harus ditulis?

Sam dihadapkan dengan asynchronous process yang harus bisa pararel, haruskah dia membuat banyak koding lagi? haruskah dia minum aspirin lagi?

Tidak ada komentar:

Posting Komentar

Jika Anda memiliki tanggapan dan pertanyaan silakan isi form komentar berikut, kami akan menjawabnya segera. :)