Akka, Erlang ile karşılaştırıldığında nasıldır? [kapalı]


99

Son zamanlarda akka'ya bakıyorum ve oldukça etkileyici. Görünüşe göre erlang'ın katil özelliklerinin çoğuna sahip - konum şeffaflığı, denetim hiyerarşileri ve daha fazlası. Erlang'da akka'nın sahip olmadığı özellikler var mı?


Pratikte erlang hakkındaki bu filmi izleyin. Scala youtube.com/watch?v=G0eBDWigORY
mhstnsc

Yanıtlar:


125

Sorumluluk reddi: Ben Akka'nın PO'suyum

  • Erlang gönderirken kopyalama yapar - Akka, sanal makine içi gönderimler için paylaşılan bellek (değişmez nesneler) kullanır
  • Erlang, işlem başına GC yapar - Akka, JVM GC'leri kullanır
  • Erlang vardır OTP tüm Java ekosistemi ile Akka bütünleştirir (Apache Deve, JAX-RS, vs vs) -
  • Erlang, sizin için süreç planlamasını yapar - Akka, sonsuz konfigürasyon fırsatlarıyla birçok farklı Dispatcher kullanmanıza olanak tanır
  • Erlang, sıcak kod yeniden yüklemesini yapar - Akka bunu destekleyebilir, ancak JVM sınıf yüklemesi nedeniyle daha az esnektir

Bunlar kafamın tepesinden olanlar.

Öte yandan Akka'yı kullanmak, uygulamalarınızı yazmak için Scala, Java, Groovy veya JRuby'yi kullanabileceğiniz anlamına gelir.


39
Erlang nesneleri de değişmezdir ve eşzamanlılık modeli aynı düğüm içinde kopyala-gönder gerektirmez. BEAM büyük nesneler için bir referans gönderir. Kaynak: Bu SO cevabı @rvirdig .
FooF

26
Erlang, GC'yi daha verimli hale getirmek için gönderi üzerine kopyalama yapar - süreç bazında çalışabilir. Bu nedenle, JVM / Akka uygulamalarının aksine Erlang uygulamalarında büyük GC duraklamaları yoktur.
andreypopp

4
Pekala, Andrey, bu, hangi JVM / GC'yi kullandığına bağlı. azulsystems.com/products/zing/whatisit
Viktor Klang

4
Erlang, yoğun yoğun bir hesaplama döngüsünde olsanız bile her işlem için bir azaltma numarasına sahiptir, Erlang VM işlemi duraklatabilir ve diğer aç işlemlerin daha fazla CPU döngüsü almasına izin verebilir. Bu, JVM'nin sağlamadığı çok önemli bir özelliktir.
Daniel

6
@MaX Erlang, JIT desteği olmadığı için Java'dan genellikle 5 kat daha yavaştır. Ancak Erlang'ın GC duraklaması yoktur, eşzamanlılık ve 7 * 24 telekom uygulamaları için tasarlanmıştır, Erlang daha çok süreç adaleti, açlıktan ve kilitlenmeden kaçınmakla ilgilenir, JVM gibi verim için tasarlanmamıştır. Yani, gerçekten portakal ve elma.
Daniel

75

Erlang'da proseslerin yaklaşık olarak her 1000 indirgemede değiştirilmesi garanti edilmektedir. Scala / Akka ajanı gibi saf bir çerçevede alımda işi bitirene kadar bir zamanlayıcıya sahiptir. Şah Mat. Oyun bitti. Hasta la vista :) İnsanlar, sözde teknisyenler ile zamanınızı boşa harcamayın. Buradaki adamların Scala'yı Erlang ile karşılaştırması beni şok etti.

Ayrıca "öldürücü özellikler" denen başka pek çok özellik var, ama burada tavsiyem, özellikler açısından düşünmeyin, belirli bir dili etkinleştiren deyimleri düşünün. Scala "en iyi özellikleri" çalıyor, Erlang, doğru deyimlerle çalışan yüksek seviyeli bir dil ile sistemleri güvenilir bir şekilde kurmanız için doğru deyimlerle size olanak sağlıyor / uyguluyor. Erlang'ı öğrendiğinizde, zihninizi yeniden inşa ediyorsunuz, dağıtılmış güvenilir sistem hakkındaki düşünme tarzınızı, Erlang size öğretir ve sizi yükseltir. Scala, diğer dillerden iyi özellikleri çalmaya çalışan bir başka zorunlu dildir (pardon, çok yönlü, komik kelime).


9
Tüm IO'ları örtük olarak asenkronize etmenin Erlang yolu çok zariftir. Async IO, Scala'da NIO API'leri kullanarak yapılabilir, ki bu bana check-mate gibi görünmüyor, ancak daha az zarif bir çözüm.
HRJ

7
sen ne halttan bahsediyorsun ?! 1000 düz görevi bir döngüsel planlamadan veya hatta en küçük posta kutusu planlamasından daha iyi nasıl işliyor !!
FUD

8
@vjache - Katılıyorum. Bir java programcısı olarak uzun yıllar bana, bir noktada altınızdaki katmanı araştırmanız gerekeceğini öğretti. Scala / Akka, bir noktada anlamanız gerekecek olan diğer birçok katmanın (Örn. Nio, netty, vb.) Üzerinde yalnızca başka bir katman gibi görünüyor. Erlang ile yeni çalışmaya başlamama rağmen, işi bitirmek için anlamam gereken daha az katmanım olacak gibi görünüyor. Erlang'da dağıtılmış programlama Scala / Akka'ya çok daha hafif geliyor, muhtemelen python web uygulamaları için java'ya göre daha hafif bir alternatifti.
Chris Snow

@FUD: Belki 1000 Erlang talimatını kastetti? 1000 mesajı kastetmiş olamazdı ...
Erik Kaplun

2
@ErikAllik 1000 "indirim" demek istedi. İndirgemeyi biraz kod çalıştırmak için bir belirteç olarak düşünün (bu değildir, ancak işi açıklamak için yapar ...). 1000 indirimden sonra, programlayıcı farklı bir sürece geçer. Daha fazla bilgi erlang.org/pipermail/erlang-questions/2001-Nisan/003132.html
Aegis

40

Neredeyse hiç kimse süreç izolasyonundan bahsetmiyor. "İş parçacığınız benim önemsiz şeyimle uğraşamaz" garantileri olmadan, dağıtılmış sistemler hakkında mantık yürütmek çok daha zordur. (Zaten yeterince zor olduğunu ile Erlang'ı süreçler.)

AFAIK (çok uzak değil, JVM ile sınırlı doğrudan deneyimlerime göre), sadece Erlang JVM'de süreç izolasyonunu "doğru" alıyor. Sayın Google, Fox ve Candea'nın (?) "Mikro yeniden başlatma" tekniği ("kurtarma odaklı bilgi işlem") kullanan araştırma sistemleri hakkında yaptığı araştırmaları nerede bulacağına dair bazı ipuçları verebilir. Bir Erlang geliştiricisi bu araştırmayı okur ve birkaç şey söyler:

  1. Kulübe hoş geldin, neden bu kadar uzun sürdü?
  2. JVM, katılmayı çok ama çok zorlaştırıyor. :-)

Süreç izolasyonu gerçekten çok iyi. Bununla birlikte, Erlang bile ters giden bir NIF'ye karşı bağışık değildir.
Viktor Klang

14

Benim için, kesinti olmadan tüm bir Erlang kümesinde sıcak kod değişimi (örneğin make:all([netload]:) Erlang öldürücü özelliklerinden biridir.

Ama sorunuzu tersine çevirelim: akka'da Erlang'da olmayan ne var? Elbette Erlang'a yaklaşmak için Java'ya onlarca uzantı ve kitaplık (scala, akka, spring, osgi, ...) ekleyebilirsiniz. Ama mesele nerede? Özetle, tüm bu uzantılar, sıfır kesinti süresiyle en iyi ölçeklenebilirliği sunan işi 2 yıldan fazla bir süredir kanıtlamış olan basit Erlang dilini öğrenmekten çok daha karmaşıktır.


30
IMO, Scala sözdizimi düzeyinde Erlang'dan çok daha iyi bir dildir. Nesneleri, özellikleri, uygun ad alanları, uygun tür güvenliği, çirkin kayıt sözdizimi yok, vs. var. Topluluk daha büyük, mevcut tüm Java araçlarını kullanabilirim ve daha gösterişli hissediyor.
ryeguy

15
@ryeguy: "sözdizimi düzeyinde daha iyi dil" ... hmm, "sözdizimi" için "daha iyi" yi tanımlayın. Dilleri karşılaştırdığımda sözdizimi en önemsiz faktördür (çünkü bu sadece bir zevk meselesidir veya ne kullandığınıza bağlıdır).
Peer Stritzinger

4
@ryeguy Farklı anlamlar, farklı sözdizimi.
rvirding

3
Farklı kod sürümleri arasında durumu korumanız gerekiyorsa, sıcak kod değişimi bir sorun haline gelir, sonunda işlemi kapatmak ve başlangıçta
taşımak

4
@ryeguy Bir programlama dilinin sözdizimi neredeyse alakasızdır; önemli olan anlambilimidir. Erlang işlevsel bir PL'dir, bu nedenle elbette nesneleri yoktur. Erlang dinamik olarak yazılırken, özellikler, tür güvenliği vb. Scala'nın güçlü yazılmış bir dil olmasından kaynaklanmaktadır; bu bir tasarım seçimi. Yine de, Erlang'ın avantajlarından daha modern bir his istiyorsanız sizi Elixir'e bir göz atmaya davet ediyorum;)
Aegis

5

Muhtemelen Erlang daha büyük dağıtılmış sistemler için daha iyidir (vjache'nin cevabına göre), ancak normal bir sunucu için birden fazla CPU'nun tam gücünü kullanmak istediğinizde Akka iyi bir seçimdir - Java ekosistemiyle iyi bir soyutlama, performans ve entegrasyon sağlar.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.