สถาปัตยกรรมแอปพลิเคชันเว็บ - จำเป็นต้องมีคิวงาน/งานหรือไม่

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

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

  • ฉันจะจัดการกับงานที่เกิดซ้ำได้อย่างไร?
  • ฉันจะบันทึกผลลัพธ์ของงานได้อย่างง่ายดายได้อย่างไร?
  • เป็นไปได้ง่ายไหมที่จะทำให้คิว "ถาวร"?
  • พนักงานควรโต้ตอบกับฐานข้อมูลโดยตรงหรือไม่
  • ฉันควรจัดคิวงานที่เกิดซ้ำด้วยตนเองหรือไม่

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


person Simon    schedule 30.04.2011    source แหล่งที่มา
comment
เกี่ยวข้อง มันแสดงวิธีการดำเนินงานในอนาคตใน node.js เพียงเปลี่ยนการทำงานของงานด้วยการส่งคำขอ HTTP   -  person Raynos    schedule 06.05.2011


คำตอบ (1)


ใช่ นี่เป็นรูปแบบที่รู้จักกันดีในการจัดการงานระยะยาวที่ส่วนหลังของเว็บแอปพลิเคชัน ขึ้นอยู่กับภาษาและกรอบงานแอปพลิเคชันของคุณ มีการใช้งานคิวจำนวนหนึ่ง - เช่น ตอบกลับ หรือ Beanstalkd หรือ ActiveMQ a> หรือหากข้อกำหนดด้านประสิทธิภาพของคุณไม่สูง คุณสามารถใช้ตารางฐานข้อมูลเป็นคิวประเภทหนึ่งได้

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

ขึ้นอยู่กับตัวจัดการคิวของคุณ สิ่งเหล่านี้สามารถทำให้งานคงอยู่ได้ เช่น. ActiveMQ รองรับการส่งข้อความแบบถาวร ดังนั้นข้อความในคิวจะถูกกู้คืนในกรณีที่เกิดความล้มเหลว

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

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

ฉันเพิ่งอธิบายรูปแบบที่คล้ายกันนี้ที่นี่

person scaganoff    schedule 06.05.2011
comment
สมมติว่าฉันใช้ RabbitMq ฉันจำเป็นต้องใช้บริการเพื่อจัดการคิวหรือไม่ ปกติงานนี้ทำอย่างไร? ทางเลือกที่ดีสำหรับการบริการคืออะไร? - person SynBiotik; 23.02.2016