Node.js หรือ Erlang


86

ฉันชอบเครื่องมือเหล่านี้มากเมื่อพูดถึงระดับการทำงานพร้อมกันที่สามารถจัดการได้

Erlang / OTP ดูเหมือนโซลูชันที่มีเสถียรภาพมากกว่า แต่ต้องการการเรียนรู้ที่มากขึ้นและการดำน้ำลึกเข้าไปในกระบวนทัศน์ภาษาที่ใช้งานได้ และดูเหมือนว่า Erlang / OTP จะทำให้ดีขึ้นมากเมื่อพูดถึงซีพียูแบบมัลติคอร์ (แก้ไขฉันถ้าฉันผิด)

แต่ควรเลือกแบบไหน? อันไหนดีกว่ากันในมุมมองระยะสั้นและระยะยาว?

เป้าหมายของฉันคือการเรียนรู้เครื่องมือที่ทำให้การปรับขนาดโครงการเว็บของฉันภายใต้ภาระงานสูงทำได้ง่ายกว่าภาษาทั่วไป


คุณสามารถใช้ JavaScript เป็นภาษาที่ใช้งานได้โดยมีขีดล่าง js.org
Todd Moses

2
@ToddMoses แน่ใจหรือว่าแสดงความคิดเห็นถูกคำถาม?
Flavien Volken

แอปเปิ้ลและส้ม Node.JS (ที่แกนกลาง) เป็นอิสระ (C) + การทำงานร่วมกันของ Javascript Erlang เป็นการใช้งาน IO ที่กำหนดเองโดยสิ้นเชิง Node.JS สร้างขึ้นสำหรับแอปที่มีเธรดเดียว Delema ของคุณต้องการงานที่ Facebook / Google หรือคุณต้องการสร้างซอฟต์แวร์ kickass
Vans S

คำตอบ:


87

ฉันจะให้ Erlang ลอง แม้ว่าจะเป็นช่วงการเรียนรู้ที่ชันกว่า แต่คุณจะได้รับประโยชน์มากขึ้นเนื่องจากคุณจะได้เรียนรู้ภาษาโปรแกรมที่ใช้งานได้ นอกจากนี้เนื่องจาก Erlang ได้รับการออกแบบมาโดยเฉพาะเพื่อสร้างระบบที่เชื่อถือได้และทำงานร่วมกันได้สูงคุณจะได้เรียนรู้มากมายเกี่ยวกับการสร้างบริการที่ปรับขนาดได้สูงในเวลาเดียวกัน


10
ฉันไม่คิดว่า Erlang จะซับซ้อนกว่า Javascript สักหน่อย ไม่มีการสืบทอดประเภทใด ๆ ใน Erlang ดังนั้นคุณจึงมั่นใจได้เสมอว่าคุณเรียกใช้ฟังก์ชันใด ไม่มีการแปลงประเภทโดยนัยใน Erlang ดังนั้นคุณจึงมั่นใจได้เสมอว่าคุณใช้ข้อมูลประเภทใด ไม่มีการกำหนดทำลายดังนั้นคุณจึงมั่นใจได้เสมอว่าจะไม่มีโค้ดเก่าบางส่วนเสียเนื่องจากโค้ดใหม่บางส่วนในการโทรกลับเปลี่ยนสถานะภายในของคุณ
Dmitry Belyaev

51

ฉันไม่สามารถพูดแทน Erlang ได้ แต่มีบางสิ่งที่ไม่ได้กล่าวถึงเกี่ยวกับโหนด:

  • โหนดใช้เอนจิ้น V8 ของ Google เพื่อรวบรวมจาวาสคริปต์เป็นรหัสเครื่อง ดังนั้นโหนดจึงค่อนข้างเร็ว นั่นคือข้อดีของความเร็วที่นำเสนอโดยการเขียนโปรแกรมตามเหตุการณ์และ io แบบไม่ปิดกั้น
  • โหนดมีชุมชนที่ใช้งานได้ค่อนข้างดี เข้าสู่กลุ่ม IRC ของพวกเขาใน freenode แล้วคุณจะเห็นว่าฉันหมายถึงอะไร
  • ฉันสังเกตเห็นความคิดเห็นข้างต้นผลักดัน Erlang บนพื้นฐานที่จะเป็นประโยชน์ในการเรียนรู้ภาษาโปรแกรมที่ใช้งานได้ ในขณะที่ฉันยอมรับว่าการขยายชุดทักษะของคุณเป็นเรื่องสำคัญและได้รับหนึ่งในชุดที่อยู่ภายใต้เข็มขัดของคุณ แต่คุณไม่ควรตั้งโครงการด้วยข้อเท็จจริงที่ว่าคุณต้องการเรียนรู้รูปแบบการเขียนโปรแกรมใหม่
  • ในทางกลับกัน Javascript อยู่ในกระบวนทัศน์ที่คุณรู้สึกสบายใจที่จะเขียน! นอกจากนี้ยังเป็นจาวาสคริปต์ดังนั้นเมื่อคุณเขียนโค้ดฝั่งไคลเอ็นต์มันจะดูและรู้สึกสอดคล้องกัน
  • ชุมชนของโหนดได้สูบโมดูลจำนวนมากออกไปแล้ว! มีโมดูลสำหรับ redis mongodb โซฟาและสิ่งที่คุณมี อีกโมดูลที่ดีที่ควรพิจารณาคือExpress (คิดว่า Sinatra สำหรับโหนด)

ดูวิดีโอในบล็อกของ yahoo โดย Ryan Dahl คนที่เขียน node จริงๆ ฉันคิดว่าจะช่วยให้คุณมีความคิดที่ดีขึ้นว่าโหนดอยู่ที่ใดและกำลังไปที่ใด

โปรดทราบว่าโหนดยังอยู่ในขั้นตอนการพัฒนาช่วงปลายและมีการเปลี่ยนแปลงค่อนข้างน้อยซึ่งเป็นการเปลี่ยนแปลงที่ทำให้โค้ดก่อนหน้านี้เสียหาย อย่างไรก็ตามคาดว่าจะถึงจุดที่คุณสามารถคาดหวังว่า API จะไม่เปลี่ยนแปลงมากเกินไป ดังนั้นหากคุณกำลังมองหาอะไรสนุก ๆ ฉันจะบอกว่าโหนดเป็นตัวเลือกที่ดี


26
ฉันคิดว่าเครื่องยนต์ V8 รวบรวม JavaScript เข้ากับรหัสเครื่องไม่ใช่เพื่อประกอบ
Jonas

10
การมีงานทำหลายอย่างเกี่ยวกับ Javascript ไม่ได้ทำให้ภาษานี้เหมาะสำหรับการแก้ปัญหาที่ซับซ้อน ภาษานั้นแย่มากสำหรับกรณีพิเศษทั้งหมดในการแปลงประเภท และรูปแบบการโทรกลับที่มีการเปลี่ยนแปลงตัวแปรในสถานที่ต่างๆหลายร้อยแห่งและนรกกับการมองหาสถานที่ที่มีการมอบหมายงานบางอย่างเกิดขึ้น
Dmitry Belyaev

15

ฉันเป็นโปรแกรมเมอร์ Erlang มานานและคำถามนี้ทำให้ฉันลองดูที่ node.js มันดูดีทีเดียว

ดูเหมือนว่าคุณต้องวางไข่หลายกระบวนการเพื่อใช้ประโยชน์จากหลายคอร์ ฉันไม่เห็นอะไรเลยเกี่ยวกับการตั้งค่าความสัมพันธ์ของโปรเซสเซอร์ คุณสามารถใช้ tasket บน linux ได้ แต่มันน่าจะเป็น parametrized และตั้งค่าในโปรแกรม

ฉันสังเกตด้วยว่าการรองรับแพลตฟอร์มอาจจะลดลงเล็กน้อย โดยเฉพาะดูเหมือนว่าคุณจะต้องทำงานภายใต้การสนับสนุน Cygwin สำหรับ Windows

ดูดีนะ


แก้ไข

ตอนนี้ Node.js มีการสนับสนุนดั้งเดิมสำหรับ Windows แล้ว


5
คำตอบนี้เก่าไปหน่อย ตอนนี้ Node เป็นแบบข้ามแพลตฟอร์มไม่จำเป็นต้องมี Cygwin สำหรับ windows และโหนดมีการสนับสนุนในตัวสำหรับการทำคลัสเตอร์ในเครื่องเดียวโดยใช้ซ็อกเก็ต TCP ร่วมกัน
Farid Nouri Neshat

9

ฉันกำลังมองหาทางเลือกสองทางที่เหมือนกันคือ gotts สำหรับหลายโครงการ

จนถึงตอนนี้มีดโกนที่ดีที่สุดที่ฉันคิดขึ้นมาเพื่อตัดสินใจเลือกระหว่างพวกเขาสำหรับโครงการที่กำหนดคือฉันต้องใช้ Javascript หรือไม่ ระบบที่มีอยู่ระบบหนึ่งที่ฉันต้องการย้ายนั้นเขียนด้วย Javascript แล้วดังนั้นเวอร์ชันถัดไปจึงน่าจะเสร็จสิ้นใน node.js โปรเจ็กต์อื่น ๆ จะทำในเว็บเฟรมเวิร์กของ Erlang เนื่องจากไม่มีฐานรหัสที่มีอยู่ให้โยกย้าย

ข้อควรพิจารณาอีกประการหนึ่งคือ Erlang สามารถปรับขนาดได้ดีกว่าแกนหลาย ๆ คอร์ แต่ก็สามารถปรับขนาดเป็นดาต้าเซ็นเตอร์ทั้งหมดได้ ฉันไม่เห็นกลไกในตัวใน node.js ที่ให้ฉันส่ง JS อีกเครื่องประมวลผลข้อความโดยไม่สนใจว่าเครื่องนั้นอยู่บนเครื่องใด แต่ถูกสร้างขึ้นใน Erlang ที่ระดับต่ำสุด หากปัญหาของคุณไม่ใหญ่พอที่จะต้องใช้เครื่องจักรหลายเครื่องหรือหากไม่ต้องการกระบวนการทำงานร่วมกันหลายขั้นตอนข้อได้เปรียบนี้ก็ไม่สำคัญดังนั้นคุณควรเพิกเฉย

Erlang เป็นแอ่งน้ำลึกที่จะดำลงไป ฉันขอแนะนำให้เขียนโปรแกรมการทำงานแบบสแตนด์อโลนก่อนที่คุณจะเริ่มสร้างเว็บแอป ขั้นตอนแรกที่ง่ายยิ่งขึ้นเนื่องจากคุณรู้สึกคุ้นเคยกับ Javascript คือการลองเขียนโปรแกรม JS ในรูปแบบที่ใช้งานได้มากขึ้น หากคุณใช้ jQuery หรือ Prototype แสดงว่าคุณได้เริ่มต้นเส้นทางนี้แล้ว ลองตีกลับระหว่างการเขียนโปรแกรมเชิงฟังก์ชันที่แท้จริงใน Erlang หรือหนึ่งในเครือข่าย (Haskell, F #, Scala ... ) และฟังก์ชัน JS

เมื่อคุณคุ้นเคยกับการเขียนโปรแกรมเชิงฟังก์ชันแล้วให้ค้นหาเว็บเฟรมเวิร์กของ Erlang ที่มีอยู่มากมาย คุณอาจไม่ควรเขียนแอปของคุณโดยตรงไปยังสิ่งที่มีระดับต่ำเช่นinetsนี้ในช่วงท้ายนี้ ดูสิ่งที่ต้องการไนโตรเจนเช่น


มักจะไม่มีการกล่าวถึงว่าจุด "Erlang สเกลไปยังศูนย์ข้อมูลทั้งหมด" มีจุดสำคัญบางอย่างที่ต้องพิจารณา (ความปลอดภัยเป็นเรื่องใหญ่) ตรวจสอบบทนี้ได้ที่นี่: learnyousomeerlang.com/distribunomicon
jocull

9

ในขณะที่ฉันใช้ Erlang เป็นการส่วนตัวฉันยอมรับว่าฉันมีอคติกับ JavaScript เล็กน้อย คำแนะนำของฉันคือคุณประเมินไม่กี่คะแนน:

  1. คุณกำลังใช้รหัสที่มีอยู่ซ้ำในภาษาใดภาษาหนึ่ง (ทั้งในแง่ของซอร์สโค้ดและประสบการณ์โปรแกรมเมอร์!)
  2. คุณต้องการ / ต้องการการอัปเดตแบบทันทีโดยไม่ต้องหยุดแอปพลิเคชัน (นี่คือที่ที่ Erlang ชนะโดยค่าเริ่มต้น - รันไทม์ได้รับการออกแบบมาสำหรับกรณีนั้นและ OTP มีเครื่องมือทั้งหมดที่จำเป็น)
  3. ปริมาณการใช้งานที่คาดหวังในแง่ของการดำเนินการพร้อมกันที่แยกจากกันไม่ใช่แบนด์วิดท์?
  4. คุณดำเนินการแบบ "ขนาน" สำหรับแต่ละคำขออย่างไร

Erlang มีระบบกระจายพร้อมกันแบบขนานและเครือข่ายโปร่งใส ขึ้นอยู่กับว่าโครงการคืออะไรความพร้อมในการใช้งานระบบดังกล่าวอย่างสมบูรณ์อาจมีมากกว่าปัญหาใด ๆ เกี่ยวกับการเรียนรู้ภาษาใหม่ นอกจากนี้ยังมีภาษาอื่น ๆ อีกสองภาษาที่ทำงานบน Erlang VM ซึ่งคุณสามารถใช้ได้คือReia แบบ Ruby / Python และLisp-Flavored ErlangErlang

อีกทางเลือกหนึ่งคือการใช้ทั้งสองอย่างโดยเฉพาะอย่างยิ่งกับ Erlang ที่ใช้เป็น "ฮับ" ฉันไม่แน่ใจว่า Node.js มีระบบ Foreign Function Interface หรือไม่ แต่ถ้ามี Erlang จะมีไลบรารี C สำหรับกระบวนการภายนอกเพื่อเชื่อมต่อกับระบบเหมือนกับกระบวนการ Erlang อื่น ๆ


ตามเอกสาร Node.js สามารถใช้ประโยชน์จาก C และ C ++ สำหรับ addons ภายนอกได้ nodejs.org/docs/v0.3.1/api/addons.html
Evan Plaice

ดูเหมือนว่า Reia เสียชีวิตไปแล้ว แต่ในตำแหน่งของมันคือยาอายุวัฒนะ ... มันทำให้ฉันนึกถึง Groovy และ Java ที่นี่มันจะเป็น Elixir และ Erlang
stommepoes

@EvanPlaice - นั่นไม่ได้ประทับใจฉันเท่าไหร่ สิ่งนี้คือโดยพื้นฐานแล้วคุณกำลังเข้ารหัสสิ่งที่มีปัญหาใน C ++ และเพิ่มเป็นในตัว FFI ไม่มากนักคือสิ่งที่คุณกำลังทำอยู่คือการขยายตัวจำลอง (โอเคความชอบส่วนตัว;)) ไลบรารีภายนอกที่กล่าวถึงในกรณีของ erlang คือการสร้างกระบวนการ async ในภาษาอื่นที่แสดงเป็นโหนดหรือพูดผ่านพอร์ตที่เปิดอยู่ (คิดว่าไปป์สองทิศทางพร้อมข้อมูลที่มีโครงสร้าง) ทั้งหมดนี้เข้ากันได้ดีกับโหมดการทำงานแบบ async นอกจากนี้ยังมี NIF ซึ่งโดยพื้นฐานแล้ว Node.js มีอยู่ แต่ท้อแท้
p_l

1
@p_l จากสิ่งที่ฉันเข้าใจแนวทางโหนดแตกต่างกันเล็กน้อย แม้ว่าโหนดจะจัดการการเรียก async IO ได้ดีมาก (เช่นการร้องขอเว็บ) แต่ก็ทำงานในสภาพแวดล้อมแบบเธรดเดียว ดังนั้นมันจึงยอดเยี่ยมในการจัดส่ง แต่ไม่ค่อยดีในการประมวลผลที่ใช้ CPU มากนัก เพื่อให้ครอบคลุมพื้นดินนั้นคุณสามารถแยกกระบวนการ / เธรดอื่นที่รันโค้ด C / C ++ ดั้งเดิมได้ หากสิ่งที่คุณทำคือการเรียก async IO (เช่น IPC | ท่อสองทิศทาง) ดังนั้น node.js ก็ควรจะจัดการกับโหลดได้ ตราบเท่าที่ไม่ได้เข้ารหัสให้ใช้เวลารอนานมากในการโทรแบบซิงโครนัส
Evan Plaice

5

ดูเหมือนว่า Erlang จะทำงานได้ดีกว่าสำหรับการปรับใช้ในเซิร์ฟเวอร์ระดับล่าง (512MB 4-core 2.4GHz AMD VM) นี่มาจากประสบการณ์ของ SyncPad ในการเปรียบเทียบการใช้งาน Erlang กับ Node.js ของแอปพลิเคชันเซิร์ฟเวอร์ไวท์บอร์ดเสมือน


2
ใช่ node.js ดูเหมือนจะมีปัญหาหน่วยความจำรั่วที่น่ารังเกียจ โหนดค่อนข้างใหม่และอยู่ในช่วงทดลองและทั้ง JavaScript และ V8 ไม่ได้รับการออกแบบมาสำหรับสถานการณ์เซิร์ฟเวอร์ดังกล่าว ในทางกลับกัน Erlang ได้รับการออกแบบมาเพื่อสิ่งนั้นจากล่างขึ้นบนและมีเวลาหลายปีในการปรับแต่งและเติบโตเป็นผู้ใหญ่
Rolf

2
ลิงก์นั้นดูเหมือนจะตายไปแล้ว แต่อยู่ที่ WayBackMachine web.archive.org/web/20120902014555/http://blog.mysyncpad.com/…
jocull

4

มีอีกหนึ่งภาษาบน VM เดียวกันที่ erlang คือ -> Elixir

เป็นทางเลือกที่น่าสนใจมากสำหรับ Erlang ลองดูสิ่งนี้

นอกจากนี้ยังมีเว็บเฟรมเวิร์กที่เติบโตอย่างรวดเร็วบนพื้นฐานของ it-> Phoenix Framework



0

ฉันจะชอบ Erlang มากกว่า Node หากคุณต้องการการทำงานพร้อมกันโหนดสามารถถูกแทนที่โดย Erlang หรือ Golang ได้เนื่องจากกระบวนการที่มีน้ำหนักเบา

Erlang ไม่ใช่เรื่องง่ายที่จะเรียนรู้ดังนั้นจึงต้องใช้ความพยายามอย่างมาก แต่ชุมชนมีการใช้งานอยู่จึงสามารถขอความช่วยเหลือได้นี่เป็นเพียงเหตุผลที่ผู้คนชอบ Node

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.