NServiceBus กับ MassTransit


86

ฉันกำลังดิ้นรนกับรายการข้อดีข้อเสียเกี่ยวกับ NServiceBus และ MassTransit

ตอนนี้ฉันรู้ว่ามีกระทู้อยู่แล้ว แต่มันไม่ได้ตอบคำถามของฉันจริงๆ

นี่คือสิ่งที่ฉันอ่านจนถึงตอนนี้:

  1. NServiceBus ใช่ได้รับอนุญาตและไม่ได้มาฟรี
  2. MassTransit ใช่มันเป็นโอเพ่นซอร์ส แต่เอกสารดูเหมือนจะขาดไปบ้าง

NServiceBus เก่ากว่าและมีข้อมูลอ้างอิงมากกว่า หาข้อมูลเกี่ยวกับ MassTransit ได้ยาก แต่ฉันก็เปิดใจกว้าง อย่างไรก็ตามฉันต้องส่งมอบโซลูชันที่มั่นคงดังนั้นฉันจึงต้องถาม

ดังนั้นโปรดคนที่มีประสบการณ์เกี่ยวกับทั้งสองกรอบ ทำไมฉันจึงควรเลือก NServiceBus? หรือทำไมฉันจึงควรเลือก MassTransit

มันคือประสิทธิภาพความปลอดภัยขนาดหรือ?

คำตอบ:


103

ถ้าฉันต้องสรุปนี่คือสิ่งที่ฉันจะพูด:

หากคุณต้องการการสนับสนุนเชิงพาณิชย์ไปที่ NServiceBus หากคุณพอใจกับการใช้ฟอรัมเป็นเครื่องมือสนับสนุน MassTransit เป็นตัวเลือกที่ยอดเยี่ยม นักพัฒนาได้ตอบสนองต่อปัญหาของเราเป็นอย่างดี หากคุณเลือก MassTransit ตอนนี้คุณจะเลือกระหว่าง MSMQ และ RabbitMQ หากคุณต้องการ DTC ไปกับ MSMQ หากคุณต้องการคุณสมบัติเพิ่มเติมและการดูแลระบบที่ดีขึ้นไปกับ RabbitMQ

ในโครงการของเราเราเปลี่ยนจาก NServiceBus เป็น MassTransit ด้วยเหตุผลสองประการ:

  1. MassTransit ฟรี
  2. เรารัก RabbitMQ

ฉันใช้ทั้งสองกรอบ ฉันใช้ MassTransit นานกว่า NServiceBus นี่คือไฮไลท์ที่ฉันเห็น

ค่าใช้จ่าย:

  • MassTransit เป็น Apache 2.0 ที่ได้รับอนุญาตและฟรีสำหรับการผลิตเชิงพาณิชย์ในขณะที่ NServiceBus ไม่ใช่

สนับสนุน:

  • ดังที่ Udi กล่าวไว้มีตัวเลือกสำหรับการสนับสนุน NServiceBus เชิงพาณิชย์ฉันไม่เห็นสิ่งนั้นสำหรับ MassTransit

ขนส่ง:

  • MassTransit รองรับ MSMQ และ RabbitMQ
  • NServiceBus รองรับเฉพาะ MSMQ RabbitMQ เท่านั้นที่รองรับใน NServiceBus 4+

RabbitMQ กับ MSMQ:

  • MSMQ สนับสนุน DTC (ผู้ประสานงานธุรกรรมแบบกระจาย) สำหรับธุรกรรมที่เกี่ยวข้องกับหลายกระบวนการบนเครื่องหลายเครื่อง (เช่นเซิร์ฟเวอร์ SQL, Windows Service)
  • RabbitMQ มีอินเทอร์เฟซการดูแลระบบที่ยอดเยี่ยม
  • MSMQ มีมานานกว่าและเป็นผลิตภัณฑ์ของ Microsoft
  • RabbitMQ ใหม่กว่าโอเพ่นซอร์สฟรีและสนับสนุนโดย VMWare
  • MSMQ ถูกติดตั้งบนเครื่อง Windows ส่วนใหญ่ตามค่าเริ่มต้น

Udi Dahan และกลุ่ม MassTransit (Chris Patterson, Dru Sellers และ Travis Smith) ล้วนเป็นคนที่ยอดเยี่ยม


8
คำตอบที่ดีดิน ให้ฉันเพิ่มสิ่งนั้นในเวอร์ชันถัดไป (จะออกในอีกไม่กี่สัปดาห์) NServiceBus จะรองรับ ActiveMQ ด้วย เราตั้งใจที่จะชะลอการสนับสนุน RabbitMQ จนกว่าเราจะสามารถให้เรื่องราวการยกเลิกการทำสำเนาที่มีประสิทธิภาพเพื่อชดเชยการขาด DTC ซึ่งจะมีการวางแผนไว้สำหรับปีหน้า MassTransit ไม่ได้ทำการยกเลิกการทำสำเนานี้ (แต่อาจอยู่ในแผนงานของพวกเขาด้วยฉันไม่รู้)
Udi Dahan

1
ยินดีรับฟัง การไม่มีธุรกรรม end-to-end ที่แท้จริงจะเป็นตัวทำลายข้อตกลงสำหรับระบบภารกิจที่สำคัญ
Clay

เราได้ตั้งค่าระบบโดยใช้ nServiceBus และเราชอบการตอบสนองจากชุมชนมากและโดยรวมแล้วมันค่อนข้างง่ายในการกำหนดค่า เราใช้ MSMQ ในตอนนี้เนื่องจากเป็นเรื่องธรรมดามากขึ้น อย่างไรก็ตามแม้ว่า nServiceBus จะมีรูปแบบการออกใบอนุญาตมากมาย แต่ฉันก็ยังค่อนข้างสับสนว่าใบอนุญาตใดที่ฉัน (หรือทีมของเราจะต้องซื้อ) เพื่อให้เป็นไปตามข้อกำหนดการใช้งาน ทีมงานนับประมาณ 5 คนแต่ละคนจะตั้งโปรแกรมกับ API แต่จะมีมากขึ้นในโหมด POC (ใช่ในการผลิต :)) ในตอนนี้ MassTransit อยู่ถัดจากการตรวจสอบ ดูเหมือนว่ามีเอกสารค่อนข้างดี
Guillaume Schuermans

MassTransit ไม่มีการสนับสนุนทางการค้าและเราไม่มีแผนที่จะเสนอขายในขณะนี้ ฉันขอแนะนำรายชื่อผู้รับจดหมายสำหรับการสนับสนุน MassTransit แต่ฉันมีสิ่งที่ติดแท็ก MassTransit ปรากฏในโปรแกรมอ่าน RSS ของฉันดังนั้นฉันจึงมักจะตอบกลับภายในหนึ่งหรือสองวันใน SO
Travis

สำหรับ MT คุณสามารถไปที่การสนทนา Gitter: gitter.im/MassTransit/MassTransit
CrusherJoe

39

ในฐานะผู้เขียน NServiceBus ดั้งเดิมฉันอาจมีอคติกับเทคโนโลยีของตัวเองเล็กน้อย แต่ฉันจะพยายามรักษาความสมดุลให้มากที่สุดเท่าที่จะทำได้

การสนับสนุนการขนส่ง

ทั้ง NServiceBus และ MassTransit รองรับRabbitMQและAzure Service Busแต่ NServiceBus ยังรองรับ:

ในหัวข้อ RabbitMQ

อาร์กิวเมนต์อาจจะทำที่ NServiceBus มีการสนับสนุนที่แข็งแกร่งสำหรับ RabbitMQ - ตัวอย่างเช่นในของฟังก์ชั่นการส่งมอบล่าช้าในขณะที่ระบบขนส่งมวลชนรัฐว่าปลั๊กอิน "ของพวกเขายังถือว่าอยู่ในระหว่างการทดลอง MassTransit สนับสนุน แต่เราไม่สามารถรับประกันอะไรได้มากไปกว่าปลั๊กอิน รับประกันตัวเอง”

นอกจากนี้เรายังทำงานอย่างใกล้ชิดกับทีม RabbitMQ โดยมีส่วนร่วมกับ. net SDKเพื่อประโยชน์ของระบบนิเวศทั้งหมด

เมื่อมาถึง Azure Service Bus

ระดับการทำงานร่วมกันที่เรามีกับทีม Azure Service Bus นั้นสูงยิ่งขึ้นโดยมี PR มากกว่า 70 รายการสำหรับ SDK หลัก. netSDK

เมื่อคุณใช้ NServiceBus คุณจะได้รับประโยชน์จากความรู้ที่ลึกซึ้งอย่างเต็มที่

เครื่องมือ

นี่คือความแตกต่างที่ใหญ่ที่สุด

เมื่อคุณสร้างระบบที่สำคัญแล้วการมองเห็นว่าชิ้นส่วนต่างๆที่เคลื่อนไหวพูดคุยกันนั้นมีความสำคัญมากเพียงใด MassTransit ไม่มีอะไรมากในพื้นที่นี้นอกเหนือจากการรวมขนาดเล็กผ่านแหล่งข้อมูลการวินิจฉัยไปยังเครื่องมือของบุคคลที่สามเช่น Application Insights หรือ Open Trace

แพลตฟอร์มบริการรอบ ๆ NServiceBus ไปได้ไกลกว่าเล็กน้อยทำให้คุณสามารถดูไดอะแกรมลำดับในจุดสิ้นสุดทั้งหมดด้วยServiceInsight :

แผนภาพลำดับด้วย ServiceInsight

คุณยังสามารถรับมุมมองเชิงตรรกะของปลายทางและข้อความทั้งหมดของคุณ:

มุมมองตรรกะของระบบ NServiceBus

โดยพื้นฐานแล้วคุณจะได้รับเอกสารการใช้ชีวิตของสถาปัตยกรรมระบบของคุณ

การจัดการและการตรวจสอบ

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

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

การจัดกลุ่มข้อความล้มเหลวด้วย ServicePulse

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

และในที่สุดก็มีการตรวจสอบประสิทธิภาพในแพลตฟอร์ม:

การตรวจสอบประสิทธิภาพ NServiceBus

คุณจะได้รับแพ็คเกจเต็มรูปแบบเมื่อพูดถึงการสนับสนุนด้านการผลิต

การสนับสนุนระยะยาวและความเข้ากันได้ย้อนหลัง

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

ด้วยการสนับสนุน NServiceBus ประกอบด้วย :

  • 2 ปีขึ้นไปสำหรับแต่ละเวอร์ชันหลัก
  • เพิ่มอีก 2 ปีของการสนับสนุนการขยาย
  • รับประกันเวลาตอบสนองสำหรับปัญหาร้ายแรง
  • พร้อมใช้งานตลอด 24 ชั่วโมงทุกวัน

การให้คำปรึกษาและการฝึกอบรม

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

ใบอนุญาต

สิ่งที่บางคนยังไม่ทราบเกี่ยวกับ NServiceBus คือว่ามันเป็นฟรีสำหรับการใช้งานส่วนบุคคลและที่เพิ่งเริ่มต้น

ฟรีสำหรับการใช้งานส่วนตัวและการเริ่มต้น

เมื่อพูดถึงการใช้งานเชิงพาณิชย์รูปแบบการออกใบอนุญาตรอบ ๆ NServiceBus มีความยืดหยุ่นมากตามที่ลูกค้าในวงกว้างระบุและสามารถปรับให้เหมาะสมกับการจัดการ แน่นอนว่าด้วย MassTransit การออกใบอนุญาตนั้นฟรี

หวังว่าจะช่วยได้บ้าง


6
ฉันอยากได้ยินสิ่งที่คุณพูดเกี่ยวกับ MassTransit ในแบบที่ไม่ลำเอียง พยายามที่จะ 'ปกป้อง' การใช้งาน MassTransit ด้วยวิธีใดวิธีหนึ่ง ฉันชอบ nServiceBus มาก แต่เรากำลังดิ้นรนกับต้นทุนใบอนุญาตในการลองใช้สิ่งนี้ในสภาพแวดล้อมการผลิตจริง แต่สำหรับคุณสมบัติที่เพิ่มใหม่ในแพลตฟอร์มของเราเท่านั้น การพิสูจน์รหัสแนวคิดที่คุณอาจพูด
Guillaume Schuermans

1
แล้วความแตกต่างทางเทคนิคเพิ่มเติมล่ะ? ความน่าเชื่อถือการขจัดข้อมูลซ้ำซ้อนการส่งข้อความขนาดใหญ่ ฯลฯ กรอบงาน / รูปแบบการเล่นเหล่านี้เปรียบเทียบได้อย่างไร? มีรายการใดบ้างที่เปรียบเทียบบัสรับส่งข้อความด้วยวิธีนี้?
Steven

1
เท่าที่ฉันรู้ @Steven MassTransit ไม่มีฟังก์ชันการขจัดข้อมูลซ้ำซ้อนที่พบในคุณสมบัติ NServiceBus Outbox ส่วนหนึ่งของปัญหาในการระบุประเภทรายการที่คุณต้องการคือเทคโนโลยีเหล่านี้แต่ละอย่างมีการพัฒนาอย่างต่อเนื่องซึ่งจะทำให้รายการประเภทนั้นค้างไป
Udi Dahan

@udidahan คุณน่าจะอัปเดตมุมมองของคุณเนื่องจากเรากำลังจะใกล้ถึงปี 2021 ฉันต้องการทราบว่า MT ได้รับการปรับปรุงเทคโนโลยีหลักในช่วงไม่กี่ปีที่ผ่านมาหรือไม่เช่นเดียวกับ NServiceBus
Volkan Güven

ใช่ Volkan ทั้ง MassTransit และ NServiceBus มีการพัฒนาอย่างต่อเนื่องตลอดเวลา
Udi Dahan

8

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

ตอนนี้ Rebus มีอายุประมาณ 8 ปีแล้วและมันถูกใช้เพื่อเคลื่อนย้ายเงินและควบคุมโรงไฟฟ้าตั้งแต่เริ่มต้น

รองรับระบบจัดคิวขั้นพื้นฐานส่วนใหญ่เช่น MSMQ, RabbitMQ, Azure Service Bus, Azure Storage Queues, Amazon SQS เป็นต้น แต่ยังรองรับสิ่งที่ตลกมากขึ้นเช่นการใช้ MSSQL, PostgreSQL และ Oracle ในการขนส่ง

วิกิเอกสารนั้นค่อนข้างครอบคลุมแม้ว่าหลาย ๆ คนดูเหมือนจะเข้าใจเพราะ API ของ Rebus นั้นสามารถค้นพบได้ง่าย

Rebus ได้รับเสมอ (และจะเป็น) ฟรีอย่างสมบูรณ์ เป็นลิขสิทธิ์ของ MIT ดังนั้นโดยพื้นฐานแล้วคุณสามารถทำสิ่งที่คุณรู้สึกได้

หากคุณเป็นผู้ใช้ Rebus ที่จริงจังและคุณต้องการข้อตกลงการสนับสนุนอย่างเป็นทางการและเครื่องมือพิเศษคุณสามารถสมัครสมาชิกRebus Proซึ่งนำเสนอโดยRebus FM (บริษัท ที่อยู่เบื้องหลัง Rebus)

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


2
Rebus เป็นวิธีที่ประเมินต่ำ เป็นอัญมณีน้ำหนักเบาที่แท้จริงในระบบนิเวศ. NET
ThomasDC

4

คุณสามารถใช้ Shuttle (FOSS) ได้ตลอดเวลา: https://github.com/Shuttle/shuttle-esb :)

เอกสารประกอบ (ปรับปรุงอยู่เสมอ): http://shuttle.github.io/shuttle-esb/

โครงการรถรับส่งดำเนินไปเกือบ 2 ปีและใช้ระบบการผลิต จะเป็นเรื่องของการเลือกสิ่งที่ตรงใจคุณ

NServiceBus มีประวัติที่ดี ฉันเคยใช้มันมาก่อนในระบบการผลิต (1.9) แต่ไม่ใช่เนื่องจากมันไปสู่เชิงพาณิชย์ (จุดที่ฉันเริ่มต้นด้วย Shuttle)

ฉันยังไม่ได้ลอง MassTransit

ฉันเดาว่าตัวเลือกทั้งหมดของคุณจะมีพื้นฐาน (command / event / pub-sub) อย่างไรก็ตาม NServiceBus มี sagas และข้อมูลบัสข้อมูลแม้ว่าฉันจะคิดว่ามันง่ายพอที่จะจัดการข้อมูลภายนอกเซอร์วิสบัสเช่นในตัวจัดการข้อความปลายทางของคุณ ฉันไม่รู้ว่า MassTransit มี sagas / data bus หรือไม่ แต่ Shuttle ไม่แน่นอน

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



2

เพื่อให้คำตอบที่ทันสมัยยิ่งขึ้นฉันได้พัฒนาอย่างมืออาชีพด้วยระบบนิเวศทั้งสองระบบและตอนนี้ทั้งสองสนับสนุนเทคโนโลยี MQ ที่หลากหลายและ. NET Core

ฉันใช้ NServicebus เมื่อสองสามปีก่อนกับผลิตภัณฑ์คลาวด์ใหม่เราต้องการ. NET Core ซึ่งระบบขนส่งมวลชนไม่รองรับในเวลานั้น ฉันต้องบอกว่ามันเป็นสิ่งที่ดีที่จะใช้ในฐานะนักพัฒนามี liners ที่ดีมากมายเครื่องมือ / การตรวจสอบที่ยอดเยี่ยมและเอกสารนั้นดีมาก

มีการสนับสนุนและใบอนุญาตในระดับต่างๆและมีอยู่ครั้งหนึ่งที่เราต้องการความช่วยเหลือบางอย่างก็มีคุณภาพดี


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

แม้ว่าจะใช้งานได้ดีและผู้พัฒนา MT ดูเหมือนจะพยายามอย่างมากในการสนับสนุน OSS ของพวกเขา - เกินกว่าที่คุณจะคาดหวังได้อย่างสมเหตุสมผล

โดยส่วนตัวแล้ว TLDR ของฉันจะเป็น - รับ NServicebus หาก บริษัท ของคุณมั่นใจได้ว่าจะจ่ายเงินให้ แต่ MT เป็นทางเลือกที่ให้บริการและดีที่สุดที่คุณจะได้รับฟรี

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