Wednesday, December 14, 2011

Isu Scalability Gammu dan Solusinya

Sebenernya tidak ada isu scalability di gammu, hanya karena terdapat situasi dan kondisi di proyek yang Saya ikuti, baru isu scalability muncul.

Pada suatu proyek, terdapat kebutuhan dari client untuk membuatkan sistem yang melakukan pengiriman data dari lapangan ke website pusat, dengan teknologi pengiriman data yang diminta adalah SMS. Digunakanlah GSM modem yang menerima SMS yang disandingkan dengan Gammu. No prob.

Kemudian ada permintaan untuk dibuatkan semacam aplikasi sederhana untuk melakukan pengiriman data ini, agar memudahkan orang yang akan mengirimkan data, karena selain datanya memiliki format yang sulit dihafal manusia biasa, data yang dikirim juga panjang, bisa sampai 4-5 x 160 karakter untuk sekali pengiriman data. Dibuatlah aplikasi sederhana dengan menggunakan J2ME yang menampilkan semacam form pengisian data dan mengirimkan SMS isi datanya ke pusat. No prob.

The problem is, ketika banyak orang yang melakukan pengiriman data sekaligus, dimana setiap pengiriman data terdiri dari 4-5 x 160 karakter, terjadilah deadlock.

Detailnya begini. Karena GSM modem yang dipakai tidak punya fitur inbox, maka seluruh SMS yang diterima tersimpan di simcard. Katakan 20 orang melakukan pengiriman data sekaligus, masing-masing data terdiri dari 4*160 karakter, yang berarti GSM modem akan menerima 4 SMS, dimana masing-masing merepresentasikan bagiannya. Setelah beberapa saat, bagian pertama dan bagian kedua sampai ke simcard, sehingga isi inbox simcard sudah sampai 40 SMS. Ini merupakan jumlah maksimal SMS yang bisa disimpan di simcard yang kami digunakan. Karena penuh, maka bagian ketiga dan keempat dari SMS tidak bisa masuk. Sayangnya, Gammu baru akan menghapus inbox simcard ketika seluruh bagian sudah ada di inbox. Disatu sisi bagian ketiga dan keempat tidak bisa masuk karena inbox penuh, disisi lain isi inbox tidak dihapus karena menunggu semua bagian tersedia. Deadlock.

Memang Gammu memiliki setting timeout, yaitu untuk menghapus SMS yang tidak lengkap setelah beberapa saat. Namun jalan ini tidak diambil karena tidak ada jaminan SMS yang sudah dihapus akan dikirim lagi baik oleh operator maupun orang yang mengirimkan data.

Untungnya, pengirim data tidak menuliskan datanya dengan cara menuliskan SMS biasa, namun dengan mengisi form pada aplikasi J2ME. Inilah yang menjadi titik solusi dari permasalahan.

Kami mengubah cara aplikasi tersebut mengirimkan SMS. Alih-alih mengirimkan 1 kali SMS panjang yang akhirnya dipecah menjadi 5 SMS oleh entah siapa, aplikasi memecah-mecah sendiri 1 SMS panjang menjadi 5 SMS dan mengirimkannya satu per satu. Pada setiap SMS disiapkan ID unik untuk menyatakan bahwa 5 SMS yang dikirim ini merupakan satu kesatuan.

Dengan begini, ketika satu SMS diterima GSM modem, SMS langsung dihapus dari inbox simcard oleh Gammu dan diletakkan ke tabel database. Dari tabel itulah, diambil SMS-SMS tersebut dan dirangkai lagi menjadi satu kesatuan data sesuai dengan ID-nya. Akibatnya inbox simcard akan selalu kosong dan tidak ada lagi SMS yang ditolak karena inbox penuh.

Tentu saja solusi ini tidak cocok untuk semua keadaan, solusi ini hanya cocok jika:

  • SMS yang dikirim sangat panjang, lebih dari 160 karakter
  • pengiriman SMS melalui aplikasi buatan, bukan bawaan HP
  • GSM modem yang digunakan tidak memiliki fitur inbox didalamnya
  • GSM modem yang digunakan hanya satu untuk seluruh tujuan pengiriman data
  • Mengambil asumsi bahwa pengirim data hanya akan mengirimkan suatu data sekali untuk selamanya
Dengan constraint bahwa data yang dikirim harus diproses dalam waktu 24 jam, solusi ini sampai sekarang masih cukup untuk 100 pengirim data sekaligus pada waktu yang bersamaan, dimana masing-masing data terdiri dari 4-5 SMS. Mungkin akan tahan sampai 1000 pengirim data sekaligus. Lebih dari itu, mungkin perlu ditambah GSM modem baru. 

Jika anda mengalami situasi dan kondisi yang mirip dengan ini namun menggunakan solusi yang berbeda, I would love to hear it. Atau jika ingin mengaplikasikan solusi ini, feel free to contact me at my email. Semoga bermanfaat.








No comments:

Post a Comment