Kali ini mau share soal problem yang kemarin sempat muncul saat ngerjain salah satu project di MGG Software. Problem bermula saat deploy webservice di env UAT milik client, dikarenakan dapet server yg multicore akhirnya diputuskan untuk melakukan clustering menggunakan PM2 di UAT. Setelah beres dan dilakukan testing oleh client barulah masalah ini muncul. Sebelumnya client sudah melakukan testing di env testing milik MGG dan tidak ada masalah sama sekali, semua berjalan sesuai yang diharapkan namun hal itu tidak berlaku saat dilakukan testing di env UAT milik mereka.

Problem yang muncul adalah koneksi socket antara feathers dan client seakan tidak stabil. Terkadang saat feathers kirim socket ke client, si client menerima pesan yang dikirimkan oleh server, namun seringnya si client tidak menerima pesan tersebut. Sempat bingung, pusing dan frustasi untuk beberapa saat karena problem ini 😫. Masalahnya socket ini sangat diperlukan oleh webservice untuk mentrigger apps melakukan sebuah fungsi pada waktu tertentu 😓.

Setelah bertapa googling beberapa saat, akhirnya menemukan sebuah titik cerah. Betapa bodohnya saya yang baru menyadari bahwa koneksi socket dari client bisa saja berada pada instance webservice berbeda dengan yang mengirimkan payload socket 😅. Katakanlah saya start PM2 untuk webservice saya sejumlah 4 process. Saat melakukan clustering menggunakan PM2, bisa saja terjadi kemungkinan apps di device A socketnya terhubung diwebservice dengan index 0 pada PM2, lalu apps di device B socketnya terhubung diwebservice dengan index 2 pada PM2. Lalu, masalah timbul apabila saat mengirim payload via socket, yang melakukan adalah webservice dengan index 1 atau 3 di PM2. Yang terjadi adalah pesan tidak akan masuk ke apps karena apps pada kedua device tidak berada pada webservice yang sama dengan yang mengirimkan socketnya.

Solusi yang bisa dilakukan adalah jangan start webservice dengan mode cluster di PM2 😂😋. Tentu saja hal itu bukanlah solusi terbaik, karena kita tidak bisa memanfaatkan benefit processor server yg multicore itu. Kan mubadzir udah dikasih server yang multicore, tapi ndak dimanfaatin secara baik, wqwqwq 😹😹😹. Tapi, demi kelancaran testing, terpaksa saya melakukan ini, sambil mencari solusi lain yang benar-benar merupakan sebuah solusi demi kemaslahatan tim yang mengerjakan project ini.

Setelah menyelami samudra mbah google yang amat luas ini, saya menemukan sebuah solusi yang mungkin bisa jadi jawaban atas kegelisahan saya. Kenapa baru saya tulis mungkin? Ya, karena emang baru nyari-nyari doang. Belum sempat nyobain dan ditest dalam mode cluster. Waktunya belum ada je, timbang nanti tak coba trus malah semburat lak yo mumet ndasku. Oiya, sang penyelamat yang saya temukan itu bernama Feathers Sync. Untuk masalah feathers sync ini akan saya bahas pada artikel berikutnya, setelah saya selesai nyobain dan ngetest di mode cluster. Lek menurut feeling saya sih, haruse ini bisa jadi jawaban atas masalah saya. Tapi, yo biarkan waktu ae yang menjawab~

Akhir kata, salam bangcyaaaaaaaaaat~