12 poin oleh GN⁺ 2024-11-21 | 3 komentar | Bagikan ke WhatsApp
  • 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:
    1. 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
    2. 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

 
bus710 2024-11-22

Konten ini juga dijelaskan secara rinci dalam Pertama Kali Belajar Pemrograman Elixir, satu-satunya buku terjemahan Elixir di Korea.

 
papillon 2024-11-21

Ini memang fitur yang keren dan kuat,
namun sepertinya lebih baik digunakan hanya untuk debugging dan pengecekan secara real-time

 
GN⁺ 2024-11-21
Komentar Hacker News
  • Di Discord, BEAM hot code loading digunakan untuk mempersingkat siklus deployment yang panjang dan dipakai untuk pembaruan darurat

    • Mereka mengembangkan alat yang dapat menambal beberapa modul sekaligus lalu menyebarkan pembaruan ke klaster
    • Hot patch didistribusikan melalui fitur distribusi bawaan Erlang
  • Pada perangkat Nerves, code reloading berguna dan baik untuk pengujian integrasi karena perubahan dapat diuji secara real time

    • Menguji dan memperbarui firmware baru dari jarak jauh membuat pelanggan puas
    • Menyalin file ke /tmp lalu menggunakan Code.compile memberikan pesan kesalahan yang lebih baik
    • Menulis fungsi helper untuk mengompilasi lalu menghapus semua kode itu sederhana
  • Mereka tidak bisa menggunakan hot code update di proyek Elixir, tetapi merasa itu akan membantu pelanggan

    • Untuk perubahan yang kompleks, hot code update justru bisa menimbulkan lebih banyak masalah
    • Untuk perubahan sederhana, lebih baik memberi dampak seminimal mungkin
  • Di kosmi.io, hot code upgrade digunakan dengan sukses

    • Memungkinkan pengembangan, perbaikan, dan deployment pembaruan dengan cepat
    • Mereka menggunakan Distillery dan skrip kustom, tetapi berharap ada standardisasi
  • Mereka mulai tertarik pada Erlang melalui Nerves dan hot code reloading

    • Meski tidak praktis di lingkungan produksi, ini adalah alat yang berguna untuk membangun sistem yang andal
  • Perlu sangat berhati-hati saat menyiapkan relup, dan di Linux ada juga cara menjalankan server baru lalu memindahkan data sesi

    • Hot patching bisa terasa kurang memuaskan karena VM yang sama terus dijalankan
  • Mereka men-deploy Elixir ke embedded Linux, dengan Nerves menggantikan systemd dan mem-boot BEAM VM sebagai proses 1

    • Ini menempatkan Elixir lebih dekat ke perangkat keras
  • WhatsApp dulu menggunakan skrip SSH untuk melakukan hot reloading di semua node

  • Hot code update berguna, tetapi mudah memicu kesalahan dan dukungannya kurang memadai

    • Manfaat hot code update juga bisa diperoleh lewat rolling restart yang dilakukan dengan hati-hati
    • Fitur code reloading Erlang dapat dimanfaatkan untuk membuat alat diagnosis masalah secara real time
  • Hot code update menguntungkan saat melakukan perubahan kode ketika banyak klien sedang terhubung

    • Mereka menggunakan GNU Make untuk menyinkronkan kode ke produksi dan memuat modul melalui shell debug