Gleam OTP – Aktör Tabanlı Hata Toleranslı Çok Çekirdekli Program Geliştirme
(github.com/gleam-lang)- Gleam OTP, aktör modelini kullanarak hata toleransına ve çok çekirdekli performansa sahip programlar geliştirmeyi destekler
- Tam tür güvenliği ve Erlang OTP ile uyumluluk hedeflemesiyle öne çıkar
- Supervisor aracılığıyla hata kurtarma ve kendi kendini iyileştirme özellikleri sunar
- Erlang/OTP’nin yalnızca bazı özelliklerini sunar; ek yönetim stratejileri şu anda geliştirilmektedir
- Genel süreçler, aktörler, supervisor’lar gibi çeşitli aktör tiplerini destekler
Gleam OTP Genel Bakış
- Gleam OTP, Erlang’ın OTP mimarisini temel alan güçlü bir aktör çerçevesidir ve hata toleranslı çok çekirdekli programlar geliştirmek için uygundur
- Açık kaynaklı bir projedir ve Apache-2.0 lisansı ile sunulmaktadır
Başlıca Özellikler ve Avantajlar
- Aktörler ve mesajlar için tam tür güvenliği sağlar
- Erlang OTP ile uyumluluk sunar; bu da mevcut Erlang ortamlarıyla entegrasyonu kolaylaştırır
- Supervisor sayesinde hata algılama, otomatik kurtarma ve sonlandırma yönetimi gibi hata toleransı özellikleri sağlar
- Erlang OTP’ye denk aynı performansı hedefler
- Sağlanan dokümantasyon ve örnekler sayesinde öğrenmesi ve gerçek projelerde uygulanması kolaydır
Aktör Tiplerine Göre Açıklama
-
Process
- OTP içindeki en temel yapı taşıdır
- Diğer aktör tiplerinin temelini oluşturur ancak Gleam uygulamalarında doğrudan sık kullanılmaz
-
Aktör
- En yaygın kullanılan process tipidir ve Erlang’daki gen_server’a benzer işlevler sunar
- OTP sistem mesajlarını otomatik işler, hata ayıklama ve izleme özelliklerini etkinleştirir
-
Supervisor
- Diğer process’leri başlatır ve denetleme ile kurtarma görevini üstlenir
- Alt process’ler çökme veya istisna durumlarında otomatik olarak yeniden başlatılır
- Supervisor’ların iç içe yapılandırılması (supervision tree) ile uygulamanın hata toleransı yapısı oluşturulur
- Ayrıntılı uygulama için
gleam/otp/static_supervisor,gleam/otp/factory_supervisorbelgelerine bakılabilir
Sınırlamalar ve Sorunlar
- Şu anda aktörler tüm OTP sistem mesajlarını desteklememektedir; desteklenmeyen mesajlar yok sayılır
- Bazı OTP hata ayıklama API özellikleri sınırlıdır
- Gerekirse issue açılarak henüz uygulanmamış mesajlar için destek talep edilebilir
Sonuç ve Projenin Önemi
- Gleam OTP, Erlang ekosisteminin güçlü yönlerini Gleam diline taşıyarak tür güvenliği ve çok çekirdekli hata toleransı sağlaması açısından büyük önem taşır
- Kararlılık ve performansın kritik olduğu gerçek servis uygulamaları için uygundur
- Startup’lar, IT alanındaki profesyonel geliştiriciler ve genel geliştirici kitlesi için öğrenme ve pratikte uygulama açısından değeri yüksek bir açık kaynak projedir
1 yorum
Hacker News görüşleri
Statik tipler, null’suz bir ortam, fonksiyonel ve ML ailesinden dillere ilginiz varsa gleam’i denemenizi tavsiye ederim
Üstelik yine BEAM üzerinde çalışıyor
gleam’i kurduğumda sistemime yaklaşık 50 paket yüklendi; bunlar muhtemelen Erlang/Elixir ile ilgili paketlerdi
Sadece JS’ye transpile etmek istesem ne olurdu diye merak ediyorum. Belki de bu, sistemimdeki paketleme meselesidir
Lua’yı transpile hedefi olarak desteklese daha da iyi olurdu. Bana göre bir DSL’i başka programlara gömmek için Lua, JS runtime’ından 3 kat daha kolay
Şimdiye kadar en sevdiğim şey ise topluluk oldu. gleam topluluğundaki kütüphanelerin ve kaynakların kalitesi gerçekten çok yüksek
Rust topluluğunu hatırlatıyor; zor problemlerle akıllı insanlar zaten ilgilenmiş oluyor ve iyi çözümler kolayca bulunabiliyor (lustre, squirrel vb.)
Çok fazla deneysel ve yaratıcı deneme görmek de ayırt edici bir özellik. Büyük dil ekosistemlerinde pek görülmeyen şeyler burada öne çıkıyor. Topluluk büyürken çok sıcak karşılayan bir havası var
Nereden başlamanın iyi olacağını önerir misin?
Phoenix gibi bir framework’ü Gleam ile birlikte kullanmak mümkünse gerçekten harika olur diye bakınıyorum
Şu anda Python ile yeni bir proje hazırlıyorum ama Gleam tarafında da kullanılabilir bir seçenek varsa denemek isterim
Ön yüz/arka yüzün hangi kısımda yer alacağını çok kolay seçebilmek bunun avantajlarından biri
YouTube bağlantısı
Bunun yerine web uygulaması geliştirirken sık kullanılan araçlar var
Lustre temel görünüm aracı, Wisp ise sunucu tarafını üstleniyor
SQL tarafında squirrel ve POG var (yeni ama popülerleşiyor)
BEAM için farklı bir statik tip alternatifi istiyorsanız iyi bir seçenek
Haskell’in bir lehçesi gibi ve strict evaluation ile row polymorphism destekliyor
Pratikte nasıl kullanıldığını merak ediyorum. Tüm servis mantığını bununla mı kuruyorsunuz, yoksa sadece belirli bölümler için mi kullanılıyor?
"functional core, imperative shell" desenini en uç noktaya kadar uygulayarak, Gleam’in mevcut Ruby on Rails kod tabanında ağır hesaplama işlerini üstlenen ayrı bir katman olmasını sağladım
OTP özelliklerini neredeyse hiç kullanmıyoruz; Rails ise web UI/HTTP API gibi asıl güçlü olduğu alanlara odaklanıyor
Job giriş değerlerini Rails hazırlıyor ve job verisi Redis üzerinden Gleam’e tek bir atomik değer kümesi olarak aktarılıyor
Ağ ve dosya IO için Elixir ile ince bir wrapper yaptık; iş mantığı ise Gleam modüllerinde yer alıyor
Bu yöntem hakkında daha teknik ve ayrıntılı bir yazıyı yakında makale olarak paylaşmayı düşünüyorum. HN’de sık ilgi gören bir konu
Elixir genel amaçlı olarak harika bir dil ve pek çok alanda güçlü
Daha ayrıntılı sohbet için Developer Voices videoma bakabilirsiniz
YouTube bağlantısı
Birçok insan Erlang/Elixir & BEAM ile ciddi sistemler kuruyor; merak ettiğin şeyleri sorarsan iyi yanıtlar alırsın
OTP’yi yeterince anladıktan sonra tüm sistemi onun üzerine kurmak doğal gelmeye başlıyor
Ben de 7 yıldır böyle yapıyorum ama yeni geliştiricilerin bu ekosisteme alışmasının uzun sürdüğünü gördüm
Teknik bir proje sayfasına neden siyasi bir mesaj koymak gereksin, anlamıyorum
Bu, katılıp katılmama meselesi değil; profesyonel bir bağlamda bu tür tartışmaların dışarıda bırakılmasının daha uygun olduğunu düşünüyorum
Aksi halde konuşma gereksiz yere konudan sapıyor
Sayfanın alt tarafında sadece bir kez geçen o tek satırdan mı bahsediyorsun?
Eğer bu tek cümle yüzünden kullanmamaya karar veriyorsan, o zaman tam da amaçlandığı gibi çalışıyor demektir
Aslında konuyu saptıran kişinin sen olduğun düşünülebilir
Benim açımdan hata toleransı ve çok çekirdek desteği için Scala/ZIO’daki gibi software transactional memory ve fonksiyonel effect sistemi kullanmak daha iyi
Yine de actor modeline ihtiyaç duyulan yerlerde kullanılabilir
Ayrıca JVM ekosisteminin olgunluğu, gözlemlenebilirliği ve üretim sahasındaki gerçekliği düşünüldüğünde BEAM’den daha üstün
BEAM’in zayıf yanlarını eleştirmeni anlarım ama güçlü olduğu tarafı eleştirmek bana pek anlamlı gelmiyor
BEAM, immutable mesajların hafif ve ucuz green thread’ler arasında iletildiği bir yapı
Sağlam supervisor tree’leri var; bu sayede data race ya da thread’in durması gibi şeyler için endişelenmiyorsunuz
Bunların hepsi varsayılan olarak yerleşik olduğundan boilerplate de yok
Immutable yapı sayesinde performans da şaşırtıcı derecede iyi
Sonuçta BEAM, hata toleranslı, dağıtık/eşzamanlı sistemler için en optimize platformlardan biri
Böyle bir dayanıklılığın önemli parçalarından biri güçlü supervising ve makineler arası altyapı
Actor sistemlerinin ortaya çıkmasına büyük ilham veren dillerden biri
Kelimenin tam anlamıyla Erlang bu tek iş için var ve bunu gerçekten çok iyi yapıyor
Gerçekten paylaşılması gereken veri varsa bunun zaten immutable olması gerekir
Benim aklıma sadece aşırı ağır sayısal hesaplamalar geliyor; onlar da zaten elixir ya da erlang ile doğrudan yazılmaz, NIF ile uygulanır
Actor desenini açıkça kullanmasanız bile durum aktarımı ve koordinasyon zaten çözülmüş problemler
Task, Agent, GenServer, Supervisor gibi temel primitive’lerin hepsi mevcut