2.20 Ushughulikiaji wa makosa na mifumo ya ustahimilivu
Muhtasari na msukumo
Kila programu unayoandika itashindwa. Diski inajaa, mtandao unakatika, huduma inaisha muda, mpigaji anapitisha takataka, utegemezi unarudisha kitu ambacho nyaraka hazikuwahi kutaja. Swali si kama kushindwa kunatokea; ni kama msimbo wako unakutana na kushindwa huko ukiwa na mpango au ukiwa na mshangao. Ushughulikiaji wa makosa ni ufundi wa kuamua, mstari kwa mstari na kazi kwa kazi, msimbo wako unafanya nini dunia inaposhindwa kushirikiana. Ndicho sehemu isiyo na mvuto zaidi ya ujenzi na ile inayoamua, kuliko kipengele chochote, kama watu wanauamini mfumo wako.
Sura hii inahusu ustahimilivu katika ngazi ya msimbo na kipengele: chaguo ndani ya kazi, moduli, au API. Inakamilisha sura ya 3.5, inayoshughulikia ustahimilivu katika ngazi ya mfumo (kusawazisha mzigo, kunakili, kubadilisha kuvuka huduma). Sura ya 3.5 inaweka jukwaa zima limesimama eneo likizima; sura hii inazuia ombi moja kuharibu data yako au kutoweka bila alama. Hizi mbili huimarishana. Kivunja mzunguko katika usanifu wako kina maana kidogo ikiwa msimbo nyuma yake unameza vighairi, na kazi ya kujilinda haiwezi kukuokoa ikiwa mfumo unaoizunguka hauna ziada. Sura hii pia inajengwa juu ya sura ya 2.9 (ujenzi wa programu), ambapo kushughulikia makosa kulikuwa nidhamu moja kati ya nyingi; hapa inakuwa mada nzima.
Kwa timu kubwa, uthabiti ndio zawadi. Mamia ya wahandisi wanaposhughulikia makosa kwa njia mamia tofauti, kila huduma inakuwa fumbo na kila tukio uchimbaji wa kiakiolojia. Katika mazingira ya mashirika makubwa, kutokuwa na uthabiti huko kunaongeza gharama ya kila ukaguzi na kila uunganishaji. Katika serikali na mifumo mingine yenye dau kubwa, dau ni kali zaidi: usahihi, kushindwa kwa usalama, na njia wazi ya ukaguzi si vipengele unavyoviongeza baadaye bali ni sifa ambazo mfumo lazima uwe nazo kuanzia commit ya kwanza. Mfumo wa manufaa unaohesabu vibaya kimyakimya, au mfumo wa rekodi unaopoteza kushindwa bila kukiandika, si wenye hitilafu tu. Hauaminiki kwa njia inayomomonyoa taasisi nyuma yake.
Kanuni kuu
- Tofautisha kasoro, makosa, na kushindwa, na ushughulikie kila kimoja katika safu sahihi.
- Chagua kushindwa-haraka au kushindwa-salama kwa makusudi, kwa kila muktadha, kamwe si kwa ajali.
- Fanya mkataba wa ushughulikiaji wa makosa wa kila kazi na API uwe wazi na wa uaminifu.
- Thibitisha kwenye mipaka; amini ndani yake; jilinde bila wasiwasi kupita kiasi.
- Kamwe usimeze kosa kimya; liweke wazi, lifunge, au lishughulikie kwa makusudi.
- Fanya majaribio ya kurudia kuwa salama kwa kutobadilika thamani, muda wa kuisha, kurudi nyuma, na mtetemo.
- Pa njia ya kosa umakini ule ule wa usanifu kama njia ya furaha.
Mapendekezo
Tofautisha makosa, kasoro, na kushindwa
Msamiati wa hovyo huzalisha ushughulikiaji wa hovyo, kwa hiyo anza kwa istilahi wazi. Kasoro ni dosari katika mfumo: hitilafu, usanidi mbaya, utegemezi ambao umezimika. Kosa ni hali isiyo sahihi ya ndani ambayo kasoro huizalisha: null mahali thamani inapaswa kuwa, salio ambalo halipatani tena. Kushindwa ni kile mtazamaji wa nje anachokiona: ombi linarudisha jibu lisilo sahihi, au hakuna jibu. Kasoro moja inaweza kusababisha makosa mengi, na makosa mengi yanaweza kunaswa kabla yoyote kuwa kushindwa kunakoonekana. Hoja nzima ya ushughulikiaji wa makosa ni kuvunja mnyororo huo, kunasa kosa kabla halijawa kushindwa ambako mtumiaji au mkaguzi anakupata.
Msamiati huu pia unakuambia mahali pa kutenda. Kasoro hushughulikiwa katika mapitio, majaribio, na usanidi. Makosa hushughulikiwa wakati wa kuendesha kwa mifumo ya sura hii. Kushindwa hushughulikiwa kwa uonekanaji (sura ya 9.2) na kwa ustahimilivu wa ngazi ya mfumo wa sura ya 3.5. Timu yako inaposhiriki maneno haya, mapitio ya matukio huwa makali zaidi: unaweza kusema kwa usahihi mahali mnyororo ulipaswa kuvunjwa na haukuvunjwa, badala ya kubishana “hitilafu” ilikuwa nini.
Chagua kushindwa-haraka au kushindwa-salama kwa kila muktadha
Kushindwa-haraka kunamaanisha kusimama mara kitu kinapokuwa kibaya, kukataa kuendelea kwa hali mbaya ili tatizo lijitokeze kwa sauti na karibu na chanzo chake. Kushindwa-salama kunamaanisha kudhoofika kuelekea hali inayojulikana, isiyo na madhara na kuendelea kuhudumia kile unachoweza kwa usalama. Hakuna kinachofaa kila mahali, na ujuzi ni kuchagua kwa kila muktadha. Wakati wa uendelezaji na kwenye mipaka ya ndani, kushindwa-haraka ni rafiki yako: programu inayosimama kwenye kigeu kisichobadilika kilichovunjwa inakupa ufuatiliaji mfupi wa safu badala ya fumbo refu. Kwenye uzalishaji, kwenye kingo za mfumo unaomkabili mtumiaji, kushindwa-salama mara nyingi hushinda: kidirisha cha mapendekezo kisichorudisha chochote ni bora kuliko ukurasa wa malipo usiopakia.
Amua hili kwa makusudi kwa kila mpaka na uandike uamuzi. Kijenzi cha udhibiti wa ndege au cha kifaa cha matibabu hushindwa-salama kuelekea hali iliyofafanuliwa kwa sababu kuendelea kwa data iliyoharibika kunaweza kumuumiza mtu. Kuweka kwenye leja kunashindwa-haraka kwa sababu kuweka ingizo lisilo sahihi ni mbaya kuliko kutoweka. Uoanishaji usio sahihi ni hatari pande zote mbili: kushindwa-salama pale ulipohitaji kushindwa-haraka huficha uharibifu, na kushindwa-haraka pale ulipohitaji kushindwa-salama hugeuza kosa dogo la mapambo kuwa kukatika.
Chagua utaratibu wako wa kuashiria makosa na uutumie kwa uthabiti
Lugha zinakupa njia mbili pana za kuashiria kwamba kitu kimeharibika. Ushughulikiaji wa vighairi hutupa kitu juu ya safu ya miito hadi mshughulikiaji fulani akikamate, ukitenganisha njia ya kosa na mantiki kuu. Mbadala ni thamani za makosa zilizo wazi: kazi inarudisha matokeo na kosa, na mpigaji lazima akague yote mawili. Lugha nyingi za kisasa hurasimisha ya pili kwa aina ya Result, mara nyingi huitwa Result au Either, inayomlazimisha mpigaji kufungua mafanikio au kushindwa kabla ya kutumia thamani. Kila mbinu ina gharama. Vighairi huweka njia ya furaha safi lakini vinaweza kuficha mtiririko wa udhibiti na kuwashawishi wasanidi kwenye vizuizi vya kukamata-yote vinavyofuta taarifa. Matokeo wazi hufanya kila kushindwa kuonekane kwenye saini ya aina lakini huongeza taratibu na yanaweza kupuuzwa lugha isipolazimisha ukaguzi.
Jibu sahihi linahusu uthabiti na uaminifu kuliko utaratibu upi. Chagua mtindo ambao lugha yako na mfumo wa ikolojia vinapendelea, na uutumie kwa usawa kuvuka huduma zako ili msomaji ajue kila mara jinsi kushindwa kunavyosafiri. Hifadhi vighairi kwa hali za kipekee kweli, si mtiririko wa udhibiti wa kawaida kama “mtumiaji hajapatikana,” ambao ni bora kuundwa kama matokeo ya kawaida. Chochote utakachochagua, usiruhusu kushindwa kuwa kusikoonekana: thamani ya kosa isiyokaguliwa ni hatari kama kizuizi tupu cha catch. Katika msimbo mkubwa, kanuni iliyoandikwa pamoja na linter inayoweka alama kwenye makosa yaliyopuuzwa hushinda upendeleo wa mtu yeyote.
Fanya mkataba wa ushughulikiaji wa makosa uwe wazi
Kila kazi na kila API ina mkataba wa ushughulikiaji wa makosa, iwe mtu ameuandika au la. Hujibu: nini kinaweza kuharibika hapa, utajuaje kuhusu hilo, na nini kimehakikishwa kuhusu hali inapotokea? Ufanye mkataba huo uwe wazi. Andika makosa gani kazi inaweza kurudisha au kutupa, tofautisha makosa yanayorejesheka (mpigaji anaweza kujaribu upya au kutumia mbadala kwa busara) na yasiyorejesheka (mpigaji hawezi kurekebisha hili na anapaswa kupitisha au kusitisha), na ueleze kama kazi inaacha hali bila kubadilika inaposhindwa. Sifa hii ya mwisho, wakati mwingine huitwa hakikisho imara la vighairi, inamaanisha wito ulioshindwa ni kana kwamba haukutokea kamwe, ambayo ndiyo hasa inayomruhusu mpigaji kujaribu upya kwa usalama.
Kwa API ya umma au ya kuvuka timu, mkataba huu ni sehemu ya kiolesura, halisi kama aina za vigezo. Buni uainishaji mdogo, thabiti wa makosa: seti iliyofungwa ya kategoria kama kosa la uthibitisho, haipatikani, mgongano, hairuhusiwi, utegemezi-haupatikani, na kosa la ndani. Wapigaji wanaweza kisha kuchagua kwa kategoria bila kuchanganua maandishi. Uainishaji wazi hufanya ushughulikiaji wa makosa uweze kuunganishwa kuvuka huduma nyingi, na hufanya kushindwa kukaguliwe, kwa sababu kila kushindwa kunalingana na aina inayojulikana, iliyotajwa.
Thibitisha kwenye mipaka na ujilinde bila wasiwasi kupita kiasi
Chukulia data inayovuka mpaka wa uaminifu (ombi la mtandao, faili, ingizo la mtumiaji, ujumbe kutoka huduma nyingine) kama ya uadui hadi ithibitishwe, na uithibitishe kwenye mpaka, mara moja, kikamilifu. Huu ni uandishi wa kujilinda unaotumika kwa busara. Ndani ya moduli ambayo ingizo zake tayari ulizithibitisha, ukaguzi usio wa lazima kwenye kila mstari huficha mantiki na kukandamiza hasa kushindwa ambako ungetaka kuona. Nidhamu ni: jilinde kwa nguvu kwenye kingo, amini ndani yake. Thibitisha muundo, wigo, na vigeu visivyobadilika data inapoingia, igeuze kuwa aina zinazofanya hali zisizo halali zisiwezekane kuwakilishwa, na uache msimbo wa ndani udhani unafanya kazi na data safi.
Wasiwasi kupita kiasi una gharama halisi. Msimbo uliofunikwa na ukaguzi wa null na matawi ya kujilinda ni mgumu kusoma zaidi, na mbaya zaidi, mara nyingi hugeuza kushindwa dhahiri kuwa kuinua mabega kimya, ukirudisha chaguo-msingi pale ulipopaswa kupiga kengele. Kujilinda kunakoficha hitilafu si usalama; ni kuahirisha.
Fanya majaribio ya kurudia kuwa salama, yaliyofungwa, na ya adabu
Kasoro nyingi ni za muda mfupi: hitilafu ya muda mfupi ya mtandao, huduma inayoanza upya, mgongano mfupi wa kufuli. Katika mfumo wowote uliosambazwa (sura ya 3.3), kushindwa huku kwa sehemu ni hali ya kawaida badala ya kighairi. Kujaribu upya ndilo jibu la asili, lakini kitanzi cha kujaribu upya cha kipuuzi ni bunduki iliyojazwa. Kwanza, fanya operesheni unayoijaribu upya iwe isiyobadilika thamani, ikimaanisha kuifanya mara mbili kuna athari ileile kama mara moja. Bila kutobadilika thamani, jaribio la kurudia baada ya muda kuisha linaweza kutoza kadi mara mbili au kuunda rekodi mbili, kwa sababu huwezi kusema kama jaribio la kwanza lilishindwa au kukiri kwake tu kulipotea. Tumia funguo za kutobadilika thamani kwa uandishi ili mpokeaji atambue na kuondoa marudio.
Pili, weka muda wa kuisha kwa kila wito wa mbali ili utegemezi uliokwama usikukwamishe. Tatu, panga nafasi kati ya majaribio ya kurudia kwa kurudi nyuma kwa kasi ya kipeo, ukiongeza maradufu kusubiri baada ya kila jaribio, na uongeze mtetemo (kuchelewa kidogo kwa nasibu) ili wateja elfu wanaopona kwa wakati mmoja wasilingane kuwa mkanyagano unaoangusha tena huduma inayopona. Nne, weka kikomo cha idadi ya majaribio ya kurudia na jumla ya muda, kisha kata tamaa kwa neema. Majaribio ya kurudia bila mipaka, kurudi nyuma, mtetemo, na kutobadilika thamani ni mojawapo ya njia za kawaida zaidi ambazo hitilafu ndogo hugeuka kukatika kulikosababishwa na wewe mwenyewe.
Ongeza vivunja mzunguko, vyumba vilivyotengwa, na kudhoofika kwa neema kwenye msimbo
Utegemezi unapozimika kweli, kujaribu tena ni kupoteza juhudi na kuongeza kina cha shimo. Kivunja mzunguko hufuatilia kiwango cha kushindwa kwa miito kwa utegemezi na, kushindwa kunapovuka kizingiti, “hufunguka” kushindwa mara moja kwa kipindi cha baridi badala ya kusubiri miito iliyopotea. Baada ya kipindi cha baridi huruhusu wito wa majaribio kupita na kufunga tena ikiwa utegemezi umepona. Hii inalinda wapigaji wako (kushindwa kwa haraka, kutabirika badala ya muda kuisha uliorundikana) na utegemezi unaohangaika (nafasi ya kupumua kupona). Mfumo wa vyumba vilivyotengwa, uliopewa jina kutokana na vyumba visivyopitisha maji vya meli, hutenga rasilimali ili utegemezi mmoja uliojaa usiweze kutumia kila uzi au muunganisho na kuzamisha mchakato mzima; unampa kila utegemezi kundi lake lililofungwa.
Mifumo hii huoana na kudhoofika kwa neema katika ngazi ya msimbo: utegemezi usio muhimu usipopatikana, rudisha matokeo yaliyopunguzwa lakini yenye manufaa badala ya kosa. Onyesha data iliyohifadhiwa kwenye kache pamoja na noti ya kupitwa na wakati, ficha kidirisha cha ubinafsishaji, weka uandishi kwenye foleni kwa baadaye. Hii ni mwenzake wa ndani wa ustahimilivu wa ngazi ya mfumo wa sura ya 3.5: usanifu hutoa ziada kuvuka mashine, na msimbo wako unatoa tabia yenye busara kipande kinapokosekana.
Funga makosa kwa muktadha na usiyameze kamwe
Kosa linalosomeka “connection refused” tabaka kumi juu ya mahali lilipotokea halina manufaa karibu kabisa. Kosa linaposafiri, lifunge kwa muktadha: ulikuwa unajaribu kufanya nini, chombo au ombi lipi, utegemezi upi, huku ukihifadhi sababu ya asili ili mzizi usipotee. Lugha na maktaba nzuri zinasaidia mnyororo huu wa makosa moja kwa moja. Lengo ni kwamba mstari mmoja wa kumbukumbu umwambie mhandisi wa zamu nini kilishindwa, wakati wa operesheni ipi, kwa ingizo lipi. Hiki ndicho malighafi ya uonekanaji wa sura ya 9.2 na utatuzi wa sura ya 2.15.
Dhambi kuu ni kumeza kosa: kizuizi tupu cha catch, thamani ya kurudi iliyopuuzwa, catch inayoandika kwa kiwango cha utatuzi na kuendelea kana kwamba hakuna kilichotokea. Kosa lililomezwa halitoweki; linajitokeza tena baadaye kama data iliyoharibika au kasoro isiyoelezeka, sasa ikiwa imejitenga na chanzo chake. Kila kosa lazima likutane na hatima moja kati ya tatu: lishughulikie (kupona au kudhoofika), lifunge na lipitishe, au, juu ya safu, liandike kwa muktadha kamili na ushindwe. Ukikamata kosa na usifanye lolote kati ya hayo, umechagua kumficha mwenyewe wa baadaye tukio la baadaye.
Mabadilishano: faida na hasara
| Mbinu | Faida | Hasara |
|---|---|---|
| Vighairi | Njia ya furaha safi; ngumu kupuuza isipokaguliwa | Mtiririko wa udhibiti uliofichika; huwashawishi kufuta kwa kukamata-yote |
| Thamani za makosa wazi / aina za Result | Kushindwa kunaonekana kwenye saini; hulazimisha kushughulikia | Taratibu zaidi; yanaweza kupuuzwa bila utekelezaji |
| Kushindwa-haraka | Hufichua hitilafu kwa sauti, karibu na chanzo | Uzoefu duni wa mtumiaji ikitumika ukingoni |
| Kushindwa-salama | Huendelea kuhudumia; hulinda watumiaji na data | Inaweza kuficha uharibifu ikitumika pale ulipohitaji kushindwa-haraka |
| Majaribio ya kurudia na kurudi nyuma | Hustahimili kasoro za muda mfupi kiotomatiki | Huongeza mzigo na uandishi maradufu bila kutobadilika thamani |
| Kivunja mzunguko | Kushindwa kwa haraka; huruhusu utegemezi kupona | Hali na urekebishaji ulioongezwa; unaweza kuficha tatizo la kudumu |
| Uthibitisho wa kujilinda kwenye mipaka | Hunasa data mbaya mapema, mara moja, kwa sauti | Ukizidi, hujaza mantiki na kuficha kushindwa halisi |
Mvutano wa msingi ni kati ya uonekanaji na kelele. Shughulikia makosa kwa utulivu mno na unaficha matatizo hadi yawe ghali; yashughulikie kwa sauti kubwa mno na kila mahali, na unazamisha ishara katika taratibu na kuficha kushindwa muhimu. Suluhisha kwa mahali na nia. Kuwa na sauti na ukali kwenye mipaka, ambapo data mbaya na kushindwa kwa utegemezi vinaingia. Kuwa mtulivu na mwenye kuamini ndani, ambapo ingizo tayari ni safi. Amua kushindwa-haraka dhidi ya kushindwa-salama kwa kila mpaka na uliandike. Lengo ni msimbo ambapo kila kushindwa kuna mmiliki mmoja wazi na hatima moja wazi, na hakuna kinachoanguka kimya kimya kwenye mianya.
Maswali ya kujadili na timu yako
Je, tuna uainishaji mmoja wa pamoja wa makosa na kanuni ya ushughulikiaji kuvuka huduma zetu, au kila timu inabuni papo hapo? Katika timu kubwa hii ndiyo tofauti kati ya kushindwa kunakounganika na kushindwa kunakochanganya. Huduma moja inaporudisha HTTP 500 kwa tatizo la uthibitisho, nyingine inatupa kighairi chenye aina, na ya tatu inarudisha null, kila uunganishaji unakuwa mazungumzo na kila tukio zoezi la kutafsiri. Leta mifano ya kushindwa kwa kimantiki kuleule, tuseme “rekodi haijapatikana,” kama inavyoonekana kuvuka huduma tatu zenu, na uone jinsi inavyoashiriwa tofauti. Jibu linapaswa kuwa kiwango kilichoandikwa: seti iliyofungwa ya kategoria za makosa, njia thabiti ya kuziashiria, na linter au orodha hakiki ya mapitio inayoitekeleza. Uthabiti hapa hulipa katika kila uunganishaji wa baadaye, ukaguzi, na zamu ya kazi.
Kwa kila mpaka muhimu, je, tumechagua kushindwa-haraka au kushindwa-salama kwa makusudi, na je, msimbo unalingana na uchaguzi huo? Timu nyingi hazijawahi kufanya uamuzi huu waziwazi, ikimaanisha uliamuliwa kwao na yeyote aliyeandika msimbo kwanza, na bila uthabiti. Mazingatio yanayoshindana ni halisi: kushindwa-salama kunaweka watumiaji wakihudumiwa lakini kunaweza kuruhusu uharibifu kuenea, huku kushindwa-haraka kukilinda data lakini kuweza kugeuza kukatika kidogo kwa utegemezi kuwa kushindwa kunakoonekana. Leta historia yenu ya matukio na uliza, kwa mabaya machache zaidi, kama msimbo ulishindwa kama mngechagua mkiulizwa mapema. Ushahidi unaoutaka ni ramani ya mipaka yenu yenye lebo ya makusudi kwa kila moja, hasa popote fedha, usalama, au rekodi za raia zinapohusika. Pale lebo na msimbo vinapotofautiana, umepata marekebisho yako yanayofuata.
Lini mara ya mwisho tuliendesha njia ya kosa kwa makusudi, na je, ilitenda kama ilivyobuniwa? Njia ya kosa kwa kawaida ndiyo msimbo unaojaribiwa kidogo zaidi unaomiliki, hata hivyo ndipo uaminifu unaposhindwa au kushinda, na “tunashindwa kwa usalama” ni dai usiloweza kuliunga mkono ikiwa hujawahi kuliona likitokea. Kitanzi cha kujaribu upya bila kutobadilika thamani, kivunja mzunguko chenye kizingiti kisicho sahihi, kighairi kilichomezwa katika tawi linalofikiwa mara chache: hivi hujificha hadi tukio halisi liwapatie. Leta matokeo ya kuingiza kushindwa kwa makusudi (utegemezi uliouawa, muda kuisha uliosababishwa, mzigo ulioharibika) kwenye mazingira yanayowakilisha. Hatua inayofuata ni kufanya uingizaji wa kushindwa kuwa wa kawaida, ili kupona, kudhoofika, na tabia ya kushindwa-salama vithibitishwe mfululizo badala ya kutumainiwa. Njia yoyote ya kosa ambayo hamjawahi kuichochea ni ahadi ambayo hamjaijaribu.
Ni shughuli zipi za uandishi zetu zisizobadilika thamani, na wapi jaribio la kurudia baada ya kukiri kulikopotea lingerudia athari halisi ya ulimwengu kama malipo au rekodi? Kujaribu upya ndilo jibu la kawaida zaidi la ustahimilivu na, likifanywa bila uangalifu, njia ya kawaida zaidi ambayo hitilafu ya muda mfupi hugeuka fedha au data iliyorudiwa. Katika timu kubwa, mantiki ya kujaribu upya mara nyingi huishi katika wateja wa pamoja, programu ya kati, na huduma binafsi zote kwa wakati mmoja, kwa hiyo uandishi mmoja unaweza kujaribiwa upya katika tabaka kadhaa bila mtu yeyote kumiliki tabia ya jumla. Mvuto unaoshindana ni kwamba funguo za kutobadilika thamani, uondoaji wa marudio, na matokeo ya ombi yaliyohifadhiwa huongeza hifadhi na msimbo, na timu zilizo chini ya shinikizo la utoaji huzirukia kwa uandishi wanaodhani kimakosa ni salama. Leta orodha ya uandishi wenu unaoonekana nje, kila mmoja ukiwa na alama ya kama una ufunguo wa kutobadilika thamani na jinsi mpokeaji anavyotambua na kuondoa marudio. Katika mazingira ya mashirika makubwa na serikali, weka alama kwanza zile zinazohamisha fedha au kubadilisha rekodi ya raia, kwa sababu malipo maradufu au manufaa yaliyorudiwa ni matokeo ya ukaguzi na wakati mwingine mfiduo wa kisheria, si kasoro tu.
Je, muda wetu wa kuisha, vivunja mzunguko, na vyumba vilivyotengwa vinatoka kwenye maktaba moja ya pamoja iliyojaribiwa, au kila timu inajitengenezea? Mifumo hii ni rahisi kuelezea na rahisi kukosea kwa hila: muda wa kuisha unaokosekana, kizingiti cha kivunja kisichokatika kamwe, kundi la miunganisho lililopimwa ili utegemezi mmoja polepole unaleta njaa kwa mchakato mzima. Kila timu inapovitekeleza upya, unakusanya nakala nyingi zilizovunjika kidogo na hakuna mahali pamoja pa kurekebisha dosari mara ukiipata. Mazingatio yanayoshindana ni kwamba maktaba ya pamoja inaweka kiolesura cha pamoja na mzunguko wa kusasisha, na timu zenye mazingira ya kuendesha yasiyo ya kawaida au mahitaji ya ucheleweshaji zinaweza kuchukia au kuzunguka. Leta uchunguzi wa utekelezaji tofauti wa kujaribu upya na kivunja mzunguko ngapi zinaendesha kweli kwenye uzalishaji, na huduma zipi bado hazina muda wa kuisha kwenye miito yake ya kutoka kabisa. Kwa shirika kubwa au wakala, maktaba iliyochunguzwa ya pamoja pia inawapa wapitiaji wa usalama na wakaguzi kijenzi kimoja cha kuthibitisha badala ya dazeni, jambo linalopunguza gharama ya kila mapitio.
Kama tukio lingetokea jana usiku, mhandisi yeyote wa zamu angeweza kulifuatilia kutoka mstari mmoja wa kumbukumbu, na je, mkaguzi angeweza baadaye kuona kila kushindwa ambako mfumo ulirekodi? Kosa lililofungwa, lililoainishwa, lililoandikwa vizuri ndilo tofauti kati ya utambuzi wa dakika kumi na uchimbaji wa usiku wa manane, na lililomezwa ni tukio la baadaye ulilojificha mwenyewe. Katika timu kubwa, kushindwa kunavuka vituo vingi vya huduma, kwa hiyo thamani inatokana na muktadha thabiti na vitambulisho vya uhusiano vinavyonusurika vituo hivyo, si bidii ya timu yoyote. Mvutano unaoshindana ni gharama na kelele: andika kila kitu kwenye kumbukumbu na unazamisha ishara na kulipia kuhifadhi; andika kidogo mno na huwezi kujenga upya kilichotokea. Leta kushindwa halisi kwa hivi karibuni na upitie njia yake mwanzo hadi mwisho, ukibainisha kila kituo ambapo muktadha ulidondoshwa au kosa lilikamatwa na kutupwa. Katika mifumo inayodhibitiwa na ya serikali, chukulia hili kama sifa ya uzingatiaji, kwa sababu kushindwa kusikoweza kukaguliwa, au uamuzi usioweza kuueleza miaka baadaye, ni mfiduo wa kisheria na si pengo la uendeshaji tu.
Mtazamo wa sekta
Kampuni changa. Ukiwa na wahandisi wachache na bila muda wa ziada, tumia bajeti yako ya ushughulikiaji wa makosa mahali ambapo kushindwa kunakugharimu mteja au data yako: weka muda wa kuisha kwa kila wito wa nje, fanya uandishi wako unaohamisha fedha usiobadilika thamani, na uongeze kanuni ya linter dhidi ya makosa yaliyopuuzwa. Ruka mfumo wa kina; aina ya Result kwa kazi za msingi na kudhoofika kwa neema kwa utegemezi usio muhimu hununua usalama mwingi kwa siku chache za kazi. Shindwa-haraka wakati wa uendelezaji ili hitilafu zijitokeze kwa sauti, na upinge kuandika kivunja mzunguko kwa mkono kabla hujapata utegemezi unaostahili.
Biashara ndogo. Bila mtaalamu wa ustahimilivu kwenye wafanyakazi na bajeti finyu, tegemea kile lugha yako, mfumo wa kazi, na mtoa huduma wa wingu tayari wanachotoa badala ya kujenga mifumo kutoka mwanzo: foleni zinazosimamiwa, majaribio ya kurudia upande wa mtoaji, na muda wa kuisha wa maktaba hufunika zaidi ya timu nyingi zinavyotarajia. Weka uamuzi kama kununua dhidi ya kujenga, na ununue popote utegemezi uliokomaa unashughulikia kujaribu upya, kurudi nyuma, na kutobadilika thamani kwa ajili yako. Elekeza umakini wako adimu kwenye mipaka moja au miwili ambapo muamala usio sahihi au uliopotea ungeuma kweli, na uhakikishe hiyo inashindwa kwa usalama na kuacha alama.
Biashara kubwa. Kuvuka timu nyingi zawadi ni uthabiti: uainishaji mmoja wa pamoja wa makosa, maktaba ya pamoja ya muda wa kuisha, majaribio ya kurudia, vivunja mzunguko, na vyumba vilivyotengwa, na linter na orodha hakiki ya mapitio inayoyatekeleza kwenye bomba. Lisha kila kosa kwenye jukwaa la pamoja la uonekanaji lenye vitambulisho vya uhusiano ili kushindwa kufuatiliwe kuvuka vituo vya huduma, na usawazishe maamuzi ya kushindwa-haraka dhidi ya kushindwa-salama kwa kila mpaka ili ukaguzi upate mtindo ulioandikwa, unaoweza kutetewa badala ya mtawanyiko wa tabia za mahali. Tawala maktaba ya pamoja kama bidhaa halisi, kwa sababu dosari iliyorekebishwa hapo mara moja imerekebishwa kila mahali.
Serikali. Usahihi, kushindwa kwa usalama, na njia ya kudumu ya ukaguzi ni wajibu, si mapendeleo. Shindwa-haraka kwa kigeu chochote kisichobadilika kilichovunjwa kinachogusa fedha au kustahiki, thibitisha kila ingizo linalomkabili raia kwenye mpaka, na uandike kila kushindwa kwenye kumbukumbu isiyobadilika yenye muktadha wa kutosha kwamba uamuzi unaweza kuelezwa na kupitiwa miaka baadaye. Ununuzi na maisha marefu ya mifumo yanamaanisha mikataba ya makosa lazima iandikwe ili watumishi wa umma waweze kudumisha msimbo muda mrefu baada ya waandishi wa asili kuondoka, na kijenzi chochote cha muuzaji lazima kifichue tabia yake ya kushindwa badala ya kuificha nyuma ya kiolesura kisicho wazi.
Mifano
Kampuni changa. Kampuni changa ya watu wanne inasafirisha programu inayopigia mtoaji wa malipo wa mtu wa tatu na huduma ya barua pepe. Mapema wanaongeza kitanzi cha kujaribu upya cha kipuuzi na mara moja wanamtoza mteja mara mbili muda kuisha unapoficha malipo yaliyofanikiwa. Marekebisho yanafundisha somo: wanaongeza funguo za kutobadilika thamani kwa kila uandishi, wanaweka muda wa kuisha kwa kila wito wa nje, na kubadilisha hadi kurudi nyuma kwa kasi ya kipeo na mtetemo. Wanapokea aina ya Result kwa kazi za msingi za huduma ili kushindwa kuonekane kwenye saini, na kanuni ya linter inaweka alama kwenye kosa lolote lililopuuzwa. Barua pepe inaposhindwa kutumwa, malipo yanadhoofika kwa neema kwa kuweka ujumbe kwenye foleni badala ya kuzuia mauzo. Nidhamu hiyo inagharimu siku chache na inawaokoa darasa la matukio ambayo yangegharimu zaidi sana kwa marejesho na uaminifu.
Biashara kubwa. Kampuni ya kimataifa ya usafirishaji inaendesha mamia ya huduma na kusawazisha ushughulikiaji wa makosa kuvuka zote. Kila huduma inaoanisha kushindwa na uainishaji wa pamoja (uthibitisho, haipatikani, mgongano, utegemezi-haupatikani, wa ndani), kwa hiyo wapigaji wanachagua kwa kategoria badala ya kuchanganua ujumbe. Maktaba ya pamoja inatoa vivunja mzunguko, majaribio ya kurudia yaliyofungwa yenye kurudi nyuma na mtetemo, na makundi ya miunganisho yaliyotengwa kwa vyumba, kwa hiyo hakuna anayevitengeneza vibaya kwa mkono. Kila kosa linaandikwa na muktadha wa uhusiano unaolisha jukwaa la uonekanaji la sura ya 9.2, kwa hiyo mhandisi wa zamu anaweza kufuatilia kushindwa kuvuka vituo vya huduma kutoka mstari mmoja. Kwa sababu kiwango ni sare na kinatekelezwa kwenye bomba, wahandisi wanahama kwa kujiamini kuvuka huduma zisizojulikana na wakaguzi wanaweza kuona kwamba kila kushindwa kunarekodiwa, kuainishwa, na kufuatilika.
Serikali. Wakala wa kitaifa wa manufaa unajenga mfumo wa kustahiki na malipo ambapo jibu lisilo sahihi linaweza kumnyima mtu fedha za kodi ya pango au kulipa kupita kiasi kutoka hazina ya umma. Usahihi na kushindwa kwa usalama havijadiliwi, kwa hiyo msimbo unashindwa-haraka kwa kigeu chochote cha kifedha kilichovunjwa: hesabu isiyoweza kupatana inakataa kuweka badala ya kuweka namba isiyo sahihi. Kila ingizo linalomkabili raia linathibitishwa kwenye mpaka, na hali zisizo halali zinafanywa zisiwezekane kuwakilishwa katika aina za kikoa. Kila kushindwa kunaandikwa kwenye kumbukumbu ya ukaguzi isiyobadilika yenye muktadha kamili, kutimiza sharti la kisheria kwamba maamuzi yaweze kuelezwa na kupitiwa miaka baadaye. Utegemezi usio muhimu kama onyesho la awali la hati unapozimika, mfumo unadhoofika kwa neema ili mfanyakazi wa kesi bado aweze kuchakata dai. Watumishi wapya wa umma wanarithi msimbo ambao mikataba yake ya makosa imeandikwa, kwa hiyo wanaweza kuudumisha kwa usalama muda mrefu baada ya waandishi wa asili kuhama.
Kesi ya biashara: sababu, ROI, na TCO
Mapato ya ushughulikiaji wa makosa wenye nidhamu yanaonekana kama matukio machache, matukio mafupi, na matukio ya bei nafuu. Kukatika kwingi kwa uzalishaji si kwa ajabu; kunafuatiliwa hadi kighairi kilichomezwa, muda wa kuisha uliokosekana, mkanyagano wa kujaribu upya, au mpaka uliouamini data ambayo ulipaswa kuithibitisha. Kila moja linazuilika kwa mifumo ya hapa, na kila tukio lililozuiliwa linaokoa si gharama ya moja kwa moja ya kukatika tu bali gharama zinazojumlika za jibu la dharura, kupoteza wateja, na uchunguzi. Kwa sababu kosa lililofungwa, lililoandikwa vizuri linaweza kutambuliwa kwa dakika badala ya saa, muda wa wastani wa kurejesha hushuka, na kiwango cha kushindwa kwa mabadiliko kinashuka pamoja nacho wahandisi wanapoacha kuiogopa njia ya kosa.
Gharama ya kupokea ni ya wastani na hasa ya mara moja. Unaandika uainishaji wa makosa, unatoa maktaba ya pamoja ya majaribio ya kurudia na vivunja mzunguko ili timu zisivitengeneze vibaya, unaongeza kanuni za linter dhidi ya makosa yaliyopuuzwa, na kujenga tabia ya kuingiza kushindwa. Gharama ya kupuuza inajumlika kimyakimya: makosa yaliyomezwa hukusanyika kuwa data iliyoharibika ambayo ni ghali kutengua, na ushughulikiaji usio thabiti huzidisha gharama ya kila uunganishaji na kila ukaguzi. Katika mazingira yanayodhibitiwa na ya serikali, kushindwa kusikoweza kukaguliwa ni mfiduo wa uzingatiaji na wa kisheria, si tatizo la kihandisi tu. Kujenga hoja kwa uongozi, unganisha nidhamu ya ushughulikiaji wa makosa na vipimo wanavyovitazama tayari: marudio ya matukio, muda wa wastani wa kurejesha, kiwango cha kushindwa kwa mabadiliko, na matokeo ya ukaguzi.
Mifumo mibaya na mitego
- Kumeza kimya: vizuizi tupu vya catch na thamani za kurudi zilizopuuzwa zinazogeuza kushindwa kuwa fumbo lililochelewa, lililojitenga.
- Kufuta kwa kukamata-yote:
catchpana inayoandika ujumbe wa jumla na kutupa kosa la asili na muktadha wake. - Kujaribu upya bila kutobadilika thamani: kuendesha tena uandishi usio wa kutobadilika thamani baada ya muda kuisha, kutoza mara mbili au kurudia rekodi.
- Mikanyagano ya kujaribu upya: hakuna kurudi nyuma, hakuna mtetemo, na hakuna kikomo, kwa hiyo wateja wanalinganishwa na kuupiga utegemezi unaopona hadi uanguke tena.
- Hakuna muda wa kuisha: miito ya mbali isiyo na kikomo inayoacha utegemezi mmoja uliokwama kuchosha nyuzi na kukwamisha mchakato mzima.
- Vighairi kama mtiririko wa udhibiti: kutupa na kukamata kwa matokeo ya kawaida kama “haipatikani,” kuficha mantiki na kupunguza kasi ya msimbo.
- Wasiwasi wa kujilinda: ukaguzi kwenye kila mstari unaozika mantiki na kugeuza kushindwa halisi kuwa chaguo-msingi vya kimya.
- Makosa yenye aina ya maandishi: wapigaji wakichanganua maandishi ya ujumbe wa kosa kwa sababu hakuna uainishaji thabiti, uliopangwa wa kuchagua.
- Kushindwa-salama pale ulipohitaji kushindwa-haraka: kuendelea kwa hali iliyoharibika katika mfumo ambapo jibu lisilo sahihi ni baya kuliko kutokuwa nalo.
Kielelezo cha ukomavu
- Ngazi ya 1, Kuanzisha: Ushughulikiaji wa makosa ni wa papo hapo na wa kuitikia, unaoamuliwa kwa kila msanidi. Vizuizi tupu vya catch na thamani zilizopuuzwa ni za kawaida, majaribio ya kurudia ni ya kipuuzi, muda wa kuisha haupo, na kushindwa kunajitokeza kama data iliyoharibika au kasoro za fumbo zisizo na uandishi thabiti wa kumbukumbu.
- Ngazi ya 2, Kuendeleza: Timu hupokea mazoea ya msingi, lakini bila uthabiti. Makosa yanaandikwa na muktadha fulani, kumeza dhahiri kunakatazwa kwenye mapitio, na muda wa kuisha na majaribio rahisi ya kurudia yapo, hata hivyo kanuni hutofautiana kati ya huduma, kutobadilika thamani ni kwa mtawanyiko, na njia ya kosa mara chache hujaribiwa.
- Ngazi ya 3, Kusawazisha: Uainishaji wa pamoja wa makosa na kanuni ya ushughulikiaji zimeandikwa na kutekelezwa shirika zima. Uthibitisho wa mpaka, majaribio ya kurudia yasiyobadilika thamani yenye kurudi nyuma na mtetemo, vivunja mzunguko, vyumba vilivyotengwa, na kufunga makosa ni vya kawaida, vinatolewa na maktaba za pamoja, na kila kosa linalisha bomba la pamoja la uonekanaji.
- Ngazi ya 4, Kusimamia: Tabia ya ushughulikiaji wa makosa inapimwa dhidi ya vipimo vya msingi na kudhibitiwa kwa data. Viwango vya kujaribu upya, kukatika kwa vivunja mzunguko, hesabu za muda wa kuisha, matokeo ya makosa yaliyomezwa kutoka uchambuzi tuli, muda wa wastani wa kurejesha, na kiwango cha kushindwa kwa mabadiliko vinafuatiliwa kwa kila huduma; vizingiti vya vivunja mzunguko na muda wa kuisha vinarekebishwa kutoka data ya ucheleweshaji na kushindwa iliyoonekana badala ya kubashiriwa; uingizaji wa kushindwa unaendeshwa kwa ratiba; na timu zinapitia vipimo hivi kunasa kurudi nyuma na kushikilia kila uchaguzi wa kushindwa-haraka au kushindwa-salama kwa ushahidi.
- Ngazi ya 5, Kuratibu: Ustahimilivu umeunganishwa na utoaji na upangaji wa hatari na unaboreshwa kila wakati. Uainishaji, maktaba za pamoja, na viwango vinabadilika kutoka kila tukio, majaribio ya machafuko na uingizaji wa kushindwa ni ya kawaida, na shirika hurekebisha muda wa kuisha, vizingiti vya vivunja, mikakati ya kudhoofika, na maamuzi ya mipaka trafiki, utegemezi, na picha ya hatari vinapohama.
Mawazo ya kujadili
- Wapi katika msimbo wenu kosa linamezwa sasa hivi, na mngejuaje kama mnakosea kwamba halimezwi?
- Ni shughuli zipi za uandishi zenu zisizobadilika thamani, na zipi zingefanya kazi mara mbili jaribio la kurudia likitokea baada ya kukiri kulikopotea?
- Je, “mtumiaji hajapatikana” inapaswa kuwa kighairi, thamani ya kosa, au matokeo ya kawaida, na je, timu yenu inajibu hilo kwa uthabiti?
- Kanuni yenu halisi ya mahali uthibitisho unafanyika ni ipi, na unaweza kuonyesha mpaka unaoamini data ambayo haupaswi?
- Mnaamuaje kizingiti na kipindi cha baridi cha kivunja mzunguko, na mngejuaje mipangilio ya sasa ni mibaya?
- Mkaguzi akiomba kuona kila kushindwa ambako mfumo wenu ulipata mwezi uliopita, mngeweza kukizalisha, kimeainishwa na kikiwa na muktadha?
Mambo muhimu ya kukumbuka
- Tofautisha kasoro, makosa, na kushindwa, na uvunje mnyororo kabla kosa la ndani halijawa kushindwa kunakoonekana.
- Chagua kushindwa-haraka au kushindwa-salama kwa makusudi kwa kila mpaka, na ufanye mkataba wa ushughulikiaji wa makosa wa kila kazi uwe wazi.
- Thibitisha kwa nguvu kwenye mipaka ya uaminifu na amini ndani yake; kujilinda kunakoficha kushindwa ni kuahirisha, si usalama.
- Fanya majaribio ya kurudia kuwa salama kwa kutobadilika thamani, muda wa kuisha, kurudi nyuma kwa kasi ya kipeo, na mtetemo, na uongeze vivunja mzunguko na kudhoofika kwa neema kwenye msimbo.
- Funga makosa kwa muktadha, yalishe kwa uonekanaji, na usiyameze kamwe; kila kosa lazima lishughulikiwe, lipitishwe, au liandikwe na kuwekwa wazi.
Marejeo na usomaji zaidi
- Michael T. Nygard, Release It! Design and Deploy Production-Ready Software
- Andrew Hunt and David Thomas, The Pragmatic Programmer
- Steve McConnell, Code Complete: A Practical Handbook of Software Construction
- Betsy Beyer, Chris Jones, Jennifer Petoff, and Niall Richard Murphy (eds.), Site Reliability Engineering: How Google Runs Production Systems
- Marc Brooker, “Timeouts, Retries, and Backoff with Jitter,” Amazon Builders’ Library
- Martin Fowler, “CircuitBreaker,” martinfowler.com
- Nassim Nicholas Taleb, Antifragile: Things That Gain from Disorder