- 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:
- 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
- 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
Bu içerik, ülkedeki tek Elixir çeviri kitabı olan İlk Kez Elixir Programlama Öğrenmek içinde de ayrıntılı olarak yer alıyor.
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.
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ı
Nerves cihazlarında code reloading faydalı; değişiklikleri gerçek zamanlı test etmeyi sağladığı için entegrasyon testleri için iyi
/tmpiçine kopyalayıp ardındanCode.compilekullanmak daha iyi hata mesajları veriyorBir Elixir projesinde hot code update kullanılamadı, ancak müşteriye yardımcı olabileceği düşünülüyor
kosmi.io hot code upgrade’i başarıyla kullanıyor
Nerves ve hot code reloading sayesinde Erlang’a ilgi duyulmaya başlandı
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
Elixir, embedded Linux’a dağıtılıyor; Nerves systemd’nin yerini alıyor ve BEAM VM’i process 1 olarak boot ediyor
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, çok sayıda istemci bağlıyken kod değişikliği yapmak gerektiğinde avantaj sağlar