เคล็ดลับการออกแบบซอร์ฟแวร์เพื่อความยืดหยุ่น (Resiliency Design)
บทความนี้จะสำรวจและอธิบายเรื่องการออกแบบซอฟต์แวร์เพื่อความยืดหยุ่นหรือที่เรียกว่า Resiliency Design ซึ่งเป็นแนวคิดที่สำคัญอย่างมากสำหรับการออกแบบระบบสำคัญๆ โดยเฉพาะอย่างยิ่งสำหรับบริษัท Enterprise ที่ต้องการระบบที่สามารถที่เสถียรและพร้อมรับมือกับสถานการณ์ที่อาจเปลี่ยนแปลงหรือไม่แน่นอนที่อาจจะส่งผลกับระบบได้ในอนาคต
ในบทความนี้ผมได้อ้างอิงเนื้อหาบางส่วนจาก Resiliency white-paper ของบริษัท Microsoft นะครับ
Software Resiliency คืออะไร
“Resiliency" เป็นภาษาไทยแบบตรงตัวคือ "ความยืดหยุ่น" ซึ่งในที่นี้หมายถึงความสามารถในการรับมือกับสถานการณ์ที่ไม่ปกติที่อาจเกิดขึ้นกับซอฟต์แวร์ในอนาคต อย่างเช่นการเกิดข้อผิดพลาดของฮาร์ดแวร์ การทำผิดพลาดของมนุษย์ในการจัดการระบบ (human error) การเกิดภัยภิบัติ เป็นต้น ซึ่งความยืดหยุ่นนี้จะช่วยให้ระบบสามารถฟื้นตัวและทำงานต่อไปได้โดยไม่ต้องติดขัดหรือสูญเสียประสิทธิภาพ หรือทำให้ผู้ใช้งานสัมพันธ์กับซอฟต์แวร์ได้อย่างต่อเนื่อง ซึ่งเป็นสิ่งสำคัญในการออกแบบระบบซอฟต์แวร์ที่มีความเสถียรและมีประสิทธิภาพในระยะยาว
ก่อนที่เราจะออกแบบซอฟต์แวร์ มีหลักสำคัญที่เราควรคำนึงถึง 3 ประการดังนี้:
- การป้องกันหรือลดปริมาณข้อผิดพลาดของซอร์แวร์ (Avoid the failure)
- การเฝ้าระวังและตรวจจับข้อผิดพลาด (Monitor and detect the failure)
- การตอบสนองต่อความผิดพลาดที่เกิดขึ้นแล้ว (Response to the failure)
กำหนดความยืนหยุ่นที่ระบบต้องการ (Resiliency requirements)
ก่อนที่เราจะเริ่มออกแบบซอฟต์แวร์ เราต้องเข้าใจและกำหนด Resiliency requirements (ความต้องการทางความยืดหยุ่น) ที่จะช่วยให้เรากำหนดค่าใช้จ่ายและทรัพยากรที่เกี่ยวข้องได้อย่างถูกต้อง
ซอฟต์แวร์แต่ละประเภทมีความต้องการความยืดหยุ่นแตกต่างกันไป ตัวอย่างเช่น ระบบการเรียนการสอนอาจต้องการความเสถียรในเวลาทำการและสามารถปิดตัวได้หลังจากเลิกใช้งาน ในทางกลับกัน ระบบการเงินอาจต้องการความเสถียรตลอด 24 ชั่วโมง เพื่อรองรับการทำธุรกรรมและการบริการให้กับลูกค้าตลอดเวลา การเข้าใจความต้องการทางความยืดหยุ่นเหล่านี้เป็นสิ่งสำคัญในการออกแบบซอฟต์แวร์เพื่อรองรับความยืดหยุ่นที่เหมาะสมซึ่งจะช่วยให้เรากำหนดค่าใช้จ่ายและทรัพยากรที่เกี่ยวข้องได้อย่างถูกต้อง
โดยทั่วไป ความต้องการความยืดหยุ่น (resiliency requirements) มักมีแนวคิดหลักที่มาจากสองประการหลัก คือ Availability (ความพร้อมใช้งาน) และ Metrics (ตัวชี้วัด)
ความพร้อมใช้งาน (Availability requirements)
Availability คือความสามารถของระบบซอฟต์แวร์ที่ต้องการทำงานได้ตลอดเวลาหรือในระยะเวลาที่กำหนด ความพร้อมใช้งานสูงสุดเพื่อให้ผู้ใช้สามารถเข้าถึงและใช้งานระบบได้ตลอดเวลาโดยไม่มีการขัดข้องหรือต้องรอเวลานาน หลักแนวคิดในการกำหนดความพร้อมในการใช้งานแบ่งออกได้ดังนี้
- การแจกแจงการทำงานของระบบ (Decompose workload): การแยกแยะระบบเป็นส่วนๆ จะช่วยให้เราสามารถกำหนดความต้องการความยืดหยุ่น (resiliency requirements) ได้อย่างง่ายดายมากขึ้น ตัวอย่างเช่นในระบบการทำงานของธนาคาร อาจแบ่งออกเป็นระบบฝากเงิน ระบบถอนเงิน และระบบการโอนเงิน เป็นต้น แต่ละระบบนี้อาจมีความต้องการใช้งานที่แตกต่างกัน แม้ว่าจะอยู่ในซอฟต์แวร์เดียวกัน
- การกำหนดข้อตกลงระดับการให้บริการ (Service Level Agreement - SLA): ตัวชี้วัด SLA จะกำหนดเป็นเปอร์เซ็นต์ อาทิเช่น SLA 99.99% หมายความว่าระบบจะไม่มีข้อผิดพลาดอย่างน้อย 99.95% ของเวลาที่กำหนด หรือกล่าวอีกนัยหนึ่งคือบริการจะไม่สามารถใช้งานได้ไม่เกิน 0.05% ของเวลาที่กำหนด ตัวอย่างเช่น ในหนึ่งปีมี 8,760 ชั่วโมง นั่นหมายความว่าระบบจะอณุญาตระบบให้มีข้อผิดพลาดได้ 8,760 x 0.05 = 4.38 ชั่วโมงต่อปี
ตัวชี้วัด (Metrics requirements)
Metrics เป็นตัวชี้วัดที่ใช้ในการประเมินและติดตามความสามารถของระบบซอฟต์แวร์ในเรื่องของความยืดหยุ่น ตัวชี้วัดจะกำหนดโดยระบบหรือองค์กร เช่น ระยะเวลาการกู้คืนหากเกิดข้อผิดพลาด, ระยะเวลาในการซ่อมแซมหรือปรับปรุงระบบ, หรือระดับการตอบสนองต่อความผิดปกติ ซึ่งตัวชี้วัดของ resiliency แบ่งออกได้เป็นดังนี้
- ระยะเวลาในการกู้คืนระบบ (RTO - Recovery Time Objective): ตัวชี้วัดนี้จะกำหนดระยะเวลา ที่มากที่สุดที่จะใช้ในการกู้คืนระบบเมื่อมีปัญหาเกิดขึ้น ระยะเวลาในที่นี้รวมไปถึงการดำเนินงานร่วมกันของผู้ดูแลระบบ (มนุษย์) และระยะเวลาที่ตัวระบบเองใช้ในการกู้คืนคนเองกลับสถานะปกติ เช่นการ reboot server, การกู้คืนข้อมูลจาก backup โดยทั่วไปแล้วระยะเวลากู้คืนจะอยู่ที่การดำเนินงานของผู้ดูแลระบบ (มนุษย์) ดังนั้นเราควรออกแบบระบบให้มีกระบวนการกู้คืนโดยอัติโนมัติให้มากที่สุด
- ปริมาณข้อมูลที่สามารถกู้คืนได้ (RPO - Recovery Point Objective): มาตรวัดนี้จะเป็นการกำหนดปริมาณข้อมูลที่มากที่สุดที่จะสามารถยอมให้สูญเสียได้ ตัวอย่างเช่น ถ้าเรามีระบบการสำรองข้อมูล (backup) ที่จะรันทุกๆหนึ่งชั่วโมง ค่า RTO ของเราคือ 1 ชั่วโมงเนื่องจากในขณะที่เกิดปัญหา ข้อมูลที่สำรองไว้อาจจะเป็นของหนึ่งขั่วโมงที่แล้ว
- ค่าเฉลี่ยที่ใช้ในการกู้คือระบบ (MTTR - Mean Time To Recover): คือค่าเวลาเฉลี่ยที่ใช้ในการกู้คืนระบบโดยรวม ตัวอย่างเช่น หากในหนึ่งปีมีการล่มของระบบจำนวน 10 ครั้งโดยคิดเป็นค่าการกู้คืนรวมทั้งหมด 4 ชั่วโมง (240 นาที) ค่าเฉลี่ยที่ใช้ในการกู้คืนระบบคือ 240/10 ซึ่งก็คือ 24 นาทีนั่นเอง
- ค่าเฉลี่ยระหว่างการล่มของระบบ (MTBF - Mean Time Between Failure): ค่านี้จะเป็นการชี้วัดว่าระบบมีความน่าเชื่อถือมากน้อยแค่ไหน ยิ่งตัวเลขมากยิ่งแสดงถึงความน่าเชื่อถือได้มาก ตัวอย่างเช่นหากภายในหนึ่งวันมีการล่มของระบบ 2 ครั้งโดยนับเวลาที่ระบบใช้การไม่ได้เป็น 4 ชั่วโมง นั่นแสดงว่าระยะเวลาที่ระบบใช้ได้ในวันนั้นมีจำนวน 20 ชั่วโมง MTBF ของระบบจึงเป็น 20/10 = 10 ชั่วโมง
กลยุทธ์การพัฒนาซอร์ฟแวร์เพื่อรองรับตามลักษณะของข้อผิดพลาด (Failure types)
หลังจากที่ได้ทำความเข้าใจการกำหนด requirements ของระบบไปแล้ว ขั้นตอนนี้จะเป็นการพัฒนาระบบเพื่อที่จะรับมือกับความผิดพลาดชนิดต่างๆที่อาจเกิดขึ้นได้ โดยเราสามารถแจกแจงความผิดพลาดของระบบได้เป็นข้อย่อยๆดังนี้
Hardware failure - ความผิดพลาดที่เกิดจากฮาร์ดแวร์
ความผิดพลาดชนิดนี้เกิดจากความเสียหายของอุปกรณ์ย่อยๆในระบบ ตัวอย่างเช่น ฮาร์ดดิสเสียหาย สายเชื่อมต่อสัญญาณขาดหาย
วิธีป้องกัน: ความผิดพลาดของฮาร์ดแวร์สามารถป้องกันได้ด้วยการสร้างระบบซ้ำซ้อน (redundancy) ของฮาร์ดแวร์ที่อยู่ต่างสถานที่กัน ตัวอย่างเช่นใช้ฮาร์ดิสสองตัวที่อยู่คนละเซิร์ฟเวอร์ หรือเพิ่มจำนวนทางเข้าออกของระบบเน็ตเวิร์ค
Data center failure - ความผิดพลาดที่เกิดจากศูนย์ข้อมูล
ความผิดพลาดชนิดนี้เกิดจากการศูนย์ข้อมูลล่ม ตัวอย่างเช่น เกิดไฟฟ้าดับ หรือเกิดอุบัติเหตุกับศูนย์ข้อมูลนั้นๆ
วิธีป้องกัน ความผิดพลาดชนิดนี้ป้องกันได้ด้วยการสร้างระบบซ้ำซ้อนระหว่างศูนย์ข้อมูลหรือในทาง cloud computing จะเรียกว่า available zone นั้นเอง ตัวอย่างเช่นหากเราแบ่งโซนเป็นภาคกลาง ศูนย์ข้อมูลอาจจะกระจายอยู่ในจังหวัดที่ห่างไกลกันเช่น กรุงเทพ สมุทรปราการ นนทบุรี
Regional failure - ความผิดพลาดที่เกิดขึ้นระดับภูมิภาค
ความผิดพลาดชนิดนี้เป็นความผิดพลาดที่เกิดในวงกว้างที่สุดเป็นระดับภูมิภาค ความผิดพลาดชนิดนี้อาจเกิดจากภัยพิบัติหรือสงครามที่ทำให้ศูนย์ข้อมูลที่อยู่ในบริเวณนั้นเสียหายได้ทั้งหมด
วิธีป้องกัน ความผิดพลาดชนิดนี้ป้องกันด้วยการสร้างระบบซ้ำซ้อนระหว่างภูมิภาค เช่นการ deploy ระบบของเราไปในประเทศที่อยู่ห่างกัน
Transmission failure - ความผิดพลาดที่เกิดจากการส่งข้อมูล
ความผิดพลาดชนิดนี้เกิดได้จากการที่ระบบเน็ตเวิร์คส่งข้อมูลได้ไม่เสถียร การส่งข้อมูลอาจมีการทำได้ไม่ต่อเนื่อง เนื่องจากมีการติดดับเป็นระยะ
วิธีป้องกัน เราสามารถป้องกันข้อผิดพลาดชนิดนี้ด้วยการออกแบบระบบให้มีการส่งซ้ำ (retry logic) ตัวอย่างเช่นฝั่ง client ควรจะมีการตรวจสอบว่าการส่งข้อมูลสำเร็จหรือไม่ หากส่งไม่สำเร็จจะต้องมีการทำซ้ำในระยะเวลาที่กำหนด
Dependency failure - ความผิดพลาดที่เกิดจากระบบภายนอก
ความผิดพลาดชนิดนี้เกิดจากระบบภายนอกที่ซอร์ฟแวร์ทำงานด้วยซึ่งอยู่เหนือการควบคุมของเรา ตัวอย่างเช่น ซอร์ฟแวร์ของเราต้องทำการติดต่อกับ Google map เพื่อนำข้อมูลมาแสดงให้ user ทราบ Google map คือระบบภายนอกที่จะส่งผลกับซอร์ฟแวร์เราหากเกิดการล่มหรือพังขึ้นมา
วิธีแก้ไข ความผิดพลาดชนิดนี้เป็นความผิดพลาดที่อยู่นอกเหนือการควบคุมทำให้เราอาจจะวางแผนในการป้องกันได้ยาก อย่างไรก็ตามเราสามารถวางแผนในการแก้ไขได้ด้วยการสำรองข้อมูล หรือออกแบบระบบให้สามารถทำการหยุดสื่อสารกับระบบภายนอกเป็นการชั่วคราวได้ ตัวอย่างเช่น เราอาจจะเก็บข้อมูลที่ต้องทำการติดต่อกับระบบภายนอกไว้ในฐานข้อมูลและนำมาดำเนินการใหม่เหมือนระบบภายนอกกลับเข้าสู่สภาวะปกติ
อีกกลยุทธ์ที่ใช้เพื่อรับมือกับความผิดพลาดของระบบภายนอกคือการออกแบบให้ยอมรับความผิดพลาดนั้นๆ (Degrade gracefully) ตัวอย่างเช่นแทนที่จะส่งข้อมูลเปล่าๆกลับไปให้ user ให้ส่งข้อมูลกลับไปบอกว่าระบบมีปัญหาและกำลังทำการแก้ไขแทน
Heavy load failure - ความผิดพลาดที่เกิดจากปริมาณข้อมูลที่มหาศาล
ความผิดพลาดชนิดนี้เกิดจากการที่ระบบต้องรองรับข้อมูลมหาศาลในเวลาพร้อมกัน ทำให้เกิดอาการ over load และทำให้ระบบพังลงได้
วิธีป้องกัน heavy load แก้ไขได้ด้วยการกระจายโหลดไปยังระบบย่อยๆให้ช่วยกันทำงานโดยใช้ load balancer เขามาช่วยกระจาย load เหล่านี้ การใช้ auto-scaling ในระบบ cloud หรือระบบ container ก็เป็นอีกวิธีที่มีประสิทธิภาพในการรับมือกับข้อผิดพลาดเช่นนี้
Accidental deletion - ความผิดพลาดที่เกิดจากการทำลายข้อมูลโดยไม่ได้ตั้งใจ
ความผิดพลาดชนิดนี้เกิดขึ้นได้จากข้อผิดพลาดของมนุษย์ (human error) หรือการผิดพลาดของการจัดเก็บข้อมูลของระบบที่ทำให้ข้อมูลเสียหาย (data corruption)
วิธีป้องกัน วิธีป้องกันข้อผิดพลาดเช่นนี้ทำได้โดยการสำรองข้อมูลอย่างสม่ำเสมอ
Deployment failure - ความผิดพลาดที่เกิดจากขั้นตอนการติดตั้งซอร์ฟแวร์
ข้อผิดพลาดชนิดนี้เกิดขึ้นในขั้นตอนการติดตั้งหรืออัปเดทซอร์ฟแวร์ (Deployment process) ซึ่งในหลายๆครั้งอาจก่อให้เกิดเหตุการณ์ที่ไม่คาดคิดได้
การป้องกันข้อผิดพลาดในขั้นตอนนี้ทำได้หลายวิธีดังนี้
- วางแผนการย้อนกลับ (rollback plan): วิธีนี้เป็นการวางแผนในการดำเนินการให้ซอร์ฟแวร์ย้อนกลับไปยังเวอร์ชั่นเดิมที่ไม่มีปัญหา
- การติดตั้งแบบ ฟ้า-เขียว (blue-green deployment): วิธีการนี้จะเป็นการติดตั้งระบบใหม่เข้าไปก่อนและทำการยืนยันว่าระบบติดตั้งเสร็จสมบูรณ์ หลังจากนั้นจึงค่อยเปลี่ยน traffic ไปยังระบบใหม่และลบระบบเก่าทิ้ง
- การติดตั้งแบบคานารี่ (canary deployment): วิธีการนี้จะคล้ายๆกับแบบ blue-green โดยจะค่อยปล่อย traffic ให้ไหลเข้าไปในระบบใหม่และค่อยๆตรวจสอบเพิ่มปริมาณ traffic เข้าไปในระบบใหม่จนเสร็จสมบูรณ์
- ใช้การเขียนโค้ดในการติดตั้ง (IaC - Infrastructure as a code): วิธีการนี้จะเป็นการลดปริมาณการทำมือ (manual) และทำให้การติดตั้งหรือเปลี่ยนแปลงโครงสร้างของระบบเกิดข้อผิดพลาดน้อยที่สุด การใช้ IaC ยังทำให้การ rollback ระบบง่ายขึ้นอีกด้วย ตัวอย่างเครื่องมือ IaC ที่นิยมใช้ในปัจจุบันคือ Terraform, Ansible playbook
- ใช้ระบบ CICD (Continuous deployment continuous integration): CICD เป็นระบบที่ช่วยลดขั้นตอนการทำซ้ำในการติดตั้งซอร์ฟแวร์ เครื่องมือจะตรวจสอบการเปลี่ยนแปลงและดำเนินขั้นตอนการ deploy โดยอัติโนมัติ เช่น การรันเทส ดาวโหลดทรัพยากรณ์ และ build binary และทำการ deploy
- ไม่ใช้การเปลี่ยนแปลงโครงสร้างในการติดตั้ง (Immutable infrastructure): การติดตั้งชนิดนี้เป็นการติดตั้งของใหม่เข้าไปแทนที่ของเก่าเลย ไม่ใช่เป็นการไปแก้ไขของเก่า ตัวอย่างเช่นการ deploy application เข้าไปใน container ลูกใหม่แทนที่จะเข้าไปแก้ไขของเก่าที่รันอยู่แล้ว เนื่องจากการแก้ไขของเก่าอาจสร้างความผิดพลาดได้ง่ายกว่า
การวิเคราะห์โหมดการล้มเหลว (Failure Mode Analysis - FMA)
เทคนิคนี้เป็นกระบวนการที่ใช้วิเคราะห์ศึกษาโครงสร้างและกระบวนการทำงานของระบบเพื่อระบุและวิเคราะห์ความเป็นไปได้ของสิ่งที่จะก่อให้เกิดความล้มเหลวต่อระบบ รวมถึงความเสียหายและผลกระทบที่จะเกิดขึ้น
ในการวิเคราะห์โหมดการล้มเหลวของระบบ เราควรจะตอบคำถามสำคัญดังนี้ได้
- ระบบจะสามารถตรวจจับความล้มเหลวชนิดนั้นๆได้อย่างไร
- ระบบจะตอบสนองกับความล้มเหลวอย่างไร
- ระบบจะทำการบันทึกและเฝ้าระวังความล้มเหลวชนิดนั้นได้อย่างไร
ขั้นตอนในการทำ FMA
- แยกส่วนประกอบระบบของออกเป็นส่วนสำคัญๆต่าง ทั้งส่วนที่เป็นของภายในระบบและภายนอกระบบ
- เมื่อแยกระบบออกมาเป็นส่วนต่างๆได้แล้ว ให้กำหนดโหมดของข้อผิดพลาดที่สามารถเกิดขึ้นได้ในส่วนนั้นๆ เช่น โหมดการอ่านข้อมูล โหมดการเขียนข้อมูล
- เมื่อได้แยกระบบและโหมดต่างๆแล้ว ให้ประเมิณความเสี่ยง (risk) ที่ต่อโหมดนั้นๆ
- ความน่าจะเป็นที่จะเกิดข้อผิดพลาดนั้น (ใช้วิธีประมาณเอาได้)
- ความเสียหายที่น่าจะเกิดขึ้น เช่น ความเสียหายต่อข้อมูล ค่าใช้จ่าย ความเสียหายต่อธุรกิจ
- ในแต่ละโหมดวางแผนและกำหนดว่า เราจะสามารถ “ตรวจจับ” “ตอบสนอง” และ “กู้คืน” ระบบกลับมาได้อย่างไร
การทดสอบสถานการณ์ความผิดพลาด (Fault Injection Testing)
เราควรจะทดสอบสถานการณ์ข้อผิดพลาดก่อนที่จะเกิดขึ้นจริงเนื่องจากจะทำให้เรามั่นใจได้ว่าแผนที่เราวางไว้ เป็นไปตามแผน ซึ่งการทดสอบความผิดพลาดทำได้ 2 วิธีดังนี้
- กระตุ้นสถานการณ์ข้อผิดพลาด (Fault Triggering): เราสามารถกระตุ้นเหตุการณ์ที่เป็นข้อผิดพลาดเพื่อทดสอบระบบในการตรวจจับและการกู้คืน ตัวอย่างเช่นการปิดเซิร์ฟเวอร์ การทำให้ใบรับรองหมดอายุ หรือการตัดการเชื่อมต่อเครือข่าย
- จำลองสถานการณ์ (Simulation): เราสามารถทำการจำลองสถานการณ์ต่างๆ เพื่อทดสอบระบบ เช่น การทดสอบโหลดหน่วยประมวลผล (Load testing) หรือการจำลองสถานการณ์การเกิดภัยพิบัติ (Disaster recovery drill)
การเฝ้าระวังและตรวจจับข้อผิดพลาด (Monitor and detection)
ในขั้นตอนนี้เราต้องมาทำการวางกลยุทธ์ว่าเราจะสามารถตรวจจับข้อผิดพลาดของระบบให้ทันท่วงทีได้อย่างไรซึ่งขั้นตอนการเก็บข้อมูลเพื่อทำการเฝ้าระวังจะเกิดเป็นลำดับดังนี้
- การกำหนดแหล่งข้อมูล (Instrumentation): เราต้องกำหนดแหล่งที่มาของข้อมูลที่เราต้องการเฝ้าระวัง เช่น บันทึกแอปพลิเคชัน (application logs), ข้อมูลเกี่ยวกับประสิทธิภาพของระบบปฏิบัติการ (OS), ทรัพยากรการตรวจสอบ Azure, สถานะและการสมัครสมาชิกของ Azure, และข้อมูลเชิงพื้นที่ Azure เป็นต้น
- ขั้นตอนการจัดเก็บข้อมูลและบันทึก (Collection and Storage): เนื่องจากข้อมูลที่เราได้มาจากแหล่งต่าง ๆ อาจมีรูปแบบที่แตกต่างกัน เราจึงต้องทำการแปลงรูปแบบข้อมูลและจัดเก็บข้อมูลให้เรียบร้อยในระบบฐานข้อมูล
- ขั้นตอนการวิเคราะห์และหาข้อผิดพลาด (Analysis and Diagnosis): ในขั้นตอนนี้ เราใช้คิวรีเพื่อค้นหาและวิเคราะห์ข้อมูลที่เราต้องการ เช่นการตรวจสอบเงื่อนไขหรือการวิเคราะห์ข้อมูลเพื่อค้นหาความผิดปกติ
- ขั้นตอนการจัดแสดงและการแจ้งเตือน (Visualization and Alert): ในขั้นตอนสุดท้าย เราสร้างรายงานและสร้างระบบแจ้งเตือนเพื่อแสดงผลข้อมูลและแจ้งเตือนผู้ใช้เมื่อเกิดเหตุการณ์ที่สำคัญ การจัดแสดงข้อมูลเหล่านี้ช่วยให้เราเข้าใจข้อมูลและตอบสนองต่อข้อผิดพลาดหรือความผิดปกติในระบบอย่างมีประสิทธิภาพ
สรุป
ลองจินตนาการว่าวิศวกรโครงทำการออกแบบสะพานที่ไม่สามารถรับมือกับน้ำท่วม ลมพัด หรือแผ่นดินไหวได้เลย ผลงานของวิศวกรคนนั้นก็จะก่อให้เกิดอันตรายแก่ผู้ใช้และไม่สามารถเรียกคนผู้นั้นว่าเป็นวิศวกรที่ดีได้
Software Engineer ก็เช่นกัน หน้าที่ของ Software Engineer ไม่ได้มีแค่การสร้าง application หรือ software ให้เสร็จไปเท่านั้น แต่การคิดและการมี mindset ในการออกแบบเพื่อความยืดหยุ่นหรือ resiliency design นี้เป็นคุณสมบัติที่สำคัญเป็นอย่างมาก ในยุคที่เทคโนโลยีเข้าสู่ทุกส่วนของชีวิตเรา การออกแบบซอฟต์แวร์ที่ยั่งยืนและปลอดภัยเป็นสิ่งสำคัญที่ทำให้ผู้ใช้เกิดความมั่นใจและความสบายในการใช้งาน
สอบถาม ติชม เสนอแนะ ได้ที่ช่อง comment ด้านล่างเลยครับ