2.17

Tazama kwa Kiingereza

2.17 Ulinganifu na usambamba

Muhtasari na msukumo

Ulinganifu ni sanaa ya kupanga programu kama kazi huru zinazoweza kuendelea bila kusubiriana. Usambamba ni kuendesha kazi hizo kweli kwa wakati mmoja kwenye vichakataji vingi. Tofauti hii si ya kinadharia tu. Ulinganifu ni njia ya kupanga msimbo ili wito wa mtandao wa polepole usiganishe programu nzima; usambamba ni njia ya kumaliza kokotoo kubwa haraka kwa kulisambaza kwenye viini. Kuchanganya hivi viwili huzifanya timu ziongeze nyuzi kwa matumaini ya kasi na kupokea hitilafu tu.

Kwa timu kubwa, mada hii ni muhimu kwa sababu ulinganifu ndipo usahihi hufia kimyakimya. Mwandishi mmoja anayeandika msimbo wa uzi mmoja anaweza kuufikiria mstari kwa mstari, lakini waandishi wengi wanaposhiriki kumbukumbu kuvuka nyuzi, idadi ya mfuatano unaowezekana hulipuka, na programu inayopita kila jaribio bado inaweza kushindwa mara moja kati ya milioni chini ya mzigo wa uzalishaji, si kwa ajali kubwa bali kwa data iliyoharibika, maombi yaliyokwama, na matukio ambayo hakuna anayeweza kuyazalisha upya. Sura hii inajengwa juu ya mkazo wa ngazi ya msimbo wa sura ya 2.16 (uhandisi wa utendaji) na misingi ya kompyuta ya sura ya 2.13, na inalisha matatizo ya uratibu ya sura ya 3.3 (mifumo iliyosambazwa), ambayo ni ulinganifu kuvuka mashine pamoja na ukatili ulioongezwa wa mtandao usiotegemewa.

Kwa mashirika makubwa, hitilafu za ulinganifu ni hitilafu za uwezo wa kupitisha. Huduma za trafiki ya juu huishi au kufa kwa uwezo wao wa kushughulikia maelfu ya maombi ya wakati mmoja bila kugombania hali ya pamoja, na kaunta moja isiyosawazishwa inaweza kuharibu leja chini ya mzigo. Kwa serikali, dau ni usahihi na uwezo wa kukaguliwa katika mifumo inayoendesha kwa miongo na kugusa usalama, manufaa, au rekodi za umma. Hali ya mbio katika mfumo wa kodi au afya si usumbufu; ni jibu lisilo sahihi ambalo mtu atalazimika kulieleza baadaye kwa chombo cha usimamizi. Katika mazingira yote mawili lengo ni lilelile: fanya njia salama kuwa chaguo-msingi, ili watu wengi wanaogusa msimbo wasilazimike kila mmoja kuwa mtaalamu wa ulinganifu.

Kanuni kuu

  • Ulinganifu ni muundo; usambamba ni utekelezaji. Amua unachohitaji kweli kabla ya kufikia nyuzi.
  • Hali ya pamoja inayoweza kubadilika ndiyo adui. Karibu kila hitilafu ya ulinganifu hufuatiliwa hadi kazi mbili zinazogusa data ileile inayobadilika.
  • Pendelea kutobadilika na upitishaji wa ujumbe. Data isiyoweza kubadilika haiwezi kugombaniwa, na ujumbe hushinda kumbukumbu ya pamoja kwa usalama.
  • Kutokuwa na uamuzi ndiyo ugumu wa msingi. Hitilafu inayoonekana mara moja kati ya mizunguko elfu ndiyo tatizo zima, si kesi ya pembeni.
  • Funga kila kitu kwa kikomo. Foleni zisizo na kikomo, idadi ya nyuzi, na kazi inayoendelea hugeuza kilele kuwa kukatika.
  • Mifano ya kiwango cha juu hushinda kufuli ghafi. Waigizaji, njia, na ulinganifu uliopangwa huwapa waandishi wengi chaguo-msingi salama, na kila kufuli lina gharama.
  • Jaribu mfuatano, si njia ya furaha tu. Majaribio ya uhakika hayawezi kunasa hitilafu ambayo mpangilio nadra tu unaifichua.

Mapendekezo

Amua kama unahitaji ulinganifu au usambamba

Anza kwa kutaja tatizo. Huduma yako ikitumia muda wake mwingi kusubiri (hifadhidata, miito ya mtandao, au diski), una mzigo wa kazi unaofungwa na I/O, na ulinganifu ndio jibu: panga msimbo ili ombi moja linaposubiri, mengine yaendelee. Uzi mmoja wenye async/await, au kundi dogo, unaweza kuhudumia maelfu ya maombi yanayosubiri. Programu yako ikifungwa na CPU, ikisaga kokotoo kwa kusubiri kidogo, usambamba kuvuka viini ndio unaonunua kasi, na hapa dari inawekwa na sheria ya Amdahl (angalia sura ya 2.16): sehemu ya mfuatano inadhibiti kasi yako bila kujali viini vingapi unaongeza. Pima uko katika hali ipi kabla ya kubuni.

Chukulia hali ya pamoja inayoweza kubadilika kama adui

Karibu kila kasoro ya ulinganifu hupunguzwa hadi umbo lilelile: kazi mbili zinasoma na kuandika data ileile inayobadilika bila kukubaliana mpangilio. Hii ni hali ya mbio, na huzalisha masasisho yaliyopotea, vitu vilivyoandikwa nusu, na thamani zinazovunja vigeu visivyobadilika ambavyo msimbo ulidhani ni salama. Ulinzi wa kuaminika zaidi ni kuwa na hali ya pamoja inayoweza kubadilika kidogo. Mpe kila kazi data yake, pitisha nakala badala ya marejeo, na funga hali inayoweza kubadilika kwa mmiliki mmoja ambaye wengine wanamfikia kupitia ujumbe. Unapolazimika kweli kushiriki, fanya ushiriki huo uwe wazi na mdogo, ili mpitiaji aone kila mahali hali inapoguswa.

Pendelea kutobadilika na upitishaji wa ujumbe kama chaguo-msingi

Data salama zaidi ya pamoja ni data isiyoweza kubadilika. Kitu kisichobadilika, mara kinapojengwa, kinaweza kusomwa na idadi yoyote ya nyuzi bila usawazishaji hata kidogo, kwa sababu hakuna cha kugombania. Fanya kutobadilika kuwa chaguo-msingi na kubadilika kuwa kighairi cha makusudi. Kazi zinapolazimika kuratibu, pendelea upitishaji wa ujumbe kuliko kumbukumbu ya pamoja: badala ya kushiriki kigeu cha pamoja, acha kazi moja itume thamani kwa nyingine, ambayo ndiyo falsafa nyuma ya msemo wa Go “usiwasiliane kwa kushiriki kumbukumbu; shiriki kumbukumbu kwa kuwasiliana.” Upitishaji wa ujumbe hugeuza hitilafu zisizoonekana, zinazotegemea mpangilio kuwa mtiririko wa data ulio wazi, unaokaguliwa, na uwazi huo karibu daima unastahili gharama yake kwa kila ujumbe katika msimbo ambao watu wengi wanaudumisha.

Fikia mifano ya kiwango cha juu kabla ya kufuli ghafi

Ufungaji ulioandikwa kwa mkono ni sahihi kwa kanuni na maafa kwa vitendo, kwa sababu binadamu ni wabaya wa kufikiri kuhusu kila mfuatano. Pendelea mifano inayofanya ulinganifu salama kuwa chaguo-msingi. Mfano wa waigizaji humpa kila mwigizaji hali ya faragha na sanduku la barua: waigizaji hawashiriki kumbukumbu kamwe na hutuma ujumbe tu, kwa hiyo madarasa mazima ya mbio hutoweka. Michakato ya mfuatano inayowasiliana (CSP), mfano nyuma ya njia katika lugha kama Go, inaruhusu michakato huru kupitisha thamani kupitia njia zenye aina. Ulinganifu uliopangwa hufunga maisha ya kazi sambamba na wigo wa kileksika, ili kazi zisidumu kuliko kizuizi kilichozizaa na makosa yaenee badala ya kutoweka. Async/await hukuruhusu kuandika msimbo sambamba, unaofungwa na I/O kwa mtindo wa mfuatano. Kila moja ya hivi huinua sakafu kwa mwandishi wa kawaida, ndicho timu kubwa inachohitaji.

Elewa kielelezo chako cha kumbukumbu, uatomiki, na uonekanaji

Unaposhiriki kumbukumbu, sifa mbili huuma. Uatomiki unamaanisha operesheni hutokea yote kwa mara moja au haitokei kabisa; ongezeko la kawaida (x = x + 1) si atomiki, kwa sababu linasoma, kuongeza, na kuandika kama hatua tatu ambazo uzi mwingine unaweza kuzikatiza, ndivyo kaunta zinavyopoteza masasisho. Uonekanaji unamaanisha kuwa uandishi wa uzi mmoja unaweza kuonekana kwa mwingine; bila usawazishaji sahihi, thamani iliyoandikwa kwenye kiini kimoja inaweza kukaa kwenye kache bila kuonekana na kingine, kwa hiyo uzi unaweza kuzunguka milele kwenye bendera ambayo tayari iliwekwa. Kielelezo cha kumbukumbu cha lugha yako hufafanua uandishi unapoonekana na mpangilio gani mkusanyaji na CPU wanaweza kupanga upya, kwa hiyo huwezi kudhani msimbo unaendeshwa kwa mpangilio uliouandika. Tumia aina za atomiki za lugha na viini vya usawazishaji badala ya kuvumbua mpango wako wa kutokuwa na kufuli.

Tumia viini vya usawazishaji kwa makusudi, na ubuni dhidi ya kukwama

Kushiriki kusipoepukika, fikia kiini sahihi na uheshimu bei yake. Kufuli au mutex (kutengana kwa pamoja) huruhusu uzi mmoja kwa wakati kuingia sehemu muhimu, lakini hupanga ufikiaji kwa mfuatano, kwa hiyo kufuli moto huwa kizuizi kinachofuta faida ya viini vingi. Semaphore hupunguza kazi ngapi zinaweza kuendelea mara moja, ndivyo unavyofunga kundi. Operesheni za atomiki hutoa masasisho bila kufuli kwa thamani rahisi kama kaunta, nafuu kuliko kufuli lakini rahisi kutumiwa vibaya kwa chochote cha mchanganyiko. Kufuli huleta njia tatu za kawaida za kushindwa. Kukwama ni pale kazi zinaposubiriana kwa mzunguko na hakuna anayeweza kuendelea, kisa cha kitabu cha kiada kikiwa nyuzi mbili kila moja ikishikilia kufuli moja na kutaka lingine. Livelock ni pale kazi zinaendelea kuitikiana lakini hazipigi hatua. Njaa ni pale kazi haipati rasilimali kamwe kwa sababu zingine zinaendelea kuruka mbele. Nidhamu zinazozuia haya ni madhubuti: weka mpangilio wa kimataifa wa kufuli, shikilia kufuli kwa muda mfupi, ongeza muda wa kuisha ili kazi iliyokwama ishindwe kwa sauti, usiite msimbo usiojulikana ukiwa umeshikilia kufuli, na tumia upangaji wa haki pale njaa ni hatari. Andika kanuni hizi, kwa sababu mwandishi mpya hawezi kuzigundua upya kutoka kwenye msimbo peke yake.

Funga foleni, makundi, na kazi inayoendelea kwa shinikizo la nyuma

Foleni isiyo na kikomo ni bomu la muda. Chini ya kilele cha trafiki, kazi inafika haraka kuliko inavyomwagika, foleni inakua bila kikomo, kumbukumbu inajaa, na huduma inakufa kwa njia inayoonekana kama ajali ya ajabu ya kuishiwa kumbukumbu badala ya mzigo kupita kiasi ulivyo. Funga kila foleni, weka kikomo kwa kila kundi la nyuzi, na tumia shinikizo la nyuma: mfumo unapojaa, toa ishara juu ya mkondo kupunguza kasi au kataa kazi haraka badala ya kukubali kazi isiyo na kikomo usiyoweza kuimaliza. Pima ukubwa wa makundi kwa mzigo wa kazi (takriban idadi ya viini kwa kazi inayofungwa na CPU, zaidi kwa kazi inayofungwa na I/O ambapo nyuzi hasa husubiri), na uchukulie kikomo kama uamuzi wa makusudi wa uwezo. Hili linaunganishwa na mifumo ya ustahimilivu ya sura ya 3.3.

Tumia usambamba wa data pale kazi inaweza kusambamba kwa urahisi

Matatizo mengine hugawanyika kwa usafi: tumia operesheni ileile kwa kila kipengele cha seti kubwa ya data, bila kipengele chochote kutegemea kingine. Usambamba huu wa data ndio wa kirafiki zaidi, kwa sababu hali ya pamoja ya kugombania ni ndogo na kasi inaweza kukaribia idadi ya viini, kama mabomba ya map-reduce, operesheni sambamba za safu, na msimbo wa nambari wenye vekta vinaonyesha. Hata hapa, heshimu sheria ya Amdahl: hatua ya kuunganisha au kupunguza mara nyingi ni ya mfuatano na hudhibiti faida yako, na gharama ya kugawanya inaweza kutawala kwa ingizo dogo. Ifikie pale kazi kwa kila kipengele ni kubwa na vipengele ni huru kweli; vinginevyo toleo rahisi la mfuatano mara nyingi ni la haraka vya kutosha na rahisi zaidi sana kuweka sahihi, jambo ambalo mazoea ya ujenzi ya sura ya 2.9 yanaliimarisha.

Jaribu na utatue msimbo usio wa uamuzi kwa makusudi

Hitilafu za ulinganifu hazina uamuzi, kwa hiyo majaribio ya kawaida, yanayoendesha mfuatano mmoja, mara nyingi huzikosa. Shambulia tatizo kwa makusudi kwa majaribio ya mkazo na ya kuchanganya yanayoendesha kazi nyingi chini ya muda wa nasibu kutikisa mpangilio nadra. Fikia vigunduzi vya mbio na visafishaji vya nyuzi, zana zinazofunga vifaa vya kupima kwenye ufikiaji wa kumbukumbu kunasa mbio za data hata mfuatano wenye hitilafu haukutokea mzunguko huu. Pale jukwaa lako linapotoa, tumia uigaji wa uamuzi au wapangaji wanaodhibitiwa wanaorudia mfuatano mahususi, wakigeuza heisenbug kuwa inayoweza kuzalishwa upya, na ubuni ili kukwama kwa uzalishaji kukuruhusu kunasa hali za nyuzi na umiliki wa kufuli, jambo linalofungamana na nidhamu ya utatuzi ya sura ya 2.15. Zaidi ya yote, pendelea miundo (kutobadilika, upitishaji wa ujumbe, umiliki mmoja) inayofanya kategoria nzima za hitilafu hizi zisiwezekane, kwa sababu hitilafu usiyoweza kuiunda ni ile ambayo huhitaji kamwe kuitatua.

Mabadilishano: faida na hasara

MbinuFaidaHasara
Kumbukumbu ya pamoja na kufuliHaraka kwa kila operesheni; inafahamikaHitilafu za mbio, kukwama, na uonekanaji; ngumu kwa waandishi wengi kuweka sahihi
KutobadilikaHakuna usawazishaji unaohitajika; usomaji salama kwa nyuzi kwa urahisiGharama ya kunakili; ngumu kwa miundo mikubwa inayobadilika
Upitishaji wa ujumbe (waigizaji, njia)Mtiririko wa data ulio wazi; madarasa mazima ya hitilafu hutowekaMzigo kwa kila ujumbe; unaweza kuficha shinikizo la nyuma foleni zikiwa hazina kikomo
Async/awaitUlinganifu wa bei nafuu kwa kazi inayofungwa na I/O; msimbo unaoonekana wa mfuatanoHakuna usambamba kwa kazi ya CPU; kuzuia kazi moja husimamisha zingine
Ulinganifu uliopangwaMaisha ya kazi wazi; makosa yanaenea; hakuna kazi zilizovujaMpya, haipatikani sana katika baadhi ya mifumo ikolojia
Usambamba wa dataKasi karibu ya mstari kwa kazi huruDari ya Amdahl; mzigo unatawala ingizo dogo
Atomiki / bila kufuliHakuna mgongano wa kufuli kwa thamani rahisiRahisi sana kukosea kwa hila; ngumu kupitia

Mvutano wa msingi ni usalama dhidi ya kasi ghafi, na suluhisho ni kununua usahihi kwanza na kutumia utendaji tu pale upimaji unapothibitisha lazima. Ufungaji ghafi wa kumbukumbu ya pamoja ndio wa haraka zaidi kwa kila operesheni na hatari zaidi kwa kila mstari wa msimbo; mifano ya kiwango cha juu hugharimu uwezo mdogo wa kupitisha na kurudisha usalama na uwazi mwingi, na kwa msimbo unaodumishwa na mikono mingi biashara hiyo inastahili kabisa. Hifadhi ulinganifu ulioboreshwa kwa mkono usio na kufuli kwa sehemu ndogo moto ambapo kichunguzi (sura ya 2.16) kinathibitisha mzigo wa uratibu unajalisha, na uziweke hata hizo nyuma ya mpaka uliojaribiwa vizuri.

Maswali ya kujadili na timu yako

  1. Kwa huduma yenu yenye shughuli nyingi zaidi, mzigo wa kazi unafungwa na I/O au CPU, na je, muundo wenu wa ulinganifu unalingana? Timu mara kwa mara huongeza makundi ya nyuzi kwa huduma zinazotumia 95% ya muda wao zikisubiri hifadhidata, zikipata mgongano bila uwezo wa kupitisha, au zinajaribu kusambamba kokotoo ambalo sehemu yake ya mfuatano inadhibiti kasi yoyote. Muundo sahihi hufuata hali: async au kundi dogo kwa kazi nzito ya kusubiri, usambamba halisi kuvuka viini kwa kazi nzito ya kokotoo. Leta uchunguzi unaoonyesha muda unaenda wapi kweli, si dhana, na ikiwa muda mwingi unatumika kukokotoa, pima sehemu ya mfuatano na uache sheria ya Amdahl ikuambie dari. Jibu linaumba kama utafikia async, kundi lililofungwa, au usambamba wa data.

  2. Chaguo-msingi la timu yenu la kushiriki hali kuvuka kazi ni lipi, na je, ni salama kwa muundo? Katika timu kubwa, chaguo-msingi ni muhimu kuliko vighairi, kwa sababu msimbo mwingi huandikwa na watu wasio wataalamu wa ulinganifu wanaonakili muundo wowote uliopo tayari. Chaguo-msingi likiwa vitu vya pamoja vinavyobadilika vinavyolindwa na kufuli za papo hapo, mko kufuli moja iliyosahaulika kutoka kwenye mbio itakayojitokeza miezi baadaye kwenye uzalishaji. Chaguo-msingi likiwa kutobadilika na upitishaji wa ujumbe, madarasa mazima ya hitilafu hayatokei kamwe, na mahali nadra panapohitaji kumbukumbu ya pamoja kweli panajitokeza kwa mapitio ya makini. Jadilini mhandisi mpya angefikia nini leo, kama mapitio yenu yangenasa uandishi usiosawazishwa, na jinsi ya kufanya njia salama kuwa rahisi.

  3. Mngepataje, kuzalisha upya, na kurekebisha hitilafu ya ulinganifu inayoonekana mara moja kati ya maombi milioni kwenye uzalishaji? Jibu la uaminifu kwa timu nyingi ni kwamba hawangeweza, kwa sababu hitilafu hutoweka wanapoangalia na majaribio yao huendesha mfuatano mmoja usio na madhara tu. Hilo linapaswa kukuhangaisha, kwa sababu hitilafu hizi huharibu data kimyakimya na kumomonyoa uaminifu. Jadilini kama mnaendesha vigunduzi vya mbio na visafishaji vya nyuzi kwenye ujumuishaji endelevu, kama mnajaribu mkazo kwa muda wa nasibu, na kama uonekanaji wenu wa uzalishaji unanasa hali ya nyuzi na kufuli wakati wa kukwama. Timu bora hujibu kwa kufanya hitilafu nyingi kama hizo zisiwezekane kupitia uchaguzi wao wa mfano, kwa hiyo zilizobaki chache ni nadra na zimedhibitiwa.

  4. Wapi katika mfumo wenu foleni isiyo na kikomo au kundi la nyuzi lisilo na kikomo bado lipo, na nini kinatokea kwake chini ya kilele cha ghafla cha mara kumi? Hili ni muhimu kwa sababu kazi isiyo na kikomo inayoendelea ndiyo kushindwa kunakojifanya ajali ya ajabu ya kuishiwa kumbukumbu: kazi inafika haraka kuliko inavyomwagika, kumbukumbu inajaa, na huduma inakufa ikionekana kama hitilafu ya vifaa badala ya mzigo kupita kiasi ulivyo. Mazingatio yanayoshindana ni halisi, kwa sababu kikomo ulichoweka chini mno kinakataa trafiki halali na kikomo cha juu mno kinaahirisha ajali badala ya kuizuia, kwa hiyo namba ni uamuzi wa uwezo, si kisio. Leta orodha ya kila foleni na kundi, kikomo chake cha sasa (au kukiri kwamba haina), tabia ya shinikizo la nyuma inapojaa, na ushahidi wa jaribio la mzigo wa jinsi mfumo unavyodhoofika ukingoni. Kwa meli ya shirika kubwa foleni moja isiyo na kikomo inaweza kuteleza kuwa kukatika kwa meli nzima, na kwa jukwaa la serikali linalopaswa kubaki linapatikana kwa raia, kukataa kwa neema kwa kosa wazi ni wajibu wa huduma, kwa hiyo kikomo na njia yake ya kukataa vinastahili mpango wa uwezo na kitabu cha uendeshaji, si kumbukumbu ya mhandisi mmoja.

  5. Sera ya timu yenu ya kutumia mifano ya ulinganifu ya kiwango cha juu dhidi ya kufuli zilizoandikwa kwa mkono ni ipi, na mmeruhusu vighairi wapi? Mfano chaguo-msingi huamua usalama wa badiliko la wastani, kwa sababu waandishi wengi si wataalamu wa ulinganifu na watanakili muundo wowote uliopo: waigizaji, njia, na ulinganifu uliopangwa huinua sakafu kwa kila mtu, wakati ufungaji ghafi ni sahihi kinadharia na chanzo cha kukwama kwa vitendo. Mvutano ni kwamba mifano ya kiwango cha juu hugharimu mzigo mdogo kwa kila ujumbe au kazi, na kichunguzi mara kwa mara kitathibitisha kwamba njia moto inahitaji msimbo ulioboreshwa kwa mkono usio na kufuli, kwa hiyo marufuku ya jumla ni mbaya kama ruhusa huria. Leta orodha ya mahali ambapo mmeshuka chini ya chaguo-msingi salama, ushahidi wa uchunguzi uliohalalisha kila moja, na jinsi kila kighairi kinavyofungwa nyuma ya mpaka uliojaribiwa na mpangilio wa kufuli ulioandikwa. Katika shirika kubwa sera hii ndiyo inayowazuia maelfu ya wachangiaji kila mmoja kuvumbua mpango usio salama, na katika mfumo wa serikali wa muda mrefu ndiyo inayomruhusu mpitiaji miaka baadaye kuelewa kwa nini muundo hatari uliruhusiwa na kuthibitisha bado unastahili.

  6. Mnaposema kusambamba kokotoo, mnapimaje sehemu ya mfuatano, na nani anawajibika kuthibitisha kwamba kasi ni halisi? Timu mara kwa mara husambaza kokotoo kuvuka viini na kusherehekea namba ambayo kichunguzi hakingewahi kuithibitisha, kwa sababu sheria ya Amdahl hudhibiti faida kwa kinyume cha sehemu ya mfuatano bila kujali viini vingapi unaongeza, na mzigo wa kugawanya-na-kuunganisha unaweza kufuta faida kabisa kwa ingizo dogo. Mvuto unaoshindana ni kwamba usambamba huongeza ugumu halisi na uso mpya wa mbio, kwa hiyo swali ni kama kasi iliyopimwa inahalalisha hatari ya usahihi mnayoichukua. Leta uchunguzi unaotenga sehemu ya mfuatano, ukubwa wa ingizo ambapo usambamba unashinda kweli, na kipimo cha kabla-na-baada kwenye vifaa vinavyowakilisha badala ya makadirio ya matumaini. Kwa shirika linalolipia meli kubwa ya kokotoo, uchambuzi wa uaminifu wa sehemu ya mfuatano hugeuka kuwa matumizi ya vifaa yaliyookolewa au yaliyopotea, na kwa chombo cha serikali kinachowajibika kwa gharama ya mfumo wa umma, mtu aliyeidhinisha muundo sambamba anapaswa kuweza kuonyesha kipimo kilichohalalisha chini ya ukaguzi.

Mtazamo wa sekta

Kampuni changa. Ukiwa na timu ndogo na bila muda wa fedha wa ziada, nunua usahihi kwa muundo, si kwa mtaalamu wa ulinganifu usiyeweza kumwajiri. Fikia chaguo-msingi moja salama ambalo lugha yako inakupa, async/await kwa kazi inayofungwa na I/O, kazi moja mmiliki au mwigizaji kwa hali yoyote ya pamoja, na ruka ufungaji ulioboreshwa kwa mkono kabisa. Mbio ya sasisho lililopotea katika njia ya malipo inaweza kukuzamisha haraka kuliko kipengele kilichokosekana, kwa hiyo tumia msimbo mdogo wa ziada kufanya darasa hilo la hitilafu lisiwezekane na uendelee.

Biashara ndogo. Huna mtu ambaye kazi yake ni ulinganifu, kwa hiyo pendelea majukwaa na huduma zinazosimamiwa zinazoishughulikia kwa ajili yako: muamala wa hifadhidata, foleni inayohifadhiwa, au mfano wa maombi wa mfumo wa kazi hushinda nyuzi unazozidumisha kwa mkono. Unapotathmini zana, chukulia “je, hii inafanya ulinganifu kuwa salama kwa chaguo-msingi” kama swali la kununua-dhidi-ya-kujenga, na upendelee chaguo ambapo mfuatano usio sahihi hauwezi kuharibu rekodi ya mteja kimyakimya. Weka hali ya pamoja inayoweza kubadilika nje ya msimbo wako mwenyewe popote huduma iliyofungwa, inayosimamiwa inaweza kuishikilia badala yake.

Biashara kubwa. Kuvuka timu nyingi lengo ni mtindo wa nyumba unaoweka maelfu ya wachangiaji salama: kutobadilika na upitishaji wa ujumbe kama kawaida, mifano ya kiwango cha juu badala ya kufuli ghafi, foleni na makundi yaliyofungwa yenye shinikizo la nyuma, na mpangilio ulioandikwa wa kimataifa wa kufuli. Weka haya katika viwango vya kihandisi, yatekeleze kwa vigunduzi vya mbio na majaribio ya mkazo kwenye CI, na utawale vighairi ambapo kichunguzi kilihalalisha msimbo usio na kufuli ili kila kimoja kibaki nyuma ya mpaka uliojaribiwa, uliopitiwa. Simamia uwezo wa ulinganifu kama suala la meli nzima na mipaka ya foleni na ukubwa wa makundi uliofungwa na mzigo uliopimwa.

Serikali. Usahihi na uwezo wa kukaguliwa katika mifumo inayoendesha kwa miongo ni muhimu kuliko uwezo ghafi wa kupitisha. Hitaji kila mpito wa hali urekodiwe na uweze kurudiwa, ili mbio inayoshukiwa iweze kuzalishwa upya na marekebisho yathibitishwe kwa chombo cha usimamizi, na uweke njia za uamuzi zisizo na AI kwa maamuzi yanayogusa manufaa, usalama, au rekodi za umma. Ununuzi unapaswa kuhitaji wauzaji wafichue mfano wao wa ulinganifu na ushahidi wa ufikiaji wa kigunduzi cha mbio na jaribio la mkazo, kwa sababu jibu lisilo sahihi chini ya mzigo katika mfumo wa umma si usumbufu, ni jambo ambalo afisa anayewajibika atalazimika kulieleza baadaye.

Mifano

Kampuni changa. Timu ndogo inasafirisha kipengele cha malipo na kugundua kwamba salio za akaunti mara kwa mara huteleza kwa senti chache chini ya mzigo. Chanzo ni usomaji-badilisha-andika wa kawaida kwenye uga wa salio kutoka kwa washughulikiaji wa maombi wa wakati mmoja, mbio ya sasisho lililopotea. Badala ya kunyunyiza kufuli, wanahamisha salio la kila akaunti nyuma ya kazi moja mmiliki inayochakata malipo na mikopo kama ujumbe, moja baada ya jingine. Kuteleza kunatoweka, msimbo unakuwa rahisi kufikiria, na wanaongeza jaribio la mkazo linalorusha maelfu ya uhamisho wa wakati mmoja kulinda marekebisho. Badiliko moja la kimuundo, darasa zima la hitilafu limestaafishwa.

Biashara kubwa. Huduma ya maagizo ya uwezo wa juu inayoshughulikia makumi ya maelfu ya maombi kwa sekunde inapata miruko ya mara kwa mara ya ucheleweshaji na ajali za mara kwa mara za kuishiwa kumbukumbu wakati wa kilele cha trafiki. Uchunguzi unapata foleni ya kazi isiyo na kikomo nyuma ya kundi la nyuzi linalokua bila kikomo mahitaji yanapozidi uwezo. Timu inafunga foleni, inaweka kikomo cha kundi kwa ukubwa unaohusiana na idadi ya viini, na kuongeza shinikizo la nyuma linalokataa mzigo wa ziada haraka kwa kosa wazi. Uwezo wa kupitisha unatabirika, ajali zinakoma, na kufuli moto kwenye kache ya pamoja kinabadilishwa na muundo usio na kufuli tu baada ya kichunguzi kuthibitisha mgongano ni halisi. Chaguo-msingi salama kwa waandishi wengi, ulinganifu ulioboreshwa pale tu palipopimwa.

Serikali. Jukwaa la kitaifa la manufaa linaendesha kwa miongo na lazima litoe matokeo yanayokaguliwa, sahihi hata chini ya masasisho ya kesi ya wakati mmoja. Timu inachagua kutobadilika na upitishaji wa ujumbe kama chaguo-msingi la nyumba, inafunga kila kipande cha hali inayobadilika kwa mmiliki mmoja, na inaweka mpangilio wa kimataifa wa kufuli popote kufuli zinapobaki, vyote vimeandikwa kwenye viwango vya kihandisi. Wanaendesha visafishaji vya nyuzi na majaribio ya mkazo ya nasibu kwenye bomba, na kubuni ili kila mpito wa hali urekodiwe na uweze kurudiwa kwa usimamizi, jambo linalowaruhusu kuzalisha upya na kuthibitisha marekebisho mfuatano nadra unaposhukiwa. Usahihi na uwezo wa kukaguliwa vinachukuliwa kama mahitaji ya daraja la kwanza, si mawazo ya baadaye ya utendaji.

Kesi ya biashara: sababu, ROI, na TCO

Mapato ya ulinganifu wenye nidhamu yanaonekana kama matukio ambayo hayatokei kamwe. Mbio moja ya uzalishaji inaweza kuharibu data kuvuka maelfu ya rekodi, na gharama inajumuisha saa za kihandisi kupata hitilafu inayojificha inapotazamwa na gharama kubwa zaidi sana ya kupatanisha data mbaya, kuwaarifu watumiaji walioathirika, na kujenga upya uaminifu. Hizi ni miongoni mwa kasoro ghali zaidi kutambua hasa kwa sababu hazina uamuzi, kwa hiyo kufukuza heisenbug moja kunaweza kuzidi juhudi ya kuchagua mfano salama mapema.

Faida pia inaonekana kama uwezo wa kupitisha na gharama. Kupanga ukubwa wa ulinganifu ipasavyo huruhusu huduma kushughulikia mzigo mwingi zaidi kwenye vifaa vilevile, akiba inayojirudia kwa meli kubwa, huku shinikizo la nyuma na foleni zilizofungwa zikizuia kukatika kwa mfululizo kunakogeuza kilele cha trafiki kuwa tukio la umma. Jumla ya gharama ya umiliki ni ya wastani na hasa ya kiutamaduni: unawekeza katika mtindo wa nyumba (kutobadilika, upitishaji wa ujumbe, ulinganifu uliopangwa), katika zana (vigunduzi vya mbio, visafishaji vya nyuzi, vifaa vya mkazo kwenye CI), na katika viwango vinavyoweka mpangilio wa kufuli na vikomo. Mbadala ni msimbo ambapo usahihi unategemea kila mwandishi kuwa mtaalamu milele, jambo ambalo hakuna timu inayokua inaweza kulidumisha. Jenga hoja kwa uongozi katika vipimo vyao: tafsiri mbio iliyozuiwa kuwa matukio ya uharibifu wa data yaliyoepukwa, shinikizo la nyuma kuwa kukatika kulikozuiwa, na chaguo-msingi salama kuwa muda wa utambulisho uliookolewa.

Mifumo mibaya na mitego

  • Kuongeza nyuzi kwa kasi kwenye kazi inayofungwa na I/O. Nyuzi zaidi kwenye huduma inayosubiri sana hununua mgongano, si uwezo wa kupitisha.
  • Hali ya pamoja inayoweza kubadilika kila mahali. Uzi wowote ukibadilisha kitu chochote hufanya usahihi kuwa suala la bahati ambalo hakuna mpitiaji anayeweza kulithibitisha.
  • Foleni na makundi yasiyo na kikomo. Kilele hukuza foleni hadi kumbukumbu inakufa; ajali inaonekana ya ajabu lakini ni mzigo kupita kiasi tu.
  • Ufungaji wa papo hapo bila mpangilio wa kimataifa. Kufuli zinazochukuliwa kwa mpangilio tofauti kuvuka msimbo hukwama chini ya mzigo.
  • Kudhani msimbo unaendeshwa kwa mpangilio ulioandikwa. Kupuuza kielelezo cha kumbukumbu, kwa hiyo hitilafu ya uonekanaji huacha uzi ukizunguka kwenye thamani iliyopitwa na wakati.
  • Ujanja usio na kufuli ulioandikwa kwa mkono. Mipango maalumu isiyo na kufuli karibu daima ina makosa fiche na haiwezekani kupitia.
  • Kujaribu mfuatano wa furaha tu. Majaribio ya uhakika hupita huku mpangilio wa mmoja kati ya milioni ukiharibu uzalishaji.
  • Kuita msimbo usiojulikana ukishikilia kufuli. Callback inayozuia au kuingia tena hugeuza sehemu muhimu kuwa kukwama.

Kielelezo cha ukomavu

  • Ngazi ya 1, Kuanzisha: Ulinganifu ni wa papo hapo na wa kuitikia. Nyuzi na kufuli huongezwa kwa hisia, hali ya pamoja inayoweza kubadilika iko kila mahali, na foleni hazina kikomo. Hali za mbio hujitokeza kama matukio ya uzalishaji yasiyozalishika upya ambayo hakuna anayeweza kuyatambua, na hakuna zana za kuzinasa.
  • Ngazi ya 2, Kuendeleza: Baadhi ya timu zimejifunza mazoea ya msingi: zinatumia kufuli kwa uangalifu zaidi na kufunga foleni zao zilizo wazi zaidi. Kuna ufahamu usio rasmi wa mbio na kukwama, na njia chache muhimu hupata uchunguzi wa ziada. Mazoea hayana uthabiti kuvuka timu, majaribio bado ni ya mfuatano mmoja hasa, na mifumo salama huishi kwa watu binafsi badala ya kwenye maandishi.
  • Ngazi ya 3, Kusawazisha: Shirika lina mtindo wa nyumba ulioandikwa unaotekelezwa shirika zima: kutobadilika na upitishaji wa ujumbe kama chaguo-msingi, mifano ya kiwango cha juu badala ya kufuli ghafi, foleni na makundi yaliyofungwa yenye shinikizo la nyuma, na mpangilio ulioandikwa wa kimataifa wa kufuli. Vigunduzi vya mbio na majaribio ya mkazo huendeshwa kwenye CI, na uchaguzi wa ulinganifu hufuata kama kazi inafungwa na I/O au CPU.
  • Ngazi ya 4, Kusimamia: Shirika linapima na kudhibiti msimamo wake wa ulinganifu dhidi ya vipimo vya msingi. Linafuatilia ufikiaji wa kigunduzi cha mbio na kisafishaji cha nyuzi kuvuka huduma, linarekodi kina cha foleni, muda wa kusubiri kufuli, kujaa kwa kundi, na viwango vya kukataa kama vipimo vinavyofuatiliwa, na kujaribu mzigo wa mkunjo wa kudhoofika ili kila kikomo kiwe uamuzi wa uwezo unaotegemea data. Matukio ya ulinganifu yanahesabiwa na kufuatiliwa kwa mielekeo, sehemu za mfuatano za mizigo ya kazi iliyosambamba zinapimwa dhidi ya kasi iliyopatikana kweli, na maamuzi ya kwenda au kutokwenda kwa miundo mipya yanasimama kwenye ushahidi huo badala ya hisia.
  • Ngazi ya 5, Kuratibu: Ulinganifu salama ndiyo njia ya upinzani mdogo zaidi kwa kila mwandishi, na mazoea yanaboreshwa kila wakati na kuunganishwa kuvuka shirika. Madarasa mazima ya hitilafu hayawezekani kwa muundo, sehemu moto zinaboreshwa tu pale uchunguzi unapothibitisha, na uigaji wa kurudia wa uamuzi hufanya hitilafu nadra iliyobaki iweze kuzalishwa upya. Usahihi na uwezo wa kukaguliwa ni sifa zinazotetewa kila wakati, mipaka ya uwezo hubadilika kulingana na mzigo unaoonekana, na viwango vinabadilika jukwaa na mzigo wa kazi vinapohama.

Mawazo ya kujadili

  1. Mkikagua huduma yenu yenye shughuli nyingi zaidi leo, hali yake kiasi gani ni ya pamoja na inayoweza kubadilika, na ushiriki huo kiasi gani ni wa lazima kweli?
  2. Jibu chaguo-msingi la timu yenu mtu anapohitaji kazi mbili kuratibu ni lipi, na je, mngependa liwe kutobadilika au upitishaji wa ujumbe?
  3. Foleni zisizo na kikomo au makundi yasiyo na kikomo bado yanajificha wapi katika mfumo wenu, na nini kingewatokea chini ya kilele cha ghafla cha mara kumi cha trafiki?
  4. Je, uendeshaji wenu wa ujumuishaji endelevu unajumuisha kigunduzi cha mbio au kisafishaji cha nyuzi, na lini mara ya mwisho kimoja kilinasa kitu kabla ya uzalishaji?
  5. Kwa mzigo wenu wa kazi uliosambamba zaidi, sehemu ya mfuatano ni ipi, na je, sheria ya Amdahl inadhibiti kasi mnayoifukuzia kweli?
  6. Je, timu yenu ingeweza kuzalisha upya hitilafu ya mfuatano wa mmoja kati ya milioni kwa mahitaji, na ingechukua nini kufika huko?

Mambo muhimu ya kukumbuka

  • Ulinganifu hupanga programu kama kazi huru; usambamba huziendesha kwa wakati mmoja. Amua unachohitaji kabla ya kuongeza nyuzi.
  • Hali ya pamoja inayoweza kubadilika ndiyo mzizi wa karibu kila hitilafu ya ulinganifu; pendelea kutobadilika na upitishaji wa ujumbe kama chaguo-msingi salama kwa waandishi wengi.
  • Fikia mifano ya kiwango cha juu (waigizaji, njia, ulinganifu uliopangwa, async/await) kabla ya kufuli zilizoandikwa kwa mkono, ambazo ni sahihi kinadharia na hatari kwa vitendo.
  • Elewa uatomiki, uonekanaji, na kielelezo chako cha kumbukumbu; tumia kiini sahihi, shikilia kufuli kwa muda mfupi, na uweke mpangilio wa kimataifa wa kufuli kuepuka kukwama, livelock, na njaa.
  • Funga kila foleni na kundi na utumie shinikizo la nyuma, ili kilele kidhoofike kwa neema badala ya kuanguka (sura ya 3.3).
  • Jaribu mfuatano kwa makusudi kwa vigunduzi vya mbio, majaribio ya mkazo, na kurudia (sura ya 2.15), na uheshimu sheria ya Amdahl unaposambamba (sura ya 2.16).
  • Kwa mashirika makubwa huu ni uwezo wa kupitisha na matukio yaliyozuiwa; kwa serikali ni usahihi na uwezo wa kukaguliwa katika mifumo ya muda mrefu.

Marejeo na usomaji zaidi

  • Brian Goetz et al., Java Concurrency in Practice (atomicity, visibility, the memory model, and safe publication).
  • Herb Sutter, “The Free Lunch Is Over” (why software must embrace concurrency as clock speeds plateau).
  • Leslie Lamport, “Time, Clocks, and the Ordering of Events in a Distributed System” (ordering and the foundations of concurrent reasoning).
  • C. A. R. Hoare, “Communicating Sequential Processes” (Communications of the ACM, 1978): the CSP model behind channels.
  • Carl Hewitt, Peter Bishop, and Richard Steiger, “A Universal Modular Actor Formalism for Artificial Intelligence” (the origin of the actor model).
  • Edsger W. Dijkstra, “Cooperating Sequential Processes” (semaphores, mutual exclusion, and the deadlock problem).
  • Maurice Herlihy and Nir Shavit, The Art of Multiprocessor Programming (locks, atomics, and lock-free data structures).
  • Nathaniel J. Smith, “Notes on Structured Concurrency, or: Go Statement Considered Harmful” (the case for structured concurrency).
  • Martin Kleppmann, Designing Data-Intensive Applications (concurrency and consistency where memory meets distributed systems).
  • Gene M. Amdahl, “Validity of the Single Processor Approach to Achieving Large-Scale Computing Capabilities” (1967): the origin of Amdahl’s law.