Mengenal Distributed System di Erlang

Evan Purnama
Pujangga Teknologi
Published in
4 min readNov 25, 2018

Erlang adalah bahasa pemrograman yang sebenarnya sudah lama sekali ada, tepatnya pada tahun 1986 atau sekitar 32 tahun yang lalu. Akan tetapi Erlang beberapa tahun terakhir ini kembali populer karena berbagai alasan misalnya karena functional programming sedang populer, misalnya konsep fault tolerant yang menarik, ataupun karena sekarang ini banyak aplikasi yang mengejar scalability sehingga konsep distributed computing menjadi sangat digandrungi.

Node

Di Erlang distributed system, terdiri dari sejumlah Erlang runtime system yang saling berkomunikasi satu sama lain. Satu sama lain runtime system ini dinamakan node. Pesan dikirim dari satu node ke node lain. Semua proses berkirim pesan, memonitor tiap proses, dan menghubungkan proses perlu menggunakan pid. Masing-masing proses mempunyai alamat berdasarkan registered name dan alamat node nya. Format penulisan suatu alamat node kira-kira seperti ini name@host . Mekanisme untuk berkomunikasi menggunakan TCP/IP sockets. Jadi asalkan runtime system tersebut ada di dalam suatu jaringan yang saling terkoneksi satu sama lain, maka proses-prosesnya akan bisa menghubungi atau diakses proses yang lain.

Untuk bisa suatu proses saling terhubung dengan yang lain, selain suatu node perlu jelas registered name dan host node nya, perlu juga menge-set nilai dari cookies . Node yang di-set suatu cookie yang sama akan bisa saling terkoneksi satu sama lain.

Berikut kira-kira cara membuat 2 node Erlang yang bisa terhubung satu sama lain.

erl -name evan@remote-host-1 -setcookie "12345"

node di atas, akan bisa berkomunikasi dengan node berikut

erl -name purnama@remote-host-2 -setcookie "12345"

asalkan remote-host-1 dan remote-host-2 ada dalam 1 cluster jaringan yang sama, maka kedua node tersebut sudah bisa terhubung satu sama lain. Cookie matching diperlukan untuk bisa terkoneksi antara lain untuk security.

Node Connection

Koneksi node erlang bersifat transitive, artinya apabila ada node A terkoneksi dengan node B, kemudian node B terkoneksi dengan node C. Maka secara otomatis node A akan terkoneksi dengan node C. Sebenarnya ini bisa dimatikan dengan dari configuration flag connect-all false , akan tetapi perlu dipertimbangkan sesuai dengan kebutuhan aplikasi.

Suatu node di Erlang system adalah loosely connected. Suatu node baru akan terhubung di cluster ketika node tersebut digunakan.

Ilustrasi Node Connections

EPMD

Erlang Port Mapper Daemon epmd bertanggung jawab atas mapping antara symbolic name dengan alamat mesin. Epmd ini otomatis akan dijalankan di host ketika ada node yang running.

Hidden Nodes

Kadang-kadang kita perlu bisa terkoneksi dengan suatu node tanpa perlu terkoneksi dengan semua node yang lain. Misalnya saat kita ingin mengetahui status dari sebuah system atau melakukan suatu operasi atau monitoring. Kita perlu bisa melakukan inspeksi tanpa terlalu mengganggu distributed system tersebut. Hal ini bisa dicapai dengan menggunakan hidden nodes.

hidden node bisa dibuat dengan menambahkan command line flag -hidden . Koneksi node tidak bersifat transitive sehingga harus dikoneksikan secara eksplisit. Berikut agar lebih jelas :

Node B sama sekali tidak terkoneksi dengan C

Proses dan Fault Tolerance

Di Erlang, semuanya adalah proses, artinya apabila kita mau melakukan sesuatu komputasi, kita akan membuat suatu proses baru untuk menjalankan proses komputasi tersebut. Ketika prosesnya sudah selesai, hasilnya akan dikirim sesuai dengan yang kita inginkan. Karena konsep inilah, Erlang juga memerlukan supervisor yang bisa menjaga semua proses agar tetap terkontrol.

Yang dimaksud Fault Tolerance di sini adalah, proses-proses yang dijalankan di Erlang bisa saja fail atau crash sewaktu-waktu, akan tetapi suatu proses yang fail atau crash tidak akan berpengaruh dengan keseluruhan system karena suatu proses tersebut bisa tinggal dibuang dan dimatikan oleh supervisor, dan supervisor tinggal membuat proses baru untuk menjalankan proses yang tadi fail. Dengan konsep seperti ini, apabila digabungkan dengan distributed system yang mana proses-proses bisa dijalankan dari seluruh node, maka kita bisa bayangkan bahwa system tersebut akan sangat scalable.

Keterbatasan

Seperti halnya sistem yang lain, Erlang distributed system juga mempunyai keterbatasan. Karena node yang bersifat transitive semua proses dan informasi harus selalu terkomunikasi di semua node, maka akan ada batasan di mana ketika jumlah nodes yang terhubung besar, performa juga akan menurun dengan signifikan. Baik dari latency ataupun dari memory dan komputasi power yang dibutuhkan.

Dari beberapa riset yang dilakukan, diketahui bahwa jumlah node optimal yang bisa digunakan adalah sekitar 50 nodes. Apabila lebih dari itu, performa akan mulai menurun dan tidak optimal, apalagi kalau sudah sampai 200 nodes. Perlu banyak hal yang perlu di-tuning. Akan tetapi jangan terlalu khawatir, dengan jumlah 50 nodes tersebut, secara umum kita sudah bisa membuat suatu aplikasi ataupun system yang sangat besar!

P.S. Jika teman-teman menyukai artikel semacam ini, silakan subscribe ke newsletter kita dan dapatkan notifikasi artikel terbaru langsung di inbox kamu!

--

--

Evan Purnama
Pujangga Teknologi

Co-Founder at Qiscus. #EnablingConversations. Talking about SaaS, Startup, and Technology.