Node.js atau Erlang

86

Saya sangat menyukai alat ini dalam hal tingkat konkurensi yang dapat ditangani.

Erlang / OTP terlihat seperti solusi yang jauh lebih stabil tetapi membutuhkan lebih banyak pembelajaran dan banyak menyelami paradigma bahasa fungsional. Dan sepertinya Erlang / OTP membuatnya jauh lebih baik dalam hal CPU multi-core (perbaiki saya jika saya salah).

Tapi mana yang harus saya pilih? Mana yang lebih baik dalam perspektif jangka pendek dan panjang?

Tujuan saya adalah mempelajari alat yang membuat penskalaan proyek Web saya di bawah beban tinggi lebih mudah daripada bahasa tradisional.

pengguna80805
sumber
Anda dapat menggunakan JavaScript sebagai bahasa fungsional dengan underscorejs.org
Todd Moses
2
@ToddMoses Anda yakin mengomentari pertanyaan yang benar?
Flavien Volken
Apel dan Jeruk. Node.JS (pada intinya) adalah libevent (C) + Javascript interop. Erlang adalah implementasi IO yang sepenuhnya kustom. Node.JS dibuat untuk aplikasi single threaded. Delema Anda adalah apakah Anda ingin bekerja di Facebook / Google, atau Anda ingin membuat software kickass.
Van S

Jawaban:

87

Saya akan mencoba Erlang. Meskipun ini akan menjadi kurva belajar yang lebih curam, Anda akan mendapatkan lebih banyak darinya karena Anda akan mempelajari bahasa pemrograman fungsional. Selain itu, karena Erlang secara khusus dirancang untuk membuat sistem yang andal dan sangat serentak, Anda akan belajar banyak tentang cara membuat layanan yang sangat skalabel pada saat yang bersamaan.

Justin Ethier
sumber
10
Saya tidak berpikir Erlang sedikit lebih kompleks dari Javascript. Tidak ada jenis warisan apa pun di Erlang, jadi Anda selalu yakin dengan fungsi apa yang Anda panggil. Tidak ada konversi tipe implisit di Erlang, jadi Anda selalu yakin tipe data apa yang Anda gunakan. Tidak ada tugas yang merusak sehingga Anda selalu yakin tidak akan ada bagian kode lama yang rusak karena beberapa kode baru di callback mengubah status internal Anda.
Dmitry Belyaev
51

Saya tidak dapat berbicara untuk Erlang, tetapi beberapa hal yang belum disebutkan tentang node:

  • Node menggunakan mesin V8 Google untuk benar-benar mengkompilasi javascript menjadi kode mesin. Jadi node sebenarnya cukup cepat. Jadi, itu di atas manfaat kecepatan yang ditawarkan oleh pemrograman berbasis peristiwa dan io non-pemblokiran.
  • Node memiliki komunitas yang cukup aktif. Masuklah ke grup IRC mereka di freenode dan Anda akan mengerti maksud saya
  • Saya memperhatikan komentar di atas mendorong Erlang atas dasar bahwa akan berguna untuk mempelajari bahasa pemrograman fungsional. Meskipun saya setuju bahwa penting untuk memperluas keahlian Anda dan mendapatkan salah satunya, Anda tidak boleh mendasarkan proyek pada fakta bahwa Anda ingin mempelajari gaya pemrograman baru
  • Di sisi lain, Javascript sudah berada dalam paradigma yang membuat Anda nyaman menulis! Ditambah itu javascript, jadi ketika Anda menulis kode sisi klien akan terlihat dan terasa konsisten.
  • komunitas node telah mengeluarkan banyak modul ! Ada modul untuk redis, mongodb, sofa, dan apa pun yang Anda miliki. Modul lain yang bagus untuk dilihat adalah Express (pikirkan Sinatra untuk node)

Lihat video di blog yahoo oleh Ryan Dahl, orang yang sebenarnya menulis node. Saya pikir itu akan membantu memberi Anda ide yang lebih baik di mana node berada, dan ke mana arahnya.

Perlu diingat bahwa node masih dalam tahap pengembangan akhir, dan telah mengalami beberapa perubahan — perubahan yang telah merusak kode sebelumnya. Namun, seharusnya itu pada titik di mana Anda dapat mengharapkan API untuk tidak berubah terlalu banyak. Jadi jika Anda mencari sesuatu yang menyenangkan, saya akan mengatakan node adalah pilihan yang bagus.

Jarsen
sumber
26
Saya pikir mesin V8 mengkompilasi JavaScript ke kode mesin dan bukan ke perakitan.
Jonas
10
Memiliki begitu banyak pekerjaan yang dilakukan seputar Javascript tidak membuat bahasa ini sedikit cocok untuk memecahkan masalah yang kompleks. Bahasanya sendiri buruk dengan semua kasus khusus dalam jenis konversi. Dan gaya panggilan balik di mana variabel diubah di ratusan tempat berbeda dan persetan dengan mencari tempat di mana beberapa tugas telah terjadi.
Dmitry Belyaev
15

Saya seorang programmer Erlang lama, dan pertanyaan ini mendorong saya untuk melihat node.js. Ini terlihat sangat bagus.

Tampaknya Anda perlu menelurkan banyak proses untuk memanfaatkan banyak inti. Saya tidak dapat melihat apa pun tentang pengaturan afinitas prosesor. Anda dapat menggunakan set tugas di linux, tetapi mungkin harus diparameterisasi dan diatur dalam program.

Saya juga memperhatikan bahwa dukungan platform mungkin sedikit lebih lemah. Secara khusus, sepertinya Anda perlu menjalankan Cygwin untuk dukungan Windows.

Terlihat bagus.


Sunting

Node.js sekarang memiliki dukungan asli untuk Windows.

dsmith
sumber
5
Jawaban ini agak tua. Saat ini Node bersifat lintas platform, tidak perlu memiliki Cygwin untuk Windows. Dan Node memiliki dukungan bawaan untuk pengelompokan dalam satu mesin, berbagi soket TCP.
Farid Nouri Neshat
9

Saya melihat dua alternatif yang sama dengan Anda, gotts, untuk banyak proyek.

Sejauh ini, pisau cukur terbaik yang saya temukan untuk memutuskan di antara mereka untuk proyek tertentu adalah apakah saya perlu menggunakan Javascript. Satu sistem yang ada yang ingin saya migrasikan sudah ditulis dalam Javascript, jadi versi berikutnya kemungkinan besar dilakukan di node.js. Proyek lain akan dilakukan di beberapa kerangka web Erlang karena tidak ada basis kode yang akan dimigrasi.

Pertimbangan lain adalah bahwa Erlang menskalakan jauh melampaui hanya beberapa inti, itu dapat menskalakan ke seluruh pusat data. Saya tidak melihat mekanisme bawaan di node.js yang memungkinkan saya mengirim pesan proses JS lain tanpa peduli mesin mana yang aktif, tetapi itu dibangun langsung ke Erlang di level terendah. Jika masalah Anda tidak cukup besar untuk membutuhkan banyak mesin atau jika tidak memerlukan banyak proses kerja sama, keuntungan ini sepertinya tidak menjadi masalah, jadi Anda harus mengabaikannya.

Erlang memang kolam yang dalam untuk menyelam. Saya sarankan untuk menulis program fungsional mandiri terlebih dahulu sebelum Anda mulai membuat aplikasi web. Langkah pertama yang lebih mudah, karena Anda merasa nyaman dengan Javascript, adalah mencoba pemrograman JS dengan gaya yang lebih fungsional. Jika Anda menggunakan jQuery atau Prototype, Anda telah memulai jalur ini. Cobalah beralih antara pemrograman fungsional murni di Erlang atau salah satu kerabatnya (Haskell, F #, Scala ...) dan JS fungsional.

Setelah Anda merasa nyaman dengan pemrograman fungsional, carilah salah satu dari sekian banyak kerangka kerja web Erlang; Anda mungkin sebaiknya tidak menulis aplikasi Anda langsung ke sesuatu yang levelnya rendah seperti inetspada tahap akhir ini. Lihatlah sesuatu seperti Nitrogen , misalnya.

Warren Young
sumber
Seringkali tidak disebutkan bahwa titik "Erlang berskala ke seluruh pusat data" memiliki beberapa tangkapan yang sangat penting untuk dipertimbangkan (keamanan adalah yang terpenting). Lihat babnya di sini: learnyousomeerlang.com/distribunomicon
jocull
9

Sementara saya pribadi memilih Erlang, saya akui bahwa saya sedikit bias terhadap JavaScript. Saran saya adalah Anda mengevaluasi beberapa poin:

  1. Apakah Anda menggunakan kembali kode yang ada dalam salah satu bahasa tersebut (baik dalam hal kode sumber, dan pengalaman programmer!)
  2. Apakah Anda memerlukan / menginginkan pembaruan dengan cepat tanpa menghentikan aplikasi (Di sinilah Erlang menang secara default - waktu prosesnya dirancang untuk kasus itu, dan OTP berisi semua alat yang diperlukan)
  3. Seberapa besar lalu lintas yang diharapkan, dalam hal operasi terpisah dan bersamaan, bukan bandwidth?
  4. Seberapa "paralel" operasi yang Anda lakukan untuk setiap permintaan?

Erlang memiliki konkurensi yang benar-benar disetel & sistem terdistribusi paralel transparan jaringan. Bergantung pada apa sebenarnya proyeknya, ketersediaan implementasi yang matang dari sistem semacam itu mungkin lebih penting daripada masalah apa pun terkait pembelajaran bahasa baru. Ada juga dua bahasa lain yang bekerja pada VM Erlang yang dapat Anda gunakan, Reia mirip Ruby / Python dan Erlang Beraroma Lisp .

Namun pilihan lain adalah menggunakan keduanya, terutama dengan Erlang yang digunakan sebagai semacam "hub". Saya tidak yakin apakah Node.js memiliki sistem Antarmuka Fungsi Asing, tetapi jika demikian, Erlang memiliki pustaka C untuk proses eksternal untuk berinteraksi dengan sistem seperti proses Erlang lainnya.

p_l
sumber
Menurut dokumen, Node.js dapat memanfaatkan C dan C ++ untuk addon eksternal. nodejs.org/docs/v0.3.1/api/addons.html
Evan Plaice
Sepertinya Reia telah meninggal, tapi sebagai gantinya adalah elixir ... mengingatkanku pada Groovy dan Java; di sini akan menjadi Elixir dan Erlang.
Stommepoes
@ EvanPlaice - Itu tidak membuat saya terkesan. Masalahnya, Anda pada dasarnya mengkodekan hal yang bermasalah di C ++ dan menambahkannya sebagai bawaan. Tidak banyak FFI yang sebenarnya Anda lakukan adalah memperluas emulator. (Oke, preferensi pribadi;)) Pustaka eksternal yang disebutkan dalam kasus erlang adalah untuk membuat proses asinkron dalam bahasa lain yang muncul sebagai node ATAU yang berbicara melalui port terbuka (pikirkan pipa dua arah, dengan data terstruktur). Semua itu cocok dengan mode operasi async. Ada juga NIF, yang pada dasarnya dimiliki oleh Node.js, tetapi tidak disarankan.
p_l
1
@p_l Dari apa yang saya pahami, pendekatan node sedikit berbeda. Sementara node sangat bagus dalam menangani panggilan IO asinkron (yaitu permintaan web), ia berjalan dalam lingkungan single-threaded. Jadi, ini bagus dalam pengiriman tetapi tidak begitu bagus dalam pemrosesan intensif CPU. Untuk menutupi dasar itu, Anda dapat membagi proses / utas lain yang menjalankan kode C / C ++ asli. Jika semua yang Anda lakukan adalah panggilan IO asinkron (ex IPC | pipa bi-directional) maka node.js harus dapat menangani beban. Selama tidak ada kode untuk menghabiskan banyak waktu menunggu panggilan sinkron.
Evan Plaice
5

Sepertinya Erlang berkinerja lebih baik untuk penyebaran di server yang relatif rendah (512MB 4-core 2.4GHz AMD VM). Ini dari pengalaman SyncPad dalam membandingkan implementasi Erlang vs Node.js dari aplikasi server papan tulis virtual mereka.

adib
sumber
2
Ya, node.js sepertinya mengalami masalah kebocoran memori yang parah. Node agak baru dan eksperimental dan baik JavaScript maupun mesin V8 tidak dirancang untuk skenario server seperti itu. Erlang, di sisi lain, dirancang hanya untuk itu dari bawah ke atas dan memiliki bertahun-tahun untuk memperbaiki dirinya sendiri dan menjadi dewasa.
Rolf
2
Tautan itu tampaknya sudah mati tetapi ini dia di WayBackMachine web.archive.org/web/20120902014555/http://blog.mysyncpad.com/…
jocull
4

Ada satu bahasa lagi di VM yang sama yaitu erlang -> Elixir

Ini alternatif yang sangat menarik untuk Erlang, lihat yang ini.

Juga memiliki kerangka web yang berkembang pesat berdasarkan itu-> Kerangka Phoenix

NoDisplayName
sumber
0

Saya lebih memilih Erlang daripada Node. Jika Anda menginginkan konkurensi, Node dapat diganti dengan Erlang atau Golang karena prosesnya yang ringan.

Erlang tidak mudah dipelajari sehingga membutuhkan banyak usaha tetapi komunitasnya aktif sehingga bisa mendapatkan bantuan dari itu, ini hanya alasan mengapa orang lebih memilih Node.

Sumit Pugalia
sumber