เรากำลังจัดการกับปัญหาที่น่าสนใจใน StackOverflow
เรามีงานเล็ก ๆ น้อย ๆ "ที่ต้องทำในไม่ช้า" ตัวอย่างกำลังอัปเดตรายการ "คำถามที่เกี่ยวข้อง" สิ่งที่เราทำในอดีตคือการแบกภาระงานเหล่านั้นลงบนหน้าโหลดของผู้ใช้บางคน
เรื่องนี้ไม่เหมาะ แต่ก็ไม่ได้สังเกตเห็นได้ชัดเจนจริงๆ ตอนนี้ SO จึงผ่านเครื่องหมายคำถาม 1,000,000 รายการผู้ใช้ที่โชคร้ายเหล่านั้นเริ่มรู้สึก
วิธีแก้ปัญหาตามธรรมชาติคือการผลักงานเหล่านี้เป็นพื้นหลัง มีสองวิธีในการทำสิ่งนี้ที่ฉันกำลังพิจารณา
1. ใน IIS เป็น Thread-Pool / Work-Queue ที่กำหนดเอง
โดยพื้นฐานแล้วเราจะหมุนเธรดไม่กี่อัน (ไม่ใช่ThreadPoolเพื่อไม่รบกวน IIS) และให้พวกเขาให้บริการคอลเลกชันบางอย่างที่เรากำลังผลักให้Funcsทำงาน
โปรใหญ่ที่นี่คือความเรียบง่าย เราไม่ต้องกังวลเกี่ยวกับการจัดการอะไรเลยและเราไม่จำเป็นต้องตรวจสอบให้แน่ใจว่าบริการจากภายนอกนั้นพร้อมแล้วที่จะตอบสนอง
นอกจากนี้เรายังสามารถเข้าถึงรหัสทั่วไปของเราทั้งหมด
คอนดิชั่นก็คือว่าเราไม่ควรใช้เธรดพื้นหลัง การคัดค้านที่ฉันรู้นั้นมีศูนย์กลางอยู่ที่ IIS ที่หิวโหย (ถ้าคุณใช้ ThreadPool) และเธรดที่สุ่มแบบสุ่ม (เนื่องจากการรีไซเคิล AppPool)
เรามีโครงสร้างพื้นฐานที่มีอยู่เพื่อทำให้เธรดที่ตายแบบสุ่มไม่ใช่ประเด็น (เป็นไปได้ในการตรวจสอบงานที่ถูกทอดทิ้งโดยทั่วไป) และ จำกัด จำนวนเธรด (และการใช้เธรดที่ไม่ใช่ ThreadPool) ก็ไม่ยากเช่นกัน
ย้ายไปที่ StackOverflowเนื่องจากไม่ได้รับการแก้ไขที่นี่
2. เป็นบริการ
อาจเป็นโซลูชันของบุคคลที่สามหรือโซลูชันที่กำหนดเอง
โดยพื้นฐานแล้วเราจะจัดระเบียบงานข้ามขอบเขตของกระบวนการไปยังบริการบางอย่างแล้วลืมไปเลย สันนิษฐานว่าเรากำลังเชื่อมโยงโค้ดบางส่วนเข้าหรือ จำกัด ให้กับสตริงการเชื่อมต่อ SQL ดิบ +
โปรคือมันเป็น "วิธีที่ถูกต้อง" ในการทำเช่นนี้
ข้อเสียคือเราถูก จำกัด อย่างมากในสิ่งที่เราสามารถทำได้หรือเราจะต้องใช้ระบบบางอย่างเพื่อให้บริการนี้สอดคล้องกับรหัสฐานของเรา นอกจากนี้เรายังจะต้องขอการตรวจสอบและข้อผิดพลาดทั้งหมดของเราซึ่งเราได้รับฟรีโดยใช้ตัวเลือก "In IIS"
มีประโยชน์หรือปัญหาอื่น ๆ เกี่ยวกับวิธีการบริการหรือไม่?
โดยสรุปมีปัญหาที่มองข้ามไม่ได้และผ่านไม่ได้ที่ทำให้แนวทาง # 1 ไม่สามารถใช้การได้และหากเป็นเช่นนั้นมีบริการของบุคคลที่สามที่ดีที่เราควรพิจารณาหาแนวทาง # 2 หรือไม่