12 puan yazan GN⁺ 2024-11-21 | 3 yorum | WhatsApp'ta paylaş
  • Erlang ekosisteminin güçlü özelliklerinden biri hot code update'tir
  • Bu özellik neredeyse diğer çalışma zamanlarında mümkün değildir ve oldukça benzersizdir
  • Elixir, Erlang üzerinde inşa edilmiştir ve aynı özelliği destekler

Elixir'de hot code update uygulamak

  • Standart Elixir release (mix release) yaklaşımı, Erlang hot code update'i varsayılan olarak desteklemez
  • Hot code update'i uygulamak için birkaç blog yazısına başvurmak veya Erlang resmi belgelerini ayrıntılı biçimde incelemek gerekir
  • İlgili kaynaklar:

Hot code update'in pratik kullanım örnekleri

  • Hot code update pratikte büyük ölçüde ikiye ayrılır:
    1. Basit kod yeniden yükleme
      • Örnek: geliştirme sırasında IEx içinde r MyModule veya recompile komutunu çalıştırmak
      • Bu basit ve kullanışlıdır, ancak daha çok yeni bir derleyici ya da builder'ın parçası gibi hissettirir
    2. Daha karmaşık uygulamalar
      • Nerves projesinde hot code update sıkça kullanılır:
        • Gömülü Elixir cihazlarında sayıları ayarlarken veya modülleri değiştirirken, firmware yükleyip yeniden başlatmayı beklemek yerine IEx ile güncelleme yapılır
        • Uygulamanın belirli bölümlerini başlatıp/durdurmak veya durumu sıfırlamak için GenServer'ı sonlandırmak mümkündür
      • NervesHub üzerinden uzak cihazlara hot code update uygulanır:
        • Örnek: gerçek zamanlı saat hata ayıklaması sırasında I2C çağrıları doğrudan çalıştırılarak sorun hızla tespit edilir

Hot code update için araçlar ve dikkat edilmesi gerekenler

  • Elixir'in mix release veya mevcut distillery aracının üzerine, hot code update'i destekleyen daha fazla tooling gelmesi umuluyor
  • Hot code update, veritabanı migration'ları gibi dikkatli yaklaşım gerektirir:
    • Bağımlılıkların hot code update'e nasıl tepki verdiğini anlamak gerekir
    • Dikkate alınması gereken başka çeşitli konular da vardır

3 yorum

 
bus710 2024-11-22

Bu içerik, ülkedeki tek Elixir çeviri kitabı olan İlk Kez Elixir Programlama Öğrenmek içinde de ayrıntılı olarak yer alıyor.

 
papillon 2024-11-21

Harika ve güçlü bir özellik ama, muhtemelen bunu yalnızca gerçek zamanlı hata ayıklama ve kontrol amacıyla kullanmak daha iyi olur.

 
GN⁺ 2024-11-21
Hacker News görüşleri
  • Discord, uzun dağıtım döngülerini kısaltmak ve acil güncellemelerde kullanmak için BEAM hot code loading kullandı

    • Birden fazla modülü aynı anda patchleyebilen bir araç geliştirerek güncellemeleri cluster’a yaydı
    • Erlang’ın yerleşik dağıtım özelliğiyle hot patch’ler dağıtıldı
  • Nerves cihazlarında code reloading faydalı; değişiklikleri gerçek zamanlı test etmeyi sağladığı için entegrasyon testleri için iyi

    • Uzaktan yeni firmware’i test edip güncelleyerek müşterileri memnun ettiler
    • Dosyayı /tmp içine kopyalayıp ardından Code.compile kullanmak daha iyi hata mesajları veriyor
    • Tüm kodu derleyip silen yardımcı bir fonksiyon yazmak basit
  • Bir Elixir projesinde hot code update kullanılamadı, ancak müşteriye yardımcı olabileceği düşünülüyor

    • Karmaşık değişikliklerde hot code update daha fazla soruna yol açabilir
    • Basit değişikliklerde en az etki yaratmak daha iyi
  • kosmi.io hot code upgrade’i başarıyla kullanıyor

    • Hızlı geliştirme, düzeltme ve güncelleme dağıtımı mümkün oluyor
    • Distillery ve özel script’ler kullanılıyor, ancak bunun standartlaşması isteniyor
  • Nerves ve hot code reloading sayesinde Erlang’a ilgi duyulmaya başlandı

    • Üretim ortamında çok pratik olmasa da güvenilir sistemler kurmak için faydalı bir araç
  • relup hazırlarken çok dikkatli olmak gerekiyor; Linux’ta yeni bir sunucu çalıştırıp oturum verisini aktarmak gibi bir yöntem de var

    • Hot patching, aynı VM’i çalıştırmaya devam ettiği için tatmin edici olmayabilir
  • Elixir, embedded Linux’a dağıtılıyor; Nerves systemd’nin yerini alıyor ve BEAM VM’i process 1 olarak boot ediyor

    • Elixir’i donanıma daha yakın konumlandırıyor
  • WhatsApp geçmişte tüm node’larda hot reloading yapmak için SSH script’leri kullandı

  • Hot code update faydalı, ancak kolayca hataya yol açabilir ve destek yetersizdir

    • Hot code update’in avantajlarının çoğu dikkatli rolling restart ile de elde edilebilir
    • Erlang’ın code reloading özelliği kullanılarak gerçek zamanlı sorun teşhis araçları yapılabilir
  • Hot code update, çok sayıda istemci bağlıyken kod değişikliği yapmak gerektiğinde avantaj sağlar

    • GNU Make kullanılarak kod production’a senkronize edildi ve debug shell üzerinden modüller yüklendi