Erlang nerede kullanılır ve neden? [kapalı]


258

Erlang'ın başarıyla kullanıldığı veya kullanılamadığı en yaygın uygulamaların / web sitelerinin / çözümlerin bir listesini bilmek istiyorum .

Diğer programlama dilleri yerine neden belirli bir çözümde kullanıldığını açıklamak da çok takdir edilecektir.

BAD Erlang vaka çalışmalarını listeleme (Erlang'ın yanlış kullanıldığı durumlar) da ilginç olacaktır.


13
BAD vaka çalışmalarıyla ilgili sorun, gerçekten ünlü olmadıkları veya günün ışığını görmedikleri.
Eric

2
WHATSAPP Erlang'ı Kullanıyor! Ayrıntılar için Google
Muzaaya Joshua

18
Bu neden kapalı? Tam soruyu araştırdım ve buraya yönlendirildim.
canhazbits

EMqtt geliştirilen bir çok popüler MQTT komisyoncu ve günümüzde IOT bu kadar alışmak olduğunu erlang 1 milyon kullanıcı sürdürülebilirlik ile.
LAMRIN TAWSRAS

Yanıtlar:


214

Gönderen Erlang Programlama :

alt metin http://bks8.books.google.com/books?id=Qr_WuvfTSpEC&printsec=frontcover&img=1&zoom=5&sig=ACfU3U2F4YY4KqO0vCuZ4WEZjdE2yFFvvg

Birçok şirket üretim sistemlerinde Erlang kullanıyor:

Amazon , Amazon Elastik Bilgi İşlem Bulutu'nun (EC2) bir parçası olarak veritabanı hizmetleri sağlayan SimpleDB'yi uygulamak için Erlang'ı kullanır.

Yahoo! 5 milyondan fazla kullanıcısı ve 150 milyon yer imi URL'si olan sosyal yer imi servisi Delicious'da kullanır.

Facebook , 100 milyondan fazla aktif kullanıcıyı yöneten sohbet hizmetinin arka ucuna güç sağlamak için Erlang'ı kullanıyor.

WhatsApp , mesajlaşma sunucularını çalıştırmak için Erlang'ı kullanır ve sunucu başına 2 milyona kadar bağlı kullanıcı sağlar.

T-Mobile , SMS ve kimlik doğrulama sistemlerinde Erlang'ı kullanır.

Motorola , kamu güvenliği sektöründe çağrı işleme ürünlerinde Erlang kullanıyor.

Ericsson , dünya çapında GPRS ve 3G mobil ağlarında kullanılan destek düğümlerinde Erlang'ı kullanıyor.


En popüler açık kaynak kodlu Erlang uygulamaları aşağıdakileri içerir:

• 3D alt bölüm modelleyici Wings 3D , çokgen kafesleri modellemek ve dokulandırmak için kullanılır.

• Genişletilebilir Mesajlaşma ve İletişim Protokolü (XMPP) tabanlı anlık mesajlaşma (IM) uygulama sunucusu sağlayan Ejabberd sistemi.

CouchDB “şema gerektirmeyen” belge odaklı veritabanı, çok çekirdekli ve çok sürücülü kümelerde ölçeklenebilirlik sağlar.

• Hafif HTTP sunucuları oluşturmak için destek sağlayan MochiWeb kütüphanesi. Her gün milyonlarca izleyiciye dinamik olarak oluşturulan içerik sunan MochiBot ve MochiAds gibi hizmetlere güç sağlamak için kullanılır.

• Bir AMQP mesajlaşma protokolü uygulaması olan RabbitMQ . AMQP, yüksek performanslı kurumsal mesajlaşma için yeni bir standarttır.


27
Ramiz Uddin - "Hayır, değil mi?" Dediğinde hangi yeni sistemden bahsediyorsun?
Büyük Kaplumbağa

10
@ RamizUddin "Hayır, değil mi?" Dediğinde hangi yeni sistemden bahsediyorsun? (Sadece birkaç yıl önce adınızın önünde @ unuttuğu Büyük Kaplumbağa'nın bir sorusunu tekrarlıyorum - yine de bir cevabı hak ettiğini düşünüyorum)
Walter Tross


Facebook, WhatsApp'ın sadeliğini ve performansını mahvetti.
Krishnadas PC

Kitabın kopuk bağlantısını güncelleyebilir misiniz?
pradyumnad

83

ejabberd en iyi bilinen erlang uygulaması ve erlang ile öğrendiğim biridir.

Bence erlang öğrenmek için en ilginç projelerden biri çünkü gerçekten erlang'ın gücüne dayanıyor. (Ancak bazıları bunun OTP olmadığını savunacak, ancak endişelenmeyin, içinde hala büyük bir kod var ...)

Neden ?

Bir XMPP sunucusu (ejabberd gibi), son kullanıcılar arasındaki iletileri yönlendiren üst düzey bir yönlendirici olarak görülebilir. Tabii ki başka özellikler de var, ancak bu bir anlık mesajlaşma sunucusunun en önemli yönü. Birçok iletiyi aynı anda yönlendirmeli ve birçok TCP / IP bağlantısını yönetmelidir.

Yani 2 özelliğimiz var:

  • birçok bağlantıyı yönet
  • mesajın bazı yönleri verilen mesajları yönlendir

Bunlar erlang'ın parladığı örneklerdir.

birçok bağlantıyı yönet

Erlang ile ölçeklenebilir, tıkanmaz TCP / IP sunucuları oluşturmak çok kolaydır. Aslında, bu sorunu çözmek için tasarlanmıştır. Ve yüz bin süreci (ve iş parçacığı değil , tasarlaması daha kolay olan bir paylaşım-hiçbir şey yaklaşımı) oluşturabildiği göz önüne alındığında, ejabberd bir dizi erlang süreci olarak tasarlanmıştır (birkaç sunucuya dağıtılabilir):

  • istemci bağlantı süreci
  • yönlendirici işlemi
  • sohbet odası işlemi
  • sunucudan sunucuya işlemler

Hepsi mesaj gönderiyor.

mesajın bazı yönleri verilen mesajları yönlendir

Erlang'ın bir başka sevimli özelliği de desen eşleşmesidir . Dil boyunca kullanılır.

Örneğin, aşağıdakilerde:

access(moderator, _Config)->  rw;
access(participant, _Config)->  rw;
access(visitor, #config{type="public"})->  r;
access(visitor, #config{type="public_rw"})->  rw;
access(_User,_Config)->  none.

Bu accessfonksiyonun 5 farklı versiyonu . Erlang, alınan argümanlar göz önüne alındığında en uygun sürümü seçecektir. ( ConfigTipte bir yapıdır #configbir sahiptir typeözelliği).

Bu, zincirleme if/elseveya switch/caseiş kurallarını oluşturmanın çok daha kolay ve daha açık olduğu anlamına gelir .

Özetlemek için

Ölçeklenebilir sunucular yazmak, erlang'ın bütün mesele budur. Her şey bunu kolaylaştıracak şekilde tasarlanmıştır. Önceki iki özelliğe şunu ekleyeceğim:

  • sıcak kod yükseltme
  • mnesia, dağıtılmış ilişkisel veritabanı (taban dağıtımına dahil)
  • mochiweb, çoğu http erlang sunucusunun üzerine kurulu olduğu
  • ikili destek (ikili protokolü kodlamak ve kodlamak her zamanki gibi kolay)
  • Büyük açık kaynak projeleri ile büyük topluluk ( ejabberd, couchdbayrıca ama webmachine, riakve çok kolay gömmek için kütüphaneye ilgili bir takım)

Daha az LOC

Richard Jones'un bu makalesi de var . C ++ 'dan erlang'a bir uygulama yeniden yazdı: erlang'da% 75 daha az satır.


6
Adil olmak gerekirse, modern bir dilde yeniden yazılan hemen hemen tüm C ++ kodları LOC'u azaltacaktır.
Zack

52

Erlang için en yaygın uygulamaların listesi ele alındı ​​(CouchDb, ejabberd, RabbitMQ vb.) Ama aşağıdakilere katkıda bulunmak istiyorum.

Bu uygulamalarda kullanılmasının nedeni, Erlang'ın temel gücünden geliyor: uygulama kullanılabilirliğini yönetme .

Erlang, telco ortamı için sıfırdan inşa edildi ve sistemlerin en az 5x9 kullanılabilirliğini (yıllık% 99,999 çalışma süresi) karşılaması gerekiyordu. Bu rakam, bir yıl boyunca kapalı kalma süresine fazla yer bırakmıyor! Bu nedenle, Erlang aşağıdaki özelliklerle (kapsamlı olmayan) yüklü olarak gelir:

  • Yatay ölçeklenebilirlik (kesintisiz makine içi iletişim yoluyla işleri makine sınırları içinde kolayca dağıtabilme). Yerleşik veritabanı (Mnesia) da doğa tarafından dağıtılır.

  • Dikey ölçeklenebilirlik (işleri aynı makinede işleme kaynakları arasında dağıtma yeteneği): SMP yerel olarak kullanılır.

  • Kod Hot-Swapping : işlemler sırasında canlı kodu güncelleme / yükseltme yeteneği

  • Eşzamansız : gerçek dünya eşzamansızdır, bu nedenle Erlang bu temel doğayı açıklamak için inşa edilmiştir. Bu gereksinime katkıda bulunan bir özellik: Erlang'ın "serbest" süreçleri (> 32000 aynı anda çalışabilir).

  • Denetim : Yeniden başlatma stratejileri, eşikler vb. İle süreç denetimi için birçok farklı strateji. Daha sonra sorun giderme, ölüm sonrası analiz vb. İçin sorunların izlerini korurken köşe vakalarından / aşırı yüklemelerden daha kolay iyileşmeye yardımcı olur.

  • Kaynak Yönetimi : zamanlama stratejileri, kaynak izleme vb. Varsayılan işlem zamanlayıcısının O (1) ölçeklendirmesiyle çalıştığını unutmayın.

  • Canlı hata ayıklama : Canlı düğümlere "oturum açma" özelliği, sorun giderme etkinliklerine yardımcı olur. Hata ayıklama, herhangi bir işlemin çalışma durumuna tam erişim ile canlı olarak gerçekleştirilebilir. Ayrıca, yerleşik hata raporlama araçları çok kullanışlıdır (ancak bazen kullanımı biraz gariptir).

Tabii ki fonksiyonel kökleri hakkında konuşabilirdim ama bu durum ana hedefe (yüksek kullanılabilirlik) biraz diktir. Hedef hedefe cömertçe katkıda bulunan işlevsel doğanın ana bileşeni IMO: "hiçbir şeyi paylaşma" dır. Bu özellik, "yan etkiler" içermesine yardımcı olur ve maliyetli senkronizasyon mekanizmalarına olan ihtiyacı azaltır.

Sanırım tüm bu özellikler, Erlang'ı iş açısından kritik uygulamalarda kullanmak için bir vakanın genişletilmesine yardımcı oluyor.

Erlang'ın gerçekten iyi olmadığı bir şey var : büyük veri bloklarını işlemek.


4
Aşağıdakileri açıklayabilir misiniz: "Erlang'ın gerçekten iyi olmadığı bir şey var: büyük veri bloklarını işlemek."
Kirill Trofimov

9
MPEG verilerinin kodunun çözülmesi gibi şeyleri ifade eder. Erlang için optimize edilmemiş çok fazla sayısal hesaplama var. İşleme, büyük veri bloklarını bir yerden başka bir yere karıştırmayı içeriyorsa, Erlang bu konuda oldukça iyidir. (TPC Soketlerine Dosyalar, vb.)
Christian

4
Paylaşılan veri bloklarını güncelleyemezsiniz (Erlang'da işaretçi yoktur) ve bu nedenle veriler verimsizliklere dönüşen süreçler boyunca kapatılmalıdır.
jldupont

Bir yana, Ericsson, sanırım, Erlang 9x9'un kullanılabilirliğini elde etti.
Jono

Biz ediyoruz düşündüğünü Erlang zayıflığı burada atıf üzerine iyileştirilmesi.
Shelby Moore III

19

Erlang Ericsson'dan geliyor ve bazı telekom sistemlerinde kullanılıyor.

Telekom dışında, CouchDb (belge odaklı bir veritabanı) muhtemelen şimdiye kadar bilinen en iyi Erlang uygulamasıdır.

Neden Erlang? Genel bakıştan (tam olarak okumaya değer):

Erlang platformunun belge, görünüm, güvenlik ve çoğaltma modelleri, özel amaçlı sorgu dili, verimli ve sağlam disk düzeni ve eşzamanlı ve güvenilir yapısı güvenilir ve verimli bir sistem için dikkatlice entegre edilmiştir.


1
İçin bazı kendi telecomms sistemlerinin.
jldupont

1
CouchDB bir OO veritabanı değil, belge odaklı bir veritabanıdır.
KORKUNÇ TAVSİYE VERİYORUM

5
@ KORKUNÇ TAVSİYE VERİYORUM - evet, elbette. Düzeltildi. Monikerini değiştirirdim :-)
Brian Agnew

Ericsson tarafından 80'li yılların sonlarına kadar dijital telefon santrallerini yöneten PLEX (Borsalar için Programlama Dili) adı verilen daha eski bir eşzamanlılık dili vardı. Erlang'ın PLEX'in rafine bir versiyonu olduğunu düşünüyorum.
user50619

19

Erlang kullanarak bir bahis borsası (tahmin piyasası olarak da bilinir) oluşturduk. Yerleşik eşzamanlılık nedeniyle Erlang'ı daha geleneksel finansal dillerden (C ++, Java vb.) Seçtik. Piyasalar telefon santrallerine çok benzer şekilde çalışır. CTO'muz, CTO konuşmasında Erlang kullanımımız hakkında bir konuşma yaptı .

Yığımızın bir parçası olarak CouchDB ve RabbitMQ da kullanıyoruz.


10
Sadece bir not, konuşmanızın bağlantısı artık özel.
JDong

15

Buraya bir rapor yazma sürecinde rastladım: Akustik Işın İzlemede Erlang .

Bir araştırma grubunun Erlang'ı Akustik Işın İzleme için kullanma girişimi hakkında bir deneyim raporu. Programı yazmak daha kolay, daha az buggy vb. Bu yüzden, uygun olmayabileceği bir nokta CPU yoğun senaryolar.

Yine de, insanların makaleyi ilk Erlang öğrenmesi aşamasında olduğunu ve CPU yoğun Erlang için uygun geliştirme prosedürlerini bilmemiş olabileceğini unutmayın.


2
Makale ilginç bir okuma. Playstation 3'te bulunan bir IBM Cell BE işlemcisini dağıtmaya çalışıyorsanız, Erlang'ı uygunluk ile ilgili genelleştirmeyi doğrudan yapmaz, ayrıca Erlang ile deneyimsiz olduklarını belirtir. Daha fazla deneyim ve uygun donanım ile farklı bir sonuca ulaşmış olabilirler. Ben onların kod kuyruk olmayan özyinelemeli işlevlerin kullanımı dahil olabilir izlenimi almak; öyleyse, bellek, çöp toplama, çökmeler ve performans ile ilgili sorunlarını açıklamanın bir yolu olabilir.
Tim

3
Sanırım makaleyi yanlış okudun. Hücre işlemcisi üzerinde çalışamamak talihsizdi, ama sadece bir yan nottu. Bir C ++ ve bir x86 platformunda çalışan bir Erlang uygulaması arasındaki 12x performans farkı, doğrusal olarak ölçeklenmemesi ile birlikte gerçek problemdi. Bununla birlikte, dilde yeniydiler ve birkaç akılsız kod yolu almış olabilirler ... hayat böyle. Yine de doğrusal olmayan ölçeklemeyi merak ediyorum.
CoderTao

4
Intel'e karşı Cell ile ilgili 12x performans sorunu düzeltildi, ancak Erlang'ın CPU zorlu senaryolarına çok uygun olabileceğini düşünüyorum. Bu onların doğru olmadığını söylemek değildir: bu gerçekten iyi bir C ++ çözümünün her zaman iyi bir Erlang çözümünü yeneceği bir sorun olabilir. Belki de bu, bazı insanlara Erlang'ın, diğer herhangi bir teknoloji gibi, gümüş kurşun olmadığını ve sadece doğru yerde doğru şekilde kullanıldığında parlayacağını hatırlatmak için bir yol kat ediyor.
Tim

14

Görünüşe göre Yahoo, Erlang'ı Harvester olarak adlandırdığı bir şey yapmak için kullandı. Bununla ilgili makale: http://www.ddj.com/architect/220600332


4
Makaleden okurken: "Harvester başlangıçta Perl'de yazılırken, Erlang'ın OTP tasarım ilkeleriyle birlikte üst düzey eşzamanlılık yapıları onu Harvester gibi güvenilir, hataya dayanıklı ve ölçeklenebilir uygulamalar oluşturmak için ideal bir platform haline getiriyor. daha ölçeklenebilir, kullanılabilir, güvenilir ve daha hafif bir kod tabanındaki daha sıkı hizmet düzeyi sözleşmelerine (SLA) ve daha az pahalı geliştirme çabalarına uyabiliyor. " Thanks so much :)
Roberto Aloi

11

Erlang ne işe yarar?

http://beebole.com/en/blog/erlang/why-erlang/

http://www.aquabu.com/2008/2/15/erlang-pragmatic-studio-day-3-notes

http://www.reddit.com/r/programming/comments/9q0lr/erlang_and_highfrequency_trading/ (jerf'in cevabı)

Erlang'ın 4 bölümünün farkına varmak önemlidir: dilin kendisi, VM'ler (BEAM, hipe) standart kütüphaneler (artı github, CEAN, vb. Modülleri) ve geliştirme ortamı sürekli olarak güncellenmekte / genişletilmekte / iyileştirilmektedir. Örneğin, Wings3d yazarı geliştirmek için gerekli olduğunu fark ettiğinde kayan nokta performansının iyileştiğini hatırlıyorum (bunun için bir kaynak bulamıyorum). Ve bu adam sadece şunu yazdı:

http://marian-dan.com/wordpress/?p=324

Birkaç yıl önce, Tim Bray'nin Geniş Bulucu tanıtımı ve web uygulaması çerçeveleri ve HTTP sunucuları yapmaya başlayan tüm insanlar (en azından kısmen) daha iyi regex ve ikili dosyalar işleme yol açtı. Ve HiPE ve SMP'yi, diyalizör projesini, çoklu ünite testlerini ve yayılan laboratuarları birleştiren tüm işler var.

Yani tatlı noktası genişliyor, Zor olan şey resmi belgelerin çok iyi yetişememesi ve posta listesinin ve erlang blogosfer hacminin hızla artması


10

Gerçekten gerçek zamanlı tarayıcı tabanlı çok oyunculu oyun Pixza'ya arka uç kas gücü sağlamak için Erlang'ı kullanıyoruz . Flash veya başka bir üçüncü taraf eklentisi kullanmıyoruz, ancak oyun gerçek zamanlı çok oyunculu. Bunun yerine saf JS ve COMET tekniklerini kullanıyoruz. Erlang, Pixza'nın "gerçek zamanlılığını" destekler.


10

Bir sosyal oyun şirketi olan wooga için çalışıyorum ve bazı oyun arka uçlarımız için (temel olarak milyonlarca günlük kullanıcı için http apis) ve ios push bildirim sağlayıcısı, ödeme vb.

Bence ağla ilgili görevlerde gerçekten parlıyor ve basit ve karmaşık ağ hizmetlerini aynı şekilde yapılandırmayı ve uygulamayı kolaylaştırıyor. Dağıtım, hata toleransı ve performans elde etmek kolaydır, çünkü Erlang zaten bazı temel bileşenlere sahiptir ve kritik üretim altyapısında uzun süredir kullanılmaktadır. Yani "yeni kalça teknolojisi şey 0.0.2 alfa" gibi değil.

Diğer oyun şirketlerinin de Erlang kullandığını biliyorum. Bu konuda slayt paylaşımında sunumlar bulabilmeniz gerekir.


6

Erlang gücünü, paylaşılan hafızası olmayan işlevsel bir dil olmaktan alıyor. Bu nedenle IMO, Erlang yerinde bellek manipülasyonu gerektiren uygulamalar için uygun olmayacaktır. Örneğin görüntü düzenleme.

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.