تاب‌آوری خطا

تحمل‌پذیری اشکال ویژگی‌ای است که سامانه را قادر می‌سازد تا با به وجود آمدن خطا (یک یا چندین خطا) در اجزایش، به صورت صحیح به کار خود ادامه دهد. در این دسته از سامانه‌ها در صورت بروز خطا، در صورتی که کیفیت عملکرد کلی سامانه کاهش یابد، میزان این کاهش متناسب با میزان بزرگی شدت خطا است، در حالی که در طراحی‌های ساده‌تر، این خطاها می‌توانند به طور کلی موجب از کار افتادن سامانه شوند. توجه به موضوع تحمل خطا بعد از پیدایش سامانه‌های همیشه روشن و ایمن بحران اهمیت ویژه‌ای یافت. از ویژگی ادامه‌ی کارکرد سامانه‌ها با وجود کارکرد ناصحیح بعضی از بخش‌های آن‌ها، تحت عنوان شکست امن یاد می‌شود.
دلایل
دلایل نیاز به تحمل خطا
اتکا پذیری: کارکرد بلادرنگ سیستم بدون هیچ وقفه‌ای
دسترسی: دسترسی به اطلاعات در هر زمان
امنیت: جلوگیری از دسترسی‌های غیرمجاز
دلایل به وجود آمدن خطا
خطاهای نرم‌افزاری یا سخت‌افزاری
دسترسی غیرمجاز
طراحی مقاوم در برابر خطا
طراحی مقاوم در برابر خطا به طراحی‌ای گفته می‌شود که به سامانه این امکان را می‌دهد در مواجه با خطا در بعضی از بخش‌هایش، کارکرد خود را در همان سطح یا در سطحی پایین‌تر ادامه دهد و از کار افتادن کلی سامانه جلوگیری کند. این طراحی در بحث‌های مربوط به معماری رایانه به طور معمول به این برمیگردد که در صورت کاهش عملکرد رایانه، با کاهش توان عملیاتی یا افزایش زمان پاسخ دهی به کار خود ادامه دهد. این طراحی در هر دو حوزه‌ی سخت‌افزار و نرم‌افزار وجود دارد.
روش‌های تحمل‌پذیری اشکال
به طور عمومی تحمل اشکال می‌تواند با دو روش عمومی حاصل شود:
خود تثبیت
نسخه برداری
خود تثبیت
در این روش طراحان شرایطی را که ممکن است سامانه دچار خطا شود را تشخیص می‌دهند و سامانه را به گونه‌ای طراحی می‌کنند که از پس این شرایط بتواند برآید. در نهایت هدف اصلی طراحان در این روش رسیدن به یک سامانه‌ی خود تثبیت است تا هیچوقت دچار خطا نشود.
معایب: مشکلات اصلی این روش وقتی است که سلسله‌ای از خطاهای حیاتی در سامانه رخ دهد یا هزینه سامانه با ضریب اطمینان بالا خیلی زیاد شود.
نسخه برداری
در این روش سامانه به صورتی طراحی می‌شود که در صورت بروز هر گونه خطای حیاتی بتواند به حالت ایمن قبلی بازگردد. راهبرد این روش به این گونه است که از حالت قبلی خود نسخه دخیره دارد و در صورت لزوم می‌تواند آن را بازیابی کند. این روش معایب کمتری نسبت به روش خودتثبیت دارد.
روش‌های تحمل‌پذیری اشکال در نرم‌افزار
درخت رویکرد نرم‌افزار در رابطه با تحمل‌پذیری اشکال.روش‌های تحمل اشکال در حوزه نرم‌افزار به سه دسته کلی تقسیم می‌شود:
جلوگیری یا اجتناب از خطا
حذف خطا
پیش بینی خطا
تحمل اشکال
جلوگیری یا اجتناب از خطا
این روش رویکردی شبه خودتثبیت دارد و نرم‌افزار ی بدون خطا طراحی می‌شود.
حذف خطا
این رویکرد به این صورت است که بعد از طراحی نرم‌افزار، آزمون‌های زیادی بر روی آن انجام می‌شود تا نرم‌افزار نهایی بدون هرگونه خطا شود.
پیش بینی خطا
پیش بینی خطاهای احتمالی در نرم‌افزار و شرایط رخدادشان و خطرهای احتمالی ناشی از آن‌ها.
تحمل خطا
در این روش طراحان با این تفکر که خطا وجود دارد سامانه را به گونه‌ای که بتواند در این شرایط هم عملکرد صحیح داشته باشد، طراحی می‌کنند.
رویکرد تحمل‌پذیری اشکال
در زمان رخداد خطا دو راه حل وجود دارد:
درمان خطا: تلاش می‌کند که از بروز خطاها ی بعدی جلو گیری کند و قبل از خرابکاری و رسیدن به شرایط بحرانی، به اتمام برسد.
پردازش خطا: در این رویکرد سامانه دو راه دارد، یا به دنبال پاک کردن خطا است که بازیابی خطا نام دارد یا با استفاده از نسخه برداری این کار را انجام می‌دهد که جبران خطا نام دارد.
روش‌های تحمل‌پذیری اشکال در دیسک‌ها
RAID 1 نسخه‌ی دوم از هر داده را بر روی دیسک کمکی ذخیره می‌کند.
اصلی‌ترین روش در این حوزه به کارگیری آرایه چندگانه دیسک‌های مستقل (به انگلیسی: redundant array of independent disks ) یا RAID است.
از اصلی‌ترین اهداف این فناوری:
افزایش توان کارکرد از راه تکنیکی به نامdata striping(خواندن و نوشتن داده‌ها بر روی چند دیسک به صورت موازی)
افزایش توان تحمل در برابر اشکال (fault-tolerance) از راه نسخه برداری و تصحیح گرهای داده‌ها (Error correcting).