Di mana Erlang digunakan dan mengapa? [Tutup]

258

Saya ingin tahu daftar aplikasi / situs web / solusi paling umum di mana Erlang digunakan, berhasil atau tidak .

Menjelaskan mengapa ini digunakan dalam solusi spesifik dan bukan bahasa pemrograman lain akan sangat dihargai juga.

Daftar studi kasus BAD Erlang (kasus di mana Erlang disalahgunakan) itu akan menarik, juga.

Roberto Aloi
sumber
13
Masalah dengan studi kasus BAD adalah bahwa mereka tidak benar-benar menjadi terkenal atau melihat cahaya hari.
Eric
2
WHATSAPP Menggunakan Erlang! Google untuk detailnya
Muzaaya Joshua
18
Kenapa ini ditutup? Saya mencari pertanyaan yang tepat di Google dan dituntun ke sini.
canhazbits
EMqtt adalah broker MQTT yang sangat populer dan saat ini semakin banyak digunakan di IoT, dikembangkan di erlang dengan 1 juta keberlanjutan pengguna.
LAMRIN TAWSRAS

Jawaban:

214

Dari Programming Erlang :

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

Banyak perusahaan menggunakan Erlang dalam sistem produksinya:

Amazon menggunakan Erlang untuk mengimplementasikan SimpleDB, menyediakan layanan basis data sebagai bagian dari Amazon Elastic Compute Cloud (EC2).

Yahoo! menggunakannya dalam layanan bookmark sosialnya, Delicious, yang memiliki lebih dari 5 juta pengguna dan 150 juta URL yang ditandai.

Facebook menggunakan Erlang untuk memberi daya pada backend layanan obrolannya, menangani lebih dari 100 juta pengguna aktif.

WhatsApp menggunakan Erlang untuk menjalankan server pengiriman pesan, mencapai hingga 2 juta pengguna yang terhubung per server.

T-Mobile menggunakan Erlang dalam sistem SMS dan otentikasi.

Motorola menggunakan Erlang dalam produk pemrosesan panggilan di industri keamanan publik.

Ericsson menggunakan Erlang di simpul pendukungnya, yang digunakan dalam jaringan seluler GPRS dan 3G di seluruh dunia.


Aplikasi Erlang open source paling populer meliputi:

• Pemodel subdivisi 3D , Wings 3D , digunakan untuk memodelkan dan tekstur jerat poligon.

• Sistem Ejabberd , yang menyediakan server aplikasi perpesanan instan (IM) berbasis Perpanjangan Perpesanan dan Kehadiran (XMPP).

• Basis data berorientasi dokumen “skema-kurang” CouchDB , memberikan skalabilitas di seluruh kluster multicore dan multiserver.

• Perpustakaan MochiWeb yang menyediakan dukungan untuk membangun server HTTP yang ringan. Ini digunakan untuk menyalakan layanan seperti MochiBot dan MochiAds, yang menyajikan konten yang dihasilkan secara dinamis kepada jutaan pemirsa setiap hari.

RabbitMQ , implementasi protokol pengiriman AMQP. AMQP adalah standar yang muncul untuk perpesanan perusahaan berkinerja tinggi.

JRL
sumber
27
Ramiz Uddin - sistem baru mana yang Anda bicarakan ketika Anda mengatakan "Tidak, bukan?"
Great Turtle
10
@RamizUddin sistem baru mana yang Anda bicarakan ketika Anda mengatakan "Tidak, bukan?" (Saya hanya mengulangi pertanyaan oleh Great Turtle yang beberapa tahun yang lalu lupa @ di depan nama Anda - saya pikir itu pantas mendapat jawaban)
Walter Tross
4
facebook beralih dari erlang: facebook.com/notes/facebook-engineering/… dan quora.com/…
A. Binzxxxxxx
Facebook merusak kesederhanaan dan kinerja WhatsApp.
Krishnadas PC
Bisakah Anda memperbarui tautan yang rusak untuk buku itu?
pradyumnad
83

ejabberd adalah salah satu aplikasi erlang yang paling dikenal dan yang saya pelajari dengan erlang.

Saya pikir itu adalah salah satu proyek yang paling menarik untuk belajar erlang karena itu benar-benar membangun kekuatan erlang. (Namun beberapa orang akan berpendapat bahwa itu bukan OTP, tapi jangan khawatir masih ada harta karun kode hebat di dalam ...)

Mengapa

Server XMPP (seperti ejabberd) dapat dilihat sebagai router tingkat tinggi, merutekan pesan antara pengguna akhir. Tentu saja ada fitur lain, tetapi ini adalah aspek terpenting dari server pengiriman pesan instan. Itu harus merutekan banyak pesan secara bersamaan, dan menangani banyak koneksi TCP / IP.

Jadi kami memiliki 2 fitur:

  • menangani banyak koneksi
  • pesan rute diberi beberapa aspek pesan

Ini adalah contoh di mana erlang bersinar.

menangani banyak koneksi

Sangat mudah untuk membangun server TCP / IP scalable non-blocking dengan erlang. Bahkan, itu dirancang untuk menyelesaikan masalah ini. Dan mengingat itu dapat menelurkan ratusan ribu proses (dan bukan utas , ini adalah pendekatan berbagi-apa-apa, yang lebih sederhana untuk dirancang), ejabberd dirancang sebagai serangkaian proses erlang (yang dapat didistribusikan melalui beberapa server):

  • proses koneksi klien
  • proses router
  • proses chatroom
  • proses server ke server

Semuanya bertukar pesan.

pesan rute diberi beberapa aspek pesan

Fitur lain yang sangat dicintai dari erlang adalah pencocokan pola . Ini digunakan di seluruh bahasa.

Misalnya, dalam hal berikut:

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.

Itu 5 versi accessfungsi yang berbeda. Erlang akan memilih versi yang paling tepat mengingat argumen yang diterima. ( Configadalah struktur tipe #configyang memiliki typeatribut).

Itu artinya sangat mudah dan jauh lebih jelas daripada merantai if/elseatau switch/casemembuat aturan bisnis.

Untuk menyelesaikan

Menulis server scalable, itulah inti dari erlang. Semuanya dirancang agar mudah. Pada dua fitur sebelumnya, saya akan menambahkan:

  • peningkatan kode hot
  • mnesia, basis data relasional terdistribusi (termasuk dalam basis distribusi)
  • mochiweb, di mana sebagian besar server http erlang dibangun
  • dukungan biner (decoding dan encoding protokol biner semudah dulu)
  • komunitas yang hebat dengan proyek-proyek open source yang hebat ( ejabberd, couchdbtetapi juga webmachine, riakdan banyak perpustakaan yang sangat mudah untuk ditanamkan)

Lebih sedikit LOC

Ada juga artikel ini dari Richard Jones. Dia menulis ulang aplikasi dari C ++ ke erlang: 75% lebih sedikit baris di erlang.

Eric
sumber
6
Agar adil, hampir semua kode C ++ ditulis ulang dalam bahasa modern akan mengurangi LOC.
Zack
52

Daftar aplikasi paling umum untuk Erlang telah dibahas (CouchDb, ejabberd, RabbitMQ dll) tetapi saya ingin berkontribusi sebagai berikut.

Alasan mengapa digunakan dalam aplikasi ini berasal dari kekuatan inti Erlang: mengelola ketersediaan aplikasi .

Erlang dibangun dari bawah ke atas untuk lingkungan telco yang mensyaratkan bahwa sistem memenuhi setidaknya 5x9 ketersediaan (99,999% up-time tahunan). Angka ini tidak meninggalkan banyak ruang untuk downtime selama setahun! Untuk alasan ini terutama, Erlang dilengkapi dengan fitur-fitur berikut (tidak lengkap):

  • Skalabilitas horisontal (kemampuan untuk mendistribusikan pekerjaan melintasi batas alat berat dengan mudah melalui komunikasi intra & antar alat berat yang mulus). Basis data bawaan (Mnesia) juga didistribusikan secara alami.

  • Skalabilitas vertikal (kemampuan untuk mendistribusikan pekerjaan di seluruh sumber daya pemrosesan pada mesin yang sama): SMP ditangani secara asli.

  • Code Hot-Swapping : kemampuan untuk memperbarui / meningkatkan kode secara langsung selama operasi

  • Asynchronous : dunia nyata adalah async sehingga Erlang dibangun untuk menjelaskan sifat dasar ini. Satu fitur yang berkontribusi pada persyaratan ini: Proses "bebas" Erlang (> 32000 dapat berjalan secara bersamaan).

  • Pengawasan : banyak strategi berbeda untuk pengawasan proses dengan strategi restart, ambang batas dll. Membantu pemulihan dari kasus sudut / overloading lebih mudah sambil tetap mempertahankan jejak masalah untuk pemecahan masalah nanti, analisis post-mortem dll.

  • Manajemen Sumber Daya : strategi penjadwalan, pemantauan sumber daya dll. Perhatikan bahwa penjadwal proses default beroperasi dengan penskalaan O (1).

  • Live debugging : kemampuan untuk "login" ke live node di akan membantu kegiatan pemecahan masalah. Debugging dapat dilakukan secara langsung dengan akses penuh ke kondisi proses apa pun yang berjalan. Juga alat pelaporan kesalahan bawaan sangat berguna (tapi terkadang agak canggung untuk digunakan).

Tentu saja saya dapat berbicara tentang akar fungsionalnya tetapi aspek ini agak ortogonal dengan tujuan utama (ketersediaan tinggi). Komponen utama dari sifat fungsional yang berkontribusi murah hati pada sasaran adalah IMO: "tidak berbagi apa pun". Karakteristik ini membantu mengandung "efek samping" dan mengurangi kebutuhan akan mekanisme sinkronisasi yang mahal.

Saya kira semua karakteristik ini membantu memperluas kasus untuk menggunakan Erlang dalam aplikasi bisnis penting.

Satu hal yang tidak benar-benar pandai Erlang : memproses blok data yang besar.

jldupont
sumber
4
Bisakah Anda menjelaskan yang berikut ini: "Satu hal yang tidak bisa dilakukan Erlang: memproses data dalam jumlah besar."
Kirill Trofimov
9
Dia berarti hal-hal seperti decoding data mpeg. Ada terlalu banyak perhitungan numerik yang tidak dioptimalkan untuk Erlang. Jika pemrosesan hanya melibatkan pengocokan blok besar data dari satu tempat ke tempat lain, maka Erlang cukup baik dalam hal itu. (File ke TPC Soket, dll)
Christian
4
Anda tidak dapat memperbarui blok data yang dibagikan (tidak ada pointer di Erlang) dan karenanya data harus di-shuttled melintasi proses yang pada gilirannya menerjemahkan ke inefisiensi.
jldupont
Sebagai tambahan, Ericsson, saya percaya, kata Erlang mencapai ketersediaan 9x9.
Jono
Kami sedang mempertimbangkan untuk memperbaiki kelemahan Erlang yang dikutip di sini.
Shelby Moore III
19

Erlang berasal dari Ericsson, dan digunakan dalam beberapa sistem telekomunikasi mereka.

Di luar telekomunikasi, CouchDb (database berorientasi dokumen) mungkin merupakan aplikasi Erlang paling terkenal sejauh ini.

Kenapa Erlang? Dari ikhtisar (layak dibaca secara lengkap):

Dokumen, tampilan, model keamanan dan replikasi, bahasa permintaan tujuan khusus, tata letak disk yang efisien dan kuat, serta sifat platform Erlang yang bersamaan dan andal, semuanya terintegrasi dengan hati-hati untuk sistem yang andal dan efisien.

Brian Agnew
sumber
1
Untuk beberapa sistem telekomunikasi mereka.
jldupont
1
CouchDB bukan database OO, ini adalah database berorientasi dokumen.
SAYA MEMBERIKAN NASIHAT MENGERIKAN
5
@ AKU MEMBERIKAN NASIHAT MENGERIKAN - ya, tentu saja. Dikoreksi. Saya akan mengubah moniker Anda :-)
Brian Agnew
Ada bahasa konkurensi sebelumnya yang digunakan oleh Ericsson bernama PLEX (Programming Language for Exchanges), yang menjalankan pertukaran telepon digital sepanjang akhir 80-an hingga sekarang. Saya pikir erlang adalah versi PLEX yang disempurnakan.
user50619
19

Kami membangun pertukaran taruhan (alias pasar prediksi) menggunakan Erlang. Kami memilih Erlang daripada beberapa bahasa keuangan yang lebih tradisional (C ++, Java dll) karena konkurensi bawaan. Pasar berfungsi sangat mirip dengan pertukaran telepon. CTO kami memberi ceramah tentang penggunaan Erlang kami pada pembicaraan CTO .

Kami juga menggunakan CouchDB dan RabbitMQ sebagai bagian dari tumpukan kami.

Jason Trost
sumber
10
Sekedar catatan, tautan ke pembicaraan Anda sekarang pribadi.
JDong
15

Saya menemukan ini sedang dalam proses menulis laporan: Erlang di Acoustic Ray Tracing .

Ini adalah laporan pengalaman tentang upaya kelompok riset untuk menggunakan Erlang untuk Acoustic Ray Tracing. Mereka menemukan bahwa walaupun lebih mudah untuk menulis program, kurang buggy, dll. Ini mengalami penurunan lebih buruk, dan melakukan 10x lebih lambat daripada program C yang sebanding. Jadi satu tempat di mana itu mungkin tidak cocok adalah skenario intensif CPU.

Namun perlu dicatat, bahwa orang-orang menulis makalah berada dalam tahap pertama belajar Erlang, dan mungkin tidak tahu prosedur pengembangan yang tepat untuk CPU Erlang intensif.

CoderTao
sumber
2
Makalah ini merupakan bacaan yang menarik. Itu tidak secara langsung membuat generalisasi tentang kesesuaian, itu menunjukkan bahwa mereka menemukan Erlang tidak cocok jika Anda mencoba untuk menggunakan prosesor IBM Cell BE, ditemukan di Playstation 3. Itu juga menyatakan mereka tidak berpengalaman dengan Erlang. Dengan lebih banyak pengalaman dan perangkat keras yang sesuai, mereka mungkin sampai pada kesimpulan yang berbeda. Saya mendapat kesan bahwa kode mereka mungkin termasuk penggunaan fungsi non-ekor-rekursif; jika demikian maka mungkin perlu beberapa cara untuk menjelaskan masalah mereka dengan memori, pengumpulan sampah, crash dan kinerja.
Tim
3
Saya pikir Anda salah membaca artikel. Ketidakmampuan untuk menjalankan prosesor Cell sangat disayangkan, tetapi itu hanya sebuah catatan. Perbedaan kinerja 12x antara C ++ dan implementasi Erlang yang berjalan pada platform x86 adalah masalah sebenarnya, dikombinasikan dengan fakta bahwa itu tidak skala secara linear. Yang mengatakan, mereka baru mengenal bahasa, dan mungkin telah mengambil beberapa jalur kode yang tidak bijaksana ... seperti hidup. Saya ingin tahu tentang penskalaan non-linear.
CoderTao
4
Saya berdiri dikoreksi pada masalah kinerja 12x berkaitan dengan Intel versus Cell, tetapi saya berpendapat bahwa Erlang dapat cocok untuk skenario yang menantang CPU. Itu bukan untuk mengatakan mereka tidak benar: ini benar-benar mungkin menjadi masalah di mana solusi C ++ yang baik akan selalu mengalahkan solusi Erlang yang baik. Mungkin ini memang menjadi pengingat bagi beberapa orang bahwa Erlang, seperti teknologi lainnya, bukanlah peluru perak dan hanya akan bersinar ketika digunakan dengan cara yang benar di tempat yang tepat.
Tim
14

Rupanya, Yahoo menggunakan Erlang untuk membuat sesuatu yang disebutnya Harvester. Artikel tentang itu di sini: http://www.ddj.com/architect/220600332

merugikan
sumber
4
Membaca dari artikel: "Sementara Harvester pada awalnya ditulis dalam Perl, konkurensi tingkat tinggi Erlang - bersama dengan prinsip-prinsip desain OTP - menjadikannya platform yang ideal untuk membangun aplikasi yang andal, toleran terhadap kesalahan, dan terukur seperti Harvester. Layanan yang dihasilkan lebih scalable, tersedia, dapat diandalkan, dan mampu mematuhi perjanjian tingkat layanan yang lebih ketat (SLA) pada basis kode yang lebih ringan dan upaya pengembangan yang lebih murah. " Terima kasih banyak :)
Roberto Aloi
11

Apa gunanya erlang?

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/ (jawaban jerf)

Sangat penting untuk menyadari bahwa 4 bagian Erlang: bahasa itu sendiri, standar VM (BEAM, hipe) libs (plus modul pada github, CEAN, dll.) Dan lingkungan pengembangan terus diperbarui / diperluas / ditingkatkan. Sebagai contoh, saya ingat membaca bahwa kinerja floating point meningkat ketika penulis Wings3d menyadari itu perlu ditingkatkan (saya tidak dapat menemukan sumber untuk ini). Dan orang ini baru saja menulis tentang itu:

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

Beberapa tahun yang lalu, publisitas Wide Finder Tim Bray dan semua orang mulai melakukan kerangka kerja aplikasi web dan server HTTP memimpin (setidaknya sebagian) untuk meningkatkan penanganan regex dan biner. Dan ada semua pekerjaan yang mengintegrasikan HiPE dan SMP, proyek dialyzer, beberapa pengujian unit dan membangun libs bermunculan, ..

Jadi sweet spot-nya berkembang, Yang sulit adalah bahwa dokumen resmi tidak bisa mengikuti dengan baik, dan milis dan volume blogosphere erlang tumbuh dengan cepat

Gene T
sumber
10

Kami menggunakan Erlang untuk memberikan kekuatan otot back-end untuk berbasis browser benar-benar real-time multi-player permainan kami Pixza . Kami tidak menggunakan Flash atau plugin pihak ketiga lainnya, meskipun gim ini multi-pemain waktu-nyata. Kami menggunakan teknik JS dan COMET murni sebagai gantinya. Dan Erlang mendukung "ketepatan waktu yang sebenarnya" dari Pixza.

ErJab
sumber
10

Saya bekerja untuk wooga, sebuah perusahaan game sosial dan kami menggunakan Erlang untuk beberapa backend game kami (pada dasarnya http apis untuk jutaan pengguna harian) dan layanan tambahan seperti penyedia pemberitahuan push, pembayaran dll.

Saya pikir itu benar-benar bersinar dalam tugas-tugas yang berhubungan dengan jaringan dan itu membuatnya agak lurus ke depan untuk struktur dan mengimplementasikan layanan jaringan yang sederhana dan kompleks di dalamnya. Distribusi, toleransi kesalahan dan kinerja mudah dicapai karena Erlang telah memiliki beberapa bahan utama yang terpasang di dalamnya dan telah digunakan untuk waktu yang lama dalam infrastruktur produksi yang kritis. Jadi tidak seperti "hal teknologi pinggul baru 0,0.2 alpha".

Saya tahu bahwa perusahaan game lain juga menggunakan Erlang. Anda harus dapat menemukan presentasi di slideshare tentang hal itu.

John-Paul Bader
sumber
6

Erlang menarik kekuatannya dari menjadi bahasa fungsional tanpa memori bersama. Karenanya IMO, Erlang tidak akan cocok untuk aplikasi yang membutuhkan manipulasi memori di tempat. Pengeditan gambar misalnya.

emb
sumber