3.4 Usanifu wa data na uhifadhi
Muhtasari na msukumo
Data hudumu kuliko msimbo. Programu huandikwa upya kila baada ya miaka michache, lakini data wanayoisimamia (rekodi za wateja, leja za kifedha, historia za manufaa, rekodi za afya) hudumu kwa miongo. Mara nyingi ndiyo mali yenye thamani na inayodhibitiwa zaidi ya shirika. Usanifu wa data ni nidhamu ya kuamua jinsi data hiyo inavyoundwa, inavyohifadhiwa wapi, inavyowekwa thabiti, inavyobadilika, na inavyohudumiwa kwa kasi ya kutosha kwa ukubwa. Kwa shirika kubwa maamuzi haya ni ya msingi. Uchaguzi wako wa injini za uhifadhi na kielelezo cha data unadhibiti kile biashara inachoweza kufanya, kasi inavyoweza kusonga, na gharama, kwa maisha yote ya mfumo.
Dau ni kubwa zaidi katika mashirika makubwa na serikali kwa sababu ya ukubwa, maisha marefu, na udhibiti. Hifadhi ya miamala ya benki lazima isipoteze au kuhesabu senti mara mbili kamwe. Sajili ya serikali lazima ihifadhi rekodi kwa vipindi vya kisheria na kuthibitisha uadilifu wake kwa wakaguzi. Mfumo wa afya lazima utekeleze ufikiaji wa kina na kanuni za makazi. Wakati huohuo, mashirika haya huhudumia ujazo mkubwa mno wa usomaji na uandishi na hayawezi kumudu kila hoja kugonga hifadhidata ya uhusiano moja. Kwa hiyo usanifu wa data lazima upatanishe usahihi na uimara na utendaji na ukubwa, na ufanye hivyo huku muundo ukiendelea kubadilika kutimiza maagizo mapya.
Sura hii inashughulikia mifano mikuu ya uhifadhi na lini kutumia kila moja, nidhamu ya uhifadhi wa lugha nyingi, uundaji wa data na tatizo linalodharauliwa mara nyingi la mageuzi ya muundo na uhamishaji, kache na CDN (mitandao ya usambazaji wa maudhui) pamoja na tatizo gumu linalojulikana la kubatilisha, na jinsi miamala, kufunga, na ulinganifu vinavyotenda ukivisukuma hadi ukubwa. Uzi wa kuunganisha ni rahisi: hakuna hifadhidata ya ulimwengu mzima. Kuna mabadilishano, na usanifu mzuri wa data unamaanisha kuyachagua kwa makusudi, mzigo mmoja wa kazi kwa wakati.
Kanuni kuu
- Unda data kulingana na mifumo ya ufikiaji, si kinyume chake. Buni uhifadhi kuzunguka jinsi data itakavyosomwa na kuandikwa, si kuzunguka kielelezo cha dhahania “sahihi.”
- Hakuna hifadhidata moja ya kutawala yote. Mizigo tofauti ya kazi inataka injini tofauti; uhifadhi wa lugha nyingi ni wa kawaida kwa ukubwa.
- Usahihi kwanza kwa mifumo ya rekodi. Kwa data yenye mamlaka, uimara na uthabiti havijadiliwi; boresha utendaji kuvizunguka, si kupitia.
- Muundo utabadilika, kwa hiyo upange. Uhamishaji ni shughuli ya daraja la kwanza, endelevu ya kihandisi, si ya mara moja.
- Miliki data yako nyuma ya mpaka wa huduma. Kila muktadha uliofungwa (kielelezo cha kikoa kinachojitegemea chenye mpaka wake wazi) humiliki data yake; kushiriki hifadhidata huunganisha timu na kuharibu uhuru.
- Kache ni tatizo la usahihi lililojificha kama ushindi wa utendaji. Kila kache huleta hatari ya kupitwa na wakati na kubatilisha; ichukulie kwa makusudi.
- Kuondoa kurekebisha si dhambi, ni mabadilishano. Kunakili data kwa utendaji wa kusoma ni halali ikiwa unamiliki matokeo ya uthabiti.
- Uthabiti na ukubwa hubadilishana. Kadiri hakikisho la muamala linavyokuwa imara, ndivyo linavyokuwa gumu zaidi kusambaza; nunua tu kile mzigo wa kazi unahitaji.
Mapendekezo
Chagua mfano wa uhifadhi kutoka kwa mzigo wa kazi
Linganisha kila mzigo wa kazi na kielelezo kinachoufaa. Hifadhidata za uhusiano hutoa uthabiti mkali, uunganishaji, na miamala iliyokomaa; ni chaguo-msingi kwa mifumo ya rekodi na chochote chenye kanuni changamano za uadilifu. Hifadhi za nyaraka zinafaa data ya daraja, yenye muundo unaonyumbulika inayosomwa kama kitengo (agizo zima, wasifu mzima). Hifadhi za ufunguo-thamani hutoa kasi kubwa kwa utafutaji rahisi (vikao, bendera za vipengele, kache). Hifadhidata za grafu ni bora pale mahusiano ndiyo hoja (mitandao ya ulaghai, chati za shirika, haki, minyororo ya ugavi). Hifadhi za safu wima huendesha hoja za uchanganuzi zinazochanganua safu wima chache juu ya mabilioni ya safu (maghala ya data, ripoti). Hifadhidata za mfululizo wa wakati huboresha data nzito ya kuongeza yenye muhuri wa muda (vipimo, telemetri, vihisi vya Intaneti ya Vitu (IoT), data ya soko). Pinga kulazimisha injini moja kufanya kila kazi. Kutumia hifadhidata ya uhusiano kama foleni, au hifadhi ya nyaraka kama leja, kunaalika maumivu.
Pokea uhifadhi wa lugha nyingi kwa makusudi
Mifumo mikubwa hutumia halali hifadhi kadhaa: mfumo wa rekodi wa uhusiano, faharasa ya utafutaji, kache, ghala la uchanganuzi, na pengine injini ya grafu au mfululizo wa wakati. Huu ni uhifadhi wa lugha nyingi, na ni mfumo sahihi pale mizigo ya kazi inapotofautiana kweli. Gharama ni ya uendeshaji, kwa sababu sasa una injini zaidi za kuendesha, kulinda, kuhifadhi nakala, na kuajiri. Simamia gharama hiyo kwa kuchukulia kila hifadhi kama inayomilikiwa na huduma, kusawazisha zana za uendeshaji, na kuweka idadi ya teknolojia kuwa zile zinazostahili nafasi yake. Tahadhari kuhusu kupokea hifadhidata mpya kwa kila hitaji dogo. Kila moja ni ahadi ya kudumu ya uendeshaji.
Unda data na uchukulie mageuzi ya muundo kama endelevu
Wekeza katika uundaji wa data mapema kwa mifumo ya rekodi. Rekebisha ili kulinda uadilifu, kisha ondoa kurekebisha kwa kuchagua kwa sehemu moto za kusoma zilizothibitishwa. Kielelezo chochote, muundo hubadilika milele, kwa hiyo fanya uhamishaji uwe salama na wa kawaida. Tumia hati za uhamishaji zenye matoleo, za kiotomatiki, za kuendelea mbele tu zilizowekwa kwenye udhibiti wa chanzo na kutumika kupitia bomba la usambazaji. Kwa mabadiliko bila muda wa kukatika kwenye majedwali makubwa, tumia muundo wa panua-punguza (badiliko sambamba): ongeza safu wima au jedwali jipya, jaza nyuma na andika mara mbili, hamisha wasomaji, kisha ondoa umbo la zamani. Kamwe usifanye mabadiliko moja yanayovunja. Fanya mabadiliko ya muundo yaoane nyuma kuvuka usambazaji ili msimbo wa zamani na mpya uendeshe kwa wakati mmoja. Katika mifumo inayotegemea matukio au ujumbe, weka matoleo ya miundo ya matukio na ujumbe wako waziwazi na uunge mkono kupandisha matukio ya zamani (kuyabadilisha kuwa muundo wa sasa wakati wa kusoma).
Buni kache na kubatilisha ukiwa na macho wazi
Kache na CDN ni zana zenye kiegemeo cha juu zaidi cha utendaji. CDN hutoa maudhui tuli na yanayoweza kuhifadhiwa kwenye kache kutoka ukingoni karibu na watumiaji, na kache za programu huokoa hifadhidata kutokana na usomaji wa mara kwa mara. Lakini sehemu ngumu ni kubatilisha: kujua data iliyohifadhiwa kwenye kache imepitwa lini na wakati. Chagua mkakati kwa kila kisa. Tumia kuisha kwa muda (TTL) pale kupitwa na wakati kidogo kunakubalika na ni rahisi zaidi. Tumia kubatilisha wazi au kuandika-kupitia pale ubichi unajalisha. Tumia cache-aside pale programu inasimamia kujaza. Weka TTL kwa makusudi, jilinde dhidi ya mikanyagano ya kache (wateja wengi wakijenga upya ingizo lilelile lililoisha kwa wakati mmoja) kwa kufunga au kuunganisha maombi, na uzuie makundi ya wanyama wanaokimbia kwenye kache baridi. Kamwe usihifadhi kwenye kache data ambayo kupitwa na wakati kwake kungeweza kusababisha kushindwa kwa usahihi au uzingatiaji (haki, salio, ridhaa) bila njia wazi, iliyojaribiwa ya kubatilisha. Chukulia funguo za kache, TTL, na kubatilisha kama vitu vya usanifu, si usanidi wa bahati mbaya.
Simamia miamala, kufunga, na ulinganifu kwa ukubwa
Elewa viwango vya kutenga na uchague kilicho dhaifu zaidi ambacho bado ni sahihi kwa kila muamala, kwa sababu kutenga kwa juu zaidi kunagharimu ulinganifu. Pendelea ulinganifu wa matumaini (ukaguzi wa toleo wakati wa kuandika) kwa mizigo ya mgongano mdogo, nzito ya kusoma, na fikia kufunga kwa wasiwasi tu chini ya mgongano moto wa kweli, ukiweka kufuli fupi na zilizopangwa kwa mpangilio thabiti kuepuka kukwama. Unapopanuka, hifadhidata moja inayoweza kuandikwa inakuwa kizuizi. Leta nakala za kusoma kwa kupanua usomaji (ukikubali ucheleweshaji wa kunakili), na gawanya/panga kwa ufunguo unaosambaza mzigo sawasawa na kuweka data inayohusiana pamoja ili kuepuka miamala ya kuvuka vipande. Kumbuka kwamba kugawanya kunatoa uunganishaji rahisi wa kuvuka vipande na miamala ya ACID (Atomicity, Consistency, Isolation, Durability) ya vipande vingi, ambayo mara nyingi ndiyo sababu sagas na kuondoa kurekebisha huonekana. Sukuma mbinu hizi ndani tu mzigo wa kazi unapodai. Kugawanya mapema huongeza ugumu wa kudumu.
Mabadilishano: faida na hasara
| Aina ya hifadhi | Bora kwa | Nguvu | Udhaifu |
|---|---|---|---|
| Uhusiano | Mifumo ya rekodi, uadilifu changamano | ACID, uunganishaji, zana zilizokomaa | Ngumu zaidi kupanua uandishi kwa upana |
| Nyaraka | Usomaji wa jumla, muundo unaonyumbulika | Usomaji/uandishi wa haraka wa kitu kizima, unaonyumbulika | Uunganishaji/miamala dhaifu ya kuvuka nyaraka |
| Ufunguo-thamani | Vikao, kache, utafutaji rahisi | Kasi na ukubwa wa hali ya juu | Hakuna hoja zaidi ya ufunguo |
| Grafu | Hoja nzito za mahusiano | Kupitia kwa haraka, inayoeleza | Ujuzi mdogo wa uendeshaji, mipaka ya ukubwa |
| Safu wima | Uchanganuzi, ripoti | Uchanganuzi wa jumla wa haraka, mbano | Duni kwa uandishi wa miamala wa kiwango cha safu |
| Mfululizo wa wakati | Vipimo, telemetri, IoT | Kuongeza kwa ufanisi na hoja za wakati | Madhumuni finyu |
Biashara kuu ni uthabiti na hoja tajiri dhidi ya ukubwa wa kupanuka kwa upana na kasi. Mifumo ya uhusiano hutoa hakikisho imara zaidi na hoja zinazonyumbulika zaidi, lakini ni ngumu zaidi kupanua uandishi kuvuka mashine nyingi. Familia za NoSQL (zisizo za uhusiano) hulegeza uunganishaji, miamala, au muundo kupata ukubwa na kasi. Kache hubadilisha ubichi kwa ucheleweshaji. Kugawanya hubadilisha miamala ya kuvuka vipande kwa uwezo wa kupitisha uandishi. Hakuna kati ya hivi kilicho sahihi kwa kila mahali. Ufundi ni kuweka kila mzigo wa kazi kwenye nukta ya mkunjo ambayo mahitaji yake ya usahihi na utendaji yanadai kweli.
Maswali ya kujadili na timu yako
Kwa kila seti muhimu ya data, kila mtu anaweza kutaja mfumo mmoja wa rekodi, au kache na makadirio yanachukuliwa kimyakimya kama ukweli? Data hudumu kuliko msimbo, na matukio yanayoumiza zaidi ya data hutokana na kuteleza: kache, faharasa ya utafutaji, au makadirio ya kusoma yanachukuliwa kimakosa kama yenye mamlaka na kutofautiana kimyakimya na chanzo halisi. Katika timu kubwa hili hutokea umiliki unapokuwa na ukungu na huduma kadhaa zinaandika nakala zinazoingiliana, kwa hiyo hakuna anayeweza kusema thamani ipi ni sahihi wakati wa tukio. Leta ramani ya data yenu muhimu na, kwa kila kipengee, hifadhi moja yenye mamlaka pamoja na nakala zilizotokana ambazo lazima ziweze kujengwa upya kutoka kwake. Katika fedha na serikali, kuweza kuthibitisha rekodi ipi ni chanzo cha kisheria na kujenga upya zilizobaki mara nyingi ni sharti la udhibiti, si urahisi. Chochote usichoweza kukijenga upya kutoka mfumo wa rekodi ni mfumo wa rekodi wenyewe, ukikusudia au la.
Kila injini ya hifadhidata katika eneo lenu inagharimu nini kuendesha, kulinda, na kuhifadhi nakala, na je, kila moja bado inastahili nafasi yake? Uhifadhi wa lugha nyingi ni sahihi mizigo ya kazi inapotofautiana kweli, lakini kila injini ni ahadi ya kudumu ya uendeshaji: kupachika, nakala rudufu, ufuatiliaji, mapitio ya usalama, na wafanyakazi wanaoijua saa tisa usiku. Shirika kubwa linaweza kuteleza kuwa zoo ya hifadhi zilizopokelewa kwa kipengele kimoja kila moja, na ile ya pembeni inaongeza gharama milele huku ikihudumia mzigo ambao hifadhi mnayoiendesha tayari ingeweza kuushughulikia. Orodhesha kila injini, mzigo wa kazi unaoihalalisha, na nani yuko zamu kwake, kisha weka alama kwa yoyote iliyopokelewa kwa hitaji ambalo hifadhi ya msingi sasa ingeweza kulitimiza. Kupokea hifadhidata mpya kunapaswa kuvuka kiwango cha juu, kwa sababu kuiondoa baadaye kunamaanisha uhamishaji mwingine. Kusawazisha zana za uendeshaji kuvuka hifadhi mnazozihifadhi ndiyo njia ya kushikilia gharama chini bila kulazimisha injini moja kufanya kila kazi.
Wapi mtumiaji anaweza kusoma thamani iliyopitwa na wakati kutoka nakala mara baada ya uandishi wake mwenyewe, na je, hilo linavunja ahadi mliyowapa? Nakala za kusoma hupanua usomaji lakini huchelewa nyuma ya msingi, kwa hiyo mtumiaji anayesasisha wasifu na kupakia upya mara moja anaweza kuona thamani ya zamani, ambayo inasomeka kama hitilafu au, kwa salio au bendera ya ridhaa, kushindwa kwa uzingatiaji. Amua kwa kila mtiririko kama soma-maandishi-yako yanajalisha, na uelekeze usomaji huo kwenye msingi au tumia utaratibu wa uthabiti wa kikao. Leta orodha ya mitiririko inayohudumiwa kutoka nakala na uweke alama zipi mtumiaji anazotendea kazi mara moja baada ya kuandika. Kwa salio, haki, na ridhaa, chukulia usomaji uliopitwa na wakati kama kushindwa kwa usahihi, si kwa mapambo. Hoja ni kununua uthabiti ambao kila mzigo wa kazi unauhitaji kweli, na kufanya kupitwa na wakati mnakokubali kuwa wazi badala ya wa bahati mbaya.
Mnaweza kubadilisha muundo wa jedwali lenu kubwa zaidi, lenye shughuli nyingi zaidi leo bila kukatika, na nani amefanyia mazoezi hatua za panua-punguza? Muundo hubadilika milele, na kushindwa kunakouma zaidi ni mabadiliko ya mlipuko mkubwa yanayofunga jedwali kubwa, kukwamisha huduma, na hayawezi kurudishwa nyuma kwa usafi. Katika timu kubwa hatari huzidi kwa sababu huduma kadhaa zinasoma umbo lilelile, kwa hiyo badiliko linalovunja linahitaji msimbo wa zamani na mpya kuendesha kando kwa kando kuvuka usambazaji wa hatua. Mvuto unaoshindana ni kasi: mabadiliko moja ni ya haraka kuandika, wakati panua-punguza (ongeza umbo jipya, jaza nyuma, andika mara mbili, hamisha wasomaji, ondoa umbo la zamani) ni hatua nyingi zaidi na subira zaidi. Leta jedwali lenu kubwa zaidi, makadirio ya uaminifu ya muda ambao mabadiliko ya kipuuzi yangeifunga, na uhamishaji mahususi ambao mtu ameuendesha mwanzo hadi mwisho katika mazoezi badala ya nadharia. Katika mifumo ya mashirika makubwa na serikali inayoendesha mfululizo na kubeba malengo ya kisheria ya upatikanaji, kukatika kwa uhamishaji ni ukiukaji, kwa hiyo nidhamu ya panua-punguza ni bei ya kuruhusiwa kubadilisha muundo kabisa.
Ni thamani zipi zilizohifadhiwa kwenye kache au kunakiliwa, zikihudumiwa zimepitwa na wakati, zingesababisha kushindwa kwa uzingatiaji au usalama badala ya kwa mapambo, na je, kila njia ya kubatilisha ya hizo imejaribiwa? Kache ni tatizo la usahihi lililovaa vazi la utendaji: hatari si ucheleweshaji bali kutoa haki, salio, bendera ya ridhaa, au uamuzi wa ufikiaji baada ya kubadilika. Kwa shirika kubwa hatari imetawanyika, kwa sababu kache na tabaka za ukingo hujilimbikiza kuvuka timu na hakuna mtu mmoja anayeweza kuorodhesha kilicho wapi kwenye kache au linaposafishwa lini. Mvutano ni halisi: kache kali na TTL ndefu hununua ucheleweshaji na kulinda hifadhidata, wakati ubichi mkali unagharimu vyote viwili. Leta orodha ya data iliyohifadhiwa kwenye kache na inayohudumiwa na CDN, ikiwa na alama zipi zinabeba matokeo ya uzingatiaji au usalama, pamoja na ushahidi kwamba njia ya kubatilisha ya kila moja ya hizo imetumika kivitendo badala ya kusanidiwa tu. Katika mazingira yanayodhibitiwa na ya umma, thamani ya ridhaa au kustahiki iliyopitwa na wakati ni kushindwa kunakokaguliwa, kwa hiyo vitu hivyo vinahitaji njia wazi, iliyojaribiwa ya kubatilisha au visihifadhiwe kwenye kache kabisa.
Mkakati wenu wa uhifadhi, uhifadhi wa kumbukumbu, na makazi ya data kwa kila hifadhi yenye mamlaka ni upi, na mnaweza kuuthibitisha kwa mkaguzi? Data hudumu kuliko msimbo na mara nyingi hudumu kuliko timu iliyouandika, kwa hiyo ukuaji usio na kikomo na kanuni zisizo wazi za makazi kimyakimya huwa tatizo ambalo hakuna anayelimiliki hadi jedwali lisidhibitike au rekodi ikae katika mamlaka isiyo sahihi. Shirika kubwa linavuka hifadhi na kanda nyingi, na mazingatio yanayoshindana ni gharama (hifadhi moto ni ghali, kwa hiyo weka kumbukumbu na ugawanye ngazi), utendaji (majedwali yaliyovimba hupunguza kasi ya kila kitu), na wajibu wa kisheria (sakafu za uhifadhi za kisheria na dari za makazi zinazoweza kugongana). Leta, kwa kila seti ya data yenye mamlaka, kipindi cha uhifadhi, mahali data inapoishi kimwili, utaratibu wa kuhifadhi kumbukumbu na kufuta, na jina la mtu anayewajibika. Kwa mifumo ya mashirika makubwa na hasa ya serikali, uhifadhi na makazi kwa kawaida ni maagizo ya kisheria yenye mahitaji ya ukaguzi na enzi, kwa hiyo kuweza kuthibitisha kila rekodi inaishi wapi, inahifadhiwa kwa muda gani, na inaharibiwa lini ni leseni ya kufanya kazi, si fadhila.
Mtazamo wa sekta
Kampuni changa. Endesha hifadhidata moja na upinge zoo. Hifadhi moja ya uhusiano inayosimamiwa inakupa miamala, kitu kimoja cha kuhifadhi nakala, na mahali pamoja pa kufikiri kuhusu uthabiti, ambayo ndiyo hasa timu ya watu watatu inaweza kumudu kuishika kichwani. Ongeza kache, nakala ya kusoma, au faharasa ya utafutaji tu pale hoja mahususi ya polepole au ujazo halisi wa usomaji unapolazimisha, ili ugumu ufike na sababu ya kulipa. Weka uhamishaji wenye matoleo tangu siku ya kwanza, kwa sababu kurudisha nidhamu ya uhamishaji kwenye bidhaa hai ni ngumu zaidi sana kuliko kuanza nayo.
Biashara ndogo. Huna mtaalamu wa hifadhidata wala muda wa kuendesha injini kadhaa, kwa hiyo pendelea hifadhi inayosimamiwa na uache mtoa jukwaa wako ashughulikie nakala rudufu, kupachika, na kunakili. Chukulia uchaguzi wa hifadhi kama uamuzi wa kununua: chagua injini ya kawaida, inayosaidiwa vizuri ambayo zana zako tayari zinaiunganisha badala ya ile ya haraka zaidi kwenye kipimo. Weka sera rahisi ya uhifadhi na nakala rudufu unayoweza kuithibitisha kweli, na kamwe usihifadhi kwenye kache chochote kinachohusiana na fedha au ruhusa bila njia wazi ya kukisafisha, kwa sababu bei au haki iliyopitwa na wakati inakugharimu mteja.
Biashara kubwa. Changamoto kuu ni uhifadhi wa lugha nyingi kuvuka timu nyingi: mfumo wa rekodi wa uhusiano pamoja na utafutaji, kache, ghala, na pengine injini za grafu au mfululizo wa wakati, kila moja ikimilikiwa na huduma badala ya kushirikiwa. Sawazisha zana za uendeshaji, nakala rudufu, na ufuatiliaji kuvuka hifadhi mnazozihifadhi, shikilia kupokea injini mpya kwa kiwango cha juu, na ufanye uhamishaji wa panua-punguza na kubatilisha kache wazi kuwa chaguo-msingi. Simamia eneo kama jalada lenye umiliki wazi wa data, ili hakuna injini inayodumu zaidi ya mzigo wa kazi uliohalalisha na hakuna timu inayounganishwa kupitia hifadhidata ya pamoja.
Serikali. Makazi ya data, uhifadhi wa kisheria, na uadilifu unaothibitishika huumba kila uchaguzi. Weka kila hifadhi katika kanda za enzi, sanidi CDN zihifadhi kwenye kache data isiyo ya kibinafsi tu, na uhifadhi historia ya ukaguzi isiyobadilika kwa rekodi zinazopaswa kuweza kujengwa upya kwa wadhibiti. Uhamishaji unaoamriwa na sheria mpya lazima utumike kwa kuoana nyuma kupitia bomba ili huduma ibaki ikipatikana kupitia tarehe za mwisho za kisheria, na mfumo wa rekodi lazima utambulike ili uweze kuthibitisha thamani ipi ni chanzo cha kisheria na kujenga upya kila nakala iliyotokana nayo.
Mifano
Kampuni changa. Kampuni changa ya hatua ya mbegu inaendesha kila kitu kwenye mfano mmoja wa PostgreSQL unaosimamiwa na kupinga mvuto wa kuongeza injini tofauti ya utafutaji, kache, na ghala kabla ya kuvihitaji. Hifadhidata moja inamaanisha kitu kimoja cha kuhifadhi nakala, mahali pamoja pa kufikiri kuhusu uthabiti, na miamala inayofanya kazi tu, ambayo ni muhimu timu nzima ikiwa wahandisi watatu. Wanaongeza kache ya Redis na nakala ya kusoma tu pale hoja mahususi ya polepole na ujazo halisi wa usomaji unapohalalisha, ili ugumu ufike na sababu ya kulipa badala ya kabla yake.
Biashara kubwa. Benki ya rejareja inaweka leja yake yenye mamlaka kwenye hifadhidata ya uhusiano yenye uthabiti mkali: kila uwekaji ni muamala kamili wa ACID, uliogawanywa kwa wigo wa akaunti kwa ukubwa wa uandishi. Kuizunguka kuna eneo la lugha nyingi: faharasa ya utafutaji kwa utafutaji wa wateja, kache ya Redis (andika-kupitia, TTL fupi) kwa muhtasari wa akaunti kwenye programu ya simu, ghala la safu wima kwa ripoti za udhibiti na za uchanganuzi, na hifadhidata ya grafu kwa kugundua ulaghai wa mtandao wa miamala. Mabadiliko ya muundo kwenye leja hutumia panua-punguza na uandishi-mara-mbili ili mfumo wa saa 24/7 usikatike kamwe kwa uhamishaji.
Serikali. Sajili ya kitaifa ya magari inahifadhi rekodi zenye mamlaka kwenye mfumo wa rekodi wa uhusiano wenye uhifadhi wa kisheria na historia kamili ya ukaguzi. Utafutaji wa umma wa “angalia gari” unahudumiwa kutoka nakala ya kusoma na kache ya ukingo yenye TTL fupi, kwa sababu data ya umma iliyopitwa na wakati kidogo inakubalika na ujazo wa usomaji unazidi sana uandishi. Sheria ya makazi ya data inahitaji rekodi zote kubaki ndani ya nchi, kwa hiyo kila hifadhi inawekwa katika kanda za enzi na CDN inasanidiwa kuhifadhi kwenye kache data isiyo ya kibinafsi tu. Uhamishaji wa kuongeza nyanja mpya zinazoamriwa na sera ya usafiri unatumika kwa kuoana nyuma kupitia bomba ili huduma ibaki ikipatikana wakati wa tarehe za mwisho za kisheria.
Kesi ya biashara: sababu, ROI, na TCO
Maamuzi ya usanifu wa data yana mikia mirefu na mikubwa zaidi ya gharama katika programu, kwa sababu data na muundo wake ni vitu ngumu zaidi kubadilisha mara mifumo na uunganishaji vinapoyategemea. Gharama ya kupokea mazoea mazuri (uchaguzi wa hifadhi wa makusudi, uhamishaji wenye nidhamu, kache iliyobuniwa, na kugawanya kufaa) hasa ni muda wa mhandisi mkuu na zana za ziada za uendeshaji. Gharama ya kutopokea inajitokeza kama hifadhidata moja iliyozidiwa inayokaba biashara nzima, kuhamisha jukwaa kwa dharura wakati hifadhi isiyo sahihi inagunduliwa kuchelewa, kukatika kwa muda mrefu kutokana na uhamishaji ulioharibika, na, mbaya zaidi, uharibifu wa data au ukiukaji wa uzingatiaji kutokana na kache iliyobatilishwa vibaya au muamala uliopotea.
Weka hoja kwa uongozi katika maneno ya nafasi ya kupanuka, hatari ya tukio, na mfiduo wa udhibiti. Uchaguzi sahihi wa uhifadhi ndio unaoruhusu biashara kukuza ujazo wa usomaji na uandishi bila kuandika upya. Uhamishaji wenye nidhamu ndio unaoruhusu muundo kwenda sambamba na maagizo mapya bila kukatika. Kache sahihi ndiyo inayotoa uzoefu wa haraka wa mtumiaji bila hitilafu za kimya za kupitwa na wakati. Pima TCO kwa maisha ya mfumo. Usanifu mmoja wa data uliochaguliwa vizuri unaepuka gharama inayojirudia ya kuzunguka duni, na tukio moja la uharibifu wa data lililozuiliwa kwa kawaida linazidi gharama nzima ya kufanya vizuri. Katika sekta zinazodhibitiwa, uwezo wa kuthibitisha uadilifu wa data na makazi si kituo cha gharama bali leseni ya kufanya kazi.
Mifumo mibaya na mitego
- Hifadhidata ya pamoja kuvuka huduma. Huduma nyingi zikisoma na kuandika muundo mmoja, kuunganisha timu na kufanya kila badiliko kuwa mgogoro wa uratibu.
- Hifadhidata moja kwa kila kitu. Kulazimisha uchanganuzi, foleni, utafutaji, na miamala kwenye injini moja ya uhusiano hadi ianguke.
- Uhamishaji wa mlipuko mkubwa. Mabadiliko moja yanayovunja ya muundo yanayohitaji kukatika na yasiyoweza kurudishwa nyuma kwa usalama.
- Kache bila mkakati wa kubatilisha. Data iliyopitwa na wakati ikihudumiwa milele, au hitilafu za usahihi kwa sababu hakuna anayemiliki lini kache inasafishwa.
- Kugawanya mapema. Kusambaza data kabla mzigo haujadai, kupoteza uunganishaji na miamala kwa kudumu bila faida.
- Kupuuza ucheleweshaji wa kunakili. Kusoma uandishi wako mwenyewe kutoka nakala inayochelewa na kupata data iliyopitwa na wakati, kuvunja matarajio ya mtumiaji.
- Ukuaji usio na kikomo wa data. Hakuna mkakati wa kuhifadhi kumbukumbu au uhifadhi, kwa hiyo majedwali yanakua hadi utendaji na gharama zisistahimilike.
- Kuhifadhi data iliyotokana kama ukweli. Kuchukulia kache, faharasa, au makadirio kama mfumo wa rekodi, kisha kugundua yameteleza.
Kielelezo cha ukomavu
- Ngazi ya 1: Kuanzisha. Hifadhidata moja inatumika kwa kila madhumuni. Mabadiliko ya muundo ni ya mkono na ya papo hapo, bila nidhamu ya uhamishaji. Kache ni ya bahati na kubatilisha ni wazo la baadaye. Matatizo ya utendaji yanatatuliwa kwa kuitikia kwa kununua mashine kubwa zaidi, na hakuna anayeweza kutaja kwa uhakika mfumo wa rekodi wa seti fulani ya data.
- Ngazi ya 2: Kuendeleza. Baadhi ya chaguo za uhifadhi ni za makusudi na kache au ghala limeonekana, lakini mazoea hutofautiana kwa timu. Uhamishaji una matoleo lakini wakati mwingine unahitaji kukatika, na panua-punguza hutumiwa na yeyote anayeijua. Huduma kadhaa bado zinashiriki hifadhidata, na mikakati ya kache hutofautiana kutoka timu moja hadi nyingine.
- Ngazi ya 3: Kusawazisha. Uhifadhi wa lugha nyingi unalinganishwa na mizigo ya kazi, kila hifadhi ikimilikiwa na huduma na isiyoshirikiwa kamwe. Uhamishaji wa panua-punguza wa kiotomatiki, unaooana nyuma, bila kukatika ndio kiwango kilichoandikwa, kinachotekelezwa shirika zima. Mikakati ya kache, TTL, na njia za kubatilisha ni vitu vya wazi vya usanifu, na mfumo mmoja wa rekodi kwa kila seti ya data umeandikwa, na nakala zilizotokana zinaweza kujengwa upya kutoka kwake.
- Ngazi ya 4: Kusimamia. Eneo la data linapimwa na kudhibitiwa dhidi ya vipimo vya msingi. Unafuatilia muda wa uhamishaji na kiwango cha kurudisha nyuma, ucheleweshaji wa kunakili dhidi ya mahitaji ya soma-maandishi-yako, uwiano wa mafanikio ya kache na matukio ya kupitwa na wakati, gharama ya uendeshaji kwa kila hifadhi, na ucheleweshaji wa hoja kwenye asilimia lengwa, kisha unatenda kwa namba. Uhifadhi na makazi vinakaguliwa dhidi ya mahitaji ya kisheria, usahihi wa data iliyotokana unathibitishwa mfululizo, na kila injini lazima ihalalishe gharama yake dhidi ya mzigo inaouhudumia.
- Ngazi ya 5: Kuratibu. Usanifu wa data unaboreshwa kila wakati na kuunganishwa na upangaji wa uwezo, gharama, na hatari kuvuka shirika. Uchaguzi wa kugawanya, kache, na uthabiti unasawazishwa upya kwa kila mzigo wa kazi mifumo ya ufikiaji na gharama inapohama, na hifadhi zisizostahili tena nafasi yake zinastaafishwa kupitia uhamishaji uliopangwa. Mageuzi ya muundo, kuhifadhi kumbukumbu, na makazi ni ya kiotomatiki kikamilifu na yanayojirekebisha, kwa hiyo eneo linajiumba upya kwa maagizo mapya na mzigo bila kuhamisha jukwaa kwa dharura.
Mawazo ya kujadili
- Ni hifadhi zipi za sasa zinafanya kazi ambayo hazikubuniwa kwa ajili yake, na injini sahihi ingekuwa ipi?
- Mnaweza kufanya badiliko la muundo kwenye jedwali lenu kubwa zaidi leo bila kukatika? Kama sivyo, kwa nini?
- Wapi mfumo wenu unahifadhi kwenye kache data ambayo kupitwa na wakati kwake kungeweza kusababisha kushindwa kwa uzingatiaji au usahihi?
- Ni huduma zipi zinashiriki hifadhidata, na ingechukua nini kumpa kila moja yake?
- Wapi hifadhidata moja inayoweza kuandikwa ndiyo dari yenu ya ukubwa, na je, kunakili kwa kusoma au kugawanya ndiyo hatua sahihi inayofuata?
- Mkakati wenu wa uhifadhi na kuhifadhi kumbukumbu ni upi, na nani anawajibika kwake?
Mambo muhimu ya kukumbuka
- Data hudumu kuliko msimbo; maamuzi ya uhifadhi na uundaji hudhibiti biashara kwa maisha yote ya mfumo.
- Linganisha kila mzigo wa kazi na mfano wa uhifadhi unaofaa mfumo wake wa ufikiaji; tarajia uhifadhi wa lugha nyingi kwa ukubwa.
- Mpe kila huduma umiliki wa data yake; kamwe usiunganishe timu kupitia hifadhidata ya pamoja.
- Chukulia mageuzi ya muundo kama endelevu na utumie uhamishaji wa panua-punguza unaooana nyuma, bila kukatika.
- Kache ni tatizo la usahihi: buni TTL, kubatilisha, na ulinzi dhidi ya mikanyagano kwa makusudi, na kamwe usihifadhi kwenye kache data muhimu kwa uzingatiaji bila njia ya kubatilisha iliyojaribiwa.
- Nunua tu hakikisho za uthabiti na miamala ambazo kila mzigo wa kazi unahitaji; kugawanya na kunakili hubadilisha miamala ya kuvuka vipande kwa ukubwa.
Marejeo na usomaji zaidi
- Martin Kleppmann, Designing Data-Intensive Applications
- Pramod Sadalage and Martin Fowler, NoSQL Distilled
- Pramod Sadalage and Scott Ambler, Refactoring Databases: Evolutionary Database Design
- C. J. Date, An Introduction to Database Systems
- Joe Celko, SQL for Smarties
- Vlad Mihalcea, High-Performance Java Persistence (transactions, isolation, concurrency)
- Eric Evans, Domain-Driven Design (bounded contexts and data ownership)
- Werner Vogels, “Eventually Consistent”