Story Develop Contact Tracing Apps (Covid19)

Suko Widodo
2 min readOct 19, 2020

--

Saya ingin bercerita tentang pengalaman yang lumayan, ini berawal ketika saya diajak teman saya untuk join dalam sebuah projek untuk develop aplikasi contact tracing di masa pandemi covid19 untuk salah satu perusahaan industri di Jakarta. Jadi konsep diawalnya kita BLE untuk tracingnya.

Tapi karena kesulitan implementasi BLE maka diputuskan implementasi menggunakan GPS device android sebagai teknologinya dengan short pooling kirim dengan jeda beberapa detik. Kemudian data akan ditampung di mongodb kemudian selanjutnya akan di query di mongonya menggunakan index geospasial untuk mendeteksi berdekatan/berinteraksi.

Awalnya berjalan baik ketika testing di server testing, namun ketika di deploy di AWS untuk production kemudian beberapa anomali datang berawal dari mongodb nya tumbang karena I/O nya terlalu besar karena penambahan penggunanya yang terus meningkat signifikan. Pada akhirnya server pun ditambah resourcenya sampai dengan 32 core namun lama kelamaan akhirnya tumbang juga.

Bahkan nginx juga sudah dioptimasi dengan ditambah workernya sedemikian rupa tapi tetap tidak kuat untuk menghandle user yang banyak dengan hit yang konsisten.

Sempat terpikirkan menggunakan message broker semacam rabbitmq atau kafka tapi di dalam sistem tidak memungkinkan penggunaan message broker. akhirnya pilihan jatuh ke redis diawalnya berjalan cukup baik, tapi pada akhirnya tetap tumbang juga. Setelah penambahan resource lagi ada masalah lain yaitu beda lantai akan tetap terdeteksi sedang berinteraksi.

Dan karena beberapa masalah tersebut akhirnya kembali ke rencana sebelumnya yaitu menggunakan BLE (Bluetooth Low Energy).Meskipun saya sudah familiar dengan BLE sebelumnya, tapi untuk implementasi peer to peer device android dengan BLE sangat tidaklah mudah. Saya biasanya menggunakan BLE android konek dengan device lain (peripheral). Saya butuh hampir seminggu untuk risetnya saja, ada beberapa masalah yang dihadapi antara lain.

  1. Memastikan service berjalan di background meskipun dalam keadaan kill state aplikasi.
  2. Cara membaca data antar device menggunakan bluetooth tanpa memerlukan pairing terlebih dahulu.
  3. Memastikan proses advertising dan scanning berjalan secara simultan dengan interval tertentu yang sesuai supaya dapat tracing satu sama lain.
  4. Mengetahui bahwa bluetooth yang terdeteksi adalah user lain dan bukan device maupun bluetooth lain yang bukan pengguna aplikasi yang saya buat.

Saya tidak akan menjelaskan detail tapi pada intinya saya menggunakan service id yang digenerate untuk mengenali satu sama lain yang kemudian di tampung dan dikirim ke server dengan interval tertentu yang lebih panjang

Selanjutnya di server service id yang dikirim akan di filter kembali untuk menyaring bahwa data yang dikirim adalah service id pengguna aplikasi yang saya buat.

Semoga tulisan ini bermanfaat.

--

--