การออกแบบตามเหตุการณ์ - ฟิวเจอร์ส คำมั่นสัญญา เทียบกับความคงอยู่ของอัคก้า

ฉันมีกรณีการใช้งานหลายกรณีซึ่งกำหนดให้เหตุการณ์ที่กำหนดไว้ล่วงหน้าเริ่มทำงานตามการกระทำของผู้ใช้บางอย่าง

เช่น. สมมติว่าเมื่อ NewUser ถูกสร้างขึ้นในแอปพลิเคชัน จะต้องเรียก CreateUserInWorkflowSystem และ FireEmailToTheUser แบบอะซิงโครนัส มีกรณีทางธุรกิจอื่นๆ อีกหลายกรณีในลักษณะนี้ที่เหตุการณ์จะถูกกำหนดไว้ล่วงหน้าตามกรณีการใช้งาน ฉันสามารถใช้ Promises/Futures เพื่อสร้างโมเดลเหตุการณ์เหล่านี้ได้ดังนี้

if 'NewUser' then 
    call `CreateUserInWorkflowSystem` (which will be Future based API)
    call `FireEmailToTheUser` (which will be Future based API)
if 'FileImport' then
   call `API3` (which will be Future based call)
   call `API4` (which will be Future based call)

การโทร Future ทั้งหมดนั้นจะต้องบันทึกความล้มเหลวไว้ที่ใดที่หนึ่งเพื่อให้สามารถลองโทรที่ล้มเหลวอีกครั้งได้ ฯลฯ หมายเหตุ การโทร NewUser จะไม่รอให้ Futures เหล่านั้น (เหตุการณ์ต่อการพูด) ดำเนินการให้เสร็จสิ้น

นั่นคือการใช้ Futures/Promises API ธรรมดา อย่างไรก็ตาม ฉันคิดว่า Akka Persistence จะเหมาะสมที่นี่และ การบล็อกการโทรยังคงสามารถเรียกใช้ Futures ได้ ด้วยความพากเพียรของ Akka การจัดการความล้มเหลวจะเป็นเรื่องง่ายเนื่องจากจัดเตรียมไว้นอกกรอบ ฯลฯ ฉันเข้าใจว่าการคงอยู่ของ Akka ยังอยู่ในขั้นทดลอง แต่ดูเหมือนจะไม่เป็นปัญหาใหญ่ เนื่องจากโดยทั่วไปแล้ว typesafe จะทำให้เฟรมเวิร์กใหม่เหล่านี้อยู่ในสถานะทดลองก่อนที่จะส่งเสริม ไปสู่การเปิดตัวในอนาคต ฯลฯ (เช่นเดียวกับ Macros) เมื่อพิจารณาจากข้อกำหนดเหล่านี้แล้ว คุณคิดว่า Futures/Promises หรือการคงอยู่ของ Akka เหมาะสมกว่าที่นี่หรือไม่


person Vikas Pandya    schedule 24.06.2014    source แหล่งที่มา


คำตอบ (1)


นี่เป็นคำถามตามความคิดเห็น ไม่ใช่คำถามที่ดีที่สุดที่จะถามเกี่ยวกับ SO ยังไงก็พยายามตอบนะครับ

ขึ้นอยู่กับว่าคุณสบายใจกับสิ่งใดมากกว่า และข้อกำหนดของคุณคืออะไร คุณจำเป็นต้องปรับขนาดระบบในภายหลังเกินกว่า JVM เดี่ยว หรือไม่ - ใช้ Akka คุณต้องการให้ เรียบง่าย มากขึ้นหรือไม่ - ใช้ Futures

หากคุณใช้ Futures คุณสามารถจัดเก็บสถานะและการดำเนินการทั้งหมดเพื่อดำเนินการในคิวงาน/db มันค่อนข้างสมเหตุสมผล

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

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

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

person yǝsʞǝla    schedule 24.06.2014