เบรกเกอร์ควรไปที่ไหน?

Aug 18 2020

ฉันกำลังพัฒนา REST API ใหม่และฉันเคยเห็นบางโครงการวางเบรกเกอร์ไว้ในไฟล์Controller. ฉันเคยวางไว้ในไฟล์DAO.

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

มีคำแนะนำเกี่ยวกับสถานที่ที่ควรไป?

คำตอบ

3 Christophe Aug 19 2020 at 17:02

คำตอบนี้มีสองส่วน ส่วนแรกได้กล่าวถึงแล้วโดยRobert Harveyในความคิดเห็นของเขา:

  • ตามแคตตาล็อกรูปแบบไมโครเซอร์วิสของ Chris Richardson เบรกเกอร์ควรอยู่ในพร็อกซีสำหรับบริการระยะไกล API เกตเวย์เป็นสถานที่ที่ดีสำหรับมัน
  • อีกทางเลือกหนึ่งคือการค้นหาฝั่งเซิร์ฟเวอร์โดยเฉพาะอย่างยิ่งหากกลยุทธ์การกู้คืนหมายถึงการค้นหาอินสแตนซ์อื่น ๆ ที่กำลังทำงานอยู่ของบริการเดียวกัน

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

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

จากมุมมองทั่วไปตัวเลือกประเภทนี้ในพฤติกรรมเป็นความรับผิดชอบของผู้ควบคุม: ตัวควบคุมประสานงานระหว่างองค์ประกอบของบริการและสามารถปรับการประมวลผลตามข้อมูล "ล้มเหลว"

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