แนวทางปฏิบัติที่ดีที่สุดเมื่อจัดการงานอะซิงโครนัสที่ใช้เวลานาน


12

ฉันอยู่ในช่วงการออกแบบของโครงการที่ผู้ใช้ปลายทางจะส่งคำขอจากหน้าเว็บที่จะวางไข่งานที่ดำเนินการแบบอะซิงโครนัสที่ใช้งานมานาน มี "แนวปฏิบัติที่ดีที่สุด" สำหรับปัญหานี้หรือไม่? บริการเว็บและนายหน้าบริการเป็นวิธีที่ดีหรือไม่? คิวการส่งข้อความของ Microsoft สามารถใช้งานได้ที่นี่หรือไม่


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

คำตอบ:


6

ฉันไม่รู้เกี่ยวกับ "วิธีปฏิบัติที่ดีที่สุด" ฉันรู้ข้อผิดพลาดที่พบบ่อยที่สุด

ความผิดพลาดครั้งแรก: DOS Yourself

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

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

ความผิดพลาดครั้งที่สอง: การวางไข่จากผู้ดูแลเว็บ

การวางไข่กระบวนการจากตัวจัดการเว็บเพื่อจัดการกับกระบวนการที่ใช้เวลานานอาจเป็นเรื่องยุ่งยากและเป็นผลให้เกิดข้อผิดพลาดได้ง่าย

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

ตัวเลือก

ฉันมักจะใช้at(1)เพื่อแยกตัวออกอย่างหมดจดจาก webhandler โดยไม่ต้องฟอร์ก

cronนอกจากนี้คุณยังสามารถใช้การดำเนินการเลือกตั้งด้วย

คุณสามารถสื่อสารกับกระบวนการเซิร์ฟเวอร์อื่นที่จัดการการประมวลผล การสื่อสารนั้นสามารถทำได้ด้วยsockets, pipesหรือ abstractions ระดับที่สูงขึ้นเช่นการโทร http REST หรือการกำหนดเส้นทางข้อความคิว


2

ฉันคิดว่าคุณกำลังพูดถึงมากกว่าสองสามนาที

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

ถ้าเป็นมากกว่านั้นพูด 5 นาทีคุณอาจต้องการมอบหมายงานให้กับบริการเฉพาะ ตัวอย่างหนึ่งคือรายงานที่สร้างโดย Google Analytics

คิว Microsoft Messaging สามารถใช้ในการส่งข้อมูลจากระบบหนึ่งไปอีกระบบหนึ่งหรือส่วนประกอบหนึ่งไปยังอีกเครื่องหนึ่ง


ภาษาเช่น PHP ทำสิ่งนี้ได้อย่างไร ฉันรู้ว่ามีแอปพลิเคชันเว็บบางตัวที่ทำสิ่งนี้ แต่เขียนด้วย PHP
TheLQ

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