Системийн найдвартай байдал

Саяхан блоггэр.ком дээр алдаа гарсан байсныг зарим хүмүүс анзаарсан байх. Пост оруулах хуудасны оронд HTTP 500 дугаар алдаа гарсан харагдсан. Мөн эртээрхэн Яхоо мэсэнжэр 2-3 цаг орчим зогссон. Гэхдээ энэ явдлаа урьдчилан зарласан ба, системийн шинэчлэлтийн ажил байсан гэж тайлбарласан. Илүү ойрхон жишээ гэвэл Мобикомын шинэ жилийн түгжрэл, -гээд… Эдгээрийг дурддагийн учир бол Системийн найдвартай байдалын тухай авч үзэх гэсэн юм. Чанартай сайн програм хангамж нь алдаагүй зөв ажиллахаас гадна, осол доголдлын үед яс чанараа харуулдаг билээ.

Найдвартай байдал гэдэг нь : Систем өөрийн үүргийг өгөгдсөн нөхцөл байдалд, тодорхой хугацааны туршид доголдолгүйгээр гүйцэтгэж чадах магадлал юм. Ер нь 100% найдвартай систем байх боломжгүй. Гэхдээ маш өндөр түвшинд найдвартай байдлыг хангасан системүүд байж болох бөгөөд, тэдгээрийн зэрэглэл нь таван ес(99.999%-ийн найдвартай), зургаан ес(99.9999%-ийн найдвартай) гэх мэт тоогоор илэрхийлэгддэг.

Тухайн системийг найдвартай эсэхийг шинжлэхэд юун түрүүнд системийн хаа нэг хэсэгт доголдол гарснаар систем бүхэлдээ зогсож болох газруудыг авч үздэг. Өөрөөр хэлбэл нэг цэгийн доголдол буюу single point of failure -уудыг судлана. Ингээд тухайн хэсэг доголдох эх шалтгаанууд юу байж болхыг судлаж, эдгээр шалтгаануудыг аль болох цөөлөх хэрэгтэй. Бүх шалтгааныг урьдчилан сэргийлэх боломжгүй учраас, тухайн хэсгийн эрсдэлийг дизайны түвшинд багасгах аргыг мөн хэрэглэдэг. Жишээ нь сүлжээний картыг нэмж суурилуулах, сэрвэрээ давхарлаж ажиллуулах гэх мэт шийдэл байж болно. Аль нэг сүлжээний карт/сэрвэр ажиллахаа байлаа гэхэд, бусад нь идэвхжиж, системийн хэвийн ажиллагаа үргэлжилсээр байна гэсэн үг.

Системийн найдвартай ажиллагааны түвшинг MTBF(Mean Time Between Failure) буюу алдаа хоорондын хугацаа гэдэг үзүүлэлтээр илэрхийлэх нь элбэг. Гэхдээ иймэрхүү үзүүлэлт бол магадлал бодоод гаргасан тоо л юм, харин системийн найдвартай ажиллагааг бодитоор үнэмжинэ гэдэг өөрөө том асуудал байдаг. Сүлжээний холболтын найдвартай эсэхийг бол нэг картаа сүлжээнээс салгаад үзчихэж болно. Тэгвэл, гурван жил тасралтгүй ажиллах ёстой системийн найдвартай байдлыг яаж үнэмжших вэ? Гурван жил ажиллуулж турших уу? Сансрын хөлгийн найдвартай ажиллах эсэхийг сансарт хөөргөж тестлэнэ гэвэл асар их зардал гарна гэх мэт.. Иймэрхүү тохиолдолд тестийг дэд хэсгүүдээр нь маш нарийн хийх ч юмуу, эсвэл хиймэл орчинд туршаад бодит ертөнцөд гаргах нь бий. Гэтэл маш нарийн тооцоолж хийсэн ч, туршилт хийлгүй хөөргөнө гэдэг аз туршсан хэрэг болно - зургаан естэй систем ч санаанд ороогүй, тооцоологдоогүй үлдсэн жижиг зүйлээс болж осолдсон тохиолдол байдаг.

Системийн Найдвартай байдал гэдэг нэгэн бичлэгээр тоймлож барахгүй сонирхолтой, өргөн хүрээтэй сэдэв тул ингээд өндөрлөж, эх сурвалжуудыг тоймлон үлдээе.

Эх сурвалж:

  • Reliability engineering. Найдвартай байдлын инженерчлэлийн тухай Википедиа тайлбар дээр тун ойлгомжтой бичсэн байна.
  • 99.999 or Five Nines Uptime. Таван ес нь бодит байдал дээр хангалттай байдаг юм бол? Системийн ажиллагаа бүтэн жилийн хугацаанд хэдхэн минут тасалдахад л хэрэглэгчийн итгэл 99 хувиар унах магадлалтай гэнэ.
  • Byzantine fault tolerance. Баталгаагүй холбооны шугамыг ашиглаж баттай мэдээ солилцох тухай. Энэ бол эртний Византиний хоёр армийн тухай домгоос гаралтай бодлого юм. Хоёр арми нэгэн хотыг зэрэг дайрах болсон боловч, тэдгээр хоёр армийн хооронд орших хөндийг дайснууд эзэлсэн байгаа. Зэрэг дайрахын тулд аль нэг тал нь хэдийд дайрахаа элч илгээж нөгөө армидаа хэлэх хэрэгтэй. Гэхдээ мэдээг нөгөө арми үнэхээр хүлээж авсан гэдэгт итгэлтэй болж байж л дайрах нь мэдээж. Гэтэл нөгөө арми нь хүлээж авлаа гэдэг хариугаа мөн очсон гэдэгт итгэлтэй болж байж л дайрах хэрэгтэй болно. Гэх мэтээр төгсгөлгүй үргэлжилэх юм. Энэ бодлогод ямар шийдлүүд байж болох вэ?
  • Software Metrics and Reliability. Програм хангамжын найдвартай байдлыг ямар үзүүлэлтээр хэмждэг тухай. Хатуумжын найдвартай байдал нь, ашиглалтын хугацааны сүүл хэсэгт муудаж эхэлдэг бол, програм хангамжынх хугацаа өнгөрөх тусам сайжирдаг байна.
  • Why Software Is Bad and What We Can Do to Fix It. Програм хангамжын найдвартай байдал хэзээ ч 100% -д хүрэхгүй гэж дээр дурдсан билээ. Тэгвэл яагаад ийм байна вэ? Үүний учир шалтгаан бол бидний програм хангамж маань алгоритм дээр суурилсан, асинхрон байдагт юм байна. Бодит байдал дээр зэрэгцэн өрнөж байгаа процессуудыг цуваа байдлаар буюу алгоритмчлах аргаар загварчилдаг билээ. Харин хүний тархи, электрон хэлхээ зэрэг шиг асинхрон, үзэгдэл дээр тулгуурласан хэлбэрээр загварчилж чадвал хичнээн том системийг ч 100% найдвартай хийх боломжтой гэнэ. Тэгвэл үүнийг хэрхэн хэрэгжүүлэх вэ? Энэхүү COSA төсөлийн зорилго нь энэ юм.