2.17

View in English

2.17 Cydredoldeb a Pharaleliaeth

Trosolwg a chymhelliant

Cydredoldeb yw’r gelfyddyd o strwythuro rhaglen fel tasgau annibynnol a all wneud cynnydd heb aros am ei gilydd. Paraleliaeth yw gweithredu’r tasgau hynny mewn gwirionedd ar yr un eiliad ar sawl prosesydd. Nid pedantiaeth yw’r gwahaniaeth hwn. Mae cydredoldeb yn ffordd o drefnu cod fel nad yw galwad rhwydwaith araf yn rhewi’r rhaglen gyfan; mae paraleliaeth yn ffordd o orffen cyfrifiad mawr yn gynt drwy ei wasgaru ar draws creiddiau. Mae drysu rhwng y ddau yn arwain timau i ychwanegu edafedd gan obeithio am gyflymder, a derbyn dim ond namau.

I dimau mawr, mae’r pwnc hwn yn bwysig oherwydd mai cydredoldeb yw’r man lle mae cywirdeb yn marw’n dawel. Gall un awdur sy’n ysgrifennu cod un-edefyn resymu drwyddo linell wrth linell, ond o’r eiliad y bydd sawl awdur yn rhannu cof ar draws edafedd, mae nifer y trefniadau posibl (interleavings) yn ffrwydro, a gall rhaglen sy’n pasio pob prawf fethu o hyd unwaith mewn miliwn dan lwyth cynhyrchu, nid gyda chwymp swnllyd ond gyda data llygredig, ceisiadau wedi hongian, a digwyddiadau na all neb eu hatgynhyrchu. Mae’r bennod hon yn adeiladu ar ffocws lefel-cod pennod 2.16 (peirianneg perfformiad) a sylfeini cyfrifiadura pennod 2.13, ac mae’n bwydo i broblemau cydgysylltu pennod 3.3 (systemau dosbarthedig), sef cydredoldeb ar draws peiriannau gyda chreulondeb ychwanegol rhwydwaith annibynadwy.

I fentrau, mae namau cydredoldeb yn namau trwybwn. Mae gwasanaethau traffig uchel yn byw neu’n marw yn ôl eu gallu i drin miloedd o geisiadau ar yr un pryd heb rasio ar gyflwr a rennir, a gall un cyfrifydd heb ei gydamseru lygru cyfriflyfr o dan lwyth. I lywodraeth, cywirdeb ac archwiliadwyedd sydd yn y fantol mewn systemau sy’n rhedeg am ddegawdau ac yn cyffwrdd â diogelwch, budd-daliadau, neu gofnodion cyhoeddus. Nid anghyfleustra yw ras mewn system dreth neu iechyd; mae’n ateb anghywir y bydd yn rhaid i rywun ei esbonio wedyn i gorff goruchwylio. Yn y ddau gyd-destun, yr un yw’r nod: gwneud y llwybr diogel yn ddiofyn, fel nad oes rhaid i bob un o’r bobl niferus sy’n cyffwrdd â’r cod fod yn arbenigwr cydredoldeb.

Egwyddorion allweddol

  • Cydredoldeb yw strwythur; paraleliaeth yw gweithrediad. Penderfynwch pa un sydd ei angen arnoch mewn gwirionedd cyn estyn am edafedd.
  • Cyflwr cyfnewidiol a rennir yw’r gelyn. Mae bron pob nam cydredoldeb yn olrhain yn ôl at ddau dasg yn cyffwrdd â’r un data newidiadwy.
  • Ffafriwch anghyfnewidioldeb a phasio negeseuon. Ni ellir rasio ar ddata na all newid, a mae negeseuon yn well na chof a rennir o ran diogelwch.
  • Ansicrwydd (non-determinism) yw craidd yr anhawster. Y nam sy’n ymddangos unwaith mewn mil o weithredoedd yw’r broblem gyfan, nid achos ymylol.
  • Cyfyngwch bopeth. Mae ciwiau, cyfrif edafedd, a gwaith heb eu cyfyngu yn troi pigyn yn doriad gwasanaeth.
  • Mae modelau lefel-uwch yn well na chloeon crai. Mae actorion, sianeli, a chydredoldeb strwythuredig yn rhoi diofyn diogel i lawer o awduron, a mae cost i bob clo.
  • Profwch y trefniadau (interleavings), nid dim ond y llwybr hapus. Ni all profion penderfynadwy ddal nam y mae ond trefn brin yn ei ddatgelu.

Argymhellion

Penderfynu a oes angen cydredoldeb neu baraleliaeth arnoch

Dechreuwch drwy enwi’r broblem. Os yw’ch gwasanaeth yn treulio’r rhan fwyaf o’i amser yn aros (ar gronfeydd data, galwadau rhwydwaith, neu ddisg), mae gennych lwyth gwaith sy’n rhwym-M/A (I/O-bound), a chydredoldeb yw’r ateb: strwythurwch y cod fel bod ceisiadau eraill yn symud ymlaen tra bo un yn aros. Gall un edefyn ag async/await, neu bwll bach, wasanaethu miloedd o geisiadau sy’n aros. Os yw’ch rhaglen yn hytrach yn rhwym-PU (CPU-bound), yn malu drwy gyfrifiadau gyda fawr o aros, yna paraleliaeth ar draws creiddiau sy’n prynu cyflymder, a dyma lle mae cyfraith Amdahl (gweler pennod 2.16) yn gosod y nenfwd: mae’r ffracsiwn cyfresol yn cyfyngu’ch cyflymiad ni waeth faint o greiddiau a ychwanegwch. Mesurwch pa gyfundrefn ydych chi ynddi cyn dylunio.

Trin cyflwr cyfnewidiol a rennir fel y gelyn

Mae bron pob diffyg cydredoldeb yn lleihau i’r un siâp: mae dau dasg yn darllen ac ysgrifennu’r un data newidiadwy heb gytuno ar drefn. Dyma gyflwr ras, ac mae’n cynhyrchu diweddariadau coll, gwrthrychau hanner-ysgrifenedig, a gwerthoedd sy’n torri anghyfnewidion yr oedd y cod yn tybio eu bod yn ddiogel. Yr amddiffyniad mwyaf dibynadwy yw cael llai o gyflwr cyfnewidiol a rennir. Rhowch i bob tasg ei ddata ei hun, pasiwch gopïau yn hytrach na chyfeiriadau, a chyfyngwch gyflwr newidiadwy i un perchennog y mae eraill yn ei gyrraedd drwy negeseuon. Pan fo’n rhaid i chi rannu mewn gwirionedd, gwnewch y rhannu’n eglur ac yn fach, fel y gall adolygydd weld pob man y cyffyrddir â’r cyflwr.

Ffafrio anghyfnewidioldeb a phasio negeseuon fel diofyn

Y data a rennir mwyaf diogel yw data na all newid. Gall gwrthrych anghyfnewidiol, unwaith y’i luniwyd, gael ei ddarllen gan unrhyw nifer o edafedd heb unrhyw gydamseru, oherwydd nid oes dim i rasio arno. Gwnewch anghyfnewidioldeb yn ddiofyn a newidioldeb yn eithriad bwriadol. Pan fo’n rhaid i dasgau gydgysylltu, ffafriwch basio negeseuon dros gof a rennir: yn lle rhannu newidyn cyffredin, gadewch i un dasg anfon y gwerth at y llall, sef yr athroniaeth y tu ôl i ddihareb Go “peidiwch â chyfathrebu drwy rannu cof; rhannwch gof drwy gyfathrebu.” Mae pasio negeseuon yn troi namau anweledig, sy’n dibynnu ar drefn, yn lif data eglur y gellir ei archwilio, ac mae’r eglurder hwnnw bron bob amser yn werth ei gost fesul neges mewn cod y mae llawer o bobl yn ei gynnal.

Estyn am fodelau lefel-uwch cyn cloeon crai

Mae clo â llaw yn gywir mewn egwyddor ac yn drychinebus mewn ymarfer, oherwydd bod pobl yn wael am resymu am bob trefniant posibl. Ffafriwch fodelau sy’n gwneud cydredoldeb diogel yn ddiofyn. Mae’r model actor yn rhoi cyflwr preifat a blwch post i bob actor: nid yw actorion byth yn rhannu cof, dim ond yn anfon negeseuon, felly mae dosbarthiadau cyfan o rasys yn diflannu. Mae prosesau cyfresol cyfathrebol (CSP), y model y tu ôl i sianeli mewn ieithoedd fel Go, yn cael prosesau annibynnol i basio gwerthoedd dros sianeli teipiedig. Mae cydredoldeb strwythuredig yn clymu hyd oes tasgau cydredol wrth gwmpas geiriadurol, fel na all tasgau bara’n hwy na’r bloc a’u crëodd, a mae gwallau’n lledaenu yn hytrach na diflannu. Mae async/await yn eich galluogi i ysgrifennu cod cydredol, rhwym-M/A, mewn arddull gyfresol. Mae pob un o’r rhain yn codi’r llawr ar gyfer yr awdur cyfartalog, sef yr hyn sydd ei angen ar dîm mawr.

Deall eich model cof, atomigedd, a gwelededd

Pan fyddwch yn rhannu cof, mae dwy briodwedd yn brathu. Ystyr atomigedd yw bod gweithrediad yn digwydd i gyd ar unwaith neu ddim o gwbl; nid yw cynyddiad plaen (x = x + 1) yn atomig, oherwydd ei fod yn darllen, yn adio, ac yn ysgrifennu fel tri cham y gall edefyn arall dorri ar eu traws, a dyna sut mae cyfrifyddion yn colli diweddariadau. Ystyr gwelededd yw bod ysgrifeniad gan un edefyn yn dod yn arsylladwy i un arall; heb gydamseru priodol, gall gwerth a ysgrifennwyd ar un craidd eistedd mewn storfa ddi-weld gan graidd arall, felly gall edefyn ddolennu am byth ar faner a osodwyd eisoes. Mae model cof eich iaith yn diffinio pryd mae ysgrifeniadau’n dod yn weladwy a pha drefniadau y caiff y crynhoydd (compiler) a’r prosesydd eu had-drefnu, felly ni ellwch dybio bod cod yn rhedeg yn y drefn y’i hysgrifennwyd. Defnyddiwch fathau atomig a chyntefigion cydamseru eich iaith yn hytrach na dyfeisio’ch cynllun di-glo eich hun.

Defnyddio cyntefigion cydamseru’n fwriadol, a dylunio yn erbyn stond farwol

Pan fo rhannu’n anochel, estynnwch am y cyntefig cywir a pharchwch ei gost. Mae clo neu mutex (eithrio ar y cyd) yn caniatáu i un edefyn ar y tro fynd i mewn i adran gritigol, ond mae’n cyfresu mynediad, felly mae clo poeth yn dod yn dagfa sy’n dileu budd sawl craidd. Mae semaffor yn cyfyngu faint o dasgau all fynd yn eu blaen ar unwaith, sef sut y cyfyngwch bwll. Mae gweithrediadau atomig yn cynnig diweddariadau di-glo ar gyfer gwerthoedd syml fel cyfrifyddion, yn rhatach na chlo ond yn hawdd eu camddefnyddio ar gyfer unrhyw beth cyfansawdd. Mae cloeon yn dwyn tri modd methiant clasurol. Mae stond farwol yn digwydd pan fo tasgau’n aros am ei gilydd mewn cylch a dim un yn gallu mynd yn ei flaen, yr achos ysgol-destun fod dau edefyn, pob un yn dal un clo ac eisiau’r llall. Mae stond fyw yn digwydd pan fo tasgau’n parhau i ymateb i’w gilydd ond heb wneud cynnydd. Mae newynu yn digwydd pan na chaiff tasg adnodd byth oherwydd bod eraill yn parhau i neidio o’i blaen. Mae’r disgyblaethau sy’n atal y rhain yn ddiriaethol: gosodwch drefn glo fyd-eang, daliwch gloeon yn fyr, ychwanegwch derfynau amser fel bod tasg sownd yn methu’n swnllyd, peidiwch byth â galw cod anhysbys tra’n dal clo, a defnyddiwch amserlennu teg lle mae newynu’n risg. Ysgrifennwch y rheolau hyn i lawr, oherwydd ni all awdur newydd eu hailddarganfod o’r cod yn unig.

Cyfyngu eich ciwiau, pyllau, a gwaith ar y gweill gyda gwrthbwysedd

Mae ciw heb ei gyfyngu yn fom amser. O dan bigyn traffig, mae gwaith yn cyrraedd yn gynt na’r gwacáu, mae’r ciw’n tyfu heb derfyn, mae cof yn llenwi, a mae’r gwasanaeth yn marw mewn ffordd sy’n edrych fel chwalfa cof-allan (out-of-memory) ddirgel yn hytrach na’r gorlwytho ydyw mewn gwirionedd. Cyfyngwch bob ciw, capiwch bob pwll edafedd, a chymhwyswch wrthbwysedd: pan fo’r system yn llawn, rhowch signal i fyny’r afon i arafu neu wrthod gwaith yn gyflym yn hytrach na derbyn gwaith diderfyn na allwch ei orffen. Meintiwch byllau i’r llwyth gwaith (tua nifer y creiddiau ar gyfer gwaith rhwym-PU, yn uwch ar gyfer gwaith rhwym-M/A lle mae edafedd yn aros gan mwyaf), a thriniwch y terfyn fel penderfyniad capasiti bwriadol. Mae hyn yn cysylltu â phatrymau gwydnwch pennod 3.3.

Defnyddio paraleliaeth data lle mae’r gwaith yn baralel-hawdd (embarrassingly parallel)

Mae rhai problemau’n hollti’n lân: cymhwyso’r un gweithrediad i bob elfen o set ddata fawr, heb i unrhyw elfen ddibynnu ar un arall. Dyma’r math cyfeillgaraf o baraleliaeth data, oherwydd bod ychydig o gyflwr a rennir i rasio arno a gall y cyflymiad nesáu at nifer y creiddiau, fel y dengys piblinellau map-lleihau, gweithrediadau arae paralel, a chod rhifiadol fectoreiddiedig i gyd. Hyd yn oed yma, parchwch gyfraith Amdahl: mae’r cam cyfuno neu leihau yn aml yn gyfresol ac yn cyfyngu eich enillion, a gall gorbenion hollti ddominyddu ar gyfer mewnbynnau bach. Estynnwch amdano pan fo’r gwaith fesul elfen yn sylweddol a’r elfennau’n wirioneddol annibynnol; fel arall mae’r fersiwn gyfresol symlaf yn aml yn ddigon cyflym ac yn llawer haws ei chadw’n gywir, pwynt y mae arferion adeiladu pennod 2.9 yn ei atgyfnerthu.

Profi a datrys namau cod ansicr yn fwriadol

Mae namau cydredoldeb yn ansicr, felly mae profion cyffredin, sy’n rhedeg un trefniant, gan mwyaf yn eu colli. Ymosodwch ar y broblem yn fwriadol gyda phrofion straen a fuzz sy’n rhedeg llawer o dasgau o dan amseru ar hap i ysgwyd trefniadau prin allan. Estynnwch am ganfodyddion ras a sanitizers edefyn, offer sy’n offeryniad mynediad cof i ddal rasys data hyd yn oed pan na ddigwyddodd y trefniant gwallus y tro hwn. Lle mae eich platfform yn ei gynnig, defnyddiwch efelychiad penderfynadwy neu amserlennwyr dan reolaeth sy’n ailchwarae trefniant penodol, gan droi heisenbug yn un atgynhyrchadwy, a dyluniwch fel bod hongiad cynhyrchu yn caniatáu i chi ddal cyflyrau edafedd a pherchnogaeth clo, sy’n cysylltu â disgyblaeth ddadfygio pennod 2.15. Yn anad dim, ffafriwch ddyluniadau (anghyfnewidioldeb, pasio negeseuon, un perchnogaeth) sy’n gwneud dosbarthiadau cyfan o’r namau hyn yn amhosibl, oherwydd mae nam na allwch ei greu yn un na fydd byth rhaid i chi ei ddadfygio.

Cyfaddawdau: manteision ac anfanteision

DullManteisionAnfanteision
Cof a rennir gyda chloeonCyflym fesul gweithrediad; cyfarwyddNamau ras, stond farwol, a gwelededd; anodd i lawer o awduron ei gadw’n gywir
AnghyfnewidioldebDim angen cydamseru; darlleniadau diogel-edefyn yn ddibwysCost copïo; lletchwith ar gyfer strwythurau mawr newidiadwy
Pasio negeseuon (actorion, sianeli)Llif data eglur; dosbarthiadau nam cyfan yn diflannuGorbenion fesul neges; gall guddio gwrthbwysedd os yw ciwiau’n ddiderfyn
Async/awaitCydredoldeb rhad ar gyfer gwaith rhwym-M/A; cod sy’n edrych yn gyfresolDim paraleliaeth ar gyfer gwaith PU; mae blocio un dasg yn stondio eraill
Cydredoldeb strwythuredigHydoes tasg eglur; gwallau’n lledaenu; dim tasgau’n gollwngNewydd, llai ar gael mewn rhai ecosystemau
Paraleliaeth dataCyflymiad bron-linol ar waith annibynnolNenfwd Amdahl; gorbenion yn dominyddu mewnbynnau bach
Atomigion / di-gloDim cystadleuaeth glo ar gyfer gwerthoedd symlHawdd iawn ei gael yn gynnil anghywir; anodd ei adolygu

Y tyndra canolog yw diogelwch yn erbyn cyflymder crai, a’r datrysiad yw prynu cywirdeb yn gyntaf a gwario perfformiad dim ond lle mae mesuriad yn profi bod raid. Mae cloi cof-a-rennir crai yn gyflymaf fesul gweithrediad ac yn fwyaf peryglus fesul llinell o god; mae modelau lefel-uwch yn costio ychydig o drwybwn ac yn dychwelyd llawer iawn o ddiogelwch ac eglurder, ac ar gyfer cod a gynhelir gan lawer o ddwylo mae’r fasnach honno’n bendant yn werth ei gwneud. Cadwch gydredoldeb di-glo wedi’i diwnio â llaw ar gyfer y mannau poeth bach lle mae proffiliwr (pennod 2.16) yn profi bod y gorbenion cydgysylltu’n bwysig, a chadwch hyd yn oed y rheini y tu ôl i ffin sydd wedi’i phrofi’n dda.

Cwestiynau i’w trafod gyda’ch tîm

  1. Ar gyfer eich gwasanaeth prysuraf, a yw’r llwyth gwaith yn rhwym-M/A neu’n rhwym-PU, ac a yw eich dyluniad cydredoldeb yn cyd-fynd? Mae timau’n rheolaidd yn ychwanegu pyllau edafedd at wasanaethau sy’n treulio 95% o’u hamser yn aros am gronfa ddata, gan ennill cystadleuaeth ond dim trwybwn, neu’n ceisio paraleiddio cyfrifiad y mae ei ffracsiwn cyfresol yn cyfyngu unrhyw gyflymiad. Mae’r dyluniad cywir yn dilyn o’r gyfundrefn: async neu bwll bach ar gyfer gwaith trwm-aros, paraleliaeth wirioneddol ar draws creiddiau ar gyfer gwaith trwm-cyfrifo. Dewch â phroffil sy’n dangos i ble mae’r amser wir yn mynd, nid tybiaeth, ac os treulir y rhan fwyaf o’r amser yn cyfrifo, mesurwch y ffracsiwn cyfresol a gadewch i gyfraith Amdahl ddweud wrthych beth yw’r nenfwd. Mae’r ateb yn siapio p’un a estynnwch am async, pwll cyfyngedig, neu baraleliaeth data.

  2. Beth yw diofyn eich tîm ar gyfer rhannu cyflwr ar draws tasgau, ac a yw’n ddiogel wrth ei adeiladwaith? Mewn tîm mawr, mae’r diofyn yn bwysicach na’r eithriadau, oherwydd bod y rhan fwyaf o’r cod yn cael ei ysgrifennu gan bobl nad ydynt yn arbenigwyr cydredoldeb ac sy’n copïo pa batrwm bynnag sydd eisoes yno. Os mai’r diofyn yw gwrthrychau newidiadwy a rennir wedi’u gwarchod gan gloeon ad hoc, rydych un clo anghofiedig i ffwrdd o ras a fydd yn ymddangos misoedd yn ddiweddarach mewn cynhyrchu. Os mai’r diofyn yw anghyfnewidioldeb a phasio negeseuon, ni fydd dosbarthiadau cyfan o nam byth yn digwydd, a bydd yr ychydig fannau sydd wir angen cof a rennir yn sefyll allan ar gyfer adolygiad gofalus. Trafodwch beth fyddai peiriannydd newydd yn estyn amdano heddiw, a fyddai eich adolygiadau’n dal ysgrifeniad heb ei gydamseru, a sut i wneud y llwybr diogel yr un hawsaf.

  3. Sut fyddech chi’n canfod, ailgynhyrchu, a thrwsio nam cydredoldeb sy’n ymddangos unwaith mewn miliwn o geisiadau mewn cynhyrchu? Yr ateb gonest i lawer o dimau yw na fyddent yn gallu, oherwydd bod y nam yn diflannu pan fyddant yn edrych a bod eu profion ond byth yn rhedeg un trefniant diniwed. Dylai hynny eich poeni, oherwydd mae’r namau hyn yn llygru data’n dawel ac yn erydu ymddiriedaeth. Trafodwch a ydych yn rhedeg canfodyddion ras a sanitizers edefyn mewn integreiddio parhaus, a ydych yn profi straen gydag amseru ar hap, ac a yw eich arsylliadaeth cynhyrchu’n dal cyflwr edefyn a chlo ar adeg hongiad. Mae’r timau gorau’n ateb drwy wneud y rhan fwyaf o namau o’r fath yn amhosibl drwy eu dewis o fodel, fel bod yr ychydig sy’n weddill yn brin ac wedi’u cyfyngu.

  4. Ble yn eich system mae ciw diderfyn neu bwll edafedd heb gap yn dal i fodoli, a beth sy’n digwydd iddo o dan bigyn deg gwaith yn sydyn? Mae hyn yn bwysig oherwydd bod gwaith diderfyn ar y gweill yn fethiant sy’n ymddangos fel chwalfa cof-allan ddirgel: mae gwaith yn cyrraedd yn gynt na’r gwacáu, mae cof yn llenwi, a mae’r gwasanaeth yn marw gan edrych fel nam caledwedd yn hytrach na’r gorlwytho ydyw. Mae’r ystyriaethau cystadleuol yn wirioneddol, oherwydd bod terfyn a osodwch yn rhy isel yn gwrthod traffig cyfreithlon a terfyn rhy uchel yn gohirio’r chwalfa yn lle ei hatal, felly penderfyniad capasiti yw’r rhif, nid dyfaliad. Dewch ag arolwg o bob ciw a phwll, ei derfyn presennol (neu’r cyfaddefiad nad oes ganddo un), yr ymddygiad gwrthbwysedd pan fydd yn llenwi, a thystiolaeth profi llwyth am sut mae’r system yn dirywio ar yr ymyl. I fflyd mentrau gall un ciw diderfyn ddisgyn yn gadwyn i doriad gwasanaeth ar draws y fflyd, ac ar gyfer platfform llywodraethol y mae’n rhaid iddo aros ar gael i ddinasyddion, mae gwrthod graslon gyda gwall clir yn ddyletswydd gwasanaeth, felly mae’r terfyn a’i lwybr gwrthod yn perthyn yn y cynllun capasiti a’r llawlyfr rhedeg, nid ym meddwl un peiriannydd yn unig.

  5. Beth yw polisi eich tîm ar gyfer defnyddio modelau cydredoldeb lefel-uwch yn hytrach na chloeon a ysgrifennwyd â llaw, a lle rydych wedi caniatáu eithriadau? Mae’r model diofyn yn penderfynu pa mor ddiogel yw’r newid cyfartalog, oherwydd nad yw’r rhan fwyaf o awduron yn arbenigwyr cydredoldeb a byddant yn copïo pa batrwm bynnag sydd eisoes yn bodoli: mae actorion, sianeli, a chydredoldeb strwythuredig yn codi’r llawr i bawb, tra bo cloi crai yn gywir mewn theori ac yn ffynhonnell stond marwol mewn ymarfer. Y tyndra yw bod modelau lefel-uwch yn costio ychydig o orbenion fesul neges neu fesul tasg, a bydd proffiliwr weithiau’n profi bod angen cod di-glo wedi’i diwnio â llaw ar lwybr poeth, felly mae gwaharddiad cyffredinol yr un mor anghywir â rhyddid-i-bawb. Dewch â rhestr o’r mannau lle rydych wedi mynd o dan y diofyn diogel, y dystiolaeth broffilio a gyfiawnhaodd bob un, a sut mae pob eithriad wedi’i ffensio y tu ôl i ffin wedi’i phrofi a dogfen o’r drefn glo. Mewn menter fawr, hwn yw’r polisi sy’n cadw miloedd o gyfranwyr rhag ail-ddyfeisio cynllun anniogel bob un; mewn system lywodraethol hirhoedlog, hwn yw’r hyn sy’n galluogi adolygydd flynyddoedd yn ddiweddarach i ddeall pam y caniatawyd patrwm peryglus a chadarnhau ei fod yn dal yn gyfiawn.

  6. Pan fyddwch yn penderfynu paraleiddio cyfrifiad, sut ydych chi’n mesur y ffracsiwn cyfresol, a phwy sy’n atebol am gadarnhau bod y cyflymiad yn wirioneddol? Mae timau’n rheolaidd yn gwasgaru cyfrifiad ar draws creiddiau ac yn dathlu rhif na fyddai proffiliwr byth yn ei gadarnhau, oherwydd bod cyfraith Amdahl yn cyfyngu’r enillion i wrthdro’r ffracsiwn cyfresol ni waeth faint o greiddiau a ychwanegwch, a gall gorbenion hollti-a-chyfuno ddileu’r budd yn gyfan gwbl ar gyfer mewnbynnau bach. Y dynfa gystadleuol yw bod paraleliaeth yn ychwanegu cymhlethdod gwirioneddol ac wyneb ras newydd, felly’r cwestiwn yw a yw’r cyflymiad a fesurwyd yn cyfiawnhau’r risg cywirdeb rydych yn ei gymryd. Dewch â phroffil sy’n ynysu’r rhan gyfresol, y meintiau mewnbwn lle mae paraleliaeth wir yn ennill, a meincnod cyn-ac-ar-ôl ar galedwedd cynrychioliadol yn hytrach nag amcangyfrif gobeithiol. I fenter sy’n talu am fflyd cyfrifiadura mawr, mae dadansoddiad gonest o’r ffracsiwn cyfresol yn troi’n wariant caledwedd a arbedwyd neu a wastraffwyd, ac ar gyfer corff llywodraethol sy’n atebol am gost system gyhoeddus, dylai’r person a gymeradwyodd y dyluniad paralel allu dangos y mesuriad a’i cyfiawnhaodd o dan archwiliad.

Lens sector

Cwmni newydd (startup). Gyda thîm bach a dim rhedfa (runway) i’w sbario, prynwch gywirdeb drwy strwythur, nid drwy arbenigwr cydredoldeb na allwch ei logi. Estynnwch am yr un diofyn diogel y mae eich iaith yn ei roi, async/await ar gyfer gwaith rhwym-M/A, un dasg berchen neu actor ar gyfer unrhyw gyflwr a rennir, a hepgor cloi wedi’i diwnio â llaw yn gyfan gwbl. Gall ras diweddariad-coll mewn llwybr taliadau eich suddo’n gynt na nodwedd goll, felly gwariwch y swm bach o god ychwanegol i wneud y dosbarth hwnnw o nam yn amhosibl a symud ymlaen.

Busnes bach. Nid oes gennych neb y mae cydredoldeb yn swydd iddo, felly ffafriwch blatfformau a gwasanaethau a reolir sy’n ei drin ar eich rhan: mae trafodyn cronfa ddata, ciw a letyir, neu fodel cais fframwaith yn well nag edafedd rydych yn eu cynnal â llaw. Wrth werthuso teclyn, triniwch “a yw hyn yn gwneud cydredoldeb yn ddiogel yn ddiofyn” fel cwestiwn prynu-yn-erbyn-adeiladu, a ffafriwch yr opsiwn lle na all trefniant anghywir lygru cofnod cwsmer yn dawel. Cadwch gyflwr cyfnewidiol a rennir allan o’ch cod eich hun lle bynnag y gall gwasanaeth cyfyngedig, a reolir ei ddal yn lle hynny.

Menter. Ar draws llawer o dimau, y nod yw diofyn tŷ sy’n cadw miloedd o gyfranwyr yn ddiogel: anghyfnewidioldeb a phasio negeseuon fel norm, modelau lefel-uwch dros gloeon crai, ciwiau a phyllau cyfyngedig gyda gwrthbwysedd, a threfn glo fyd-eang wedi’i dogfennu. Amgodiwch y rhain mewn safonau peirianneg, gorfodwch hwy gyda chanfodyddion ras a phrofion straen mewn CI, a llywodraethwch yr eithriadau lle profodd proffiliwr fod cod di-glo yn gyfiawn fel bod pob un yn aros y tu ôl i ffin sydd wedi’i phrofi a’i hadolygu. Rheolwch gapasiti cydredoldeb fel pryder ar draws y fflyd, gyda therfynau ciw a meintiau pwll wedi’u clymu wrth lwyth a fesurwyd.

Llywodraeth. Mae cywirdeb ac archwiliadwyedd mewn systemau sy’n rhedeg am ddegawdau yn drech na thrwybwn crai. Mynnwch fod pob trawsnewidiad cyflwr yn cael ei gofnodi a’i ailchwarae, fel y gellir ailgynhyrchu ras a amheuir a phrofi’r trwsiad i gorff goruchwylio, a chadwch lwybrau penderfynadwy heb AI ar gyfer penderfyniadau sy’n cyffwrdd â budd-daliadau, diogelwch, neu gofnodion cyhoeddus. Dylai caffael fynnu bod gwerthwyr yn datgelu eu model cydredoldeb a thystiolaeth o sylw canfodyddion ras a phrofion straen, oherwydd nid anghyfleustra yw ateb anghywir o dan lwyth mewn system gyhoeddus; mae’n rhywbeth y bydd yn rhaid i swyddog atebol ei esbonio wedyn.

Enghreifftiau

Cwmni newydd. Mae tîm bach yn lansio nodwedd daliadau ac yn sylwi bod balansau cyfrif weithiau’n crwydro ychydig geiniogau o dan lwyth. Yr achos yw darllen-addasu-ysgrifennu plaen ar faes balans gan drinyddion cais cydredol, ras diweddariad-coll. Yn lle taenu cloeon, maent yn symud balans pob cyfrif y tu ôl i un dasg berchen sy’n prosesu debydau a chredydau fel negeseuon, un ar y tro. Mae’r crwydro’n diflannu, mae’r cod yn dod yn hawdd rhesymu amdano, ac maent yn ychwanegu prawf straen sy’n tanio miloedd o drosglwyddiadau cydredol i warchod y trwsiad. Un newid strwythurol, dosbarth cyfan o nam wedi ymddeol.

Menter. Mae gwasanaeth archebion trwybwn uchel sy’n trin degau o filoedd o geisiadau’r eiliad yn dioddef pigynnau oedi cyfnodol a chwalfeydd cof-allan achlysurol yn ystod ymchwyddiadau traffig. Mae ymchwiliad yn canfod ciw gwaith diderfyn y tu ôl i bwll edafedd sy’n tyfu heb derfyn unwaith y bydd galw’n fwy na chapasiti. Mae’r tîm yn cyfyngu’r ciw, yn capio’r pwll ar faint wedi’i glymu wrth nifer y creiddiau, ac yn ychwanegu gwrthbwysedd sy’n gwrthod llwyth gormodol yn gyflym gyda gwall clir. Mae trwybwn yn dod yn rhagweladwy, mae’r chwalfeydd yn stopio, ac mae clo poeth ar storfa a rennir yn cael ei ddisodli gan strwythur di-glo dim ond ar ôl i broffiliwr brofi bod y gystadleuaeth yn wirioneddol. Diofynion diogel i’r awduron niferus, cydredoldeb wedi’i diwnio dim ond lle mesurwyd.

Llywodraeth. Mae platfform budd-daliadau cenedlaethol yn rhedeg am ddegawdau ac mae’n rhaid iddo gynhyrchu canlyniadau cywir, archwiliadwy hyd yn oed o dan ddiweddariadau achos cydredol. Mae’r tîm yn dewis anghyfnewidioldeb a phasio negeseuon fel diofyn tŷ, yn cyfyngu pob darn o gyflwr newidiadwy i un perchennog, ac yn gosod trefn glo fyd-eang lle bynnag y mae cloeon yn aros, y cyfan wedi’i ysgrifennu i mewn i’r safonau peirianneg. Maent yn rhedeg sanitizers edefyn a phrofion straen ar hap yn y biblinell, ac yn dylunio fel bod pob trawsnewidiad cyflwr yn cael ei gofnodi a’i ailchwarae ar gyfer goruchwyliaeth, sy’n caniatáu iddynt ailgynhyrchu a phrofi’r trwsiad pan amheuir trefniant prin. Trinnir cywirdeb ac archwiliadwyedd fel gofynion dosbarth-cyntaf, nid meddyliau ôl-ystyriaeth perfformiad.

Achos busnes: cymhellion, ROI, a TCO

Mae’r enillion ar gydredoldeb disgybledig yn ymddangos fel digwyddiadau na ddigwyddant byth. Gall un ras cynhyrchu lygru data ar draws miloedd o gofnodion, a mae’r gost yn cynnwys oriau peirianneg i ganfod nam sy’n cuddio pan gaiff ei arsylwi a’r gost lawer mwy o gymodi data gwael, hysbysu defnyddwyr yr effeithiwyd arnynt, ac ailadeiladu ymddiriedaeth. Mae’r rhain ymhlith y diffygion drutaf i’w diagnosio yn union oherwydd eu bod yn ansicr, felly gall ymlid un heisenbug gorbwyso ymdrech dewis model diogel ymlaen llaw.

Mae’r fantais hefyd yn ymddangos fel trwybwn a chost. Mae maintioli cydredoldeb yn iawn yn caniatáu i wasanaeth drin llawer mwy o lwyth ar yr un caledwedd, arbediad cylchol ar gyfer fflyd fawr, tra bo gwrthbwysedd a ciwiau cyfyngedig yn atal y toriadau gwasanaeth cadwynol sy’n troi pigyn traffig yn ddigwyddiad cyhoeddus. Mae’r gost gyfan o berchnogaeth yn gymedrol ac yn ddiwylliannol yn bennaf: rydych yn buddsoddi mewn arddull tŷ (anghyfnewidioldeb, pasio negeseuon, cydredoldeb strwythuredig), mewn offer (canfodyddion ras, sanitizers edefyn, harneisiau straen mewn CI), ac mewn safonau sy’n amgodio trefn glo a chyfyngu. Y dewis arall yw cronfa god lle mae cywirdeb yn dibynnu ar bob awdur fod yn arbenigwr am byth, na all unrhyw dîm sy’n tyfu ei gynnal. Gwnewch yr achos i arweinyddiaeth yn eu hunedau nhw: cyfieithwch ras a atalwyd i ddigwyddiadau llygru data a osgowyd, gwrthbwysedd i doriadau gwasanaeth a atalwyd, a diofyn diogel i amser sefydlu (onboarding) a arbedwyd.

Gwrth-batrymau a phethau i’w hosgoi

  • Ychwanegu edafedd am gyflymder ar waith rhwym-M/A. Mae mwy o edafedd ar wasanaeth trwm-aros yn prynu cystadleuaeth, nid trwybwn.
  • Cyflwr cyfnewidiol a rennir ym mhobman. Mae unrhyw edefyn yn newid unrhyw wrthrych yn gwneud cywirdeb yn fater o lwc na all unrhyw adolygydd ei ddilysu.
  • Ciwiau a phyllau diderfyn. Mae pigyn yn tyfu’r ciw nes bod cof yn marw; mae’r chwalfa’n edrych yn ddirgel ond mae’n orlwytho plaen.
  • Cloi ad hoc heb drefn fyd-eang. Mae cloeon a gymerir mewn trefn wahanol ar draws y gronfa god yn stondio dan lwyth.
  • Tybio bod cod yn rhedeg yn y drefn ysgrifenedig. Anwybyddu’r model cof, fel bod nam gwelededd yn gadael edefyn yn troelli ar werth hen.
  • Cyfrwystra di-glo wedi’i lunio â llaw. Mae cynlluniau di-glo pwrpasol bron bob amser yn gynnil anghywir ac yn agos i amhosibl eu hadolygu.
  • Profi dim ond y trefniant hapus. Mae profion penderfynadwy’n pasio tra bo’r drefn unwaith-mewn-miliwn yn llygru cynhyrchu.
  • Galw cod anhysbys tra’n dal clo. Mae galwad-yn-ôl sy’n blocio neu’n ail-fynd i mewn yn troi adran gritigol yn stond marwol.

Model aeddfedrwydd

  • Lefel 1, Cychwyn: Mae cydredoldeb yn ad hoc ac yn adweithiol. Ychwanegir edafedd a chloeon drwy reddf, mae cyflwr cyfnewidiol a rennir ym mhobman, ac mae ciwiau’n ddiderfyn. Mae cyflyrau ras yn ymddangos fel digwyddiadau cynhyrchu na ellir eu hailgynhyrchu na all neb eu diagnosio, ac nid oes offer yn bodoli i’w dal.
  • Lefel 2, Datblygu: Mae rhai timau wedi dysgu arferion sylfaenol: maent yn defnyddio cloeon yn fwy gofalus ac yn cyfyngu eu ciwiau mwyaf amlwg. Mae ymwybyddiaeth anffurfiol o rasys a stondiau marwol, a chaiff ychydig o lwybrau critigol sylw ychwanegol. Mae’r arfer yn anghyson ar draws timau, mae profi’n dal i fod yn drefniant-sengl gan mwyaf, ac mae patrymau diogel yn byw mewn unigolion yn hytrach nag mewn ysgrifen.
  • Lefel 3, Safoni: Mae gan y sefydliad arddull tŷ wedi’i dogfennu a orfodir yn sefydliad-eang: anghyfnewidioldeb a phasio negeseuon fel diofynion, modelau lefel-uwch dros gloeon crai, ciwiau a phyllau cyfyngedig gyda gwrthbwysedd, a threfn glo fyd-eang wedi’i dogfennu. Mae canfodyddion ras a phrofion straen yn rhedeg mewn CI, ac mae dewisiadau cydredoldeb yn dilyn o p’un a yw’r gwaith yn rhwym-M/A neu’n rhwym-PU.
  • Lefel 4, Rheoli: Mae’r sefydliad yn mesur ac yn rheoli ei ystum cydredoldeb yn erbyn llinellau sylfaen. Mae’n olrhain sylw canfodyddion ras a sanitizers edefyn ar draws gwasanaethau, yn cofnodi dyfnder ciw, amser aros clo, dirlawnder pwll, a chyfraddau gwrthod fel metrigau a fonitrir, ac yn profi llwyth ar y cromlin dirywio fel bod pob terfyn yn benderfyniad capasiti wedi’i gefnogi gan ddata. Cyfrifir a thueddir digwyddiadau cydredoldeb, mesurir ffracsiynau cyfresol llwythi gwaith wedi’u paraleiddio yn erbyn y cyflymiad a gyflawnwyd mewn gwirionedd, a mae penderfyniadau bwrw ymlaen neu beidio ar ddyluniadau newydd yn seiliedig ar y dystiolaeth honno yn hytrach na reddf.
  • Lefel 5, Cerddorfa: Cydredoldeb diogel yw’r llwybr o’r gwrthiant lleiaf i bob awdur, ac mae’r arfer yn cael ei wella a’i integreiddio’n barhaus ar draws y sefydliad. Mae dosbarthiadau nam cyfan yn amhosibl wrth eu hadeiladwaith, mae mannau poeth wedi’u diwnio dim ond lle mae proffilio’n ei brofi, a mae ailchwarae penderfynadwy yn gwneud y nam prin sy’n weddill yn atgynhyrchadwy. Mae cywirdeb ac archwiliadwyedd yn eiddo a amddiffynnir yn barhaus, mae terfynau capasiti’n addasu i lwyth a arsylwyd, a mae’r safonau’n esblygu wrth i’r platfform a’r llwyth waith symud.

Syniadau ar gyfer trafodaeth

  1. Pe baech yn archwilio eich gwasanaeth prysuraf heddiw, faint o’i gyflwr sy’n cael ei rannu ac yn newidiadwy, a faint o’r rhannu hwnnw sy’n wirioneddol angenrheidiol?
  2. Beth yw ateb diofyn eich tîm pan fydd angen i ddau dasg gydgysylltu, ac a fyddai’n well gennych petai’n anghyfnewidioldeb neu’n basio negeseuon?
  3. Ble mae ciwiau diderfyn neu byllau heb gap yn dal i guddio yn eich system, a beth fyddai’n digwydd iddynt o dan bigyn traffig deg gwaith yn sydyn?
  4. A yw eich rhediadau integreiddio parhaus yn cynnwys canfodydd ras neu sanitizer edefyn, a phryd wnaeth un ddal rhywbeth ddiwethaf cyn cynhyrchu?
  5. Ar gyfer eich llwyth gwaith mwyaf paraleiddiedig, beth yw’r ffracsiwn cyfresol, ac a yw cyfraith Amdahl yn cyfyngu’r cyflymiad rydych mewn gwirionedd yn ei erlid?
  6. A allai eich tîm ailgynhyrchu nam trefniant unwaith-mewn-miliwn ar alw, a beth fyddai ei angen i gyrraedd yno?

Casgliadau allweddol

  • Mae cydredoldeb yn strwythuro rhaglen fel tasgau annibynnol; mae paraleliaeth yn eu gweithredu ar unwaith. Penderfynwch pa un sydd ei angen arnoch cyn ychwanegu edafedd.
  • Cyflwr cyfnewidiol a rennir yw gwraidd bron pob nam cydredoldeb; ffafriwch anghyfnewidioldeb a phasio negeseuon fel diofynion diogel i lawer o awduron.
  • Estynnwch am fodelau lefel-uwch (actorion, sianeli, cydredoldeb strwythuredig, async/await) cyn cloeon a ysgrifennwyd â llaw, sy’n gywir mewn theori ac yn beryglus mewn ymarfer.
  • Deallwch atomigedd, gwelededd, a’ch model cof; defnyddiwch y cyntefig cywir, daliwch gloeon yn fyr, a gosodwch drefn glo fyd-eang i osgoi stond marwol, stond fyw, a newynu.
  • Cyfyngwch bob ciw a phwll a chymhwyswch wrthbwysedd, fel bod pigyn yn dirywio’n raslon yn lle chwalu (pennod 3.3).
  • Profwch y trefniadau’n fwriadol gyda chanfodyddion ras, profion straen, ac ailchwarae (pennod 2.15), a pharchwch gyfraith Amdahl wrth baraleiddio (pennod 2.16).
  • I fentrau, mae hyn yn drwybwn a digwyddiadau a atalwyd; i lywodraeth, mae’n gywirdeb ac archwiliadwyedd mewn systemau hirhoedlog.

Cyfeiriadau a darllen pellach

  • Brian Goetz et al., Java Concurrency in Practice (atomigedd, gwelededd, y model cof, a chyhoeddiad diogel).
  • Herb Sutter, “The Free Lunch Is Over” (pam y mae’n rhaid i feddalwedd gofleidio cydredoldeb wrth i gyflymderau cloc wastadu).
  • Leslie Lamport, “Time, Clocks, and the Ordering of Events in a Distributed System” (trefnu a sylfeini rhesymu cydredol).
  • C. A. R. Hoare, “Communicating Sequential Processes” (Communications of the ACM, 1978): y model CSP y tu ôl i sianeli.
  • Carl Hewitt, Peter Bishop, a Richard Steiger, “A Universal Modular Actor Formalism for Artificial Intelligence” (tarddiad y model actor).
  • Edsger W. Dijkstra, “Cooperating Sequential Processes” (semaffor, eithrio ar y cyd, a’r broblem stond marwol).
  • Maurice Herlihy a Nir Shavit, The Art of Multiprocessor Programming (cloeon, atomigion, a strwythurau data di-glo).
  • Nathaniel J. Smith, “Notes on Structured Concurrency, or: Go Statement Considered Harmful” (yr achos dros gydredoldeb strwythuredig).
  • Martin Kleppmann, Designing Data-Intensive Applications (cydredoldeb a chysondeb lle mae cof yn cwrdd â systemau dosbarthedig).
  • Gene M. Amdahl, “Validity of the Single Processor Approach to Achieving Large-Scale Computing Capabilities” (1967): tarddiad cyfraith Amdahl.