Akka obsolesce โบรกเกอร์ข้อความ JMS / AMQP หรือไม่ [ปิด]


19

ฉันใช้เวลาหนึ่งสัปดาห์ในการดำน้ำลึกเข้าไปในเอกสาร Akkaและในที่สุดก็เข้าใจว่าระบบของนักแสดงคืออะไรและปัญหาที่พวกเขาแก้ไข

ความเข้าใจของฉัน(และประสบการณ์กับ) โบรกเกอร์ข้อความ JMS / AMQP ดั้งเดิมคือพวกเขามีตัวตนเพื่อให้สิ่งต่อไปนี้:

  • การประมวลผลแบบอะซิงโครนัสระหว่างผู้ผลิตและผู้บริโภค และ
  • การรับประกันการส่งข้อความรวมถึงการคงอยู่การลองใหม่และการย้อนกลับ

แต่ Akka ไม่ได้ให้สิ่งนี้โดยไม่มีโครงสร้างพื้นฐานที่จำเป็นและค่าใช้จ่ายในการดำเนินงานทั้งหมดหรือไม่

  • ใน Akka การสื่อสารของนักแสดงทั้งหมดไม่ตรงกันและไม่ปิดกั้น และ
  • ใน Akka SupervisorStrategiesมีอยู่เพื่อบรรลุการลองใหม่อีกครั้งทางเลือกและการเพิ่มระดับ นักแสดงสามารถกำหนดค่าให้คงอยู่กับร้านค้าแทบทุกประเภทหากเป็นข้อกำหนดเช่นกัน

นี่ทำให้ฉันสงสัยว่า: หากแอปของฉันใช้ Akka ฉันจำเป็นต้องนำโบรกเกอร์ JMS / AMQP (เช่น ActiveMQ, RabbitMQ, Kafka) เข้ามาในรูปภาพหรือไม่? กล่าวอีกนัยหนึ่งเคยมีกรณีการใช้งานที่แอพที่ใช้ Akka ใหม่จะรับประกันการเปิดตัวของกลุ่มโบรกเกอร์ JMS / AMQP ใหม่หรือไม่ ทำไมหรือทำไมไม่?

อาร์กิวเมนต์เดียวอาจเป็นได้ว่าแอป Akka ของฉันอาจต้องรวมเข้ากับระบบอื่น แต่ในกรณีนั้นโมดูลAkka-Camelช่วยให้ Akka สามารถเจาะลึกเข้าไปในรายการความสามารถในการรวมที่ครบถ้วนสมบูรณ์ของ Camel (TCP, FTP, ZeroMQ, รายการต่อไปเรื่อย ๆ ... )

คิด?


3
ย่อหน้าสุดท้ายของคุณไม่ใช่เหตุผลที่ Akka ไม่ทำให้โบรกเกอร์ข้อความล้าสมัยหรือไม่ ตัวอย่างเช่นฉันกำลังทำงานกับแอ็พพลิเคชัน Java ที่โต้ตอบกับแอ็พพลิเคชัน C ++ แบบรีโมตผ่านนายหน้าข้อความที่สอดคล้องกับ JMS ฉันสามารถเขียนแอปพลิเคชัน Java ของฉันโดยใช้ Akka-Camel แต่ฉันยังคงต้องการนายหน้าเพราะแอปพลิเคชัน C ++
โธมัสโอเวนส์

Ahhh ขอบคุณ @ThomasOwens (+1) แต่คุณมี (โดยชอบธรรม) เข้าใจผิดคำถามของฉัน ฉันจะเปลี่ยนข้อความในไม่กี่นาทีเพื่อให้ชัดเจนยิ่งขึ้น สิ่งที่ฉันจริงๆขอคือถ้าฉันสร้างแอป Akka จะที่ฉันเคยต้องยังแนะนำใหม่นายหน้า JMS / AMQP? ฉันคิดว่าคำตอบคือ "ไม่" เพราะ Akka + Camel (ฉันคิดว่าอีกครั้ง) แก้ปัญหาทั้งหมดที่นายหน้ามักจะแก้ไข ในตัวอย่างของคุณโบรกเกอร์ JMS มีอยู่แล้วเป็นวิธีการสื่อสารกับแอป C ++ ฉันไม่ได้เพิ่มมันพร้อมกับแอป Akka ใหม่ของฉัน ดังนั้นโมดูล Akka-Camel จะดูแลการส่งข้อความให้ฉัน
smeeb

2
บางทีฉันอาจเข้าใจผิด แต่ Camel ไม่ได้แทนที่ JMS (ตัวอย่าง) แต่มีอินเตอร์เฟสที่สามารถใช้ส่งข้อความผ่าน JMS ได้ คุณสามารถแทนที่ JMS ด้วย AMQP, RabbitMQ หรือ XMPP ในตัวอย่างของฉันแม้ว่าแอปพลิเคชัน Java + Akka และ C ++ ของฉันเป็นแบรนด์ใหม่เพื่อให้พวกเขาสามารถสื่อสารผ่าน JMS ได้ฉันก็ยังต้องแนะนำคิวข้อความที่สอดคล้องกับ JMS และจากนั้นฉันก็สามารถใช้ Akka-Camel เพื่อ สื่อสารกับมัน Camel ไม่ได้ให้บริการนายหน้า แต่หมายถึงการสื่อสารภายในโปรโตคอลจำนวนหนึ่ง Akka-Camel จัดเตรียมอินเตอร์เฟสที่คุ้นเคยมากกว่าอินเตอร์เฟสของ Camel
โธมัสโอเวนส์

ขอบคุณอีกครั้ง @ThomasOwens (+1) - ฉันคิดว่าคุณเพิ่งคิดใหม่อีกครั้ง :-) ในตัวอย่างของคุณมีที่มีอยู่ c ++ App - บางทีบางระบบเดิมและมีนายหน้า JMS ที่สอดคล้องกับที่มีอยู่ว่า c ++ แอปแล้วใช้สำหรับการบูรณาการกับโลกภายนอก ในกรณีนี้แอป Akka ใหม่ของฉันจะ - เหมือนกับที่คุณพูด - ใช้โมดูล Akka-Camel เพื่อผลิต / ใช้ข้อความไปยัง / จากโบรกเกอร์รายนี้ แต่นี่ไม่ใช่สิ่งที่ฉันถามที่นี่! ฉันสงสัยว่าถ้ามีเหตุผลที่ฉันจะต้องสร้าง2 สิ่ง : (1) แอป Akka ใหม่ของฉันและ (2) นายหน้า JMS / AMQP ในเวลาเดียวกัน ...
smeeb

3
คุณพูดถึงความสามารถในการรวมที่ไม่สิ้นสุดของ Camel แต่ไม่สามารถรวมเข้ากับไม่มีอะไรได้ จำเป็นต้องมีบางสิ่งบางอย่างเพื่อให้สามารถใช้งานร่วมกันได้มิฉะนั้นคุณจะเพลิดเพลินกับการสนับสนุนบริการมากมายที่คุณไม่ได้ใช้งาน เริ่ม JMS หรือเซิร์ฟเวอร์ HTTP หรือ FTP หรือบางสิ่งหากคุณต้องการใช้ Camel เพื่อรวมเข้ากับบางสิ่ง มิฉะนั้นมันก็เป็นเพียงแค่ความสุขที่ให้ความสามารถในการรวมที่ไม่มีที่สิ้นสุดในขณะที่รวมกับอะไร
จิมมี่ฮอฟฟา

คำตอบ:


12

นักแสดงนางแบบ

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

Akka เป็นเฟรมเวิร์กที่ใช้โมเดลนักแสดงและช่วยให้คุณสร้างระบบนักแสดงพร้อมโครงสร้างพื้นฐานและฟีเจอร์ทั้งหมดที่สร้างขึ้นแล้ว (เช่นการใช้ JQuery แทนจาวาสคริปต์)

การส่งข้อความ

ระบบข้อความคือแอพพลิเคชั่นที่สามารถส่งและรับข้อความ มีหลากหลายตั้งแต่คิวพื้นฐานไปจนถึงซอฟต์แวร์องค์กรขนาดใหญ่ที่มีหัวข้อ pub / sub, persistence และคุณสมบัติอื่น ๆ แต่เป้าหมายสุดท้ายเหมือนกัน บันทึกบางไบต์และเรียกคืนอีกครั้งในภายหลังด้วยการสั่งซื้อบางประเภท กรณีการใช้งานหลักในวันนี้คือการแยกระบบออกและอนุญาตให้ทำการประมวลผลแบบอะซิงโครนัสตามกำหนดเวลาหรือความเร็วที่แตกต่างกัน RabbitMQ, NATS, Kafka เป็นต้นเป็นตัวอย่างของระบบข้อความทั้งหมด

การเปรียบเทียบ

โมเดล Actor และเฟรมเวิร์ก Akka เป็นเครื่องมือระดับต่ำที่เป็นวิธีที่ยอดเยี่ยมในการสร้างแอปพลิเคชันเช่นคิวข้อความ

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

อย่างไรก็ตามสิ่งนี้ทำให้ระบบการส่งข้อความล้าสมัยหรือไม่ ไม่ได้อย่างแน่นอน. เพียงเพราะคุณสามารถเขียนโค้ดทุกสิ่งนี้ด้วยตัวคุณเองไม่ได้หมายความว่าคุณต้องโดยเฉพาะอย่างยิ่งเมื่อโมเดลนักแสดงไม่ดีสำหรับปัญหาของคุณหรือคุณต้องการภาษาแอพพลิเคชั่น API ภายนอกระบบปฏิบัติการฐานข้อมูลและอื่น ๆ กับแต่ละอื่น ๆ (ไม่ว่าจะเป็นระบบนักแสดงหรือไม่)

หากคุณต้องการส่งข้อความระหว่างสองระบบให้ใช้คิวข้อความ หากคุณต้องการการประมวลผลแบบ stateful ที่ปรับขนาดได้และการส่งข้อความความหน่วงต่ำภายในแอปพลิเคชันเดียวกันให้ใช้โมเดลนักแสดง พวกเขาทั้งคู่มีอยู่ในระดับที่แตกต่างกันอย่างสิ้นเชิงและวิธีที่คุณใช้พวกมันขึ้นอยู่กับโซลูชันที่คุณกำลังสร้าง


มีคำตอบที่ยอดเยี่ยมเกี่ยวกับ SO เกี่ยวกับนักแสดงรุ่นเดียวกันกับการส่งข้อความ: /programming/5693346/when-to-use-actors-instead-of-messaging-solutions-suchutions-suchtion-much-as หรือ TIBCO

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