- Salah satu fitur paling kuat dalam ekosistem Erlang adalah hot code update
- Fitur ini hampir tidak mungkin ditemukan di runtime lain dan sangat unik
- Elixir dibangun di atas Erlang dan mendukung kemampuan yang sama
Menerapkan hot code update di Elixir
- Pendekatan rilis Elixir standar (
mix release) tidak mendukung hot code update Erlang secara bawaan
- Untuk mengimplementasikan hot code update, perlu merujuk ke beberapa tulisan blog atau mempelajari dokumentasi resmi Erlang secara mendetail
- Materi terkait:
Contoh penggunaan nyata hot code update
- Dalam praktik, hot code update secara umum terbagi menjadi dua kategori besar:
- Reload kode sederhana
- Contoh: saat pengembangan, menjalankan perintah
r MyModule atau recompile di IEx
- Ini sederhana dan berguna, tetapi terasa lebih seperti bagian dari kompiler atau builder baru
- Penerapan yang lebih kompleks
- Proyek Nerves sering memanfaatkan hot code update:
- Pada perangkat Elixir tertanam, saat menyetel angka atau memodifikasi modul, pembaruan dilakukan lewat
IEx alih-alih menunggu upload firmware dan reboot
- Dapat memulai/menghentikan bagian tertentu dari aplikasi, atau menghentikan
GenServer untuk menginisialisasi ulang state
- Menerapkan hot code update ke perangkat jarak jauh melalui NervesHub:
- Contoh: saat melakukan debug real-time clock, bisa langsung menjalankan pemanggilan I2C untuk cepat mengidentifikasi masalah
Alat dan hal yang perlu diperhatikan dalam hot code update
- Diharapkan akan semakin banyak tooling yang mendukung hot code update di atas
mix release Elixir atau alat distillery yang sudah ada
- Hot code update membutuhkan perhatian cermat seperti migrasi database:
- Perlu memahami bagaimana dependensi bereaksi terhadap hot code update
- Ada juga berbagai topik lain yang perlu dipertimbangkan
3 komentar
Konten ini juga dijelaskan secara rinci dalam Pertama Kali Belajar Pemrograman Elixir, satu-satunya buku terjemahan Elixir di Korea.
Ini memang fitur yang keren dan kuat,
namun sepertinya lebih baik digunakan hanya untuk debugging dan pengecekan secara real-time
Komentar Hacker News
Di Discord, BEAM hot code loading digunakan untuk mempersingkat siklus deployment yang panjang dan dipakai untuk pembaruan darurat
Pada perangkat Nerves, code reloading berguna dan baik untuk pengujian integrasi karena perubahan dapat diuji secara real time
/tmplalu menggunakanCode.compilememberikan pesan kesalahan yang lebih baikMereka tidak bisa menggunakan hot code update di proyek Elixir, tetapi merasa itu akan membantu pelanggan
Di kosmi.io, hot code upgrade digunakan dengan sukses
Mereka mulai tertarik pada Erlang melalui Nerves dan hot code reloading
Perlu sangat berhati-hati saat menyiapkan relup, dan di Linux ada juga cara menjalankan server baru lalu memindahkan data sesi
Mereka men-deploy Elixir ke embedded Linux, dengan Nerves menggantikan systemd dan mem-boot BEAM VM sebagai proses 1
WhatsApp dulu menggunakan skrip SSH untuk melakukan hot reloading di semua node
Hot code update berguna, tetapi mudah memicu kesalahan dan dukungannya kurang memadai
Hot code update menguntungkan saat melakukan perubahan kode ketika banyak klien sedang terhubung