“ ความเสื่อมโทรมที่สง่างาม” คืออะไร?


11

ฉันได้ยินมามากมายเกี่ยวกับคำนี้

ตัวอย่างเช่น ,

 "An application server should gracefully degrage when it is under heavy load "

  "Graceful degradation of user interfaces.... "

คำดูเหมือนนามธรรมสำหรับฉัน ตัวอย่างที่เป็นรูปธรรมของความหมายคืออะไร?


5
บทความที่ดีเกี่ยวกับเรื่องcodinghorror.com/blog/2011/04/…
JF Dion

คำตอบ:


10

นี่คือตัวอย่างบางส่วน:

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

5

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

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

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

นอกจากนี้ยังมีรายการที่วิกิพีเดียที่เกี่ยวข้องกับระบบป้องกันความผิดพลาด


2

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

ตัวอย่างที่สำคัญอย่างหนึ่งคือ<img>แท็กที่มีaltคุณลักษณะที่มีประโยชน์สำหรับกรณีที่รูปภาพถูกปิดกั้นหรือปิดอยู่ตอนนี้สิ่งเหล่านี้จะให้บริบทที่มีความหมายสำหรับรูปภาพ (แน่นอนเฉพาะเมื่อเราระบุ)

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

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


1

หมายความว่าเมื่ออินพุตและสถานะเกินขีด จำกัด การออกแบบเอาต์พุตยังคงสมเหตุสมผลและน่าเชื่อถือที่สุด

หากเป็นเซิร์ฟเวอร์ที่ออกแบบมาเพื่อจัดการการเชื่อมต่อพร้อมกัน 100 รายการมันจะไม่ผิดพลาดหรือเริ่มส่งคืนผลลัพธ์ที่บ้าคลั่งที่ 101 หรือ 150 การเชื่อมต่อ - จะช้าลงหรืออาจลดลงเล็กน้อยการเชื่อมต่อ แต่ส่วนใหญ่ยังคงทำงานต่อไป ถ้ามันเป็นฐานข้อมูลที่ออกแบบมาเพื่อจัดการกับ 1 พันล้านรายการมันจะไม่ทำให้สถานะที่ใช้ไม่ได้อยู่ที่ 1.01 พันล้านช้าลง


1

หากคุณไม่มีระบบกราฟิก (เช่นไม่มีเซิร์ฟเวอร์ X11 ที่ทำงาน) โปรแกรมของคุณควรมี CLI เป็นอย่างน้อยเช่น ncurses

vi มีโหมด dumb ซึ่งทำงานเหมือน ex หากเทอร์มินัลมีคุณสมบัติน้อยเกินไป


1

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

จากนั้นคุณควรจะให้ฟังก์ชั่นพื้นฐานบางอย่างกับ HTML เท่านั้นหรืออย่างน้อยข้อความว่าทำไมเว็บไซต์ไม่ทำงานตามที่คาดไว้

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