2.20

Gweld yn Saesneg

2.20 Trin gwallau a phatrymau cydnerthedd

Trosolwg a chymhelliant

Bydd pob rhaglen a ysgrifennwch yn methu rywbryd. Mae disg yn llenwi, rhwydwaith yn diffygio, gwasanaeth yn goramseru, galwr yn pasio sbwriel, dibyniaeth yn dychwelyd rhywbeth na soniodd y dogfennau amdano erioed. Nid yw’r cwestiwn byth yn ymwneud ag a fydd methiant yn digwydd ai peidio; y cwestiwn yw a yw eich cod yn cwrdd â’r methiant hwnnw gyda chynllun neu â syndod. Trin gwallau yw’r grefft o benderfynu, linell wrth linell a swyddogaeth wrth swyddogaeth, beth mae eich cod yn ei wneud pan nad yw’r byd yn cydweithredu. Dyma’r rhan leiaf disglair o adeiladu meddalwedd, a’r rhan sy’n penderfynu, yn fwy nag unrhyw nodwedd, a yw pobl yn ymddiried yn eich system.

Mae’r bennod hon yn ymwneud â chydnerthedd ar lefel y cod a’r cydran: y dewisiadau y tu mewn i swyddogaeth, modiwl, neu API. Mae’n ategu pennod 3.5, sy’n ymdrin â chydnerthedd ar lefel y system (cydbwyso llwyth, dyblygu, methu-drosodd ar draws gwasanaethau). Mae pennod 3.5 yn cadw’r platfform cyfan i sefyll pan fydd rhanbarth yn tywyllu; mae’r bennod hon yn atal cais unigol rhag llygru eich data neu ddiflannu heb olrhain. Mae’r ddwy’n atgyfnerthu ei gilydd. Ni fydd torrwr cylched yn eich pensaernïaeth yn golygu fawr ddim os yw’r cod y tu ôl iddo’n llyncu eithriadau, ac ni all swyddogaeth amddiffynnol eich achub os nad oes gan y system o’i chwmpas unrhyw ddiswyddedd. Mae’r bennod hon hefyd yn adeiladu ar bennod 2.9 (adeiladu meddalwedd), lle roedd trin gwallau’n un ddisgyblaeth ymhlith llawer; yma daw’n destun cyfan ynddo’i hun.

I dimau mawr, cysondeb yw’r wobr. Pan fydd cannoedd o beirianwyr yn trin gwallau mewn cannoedd o ffyrdd gwahanol, mae pob gwasanaeth yn troi’n bos a phob digwyddiad yn gloddfa. Mewn lleoliadau menter, mae’r anghysondeb hwnnw’n codi cost pob archwiliad a phob integreiddiad. Mewn llywodraeth a systemau risg-uchel eraill, mae’r peryglon yn fwy miniog: nid nodweddion i’w hychwanegu’n ddiweddarach yw cywirdeb, methiant diogel, a llwybr archwilio clir, ond priodweddau y mae’n rhaid i’r system eu meddu o’r ymrwymiad cyntaf. Nid yn unig yn wallus yw system fudd-daliadau sy’n camgyfrifo’n dawel, neu system gofnodion sy’n colli methiant heb ei gofnodi. Mae’n annibynadwy mewn ffordd sy’n erydu’r sefydliad y tu ôl iddi.

Egwyddorion allweddol

  • Gwahanwch namau, gwallau, a methiannau, a’u trin bob un ar y lefel gywir.
  • Dewiswch fethu’n-gyflym neu fethu’n-ddiogel yn fwriadol, yn ôl cyd-destun, byth ar hap.
  • Gwnewch gontract trin-gwallau pob swyddogaeth ac API yn eglur ac yn onest.
  • Dilyswch wrth ffiniau; ymddiriedwch o’u mewn; amddiffynnwch heb baranoia.
  • Peidiwch byth â llyncu gwall yn dawel; dewch ag ef i’r wyneb, ei lapio, neu ei drin yn fwriadol.
  • Gwnewch ailgeisiadau’n ddiogel gyda hunanddigyfnewid, terfynau amser, ôl-dyniad, a siglo.
  • Rhowch yr un sylw dylunio i lwybr y gwall ag i’r llwybr hapus.

Argymhellion

Gwahaniaethwch rhwng namau, gwallau, a methiannau

Mae geirfa flêr yn cynhyrchu triniaeth flêr, felly dechreuwch gyda thermau clir. Nam yw diffyg yn y system: gwall cod, ffurfweddiad gwael, dibyniaeth sydd i lawr. Gwall yw’r cyflwr mewnol anghywir a gynhyrchir gan nam: gwerth null lle dylai fod gwerth, balans nad yw bellach yn cysoni. Methiant yw’r hyn y mae’r arsylwr allanol yn ei weld: mae’r cais yn dychwelyd yr ateb anghywir, neu ddim ateb o gwbl. Gall un nam achosi llawer o wallau, a gall llawer o wallau gael eu dal cyn i unrhyw un ohonynt ddod yn fethiant gweladwy. Holl bwynt trin gwallau yw torri’r gadwyn honno, dal y gwall cyn iddo ddod yn fethiant y mae’r defnyddiwr neu’r archwiliwr yn ei brofi.

Mae’r eirfa hon hefyd yn dweud wrthych ble i weithredu. Mae namau’n cael eu trin mewn adolygiad, profi, a ffurfweddu. Mae gwallau’n cael eu trin adeg rhedeg gan y patrymau yn y bennod hon. Mae methiannau’n cael eu trin gan arsylladwyedd (pennod 9.2) a chan gydnerthedd lefel-system pennod 3.5. Pan fydd eich tîm yn rhannu’r geiriau hyn, mae adolygiadau digwyddiadau’n dod yn fwy miniog: gallwch ddweud yn union ble y dylai’r gadwyn fod wedi torri ac na wnaeth, yn hytrach na dadlau am beth oedd “y bỳg”.

Dewiswch fethu’n-gyflym neu fethu’n-ddiogel yn ôl cyd-destun

Mae methu’n-gyflym yn golygu stopio’r eiliad y mae rhywbeth o’i le, gwrthod bwrw ymlaen ar gyflwr gwael fel bod y broblem yn dod i’r wyneb yn uchel ac yn agos at ei hachos. Mae methu’n-ddiogel yn golygu dirywio i gyflwr adnabyddus, diniwed, a pharhau i wasanaethu’r hyn y gallwch ei wneud yn ddiogel. Nid yr un yn iawn yn gyffredinol, a’r sgil yw dewis yn ôl cyd-destun. Yn ystod datblygu ac wrth ffiniau mewnol, methu’n-gyflym yw eich ffrind: mae rhaglen sy’n aros ar reidrwydd sydd wedi’i dorri yn rhoi olrhain pentwr byr i chi yn lle dirgelwch hir. Mewn cynhyrchiad, ar ymylon system sy’n wynebu defnyddwyr, mae methu’n-ddiogel yn aml yn ennill: mae panel argymhelliad sy’n dychwelyd dim yn well na thudalen dalu na fydd yn llwytho.

Penderfynwch hyn yn fwriadol ar gyfer pob ffin ac ysgrifennwch y penderfyniad i lawr. Mae cydran rheoli-hedfan neu ddyfais feddygol yn methu’n ddiogel i gyflwr diffiniedig oherwydd y gallai parhau ar ddata llygredig frifo rhywun. Mae postiad cyfrifon yn methu’n gyflym oherwydd bod postio cofnod anghywir yn waeth na pheidio â phostio dim byd. Mae’r paru anghywir yn beryglus yn y ddau gyfeiriad: mae methu’n-ddiogel lle roedd angen methu’n-gyflym yn cuddio llygredd, ac mae methu’n-gyflym lle roedd angen methu’n-ddiogel yn troi hic gosmetig yn doriad gwasanaeth.

Dewiswch eich mecanwaith arwyddo-gwallau a’i ddefnyddio’n gyson

Mae ieithoedd yn rhoi dwy ffordd eang i chi arwyddo bod rhywbeth wedi mynd o’i le. Mae trin eithriadau yn taflu gwrthrych i fyny’r pentwr galwadau nes bod rhyw drinydd yn ei ddal, gan wahanu llwybr y gwall oddi wrth y prif resymeg. Y dewis arall yw gwerthoedd gwall eglur: mae’r swyddogaeth yn dychwelyd canlyniad a gwall fel ei gilydd, ac mae’n rhaid i’r galwr archwilio’r ddau. Mae llawer o ieithoedd modern yn ffurfioli’r ail ddull gyda math Canlyniad, a elwir yn aml yn Result neu Either, sy’n gorfodi’r galwr i ddadlapio naill ai llwyddiant neu fethiant cyn defnyddio’r gwerth. Mae gan bob dull gost. Mae eithriadau’n cadw’r llwybr hapus yn lân ond gallant guddio llif rheolaeth a themtio datblygwyr i flociau dal-popeth sy’n dileu gwybodaeth. Mae canlyniadau eglur yn gwneud pob methiant yn weladwy yn llofnod y math ond yn ychwanegu seremoni a gellir eu hanwybyddu os nad yw’r iaith yn gorfodi’r gwiriad.

Mae’r ateb cywir yn llai ynghylch pa fecanwaith ac yn fwy ynghylch cysondeb a gonestrwydd. Dewiswch yr idiom y mae eich iaith a’ch ecosystem yn ei ffafrio, a’i gymhwyso’n unffurf ar draws eich gwasanaethau fel bod darllenydd bob amser yn gwybod sut mae methiant yn teithio. Cadwch eithriadau ar gyfer amodau sy’n wir eithriadol, nid llif rheolaeth cyffredin fel “defnyddiwr heb ei ganfod,” sy’n cael ei fodelu’n well fel canlyniad normal. Beth bynnag a ddewiswch, peidiwch byth â gadael i fethiant ddod yn anweledig: mae gwerth gwall na wiriwyd mor beryglus â bloc dal gwag. Mewn cronfa god fawr, mae confensiwn ysgrifenedig ynghyd â leintiwr sy’n fflagio gwallau a anwybyddwyd yn drech na dewis unrhyw unigolyn.

Gwnewch gontract trin-gwallau’n eglur

Mae gan bob swyddogaeth a phob API gontract trin-gwallau, boed rhywun wedi’i ysgrifennu i lawr ai peidio. Mae’n ateb: beth all fynd o’i le yma, sut y byddwch chi’n dysgu amdano, a beth sy’n cael ei warantu am y cyflwr pan fydd hynny’n digwydd? Gwnewch y contract hwnnw’n eglur. Dogfennwch pa wallau y gall swyddogaeth eu dychwelyd neu eu taflu, gwahaniaethwch rhwng gwallau adferadwy (gall y galwr geisio eto neu gilio’n synhwyrol) a rhai anadferadwy (ni all y galwr drwsio hyn a dylai ei ledaenu neu roi’r gorau iddi), a nodwch a yw’r swyddogaeth yn gadael y cyflwr heb ei newid ar fethiant. Mae’r briodwedd olaf hon, a elwir weithiau’n warant eithriad cryf, yn golygu bod galwad a fethodd fel pe na bai erioed wedi digwydd, sef yn union yr hyn sy’n galluogi galwr i geisio eto’n ddiogel.

Ar gyfer API cyhoeddus neu draws-dîm, mae’r contract hwn yn rhan o’r rhyngwyneb, mor real â mathau’r paramedrau. Dyluniwch dacsonomeg gwallau fach, sefydlog: set gyfyngedig o gategorïau fel gwall dilysu, heb ei ganfod, gwrthdaro, heb awdurdod, dibyniaeth-anghyraeddadwy, a gwall mewnol. Yna gall galwyr gangenni ar gategori heb barsio llinynnau. Mae tacsonomeg glir yn gwneud trin gwallau’n gyfansoddadwy ar draws llawer o wasanaethau, ac mae’n gwneud methiannau’n archwiliadwy, oherwydd bod pob methiant yn mapio i fath adnabyddus, enwedig.

Dilyswch wrth ffiniau ac amddiffynnwch heb baranoia

Trinwch ddata sy’n croesi ffin ymddiriedaeth (cais rhwydwaith, ffeil, mewnbwn defnyddiwr, neges o wasanaeth arall) fel un gelyniaethus nes iddo gael ei ddilysu, a’i ddilysu wrth y ffin, unwaith, yn drylwyr. Dyma raglennu amddiffynnol wedi’i gymhwyso â barn. Y tu mewn i fodiwl y mae ei fewnbynnau eisoes wedi’u dilysu gennych, mae gwiriadau dianghenraid ar bob llinell yn cuddio’r rhesymeg ac yn atal yr union fethiannau y byddech eisiau eu gweld. Y ddisgyblaeth yw: amddiffynnwch yn galed wrth yr ymylon, ymddiriedwch o’u mewn. Dilyswch strwythur, ystodau, a rheidrwydd lle mae data’n mynd i mewn, ei drosi’n fathau sy’n gwneud cyflyrau anghyfreithlon yn amhosibl eu cynrychioli, a gadewch i’r cod mewnol dybio ei fod yn gweithio gyda data glân.

Mae gan baranoia gost real. Mae cod wedi’i fygu â gwiriadau null a changhennau amddiffynnol yn anos ei ddarllen, a gwaeth, mae’n aml yn troi methiant clir yn ysgwyd ysgwyddau tawel, gan ddychwelyd rhagosodiad lle dylai fod wedi codi larwm. Nid diogelwch yw amddiffynoldeb sy’n mygu bygiau; gohirio ydyw.

Gwnewch ailgeisiadau’n ddiogel, wedi’u ffinio, ac yn gwrtais

Mae llawer o namau’n dros dro: hic rhwydwaith byrhoedlog, gwasanaeth yn ailgychwyn, cystadleuaeth clo fer. Mewn unrhyw system ddosbarthedig (pennod 3.3), mae’r methiannau rhannol hyn yn achos normal yn hytrach na’r eithriad. Ailgeisio yw’r ymateb naturiol, ond mae dolen ailgeisio naïf yn wn wedi’i lwytho. Yn gyntaf, gwnewch y weithred rydych yn ei hailgeisio yn hunanddigyfnewid, sy’n golygu bod ei chyflawni ddwywaith yn cael yr un effaith â’i chyflawni unwaith. Heb hunanddigyfnewid, gall ailgais ar ôl terfyn amser godi tâl ar gerdyn ddwywaith neu greu dau gofnod, oherwydd ni allwch ddweud a fethodd yr ymgais gyntaf neu ai colli ei chydnabyddiaeth yn unig a wnaeth. Defnyddiwch allweddi hunanddigyfnewid ar gyfer ysgrifennu fel y gall y derbynnydd adnabod a dad-ddyblygu ailadroddiad.

Yn ail, rhowch derfyn amser ar bob galwad bell fel na all dibyniaeth grog eich crogi chi. Yn drydydd, bylchwch ailgeisiadau gydag ôl-dyniad esbonyddol, gan ddyblu’r arhosiad ar ôl pob ymgais, ac ychwanegwch siglo (oedi bach ar hap) fel nad yw mil o gleientiaid yn adfer ar unwaith yn cydamseru i mewn i ruthr sy’n bwrw’r gwasanaeth sy’n adfer yn ôl i lawr eto. Yn bedwerydd, cyfyngwch nifer yr ailgeisiadau a’r amser cyfan, yna rhowch y gorau iddi’n raslon. Mae ailgeisiadau heb derfynau, ôl-dyniad, siglo, a hunanddigyfnewid yn un o’r ffyrdd mwyaf cyffredin y mae hic bach yn dod yn doriad gwasanaeth hunan-achosedig.

Ychwanegwch dorwyr cylched, cyfrannau gwrth-ddŵr, a dirywiad graslon yn y cod

Pan fydd dibyniaeth wir i lawr, mae ailgeisio dim ond yn gwastraffu ymdrech ac yn dyfnhau’r twll. Mae torrwr cylched yn gwylio cyfradd fethiant galwadau i ddibyniaeth ac, unwaith y bydd methiannau’n croesi trothwy, yn “agor” i fethu ar unwaith am gyfnod oeri yn hytrach nag aros am alwadau tynghedig. Ar ôl y cyfnod oeri mae’n gadael galwad brawf drwodd ac yn cau eto os yw’r ddibyniaeth wedi adfer. Mae hyn yn amddiffyn eich galwyr chi (methiannau cyflym, rhagweladwy yn lle amserau-allan pentyrrog) a’r ddibyniaeth sy’n cael trafferth (lle i anadlu er mwyn adfer). Mae’r patrwm cyfran wrth-ddŵr, wedi’i enwi ar ôl cabanau dŵr-dynn llong, yn ynysu adnoddau fel na all un ddibyniaeth ddirlawn ddefnyddio pob edafedd neu gysylltiad a suddo’r broses gyfan; rhowch i bob dibyniaeth ei phwll ei hun sydd wedi’i ffinio.

Mae’r patrymau hyn yn paru â dirywiad graslon ar lefel y cod: pan na fydd dibyniaeth nad yw’n hanfodol ar gael, dychwelwch ganlyniad llai ond defnyddiol yn hytrach na gwall. Dangoswch ddata wedi’i storio dros dro gyda nodyn am ei hynafedd, cuddiwch y panel personoli, ciwiwch yr ysgrifennu ar gyfer yn ddiweddarach. Dyma’r ategiad lleol i gydnerthedd lefel-system pennod 3.5: mae’r bensaernïaeth yn darparu diswyddedd ar draws peiriannau, ac mae eich cod yn darparu ymddygiad synhwyrol pan fydd darn ar goll.

Lapiwch wallau â chyd-destun a pheidiwch byth â’u llyncu

Mae gwall sy’n darllen “connection refused” ddeg haen i fyny o’r man y digwyddodd bron yn ddiwerth. Wrth i wall ledaenu, lapiwch ef â chyd-destun: beth roeddech yn ceisio’i wneud, pa endid neu gais, pa ddibyniaeth, gan gadw’r achos gwreiddiol fel nad yw’r gwraidd yn cael ei golli. Mae ieithoedd a llyfrgelloedd da yn cefnogi’r cadwyno gwallau hwn yn uniongyrchol. Y nod yw bod un llinell log yn dweud wrth y peiriannydd ar-alwad beth a fethodd, yn ystod pa weithred, ar gyfer pa fewnbwn. Dyma’r deunydd crai ar gyfer arsylladwyedd pennod 9.2 a datrys namau pennod 2.15.

Y pechod marwol yw llyncu gwall: bloc dal gwag, gwerth dychwelyd wedi’i anwybyddu, catch sy’n logio ar lefel dadfygio ac yn parhau fel pe na bai dim wedi digwydd. Nid yw gwall a lyncwyd yn diflannu; mae’n ailymddangos yn ddiweddarach fel data llygredig neu ddiffyg annealladwy, bellach wedi’i ddatgysylltu oddi wrth ei achos. Rhaid i bob gwall gwrdd ag un o dair tynged: ei drin (adfer neu ddirywio), ei lapio a’i ledaenu, neu, ar ben y pentwr, ei logio â chyd-destun llawn a methu. Os ydych yn dal gwall ac yn gwneud dim un o’r rhain, rydych wedi dewis cuddio digwyddiad yn y dyfodol oddi wrth eich hunan yn y dyfodol.

Cyfaddawdau: manteision ac anfanteision

DullManteisionAnfanteision
EithriadauLlwybr hapus glân; anodd anwybyddu os na wiriwydLlif rheolaeth cudd; temtio dileu dal-popeth
Gwerthoedd gwall eglur / mathau CanlyniadMethiant gweladwy yn y llofnod; gorfodi triniaethMwy o seremoni; gellir anwybyddu heb orfodaeth
Methu’n-gyflymYn dod â bygiau i’r wyneb yn uchel, yn agos at yr achosProfiad defnyddiwr gwael os defnyddir wrth yr ymyl
Methu’n-ddiogelYn parhau i wasanaethu; yn amddiffyn defnyddwyr a dataGall guddio llygredd os defnyddir lle roedd angen methu’n-gyflym
Ailgeisiadau ag ôl-dyniadYn goroesi namau dros dro yn awtomatigYn ymhelaethu llwyth ac yn ysgrifennu dwbl heb hunanddigyfnewid
Torrwr cylchedMethiannau cyflym; yn gadael i ddibyniaethau adferCyflwr a chymhwyso ychwanegol; gall guddio problem barhaus
Dilysu amddiffynnol wrth ffiniauYn dal data gwael yn gynnar, unwaith, yn uchelOs gorwneir, mae’n annibendod y rhesymeg ac yn cuddio methiannau real

Y prif densiwn yw rhwng gwelededd a sŵn. Triniwch wallau’n rhy dawel a byddwch yn cuddio problemau nes eu bod yn ddrud; triniwch nhw’n rhy uchel a chymhareb yn barhaus, a byddwch yn boddi’r signal mewn seremoni ac yn cuddio’r methiannau sy’n bwysig. Datryswch hyn yn ôl lleoliad a bwriad. Byddwch yn uchel ac yn llym wrth ffiniau, lle mae data gwael a methiannau dibyniaeth yn dod i mewn. Byddwch yn dawel ac yn ymddiriedus yn y tu mewn, lle mae mewnbynnau eisoes yn lân. Penderfynwch fethu’n-gyflym yn erbyn methu’n-ddiogel ar gyfer pob ffin ac ysgrifennwch hynny i lawr. Y nod yw cod lle mae gan bob methiant un perchennog clir ac un dynged glir, a lle nad yw dim byd yn syrthio’n dawel rhwng y craciau.

Cwestiynau i’w trafod gyda’ch tîm

  1. A oes gennym un dacsonomeg gwallau a chonfensiwn trin-gwallau a rennir ar draws ein gwasanaethau, neu a yw pob tîm yn byrfyfyrio? Ar dîm mawr, dyma’r gwahaniaeth rhwng methiannau sy’n cyfansoddi a methiannau sy’n drysu. Pan fydd un gwasanaeth yn dychwelyd HTTP 500 am broblem ddilysu, un arall yn taflu eithriad teip-benodol, a thrydydd yn dychwelyd null, mae pob integreiddiad yn dod yn drafodaeth a phob digwyddiad yn ymarfer cyfieithu. Dewch â siambrau o’r un methiant rhesymegol, dyweder “cofnod heb ei ganfod,” fel y mae’n ymddangos ar draws tri o’ch gwasanaethau, a gweld pa mor wahanol y maent yn ei arwyddo. Dylai’r ateb ddod yn safon ysgrifenedig: set gyfyngedig o gategorïau gwallau, ffordd gyson o’u harwyddo, a leintiwr neu restr wirio adolygu sy’n ei gorfodi. Mae cysondeb yma’n talu ar ei ganfed ym mhob integreiddiad, archwiliad, a shifft ar-alwad yn y dyfodol.

  2. Ar gyfer pob ffin dyngedfennol, a ydym wedi dewis methu’n-gyflym neu fethu’n-ddiogel yn fwriadol, ac a yw’r cod yn cyfateb i’r dewis hwnnw? Nid yw’r rhan fwyaf o dimau erioed wedi gwneud y penderfyniad hwn yn eglur, sy’n golygu ei fod wedi’i wneud drostynt gan bwy bynnag a ysgrifennodd y cod yn gyntaf, ac yn anghyson. Mae’r ystyriaethau cystadleuol yn real: mae methu’n-ddiogel yn cadw defnyddwyr yn cael eu gwasanaethu ond gall adael i lygredd ledaenu, tra bod methu’n-gyflym yn amddiffyn data ond gall droi toriad dibyniaeth fach yn fethiant gweladwy. Dewch â’ch hanes digwyddiadau a gofynnwch, ar gyfer y gwaethaf ohonynt, a fethodd y cod yn y ffordd y byddech wedi’i dewis pe gofynnid ymlaen llaw. Y dystiolaeth rydych ei heisiau yw map o’ch ffiniau gyda label bwriadol ar bob un, yn enwedig lle bynnag mae arian, diogelwch, neu gofnodion dinasyddion yn gysylltiedig. Lle mae’r label a’r cod yn anghytuno, rydych wedi dod o hyd i’ch trwsiad nesaf.

  3. Pryd wnaethom ni ymarfer llwybr gwall yn fwriadol ddiwethaf, ac a wnaeth ymddwyn fel y’i dyluniwyd? Fel arfer, llwybr y gwall yw’r cod lleiaf profedig sydd gennych, ac eto dyma lle mae ymddiriedaeth yn cael ei hennill neu ei cholli, ac mae “rydym yn methu’n ddiogel” yn honiad na allwch ei gefnogi os na wnaethoch erioed ei wylio’n digwydd. Mae dolen ailgeisio heb hunanddigyfnewid, torrwr cylched â throthwy anghywir, eithriad a lyncwyd mewn cangen a gyrhaeddir yn anaml: mae’r rhain yn cuddio nes bod digwyddiad real yn dod o hyd iddynt ar eich cyfer. Dewch â chanlyniadau chwistrellu methiant yn fwriadol (dibyniaeth a laddwyd, terfyn amser wedi’i ysgogi, llwyth-tâl camffurfiedig) i amgylchedd realistig. Y gweithred sy’n dilyn yw gwneud chwistrellu methiant yn drefn arferol, fel bod ymddygiad adfer, dirywiad, a methu’n-ddiogel yn cael eu gwirio’n barhaus yn hytrach na’u gobeithio. Mae unrhyw lwybr gwall na wnaethoch chi erioed ei ysgogi yn addewid na wnaethoch chi ei brofi.

  4. Pa rai o’n gweithredoedd ysgrifennu sy’n hunanddigyfnewid, a lle byddai ailgais ar ôl cydnabyddiaeth a gollwyd yn dyblygu effaith byd-real fel taliad neu gofnod? Ailgeisio yw’r adwaith cydnerthedd mwyaf cyffredin ac, os gwneir yn ddiofal, y ffordd fwyaf cyffredin y mae hic dros dro yn troi’n arian neu ddata wedi’i ddyblygu. Ar dîm mawr, mae rhesymeg ailgeisio’n aml yn byw mewn cleientiaid a rennir, meddalwedd canol, a gwasanaethau unigol i gyd ar unwaith, felly gellir ailgeisio un ysgrifeniad ar sawl haen heb i unrhyw un fod yn berchen ar yr ymddygiad cyfan. Y tyniad cystadleuol yw bod allweddi hunanddigyfnewid, dad-ddyblygu, a chanlyniadau cais wedi’u storio’n ychwanegu storio a chod, ac mae timau dan bwysau cyflenwi’n eu hepgor ar gyfer ysgrifeniadau y maent yn tybio’n anghywir sy’n ddiogel. Dewch â rhestr o’ch ysgrifeniadau sy’n weladwy’n allanol, pob un wedi’i farcio a yw’n cario allwedd hunanddigyfnewid a sut mae’r derbynnydd yn adnabod ac yn dad-ddyblygu ailadroddiad. Mewn lleoliadau menter a llywodraeth, fflagiwch y rhai sy’n symud arian neu’n newid cofnod dinesydd yn gyntaf, oherwydd mae taliad dwbl neu fudd-dal wedi’i ddyblygu’n ganfyddiad archwiliad a hyd yn oed weithiau’n agoriad cyfreithiol, nid diffyg yn unig.

  5. A yw ein terfynau amser, torwyr cylched, a chyfrannau gwrth-ddŵr yn dod o un llyfrgell a rennir, wedi’i phrofi, neu a yw pob tîm yn eu llunio â llaw? Mae’r patrymau hyn yn hawdd eu disgrifio ac yn hawdd eu cael yn anghywir mewn ffordd gynnil: terfyn amser sydd ar goll, trothwy torrwr nad yw byth yn baglu, pwll cysylltiad wedi’i faint fel bod un dibyniaeth araf yn llwgu’r broses gyfan. Pan fydd pob tîm yn eu hail-weithredu, rydych yn cronni llawer o gopïau ychydig wedi torri a dim un lle unigol i drwsio diffyg unwaith y dowch o hyd iddo. Yr ystyriaeth gystadleuol yw bod llyfrgell a rennir yn gosod rhyngwyneb cyffredin a chyflymder uwchraddio, a gall timau â cyfundrefnau rhedeg neu anghenion oedi anghyffredin wrthwynebu neu ei osgoi. Dewch ag arolwg o sawl gweithrediad ailgeisio-a-thorrwr gwahanol sy’n rhedeg mewn cynhyrchiad mewn gwirionedd, a pha wasanaethau sydd o hyd heb unrhyw derfyn amser ar eu galwadau allanol o gwbl. I fenter neu asiantaeth fawr, mae llyfrgell a rennir wedi’i wirio hefyd yn rhoi un cydran i adolygwyr diogelwch ac archwilwyr ei ardystio yn hytrach na dwsinau, sy’n lleihau cost pob adolygiad.

  6. Pe bai digwyddiad wedi digwydd neithiwr, a allai unrhyw beiriannydd ar-alwad ei olrhain o un llinell log, ac a allai archwiliwr yn ddiweddarach weld pob methiant a gofnododd y system? Mae gwall wedi’i lapio, ei gategoreiddio, a’i logio’n dda yn wahaniaeth rhwng diagnosis deng munud a chloddfa hanner nos, ac mae un a lyncwyd yn ddigwyddiad yn y dyfodol yr ydych wedi’i guddio oddi wrthych eich hun. Ar dîm mawr, mae methiannau’n croesi llawer o gamau gwasanaeth, felly daw’r gwerth o gyd-destun cyson ac adnabyddwyr cydberthynas sy’n goroesi’r camau hynny, nid o ddiwydrwydd unrhyw un tîm. Y tensiwn cystadleuol yw cost a sŵn: logiwch bopeth a byddwch yn boddi’r signal a thalu i’w storio; logiwch ormod o ychydig ac ni allwch ail-lunio beth ddigwyddodd. Dewch â methiant real diweddar a cherddwch ei lwybr o’r dechrau i’r diwedd, gan nodi pob cam lle collwyd cyd-destun neu lle daliwyd a diystyriwyd gwall. Mewn systemau rheoledig a llywodraethol, trinwch hyn fel priodwedd cydymffurfiaeth, oherwydd mae methiant na ellir ei archwilio, neu benderfyniad na allwch ei esbonio flynyddoedd yn ddiweddarach, yn agoriad cyfreithiol ac nid bwlch gweithredol yn unig.

Lens sector

Cwmni newydd. Gyda llond dwrn o beirianwyr a dim rhedfa i’w sbario, gwariwch eich cyllideb trin-gwallau lle mae methiant yn eich costio cwsmer neu eich data: rhowch derfyn amser ar bob galwad allanol, gwnewch eich ysgrifeniadau symud-arian yn hunanddigyfnewid, ac ychwanegwch reol leintio yn erbyn gwallau a anwybyddwyd. Hepgorwch y fframwaith cywrain; mae math Canlyniad ar gyfer swyddogaethau craidd a dirywiad graslon ar ddibyniaethau nad ydynt yn hanfodol yn prynu’r rhan fwyaf o’r diogelwch am ychydig ddyddiau o waith. Methwch yn gyflym mewn datblygu fel bod bygiau’n dod i’r wyneb yn uchel, a gwrthsefyll llunio torrwr cylched â llaw cyn i chi gael dibyniaeth sy’n ei gwarantu mewn gwirionedd.

Busnes bach. Heb arbenigwr cydnerthedd ar staff a chyllideb dynn, dibynnwch ar yr hyn y mae eich iaith, fframwaith, a darparwr cwmwl eisoes yn ei roi i chi yn hytrach nag adeiladu patrymau o’r dechrau: ciwiau wedi’u rheoli, ailgeisiadau ochr-darparwr, a therfynau amser llyfrgell yn cwmpasu mwy nag y mae’r rhan fwyaf o dimau’n ei ddisgwyl. Fframiwch y penderfyniad fel prynu yn erbyn adeiladu, a phrynwch lle bynnag y mae dibyniaeth aeddfed yn trin ailgeisiadau, ôl-dyniad, a hunanddigyfnewid ar eich rhan. Canolbwyntiwch eich sylw prin ar yr un neu ddwy ffin lle byddai trafodiad anghywir neu goll yn brifo mewn gwirionedd, a sicrhewch fod y rhain yn methu’n ddiogel ac yn gadael trywydd.

Menter. Ar draws llawer o dimau, cysondeb yw’r wobr: un dacsonomeg gwallau a rennir, llyfrgell gyffredin ar gyfer terfynau amser, ailgeisiadau, torwyr cylched, a chyfrannau gwrth-ddŵr, a leintiwr a rhestr wirio adolygu sy’n eu gorfodi yn y biblinell. Bwydwch bob gwall i mewn i lwyfan arsylladwyedd unedig gydag adnabyddwyr cydberthynas fel bod methiant yn olrheinadwy ar draws camau gwasanaeth, a safoni penderfyniadau methu’n-gyflym yn erbyn methu’n-ddiogel ar gyfer pob ffin fel bod archwiliadau’n dod o hyd i batrwm wedi’i ddogfennu, amddiffynadwy yn hytrach na chasgliad o arferion lleol. Llywodraethwch y llyfrgell a rennir fel cynnyrch gwirioneddol, oherwydd bod diffyg a drwsiwyd unwaith yno’n ddiffyg a drwsiwyd ym mhobman.

Llywodraeth. Mae cywirdeb, methiant diogel, a llwybr archwilio parhaol yn ymrwymiadau, nid yn ddewisiadau. Methwch yn gyflym ar unrhyw reidrwydd a dorrwyd sy’n cyffwrdd ag arian neu gymhwysedd, dilyswch bob mewnbwn sy’n wynebu dinasyddion wrth y ffin, ac ysgrifennwch bob methiant i log anghyfnewidiol gyda digon o gyd-destun fel y gellir esbonio ac adolygu penderfyniad flynyddoedd yn ddiweddarach. Mae caffael a bywyd hir systemau’n golygu bod yn rhaid dogfennu’r contractau gwallau fel y gall gweision sifil gynnal y cod ymhell ar ôl i’r awduron gwreiddiol fynd, a rhaid i unrhyw gydran gwerthwr ddatgelu ei hymddygiad methiant yn hytrach na’i chuddio y tu ôl i ryngwyneb tywyll.

Enghreifftiau

Cwmni newydd. Mae cwmni newydd pedwar person yn cyhoeddi ap sy’n galw darparwr taliadau trydydd parti a gwasanaeth e-bost. Yn gynnar, maent yn ychwanegu dolen ailgeisio naïf ac yn ddi-oed yn codi tâl dwbl ar gwsmer pan fydd terfyn amser yn cuddio tâl llwyddiannus. Mae’r datrysiad yn dysgu’r wers: maent yn ychwanegu allweddi hunanddigyfnewid at bob ysgrifeniad, yn rhoi terfyn amser ar bob galwad allanol, ac yn newid i ôl-dyniad esbonyddol gyda siglo. Maent yn mabwysiadu math Canlyniad ar gyfer swyddogaethau gwasanaeth craidd fel bod methiant yn ymddangos yn y llofnod, a rheol leintio’n fflagio unrhyw wall a anwybyddwyd. Pan fydd anfon e-bost yn methu, mae’r broses dalu’n dirywio’n raslon drwy giwio’r neges yn hytrach na rhwystro’r gwerthiant. Mae’r ddisgyblaeth yn costio ychydig ddyddiau ac yn eu harbed rhag dosbarth o ddigwyddiadau a fyddai wedi costio llawer mwy iddynt mewn ad-daliadau ac ymddiriedaeth.

Menter. Mae cwmni logisteg byd-eang yn rhedeg cannoedd o wasanaethau ac yn safoni trin gwallau ar eu traws i gyd. Mae pob gwasanaeth yn mapio methiannau i dacsonomeg a rennir (dilysu, heb-ei-ganfod, gwrthdaro, dibyniaeth-anghyraeddadwy, mewnol), fel bod galwyr yn cangenni ar gategori yn hytrach na pharsio negeseuon. Mae llyfrgell gyffredin yn darparu torwyr cylched, ailgeisiadau wedi’u ffinio ag ôl-dyniad a siglo, a phyllau cysylltiad wedi’u ffinio â chyfran, fel nad oes neb yn llunio’r patrymau hyn â llaw yn anghywir. Mae pob gwall yn cael ei logio gyda chyd-destun cydberthynas sy’n bwydo llwyfan arsylladwyedd pennod 9.2, fel y gall peiriannydd ar-alwad olrhain methiant ar draws camau gwasanaeth o un llinell. Gan fod y safon yn unffurf ac yn cael ei gorfodi yn y biblinell, mae peirianwyr yn symud yn hyderus ar draws gwasanaethau anghyfarwydd a gall archwilwyr weld bod pob methiant yn cael ei gofnodi, ei gategoreiddio, a’i olrhain.

Llywodraeth. Mae asiantaeth fudd-daliadau genedlaethol yn adeiladu system gymhwysedd a thaliad lle gall ateb anghywir wrthod arian rhent i rywun neu dalu gormod o’r pwrs cyhoeddus. Mae cywirdeb a methiant diogel yn anfargeiniadwy, felly mae’r cod yn methu’n gyflym ar unrhyw reidrwydd ariannol a dorrwyd: mae cyfrifiad na all gysoni’n gwrthod postio yn hytrach na phostio ffigur anghywir. Mae pob mewnbwn sy’n wynebu dinasyddion yn cael ei ddilysu wrth y ffin, a gwneir cyflyrau anghyfreithlon yn amhosibl eu cynrychioli yn y mathau parth. Mae pob methiant yn cael ei ysgrifennu i log archwilio anghyfnewidiol gyda chyd-destun llawn, gan fodloni’r gofyniad cyfreithiol y gellir esbonio ac adolygu penderfyniadau flynyddoedd yn ddiweddarach. Lle mae dibyniaeth nad yw’n hanfodol fel rhagolwg dogfen i lawr, mae’r system yn dirywio’n raslon fel y gall gweithiwr achos barhau i brosesu’r hawliad. Mae gweision sifil newydd yn etifeddu cod y mae ei gontractau gwallau wedi’u dogfennu, fel y gallant ei gynnal yn ddiogel ymhell ar ôl i’r awduron gwreiddiol symud ymlaen.

Achos busnes: cymhellion, ROI, a TCO

Mae’r elw ar drin gwallau disgybledig yn ymddangos fel llai o ddigwyddiadau, digwyddiadau byrrach, a rhai rhatach. Nid yw’r rhan fwyaf o doriadau cynhyrchiad yn egsotig; maent yn olrhain i eithriad a lyncwyd, terfyn amser sydd ar goll, storm ailgeisio, neu ffin a ymddiriedodd mewn data y dylai fod wedi’i ddilysu. Mae pob un yn ataladwy â’r patrymau yma, ac mae pob digwyddiad a atalwyd yn arbed nid dim ond cost uniongyrchol amser segur ond costau cyfansoddol ymateb brys, colli cwsmeriaid, ac ymchwilio. Gan y gellir diagnosio gwall wedi’i lapio, wedi’i logio’n dda mewn munudau yn hytrach nag oriau, mae’r amser cymedrig i adfer yn gostwng, ac mae’r gyfradd methiant-newid yn gostwng gydag ef wrth i beirianwyr roi’r gorau i ofni llwybr y gwall.

Mae’r gost i fabwysiadu’n gymedrol ac yn bennaf yn un-tro. Ysgrifennwch dacsonomeg gwallau, darparu llyfrgell a rennir ar gyfer ailgeisiadau a thorwyr cylched fel nad yw timau’n eu hail-ddyfeisio’n wael, ychwanegu rheolau leintio yn erbyn gwallau a anwybyddwyd, ac adeiladu’r arfer o chwistrellu methiant. Mae cost esgeulustod yn cronni’n dawel: mae gwallau a lyncwyd yn cronni’n ddata llygredig sy’n ddrud i’w ddadwneud, ac mae triniaeth anghyson yn lluosi cost pob integreiddiad a phob archwiliad. Mewn lleoliadau rheoledig a llywodraethol, mae methiant na ellir ei archwilio’n agoriad cydymffurfiaeth a chyfreithiol, nid problem beirianneg yn unig. I wneud yr achos i arweinyddiaeth, cysylltwch ddisgyblaeth trin-gwallau â’r metrigau y maent eisoes yn eu gwylio: amlder digwyddiadau, amser cymedrig i adfer, cyfradd methiant-newid, a chanfyddiadau archwilio.

Gwrth-batrymau a maglau

  • Llyncu tawel: blociau dal gwag a gwerthoedd dychwelyd a anwybyddwyd sy’n troi methiant yn ddirgelwch oedi, ddatgysylltiedig.
  • Dileu dal-popeth: catch eang sy’n logio neges generig ac yn diystyru’r gwall gwreiddiol a’i gyd-destun.
  • Ailgeisio heb hunanddigyfnewid: ailredeg ysgrifeniadau nad ydynt yn hunanddigyfnewid ar ôl terfyn amser, gan godi tâl dwbl neu ddyblygu cofnodion.
  • Stormydd ailgeisio: dim ôl-dyniad, dim siglo, a dim terfyn, fel bod cleientiaid yn cydamseru ac yn morthwylio dibyniaeth sy’n adfer yn ôl i lawr.
  • Dim terfynau amser: galwadau pell diderfyn sy’n gadael i un ddibyniaeth grog ddisbyddu edafedd a rhewi’r broses gyfan.
  • Eithriadau fel llif rheolaeth: taflu a dal ar gyfer canlyniadau cyffredin fel “heb ei ganfod,” gan guddio rhesymeg ac arafu cod.
  • Paranoia amddiffynnol: gwiriadau ar bob llinell sy’n claddu’r rhesymeg ac yn trosi methiannau real yn rhagosodiadau tawel.
  • Gwallau math-llinyn: galwyr yn parsio testun neges gwall oherwydd nad oes tacsonomeg sefydlog, wedi’i chategoreiddio i gangenni arni.
  • Methu’n-ddiogel lle roedd angen methu’n-gyflym: parhau ar gyflwr llygredig mewn system lle mae ateb anghywir yn waeth na dim ateb.

Model aeddfedrwydd

  • Lefel 1, Cychwyn: Mae trin gwallau’n ad hoc ac yn adweithiol, wedi’i benderfynu fesul datblygwr. Mae blociau dal gwag a gwerthoedd dychwelyd a anwybyddwyd yn gyffredin, mae ailgeisiadau’n naïf, terfynau amser ar goll, ac mae methiannau’n dod i’r wyneb fel data llygredig neu ddiffygion dirgel heb log cyson.
  • Lefel 2, Datblygu: Mae timau’n mabwysiadu arferion sylfaenol, ond yn anghyson. Mae gwallau’n cael eu logio gyda pheth cyd-destun, mae llyncu amlwg yn cael ei ddigalonni mewn adolygiad, ac mae terfynau amser ac ailgeisiadau syml yn bodoli, ac eto mae confensiynau’n amrywio rhwng gwasanaethau, mae hunanddigyfnewid yn frith, ac anaml y profir llwybr y gwall.
  • Lefel 3, Safoni: Mae tacsonomeg gwallau a chonfensiwn triniaeth a rennir wedi’u dogfennu a’u gorfodi ar draws y sefydliad. Mae dilysu ffin, ailgeisiadau hunanddigyfnewid ag ôl-dyniad a siglo, torwyr cylched, cyfrannau gwrth-ddŵr, a lapio gwallau’n safonol, wedi’u darparu gan lyfrgelloedd cyffredin, ac mae pob gwall yn bwydo piblinell arsylladwyedd unedig.
  • Lefel 4, Rheoli: Mae ymddygiad trin-gwallau’n cael ei fesur yn erbyn llinellau sylfaen a’i reoli gyda data. Mae cyfraddau ailgeisio, tripiau torrwr cylched, cyfrifon terfyn amser, canfyddiadau gwallau a lyncwyd o ddadansoddi statig, amser cymedrig i adfer, a chyfradd methiant-newid yn cael eu holrhain fesul gwasanaeth; mae trothwyon torrwr cylched a therfynau amser yn cael eu cymhwyso o ddata oedi a methiant a arsylwyd yn hytrach na’u dyfalu; mae chwistrellu methiant yn rhedeg ar amserlen; ac mae timau’n adolygu’r metrigau hyn i ddal atchweliadau a dal pob dewis methu’n-gyflym neu fethu’n-ddiogel i dystiolaeth.
  • Lefel 5, Cerddorfa: Mae cydnerthedd wedi’i integreiddio â chynllunio cyflenwi a risg ac yn cael ei wella’n barhaus. Mae’r dacsonomeg, y llyfrgelloedd a rennir, a’r safonau’n esblygu o bob digwyddiad, mae arbrofion anhrefn a chwistrellu methiant yn drefn arferol, ac mae’r sefydliad yn addasu terfynau amser, trothwyon torrwr, strategaethau dirywiad, a phenderfyniadau ffin wrth i draffig, dibyniaethau, a’r darlun risg newid.

Syniadau ar gyfer trafodaeth

  1. Ble yn eich cronfa god ar hyn o bryd y mae gwall yn cael ei lyncu, a sut y byddech yn gwybod pe byddech yn anghywir nad yw’n digwydd?
  2. Pa rai o’ch gweithredoedd ysgrifennu sy’n hunanddigyfnewid, a pha rai fyddai’n gweithredu ddwywaith pe bai ailgais yn tanio ar ôl cydnabyddiaeth a gollwyd?
  3. A ddylai “defnyddiwr heb ei ganfod” fod yn eithriad, gwerth gwall, neu ganlyniad normal, ac a yw eich tîm yn ateb hynny’n gyson?
  4. Beth yw eich rheol wirioneddol ar gyfer ble mae dilysu’n digwydd, ac a allwch bwyntio at ffin sy’n ymddiried mewn data na ddylai?
  5. Sut ydych chi’n penderfynu ar y trothwy a’r cyfnod oeri ar gyfer torrwr cylched, a sut y byddech yn gwybod bod y gosodiadau presennol yn anghywir?
  6. Pe bai archwiliwr yn gofyn i weld pob methiant a brofodd eich system y mis diwethaf, a allech chi ei gynhyrchu, wedi’i gategoreiddio a chyda chyd-destun?

Casgliadau allweddol

  • Gwahanwch namau, gwallau, a methiannau, a thorrwch y gadwyn cyn i wall mewnol ddod yn fethiant gweladwy.
  • Dewiswch fethu’n-gyflym neu fethu’n-ddiogel yn fwriadol ar gyfer pob ffin, a gwnewch gontract trin-gwallau pob swyddogaeth yn eglur.
  • Dilyswch yn galed wrth ffiniau ymddiriedaeth ac ymddiriedwch o’u mewn; mae amddiffynoldeb sy’n cuddio methiannau’n ohiriad, nid yn ddiogelwch.
  • Gwnewch ailgeisiadau’n ddiogel gyda hunanddigyfnewid, terfynau amser, ôl-dyniad esbonyddol, a siglo, ac ychwanegwch dorwyr cylched a dirywiad graslon yn y cod.
  • Lapiwch wallau â chyd-destun, eu bwydo i arsylladwyedd, a pheidiwch byth â’u llyncu; rhaid trin, lledaenu, neu logio a datgelu pob gwall.

Cyfeiriadau a darllen pellach

  • 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