อ่าน 2 นาที
ระบบที่ล้มเหลวอย่างรวดเร็ว
ใน การออกแบบระบบ ระบบ "หยุดการทำงานทันที" ( fail -fast system) คือระบบที่รายงานสภาวะใดๆ ที่อาจบ่งชี้ถึงความล้มเหลวทันทีที่ส่วนติดต่อผู้ใช้ ระบบ "หยุดการทำงานทันที"...
ระบบที่ล้มเหลวอย่างรวดเร็ว
ในการออกแบบระบบ ระบบ "หยุดการทำงานทันที" ( fail -fast system)คือระบบที่รายงานสภาวะใดๆ ที่อาจบ่งชี้ถึงความล้มเหลวทันทีที่ส่วนติดต่อผู้ใช้ ระบบ "หยุดการทำงานทันที" มักถูกออกแบบมาเพื่อหยุดการทำงานปกติ แทนที่จะพยายามดำเนินการต่อในกระบวนการที่อาจมีข้อผิดพลาด การออกแบบดังกล่าว มักตรวจสอบสถานะของระบบในหลายจุดของการทำงาน เพื่อให้สามารถตรวจจับความล้มเหลวได้ตั้งแต่เนิ่นๆ หน้าที่ของโมดูล "หยุดการทำงานทันที" คือการตรวจจับข้อผิดพลาด จากนั้นจึงปล่อยให้ระดับที่สูงขึ้นถัดไปของระบบจัดการกับข้อผิดพลาดเหล่านั้น
ฮาร์ดแวร์และซอฟต์แวร์
ระบบหรือโมดูลที่ทำงานได้อย่างรวดเร็วเมื่อเกิดข้อผิดพลาดเป็นที่ต้องการในหลายสถานการณ์:
- สถาปัตยกรรมแบบ Fail-fast นั้นอิงตามนโยบายการจัดการข้อผิดพลาด โดยที่ข้อผิดพลาดใดๆ ที่ตรวจพบหรือสถานะที่ไม่คาดคิดจะทำให้ระบบล้มเหลว (อย่างรวดเร็ว) ในแง่หนึ่ง นโยบายการจัดการข้อผิดพลาดนี้ตรงกันข้ามกับนโยบายที่ใช้ในระบบที่ทนต่อความผิดพลาดในระบบที่ทนต่อความผิดพลาดนั้น จะมีการกำหนดนโยบายการจัดการข้อผิดพลาดเพื่อให้มีส่วนประกอบที่ซ้ำซ้อนและย้ายคำขอการคำนวณไปยังส่วนประกอบที่ยังใช้งานได้เมื่อส่วนประกอบใดส่วนประกอบหนึ่งล้มเหลว ในทางกลับกัน ระบบ Fail-fast กลับทำให้ระบบที่ทนต่อความผิดพลาดมีความยืดหยุ่นมากขึ้น เราอาจมีเซิร์ฟเวอร์สำรอง 10 เครื่องสำหรับฐานข้อมูลที่กำหนด แต่ถ้าการกำหนดค่าที่ใช้ร่วมกันสำหรับเซิร์ฟเวอร์ทั้ง 10 เครื่องได้รับการอัปเดตด้วยข้อมูลการตรวจสอบสิทธิ์ที่ไม่ถูกต้องสำหรับไคลเอ็นต์ เซิร์ฟเวอร์ทั้งหมดก็จะ "ล้มเหลวซ้ำซ้อน" ในแง่นั้น ระบบ Fail-fast จะทำให้แน่ใจว่าเซิร์ฟเวอร์สำรองทั้ง 10 เครื่องล้มเหลวโดยเร็วที่สุดเพื่อให้ทีม DevOps สามารถตอบสนองได้อย่างรวดเร็ว
- คอมponent แบบ Fail-fast มักถูกใช้ในสถานการณ์ที่ความล้มเหลวในคอมponent หนึ่งอาจไม่ปรากฏให้เห็นจนกว่าจะนำไปสู่ความล้มเหลวในคอมponent อื่นอันเป็นผลมาจากการเริ่มต้นระบบแบบ Lazy Initialization ตัวอย่างเช่น ระบบอาจ "ถูกกำหนดให้ล้มเหลว" เพราะการตั้งค่าเส้นทางของระบบไฟล์ไม่ถูกต้อง ระบบไม่ล้มเหลวในระหว่างการเริ่มต้นระบบเพราะไม่ได้ตรวจสอบเส้นทางของระบบไฟล์ในระหว่างการเริ่มต้นระบบ ระบบจะล้มเหลวในภายหลังก็ต่อเมื่อมีการร้องขอจากไคลเอ็นต์เท่านั้น
- การค้นหาสาเหตุของความล้มเหลวทำได้ง่ายกว่าในระบบที่ตรวจจับความล้มเหลวได้อย่างรวดเร็ว (fail-fast system) เพราะระบบจะรายงานความล้มเหลวพร้อมข้อมูลให้มากที่สุดเท่าที่จะเป็นไปได้ในเวลาที่เกิดความล้มเหลวใกล้เคียงที่สุด ในระบบที่ทนต่อความผิดพลาด (fault-tolerant system) ความล้มเหลวอาจไม่ถูกตรวจพบ ในขณะที่ในระบบที่ไม่ใช่ทั้งระบบที่ทนต่อความผิดพลาดและระบบที่ตรวจจับความล้มเหลวได้อย่างรวดเร็ว ความล้มเหลวอาจถูกซ่อนไว้ชั่วคราว จนกระทั่งก่อให้เกิดปัญหาอื่นที่ดูเหมือนไม่เกี่ยวข้องกันในภายหลัง
- ระบบที่ออกแบบมาให้หยุดการทำงานและรายงานข้อผิดพลาดเมื่อเกิดความล้มเหลว จะมีโอกาสน้อยที่จะดำเนินการผิดพลาดซึ่งแก้ไขไม่ได้หรือก่อให้เกิดค่าใช้จ่ายสูง
นักพัฒนาโปรแกรมเรียกโค้ดแบบ fail-fast ว่าโค้ดที่พยายามทำให้เกิดข้อผิดพลาดโดยเร็วที่สุดเท่าที่จะเป็นไปได้ในขั้นตอนการเริ่มต้นตัวแปรหรืออ็อบเจ็กต์ ใน การเขียน โปรแกรมเชิงวัตถุอ็อบเจ็กต์ที่ออกแบบแบบ fail-fast จะเริ่มต้นสถานะภายในของอ็อบเจ็กต์ในคอนสตรัคเตอร์ และจะส่งข้อยกเว้นหากมีสิ่งผิดปกติเกิดขึ้น (แทนที่จะปล่อยให้มีอ็อบเจ็กต์ที่ไม่ได้รับการเริ่มต้นหรือได้รับการเริ่มต้นเพียงบางส่วน ซึ่งจะทำให้เกิดข้อผิดพลาดในภายหลังเนื่องจาก "setter" ที่ผิดพลาด) จากนั้นสามารถทำให้อ็อบเจ็กต์นั้นไม่สามารถเปลี่ยนแปลงได้หากไม่มีการคาดหวังการเปลี่ยนแปลงสถานะภายในอีกต่อไป ในฟังก์ชัน โค้ด fail-fast จะตรวจสอบพารามิเตอร์อินพุตในเงื่อนไขเบื้องต้นในสถาปัตยกรรมไคลเอ็นต์-เซิร์ฟเวอร์ fail-fast จะตรวจสอบคำขอของไคลเอ็นต์ทันทีที่มาถึง ก่อนที่จะประมวลผลหรือส่งต่อไปยังส่วนประกอบภายในอื่นๆ และจะส่งคืนข้อผิดพลาดหากคำขอไม่สำเร็จ (พารามิเตอร์ไม่ถูกต้อง ฯลฯ) โค้ดที่ออกแบบแบบ fail-fast ช่วยลดเอนโทรปีภายในของซอฟต์แวร์และลดความพยายามในการแก้ไขข้อบกพร่อง
ตัวอย่าง
- ระบบ/แอปพลิเคชันที่ทำงานเมื่อเกิดข้อผิดพลาดอย่างรวดเร็ว จะตรวจสอบว่าทรัพยากรอินพุต/เอาต์พุตทั้งหมดที่จำเป็นสำหรับการคำนวณในอนาคตพร้อมใช้งานก่อนที่จะมีการร้องขอการคำนวณใดๆ เข้ามา
- แอปพลิเคชัน/ระบบที่ทำงานได้รวดเร็วเมื่อเกิดข้อผิดพลาด จะตรวจสอบว่าการกำหนดค่าเริ่มต้นที่ไม่สามารถเปลี่ยนแปลงได้ทั้งหมดถูกต้องเมื่อเริ่มต้นระบบ
- ฟังก์ชันแบบ fail-fast คือฟังก์ชันที่ตรวจสอบข้อมูลนำเข้าทั้งหมดของฟังก์ชันในเงื่อนไขเบื้องต้นก่อนที่จะดำเนินการคำนวณหรือตรรกะทางธุรกิจใดๆ ในฟังก์ชันนั้น
- โดยปกติแล้ว ฟังก์ชัน fail-fast จะโยนข้อยกเว้นขณะรันไทม์เมื่อพบการคำนวณที่ผิดปกติ ทำให้ระบบล้มเหลวหากไม่มี "การดักจับ" ใดๆ ที่พิจารณาไว้ในส่วนอื่นๆ แทนที่จะส่งคืนค่าข้อผิดพลาดบางอย่างโดยไม่ต้องตั้งสมมติฐาน (ในแง่ดี) เกี่ยวกับการจัดการข้อผิดพลาดที่เกิดขึ้นอย่างถูกต้อง
- ในสาขาวิศวกรรมซอฟต์แวร์ ตัววน ซ้ำแบบ fail-fastคือตัววนซ้ำที่พยายามแจ้งข้อผิดพลาดหากลำดับขององค์ประกอบที่ตัววนซ้ำประมวลผลมีการเปลี่ยนแปลงในระหว่างการวนซ้ำ
- เมื่อกำหนดสถานะเริ่มต้นในเครื่องสถานะแล้ว ระบบที่ทำงานเมื่อเกิดข้อผิดพลาดอย่างรวดเร็วจะตรวจสอบสถานะดังกล่าวและหยุดการทำงานทันที
- เมื่อมีการเปลี่ยนแปลงสถานะในเครื่องสถานะ ระบบ fail-fast จะหยุดเครื่องหากการเปลี่ยนแปลงสถานะนั้นเป็นสิ่งต้องห้าม อาจเป็นกรณีที่การเปลี่ยนแปลงสถานะที่ถูกห้ามนั้นเกิดจากอินพุตภายนอกที่ไม่ถูกต้อง ในกรณีนั้น ระบบ fail-fast จะหยุดประมวลผลคำขอทันทีที่ตรวจพบอินพุตที่ไม่ถูกต้อง (แทนที่จะมอบหมายให้การใช้งานเครื่องสถานะจัดการต่อ)
ธุรกิจ
คำนี้ถูกนำมาใช้กันอย่างแพร่หลายในฐานะคำอุปมาในธุรกิจ ย้อนกลับไปอย่างน้อยถึงปี 2001 [ 1 ]หมายความว่าธุรกิจควรดำเนินการทดลองที่กล้าหาญเพื่อกำหนดความอยู่รอดในระยะยาวของผลิตภัณฑ์หรือกลยุทธ์ แทนที่จะดำเนินการอย่างระมัดระวังและลงทุนหลายปีในแนวทางที่ล้มเหลว มันกลายเป็นเหมือน "คติพจน์" ใน วัฒนธรรม สตาร์ทอัพ เช่น "ล้มเหลวเร็ว ล้มเหลวบ่อย" [ 2 ]
ดูเพิ่มเติม
- ซอฟต์แวร์ที่เกิดข้อผิดพลาดเท่านั้น
- ออกแบบตามสัญญา
- ความล้มเหลวที่ย่ำแย่กับ ความล้มเหลวที่ดี
- ปลอดภัยไร้ข้อผิดพลาด
- หยุดการทำงานเมื่อเกิดข้อผิดพลาด
- ระบบเงียบสนิทเมื่อเกิดข้อผิดพลาด
ลิงก์ภายนอก
- เกรย์, จิม (1985). "ทำไมคอมพิวเตอร์ถึงหยุดทำงาน และเราจะทำอะไรได้บ้าง?" . CiteSeerX 10.1.1.110.9127 ,ขอแนะนำ 'Fail Fast'
- บทความ "Fail Fast" โดย Jim Shore อธิบายการใช้แนวคิด "Fail Fast" ในการพัฒนาซอฟต์แวร์ (จาก "columns for IEEE software" เรียบเรียงโดยMartin Fowler )
สรุปเนื้อหา
ข้อมูลสำคัญจากบทความ
ข้อมูลสำคัญเกี่ยวกับ ระบบที่ล้มเหลวอย่างรวดเร็ว
ใน การออกแบบระบบ ระบบ "หยุดการทำงานทันที" ( fail -fast system) คือระบบที่รายงานสภาวะใดๆ ที่อาจบ่งชี้ถึงความล้มเหลวทันทีที่ส่วนติดต่อผู้ใช้ ระบบ "หยุดการทำงานทันที"...
ฮาร์ดแวร์และซอฟต์แวร์
ระบบหรือโมดูลที่ทำงานได้อย่างรวดเร็วเมื่อเกิดข้อผิดพลาดเป็นที่ต้องการในหลายสถานการณ์:
ตัวอย่าง
ระบบ/แอปพลิเคชันที่ทำงานเมื่อเกิดข้อผิดพลาดอย่างรวดเร็ว จะตรวจสอบว่าทรัพยากรอินพุต/เอาต์พุตทั้งหมดที่จำเป็นสำหรับการคำนวณในอนาคตพร้อมใช้งานก่อนที่จะมีการร้องขอการคำนวณใดๆ เข้ามา แอปพลิเคชัน/ระบบที่ทำงานได้รวดเร็วเมื่อเกิดข้อผิดพลาด...
ธุรกิจ
คำนี้ถูกนำมาใช้กันอย่างแพร่หลายในฐานะคำอุปมาในธุรกิจ ย้อนกลับไปอย่างน้อยถึงปี 2001 [ 1 ] หมายความว่าธุรกิจควรดำเนินการทดลองที่กล้าหาญเพื่อกำหนดความอยู่รอดในระยะยาวของผลิตภัณฑ์หรือกลยุทธ์ แทนที่จะดำเนินการอย่างระมัดระวังและลงทุนหลายปีในแนวทางที่ล้มเหลว...