Pengenalan topologi distribusi

Topologi terhubung penuh, node tersembunyi, dan batas penskalaan distribusi.

Daftar isi

Topik ini mengulas sifat-sifat topologi penghubungan node Erlang yang menentukan batas praktisnya: koneksi yang membentuk jaringan terhubung penuh, node tersembunyi untuk menghindarinya, peran layanan global, dan perilaku saat jaringan terbelah. Topik ini tetap pengenalan, cukup untuk membaca desain klaster dan mengetahui batas kapan distribusi Erlang masih tepat dipakai.

Jaringan terhubung penuh#

Saat node a menghubung node b, dan kemudian node b menghubung node c, VM secara bawaan menghubungkan a dengan c juga: setiap node yang terhubung saling bertukar informasi tentang node lain yang dikenalnya, sehingga klaster tumbuh menjadi jaringan terhubung penuh (fully connected mesh). Sifat ini memudahkan karena pesan dapat mengalir ke mana pun tanpa konfigurasi, tetapi biayanya bertumbuh kuadrat: koneksi dan pemantauan hidup antara setiap pasangan node, dan setiap node baru menambah beban untuk semua node yang ada. Klaster berukuran puluhan node masih lazim ditemui, sementara ratusan node dalam satu mesh biasanya menjadi sinyal bahwa distribusi diterapkan di tempat yang salah.

Node tersembunyi dan global#

Sifat mesh tidak selalu dikehendaki, misalnya pada alat operasi yang menghubungi banyak node tanpa ikut menjadi bagian klaster. Opsi -hidden membuat node yang baru tidak diperkenalkan ke node lain: koneksi tetap terjadi dan pesan tetap mengalir, tetapi node itu tidak muncul pada nodes/0 milik orang lain dan tidak menambah koneksi silang. Fungsi nodes/1 dengan argumen hidden membacanya secara eksplisit, dan perangkat seperti observer serta alat pemantauan memakai pola ini sebagai jembatan yang tidak menambah beban mesh.

Untuk nama dan sumber daya yang harus berlaku lintas klaster, layanan global menyediakan registry nama terdistribusi dengan pilihan node penjaga. Ia menyelesaikan konflik nama saat klaster bergabung dan memberi alamat yang sah lintas node, dengan biaya komunikasi koordinasinya sendiri. Aturan praktisnya: register/2 untuk nama yang lokal per node, dan global hanya untuk beberapa proses tunggal yang memang menjadi titik temu klaster, bukan untuk setiap pekerja.

Net split dan batasnya#

Ketika jaringan memisahkan klaster menjadi dua pihak yang tidak saling terjangkau, masing-masing pihak tetap hidup dan berjalan sendiri, dan inilah situasi yang paling menuntut desain. VM mencatat keterputusan itu melalui pesan nodedown pada proses yang memantau node, sementara data yang ditulis di kedua sisi selama pemisahan tidak otomatis disatukan kembali saat jaringan pulih. Mnesia, misalnya, berhenti melayani transaksi pada mayoritas yang kurang dan menuntut pernyataan eksplisit dari operator saat partisi pulih. Karena itulah keputusan arsitektur yang lazim adalah menempatkan state yang menuntut konsistensi yang kuat di luar mesh Erlang, dan memakai distribusi untuk apa yang memang kekuatannya: pengiriman pesan, spawn jarak jauh, dan supervisi lintas mesin.

Batas praktisnya dirangkum sebagai berikut: mesh bawaan nyaman sampai belasan hingga puluhan node, node tersembunyi menjaga alat operasi di luar mesh, dan pekerjaan yang menuntut ribuan node atau konsistensi lintas partisi biasanya dipindahkan ke lapisan lain. Dengan pemahaman ini, keputusan memakai distribusi bawaan atau tidak menjadi keputusan desain yang bisa dipertanggungjawabkan, bukan kebiasaan.

Memantau kesehatan mesh#

Kesehatan mesh dapat diamati tanpa alat tambahan. Fungsi nodes/0 dan nodes(hidden) membaca tetangga saat ini, dan proses yang ingin diberi tahu setiap node yang masuk atau keluar mendaftar lewat net_kernel:monitor_nodes(true), yang membuat pesan {nodeup, Node} dan {nodedown, Node} masuk ke mailboxnya:

erlang Langganan kejadian node
1> net_kernel:monitor_nodes(true).
ok
2> net_adm:ping('b@c-6ae9b560-14127d0f-ff7b7b884eca').
pong
3> flush().
Shell got {nodeup,'b@c-6ae9b560-14127d0f-ff7b7b884eca'}
ok

Langganan inilah bahan baku keputusan tingkat aplikasi: layanan yang menunggu pendampingnya dapat memantau node pendamping alih-alih polling, dan pemulihan koneksi menjadi reaksi terhadap {nodeup, ...} yang nyata. Dipadukan dengan node tersembunyi untuk alat operasi, mesh yang hidup tetap terbaca tanpa menambah bebannya.

Ringkasan#

  • Penghubungan bawaan membentuk mesh terhubung penuh dengan biaya yang bertumbuh kuadrat terhadap jumlah node.
  • Opsi -hidden menyembunyikan node dari perkenalan mesh, cocok untuk alat operasi dan pemantauan.
  • Layanan global menyediakan nama terdistribusi dengan koordinasinya sendiri, dan dibatasi pada proses titik temu.
  • Partisi jaringan membiarkan kedua sisi hidup tanpa penyatuan otomatis, sehingga state konsisten kuat biasanya ditempatkan di luar mesh.

Referensi#