Akka เปรียบเทียบกับ Erlang ได้อย่างไร? [ปิด]


99

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


ดูหนังเรื่อง erlang ในทางปฏิบัติ น่าเสียดายที่ไม่มีเกี่ยวกับ scala youtube.com/watch?v=G0eBDWigORY
mhstnsc

คำตอบ:


125

ข้อจำกัดความรับผิดชอบ: ฉันเป็น PO ของ Akka

  • Erlang ทำการคัดลอกเมื่อส่ง - Akka ใช้หน่วยความจำที่ใช้ร่วมกัน (วัตถุที่ไม่เปลี่ยนรูป) สำหรับการส่งใน VM
  • Erlang ทำ GC ต่อกระบวนการ - Akka ใช้ JVM GCs
  • Erlang มีOTP - Akka ทำงานร่วมกับระบบนิเวศ Java ทั้งหมด (Apache Camel, JAX-RS ฯลฯ ฯลฯ )
  • Erlang จัดกำหนดการกระบวนการให้คุณ - Akka ช่วยให้คุณสามารถใช้ Dispatchers ที่แตกต่างกันมากมายพร้อมโอกาสในการกำหนดค่าที่ไม่สิ้นสุด
  • Erlang ทำการโหลดโค้ดใหม่ - Akka สามารถรองรับได้ แต่มีความยืดหยุ่นน้อยกว่าเนื่องจากการโหลดคลาส JVM

นั่นคือคนที่มาจากด้านบนของหัวของฉัน

ในทางกลับกันการใช้ Akka หมายความว่าคุณสามารถใช้ Scala, Java, Groovy หรือ JRuby เพื่อเขียนแอปพลิเคชันของคุณได้


39
อ็อบเจ็กต์ Erlang ยังไม่เปลี่ยนรูปและโมเดลพร้อมกันไม่จำเป็นต้องคัดลอกเมื่อส่งภายในโหนดเดียวกัน BEAM สำหรับวัตถุขนาดใหญ่จะส่งข้อมูลอ้างอิง ที่มา: นี้คำตอบดังนั้นโดย @rvirdig
FooF

26
Erlang ทำสำเนาเมื่อส่งเพื่อทำให้ GC มีประสิทธิภาพมากขึ้น - สามารถทำงานได้ตามกระบวนการ ด้วยเหตุนี้จึงไม่มีการหยุด GC ขนาดใหญ่ในแอป Erlang ซึ่งตรงข้ามกับแอป JVM / Akka
andreypopp

4
อันเดรย์ประเภทนั้นขึ้นอยู่กับว่าคุณใช้ JVM / GC ตัวใด azulsystems.com/products/zing/whatisit
Viktor Klang

4
Erlang มีจำนวนการลดลงสำหรับแต่ละกระบวนการแม้ว่าคุณจะอยู่ในวงจรการคำนวณที่ยุ่งวุ่นวาย Erlang VM ก็สามารถหยุดกระบวนการชั่วคราวและปล่อยให้กระบวนการอื่น ๆ ที่หิวโหยใช้รอบ CPU มากขึ้น นั่นเป็นคุณสมบัติที่สำคัญมากที่ JVM ไม่มีให้
Daniel

6
@MaX Erlang มักช้ากว่า Java 5 เท่าเนื่องจากขาดการสนับสนุน JIT แต่ Erlang ไม่มี GC หยุดชั่วคราวออกแบบมาสำหรับการทำงานพร้อมกันและแอปพลิเคชันโทรคมนาคม 7 * 24 Erlang ให้ความสำคัญกับกระบวนการที่เป็นธรรมหลีกเลี่ยงความอดอยากและการหยุดชะงักไม่ได้ออกแบบมาสำหรับปริมาณงานเช่น JVM มันคือส้มและแอปเปิ้ลจริงๆ
Daniel

75

ในกระบวนการ Erlang รับประกันว่าจะมีการสลับการลดลงประมาณ 1,000 ครั้ง ในกรอบงานที่ไร้เดียงสาเช่นตัวแทน Scala / Akka เป็นเจ้าของตัวกำหนดตารางเวลาจนกว่าจะเสร็จสิ้นการทำงานในการรับ รุกฆาต. จบเกม. Hasta la vista :) ผู้คนอย่าเสียเวลากับเทคโนโลยีหลอก ฉันตกใจที่ผู้ชายที่นี่เปรียบเทียบ Scala กับ Erlang

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


9
วิธี Erlang ในการสร้าง IO ทั้งหมดโดยปริยายแบบอะซิงโครนัสนั้นสวยงามมาก Async IO สามารถทำได้โดยใช้ NIO API ใน Scala ซึ่งดูไม่เหมือนคู่หูสำหรับฉัน แต่เป็นโซลูชันที่หรูหราน้อยกว่า
HRJ

7
คุณกำลังพูดถึงเรื่องอะไร?! การประมวลผลงานตรง 1,000 งานดีกว่าการตั้งเวลาแบบ Roundrobin อย่างไรหรือแม้กระทั่งใกล้กับการตั้งเวลากล่องจดหมายที่เล็กที่สุด !!
FUD

8
@vjache - ฉันเห็นด้วย หลายปีของฉันในฐานะโปรแกรมเมอร์ java ได้สอนฉันว่าในบางครั้งคุณจะต้องตรวจสอบเลเยอร์ด้านล่างของคุณ Scala / Akka ดูเหมือนจะเป็นเพียงเลเยอร์อื่นที่อยู่ด้านบนของเลเยอร์อื่น ๆ (เช่น nio, netty ฯลฯ ) ซึ่งทั้งหมดนี้คุณจะต้องเข้าใจในบางประเด็น แม้ว่าฉันจะเพิ่งเริ่มทำงานกับ Erlang แต่ดูเหมือนว่าฉันจะมีเลเยอร์น้อยลงที่ฉันต้องเข้าใจเพื่อให้งานสำเร็จ การเขียนโปรแกรมแบบกระจายใน Erlang ทำให้ Scala / Akka มีน้ำหนักเบากว่ามากซึ่งอาจจะคล้าย ๆ กันว่า python เป็นทางเลือกที่เบากว่าสำหรับ java สำหรับเว็บแอป
Chris Snow

@FUD: บางทีเขาอาจหมายถึงคำแนะนำ 1,000 Erlang? เขาไม่สามารถหมายถึง 1,000 ข้อความ ...
Erik Kaplun

2
@ErikAllik เขาหมายถึง 1,000 "การลด" คิดว่าการลดลงเป็นโทเค็นเพื่อเรียกใช้โค้ดเล็กน้อย (ไม่ใช่ แต่ทำงานเพื่ออธิบาย ... ) หลังจากลด 1,000 ครั้งตัวกำหนดตารางเวลาจะเปลี่ยนไปใช้กระบวนการอื่น ดูข้อมูลเพิ่มเติมได้ที่erlang.org/pipermail/erlang-questions/2001-April/003132.html
Aegis

40

แทบไม่มีใครพูดถึงการแยกกระบวนการ หากไม่มีการรับประกันว่า "เธรดของคุณไม่สามารถยุ่งกับขยะของฉันได้" ระบบแบบกระจายจะยากกว่ามาก (พวกมันยากพอกับกระบวนการของ Erlang)

AFAIK (ซึ่งอยู่ไม่ไกลจากประสบการณ์ตรงที่ จำกัด ของฉันกับ JVM) มีเพียง Erlang เท่านั้นที่ได้รับการแยกกระบวนการ "ถูกต้อง" ใน JVM Mr. Google สามารถให้คำแนะนำว่าจะหางานวิจัยของ Fox และ Candea (?) ได้จากที่ใดเกี่ยวกับระบบการวิจัยที่ใช้เทคนิค "ไมโครรีบูต" ("การคำนวณเชิงการกู้คืน") ผู้พัฒนา Erlang อ่านงานวิจัยดังกล่าวและกล่าวว่า:

  1. ยินดีต้อนรับสู่สโมสรคุณใช้เวลานานขนาดไหน?
  2. JVM ทำให้การเข้าร่วมเป็นเรื่องยากและแย่มาก :-)

การแยกกระบวนการเป็นสิ่งที่ดีมาก อย่างไรก็ตามแม้ Erlang จะไม่มีภูมิคุ้มกันต่อ NIF ที่ผิดพลาด
วิคเตอร์กลาง

14

สำหรับฉันการแลกเปลี่ยนรหัสร้อนในคลัสเตอร์ Erlang ทั้งหมดโดยไม่มีเวลาหยุดทำงาน (ตัวอย่างเช่น :) make:all([netload]เป็นหนึ่งในคุณสมบัติของ Erlang killer

แต่ลองย้อนกลับคำถามของคุณ: akka มีอะไรที่ Erlang ไม่มี? แน่นอนว่าคุณสามารถเพิ่มส่วนขยายและไลบรารี (scala, akka, spring, osgi, ... ) ลงใน Java ได้หลายสิบรายการเพื่อพยายามเข้าใกล้ Erlang แต่ประเด็นอยู่ตรงไหน? โดยสรุปแล้วส่วนขยายเหล่านี้มีความซับซ้อนมากกว่าการเรียนรู้ภาษา Erlang แบบธรรมดาซึ่งปัจจุบันได้พิสูจน์มานานกว่า 2 ทศวรรษแล้วว่าสามารถทำงานได้โดยมีความสามารถในการปรับขนาดสูงสุดโดยไม่มีเวลาหยุด


30
IMO, Scala เป็นภาษาที่ดีกว่าในระดับไวยากรณ์มากกว่า Erlang มันมีวัตถุลักษณะเนมสเปซที่เหมาะสมความปลอดภัยของประเภทที่เหมาะสมไม่มีไวยากรณ์ของเร็กคอร์ดที่น่าเกลียด ฯลฯ ชุมชนมีขนาดใหญ่ขึ้นฉันสามารถใช้เครื่องมือ Java ที่มีอยู่ทั้งหมดและรู้สึกดีขึ้น
ryeguy

15
@ryeguy: "ภาษาที่ดีกว่าในระดับไวยากรณ์" ... อืมกำหนด "ดีกว่า" สำหรับ "ไวยากรณ์" เมื่อฉันเปรียบเทียบไวยากรณ์ของภาษาเป็นปัจจัยที่ไม่เกี่ยวข้องมากที่สุด (เพราะเป็นเพียงเรื่องของรสนิยมหรือสิ่งที่คุณใช้)
Peer Stritzinger

4
@ryeguy ความหมายที่แตกต่างกันไวยากรณ์ที่แตกต่างกัน
rvirding

3
การแลกเปลี่ยนรหัสร้อนกลายเป็นความเจ็บปวดหากคุณต้องการรักษาสถานะระหว่างรหัสรุ่นต่างๆในที่สุดการปิดกระบวนการและย้ายสถานะเมื่อเริ่มต้นทำได้ง่ายขึ้น
OlegYch

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

5

อาจเป็นไปได้ว่า Erlang จะดีกว่าสำหรับระบบกระจายขนาดใหญ่ (ตามคำตอบของ vjache) แต่สำหรับเซิร์ฟเวอร์ปกติเมื่อคุณต้องการใช้ซีพียูหลายตัวเต็มประสิทธิภาพ Akka จึงเป็นตัวเลือกที่ดี - ให้นามธรรมประสิทธิภาพและการทำงานร่วมกับระบบนิเวศ Java ที่ดี

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