Helo i gyd. Mae Vladislav Rodin mewn cysylltiad. Ar hyn o bryd rwy'n addysgu cyrsiau ar Bensaernïaeth Meddalwedd a Phensaernïaeth Meddalwedd Straen Uchel yn OTUS. Gan ragweld dechrau ffrwd cwrs newydd Penderfynais ysgrifennu darn byr o ddeunydd gwreiddiol yr wyf am ei rannu gyda chi.

Cyflwyniad
Oherwydd y ffaith mai dim ond tua 400-700 o weithrediadau yr eiliad y gall yr HDD eu cyflawni (sy'n anghymharol â rps nodweddiadol ar gyfer system llwyth uchel), y gronfa ddata ddisg glasurol yw tagfa'r bensaernïaeth. Felly, mae angen rhoi sylw arbennig i batrymau graddio'r storfa hon.
Ar hyn o bryd, mae 2 batrwm graddio cronfa ddata: atgynhyrchu a darnio. Mae Sharding yn caniatáu ichi raddio'r gweithrediad ysgrifennu ac, o ganlyniad, lleihau'r rps fesul ysgrifen fesul gweinydd yn eich clwstwr. Mae dyblygu yn caniatáu ichi wneud yr un peth, ond gyda gweithrediadau darllen. Y patrwm hwn y mae'r erthygl hon wedi'i neilltuo iddo.
Dyblygiad
Os edrychwch ar ddyblygu ar lefel uchel iawn, mae'n beth syml: roedd gennych chi un gweinydd, roedd data arno, ac yna ni allai'r gweinydd hwn ymdopi â'r llwyth o ddarllen y data hwn mwyach. Rydych chi'n ychwanegu cwpl yn fwy o weinyddion, yn cydamseru data ar draws yr holl weinyddion, a gall y defnyddiwr ddarllen o unrhyw weinydd yn eich clwstwr.
Er gwaethaf ei symlrwydd ymddangosiadol, mae yna nifer o opsiynau ar gyfer dosbarthu gwahanol weithrediadau'r cynllun hwn:
- Yn ôl rolau yn y clwstwr (meistr-feistr neu feistr-gaethwas)
- Gan wrthrychau a anfonwyd (yn seiliedig ar res, yn seiliedig ar ddatganiad neu'n gymysg)
- Yn ôl y mecanwaith cydamseru nod
Heddiw, byddwn yn ymdrin â phwynt 3.
Sut mae ymrwymiad trafodiad yn digwydd?
Nid yw'r pwnc hwn yn uniongyrchol gysylltiedig â dyblygu; gellir ysgrifennu erthygl ar wahân arno, ond gan fod darllen pellach yn ddiwerth heb ddeall mecanwaith ymrwymo trafodion, gadewch imi eich atgoffa o'r pethau mwyaf sylfaenol. Mae ymrwymiad trafodiad yn digwydd mewn 3 cham:
- Logio trafodiad i log y gronfa ddata.
- Defnyddio trafodiad mewn peiriant cronfa ddata.
- Yn dychwelyd cadarnhad i'r cleient bod y trafodiad wedi'i gymhwyso'n llwyddiannus.
Mewn gwahanol gronfeydd data, efallai y bydd naws i'r algorithm hwn: er enghraifft, yn injan InnoDB cronfa ddata MySQL mae 2 log: un ar gyfer dyblygu (log deuaidd), a'r llall ar gyfer cynnal ACID (dadwneud / ail-wneud log), tra yn PostgreSQL mae un log sy'n cyflawni'r ddwy swyddogaeth (ysgrifennu log blaen = WAL). Ond yr hyn a gyflwynir uchod yw'r union gysyniad cyffredinol, sy'n caniatáu i naws o'r fath beidio â chael eu hystyried.
Dyblygiad cydamserol (cysoni).
Gadewch i ni ychwanegu rhesymeg i ailadrodd y newidiadau a dderbyniwyd i'r algorithm ymrwymo trafodion:
- Logio trafodiad i log y gronfa ddata.
- Defnyddio trafodiad mewn peiriant cronfa ddata.
- Anfon data i bob atgynhyrchiad.
- Yn derbyn cadarnhad gan bob atgynhyrchiad bod trafodiad wedi'i gwblhau arnynt.
- Yn dychwelyd cadarnhad i'r cleient bod y trafodiad wedi'i gymhwyso'n llwyddiannus.
Gyda'r dull hwn rydym yn cael nifer o anfanteision:
- mae'r cleient yn aros i'r newidiadau gael eu cymhwyso i bob atgynhyrchiad.
- wrth i nifer y nodau yn y clwstwr gynyddu, rydym yn lleihau'r tebygolrwydd y bydd y gweithrediad ysgrifennu yn llwyddiannus.
Os yw popeth fwy neu lai yn glir gyda'r pwynt 1af, yna mae'r rhesymau dros yr 2il bwynt yn werth eu hesbonio. Os na fyddwn yn cael ymateb gan o leiaf un nod yn ystod atgynhyrchu cydamserol, byddwn yn dychwelyd y trafodiad. Felly, trwy gynyddu nifer y nodau yn y clwstwr, rydych chi'n cynyddu'r tebygolrwydd y bydd gweithrediad ysgrifennu yn methu.
A allwn aros am gadarnhad gan ganran benodol o nodau yn unig, er enghraifft, o 51% (cworwm)? Oes, gallwn, ond yn y fersiwn glasurol, mae angen cadarnhad gan bob nod, oherwydd dyma sut y gallwn sicrhau cysondeb data cyflawn yn y clwstwr, sy'n fantais ddiamau o'r math hwn o ddyblygiad.
Dyblygiad asyncronaidd (async).
Gadewch i ni addasu'r algorithm blaenorol. Byddwn yn anfon data i'r atgynyrchiadau "rywbryd yn ddiweddarach", a "rhywbryd yn ddiweddarach" bydd y newidiadau'n cael eu cymhwyso i'r atgynyrchiadau:
- Logio trafodiad i log y gronfa ddata.
- Defnyddio trafodiad mewn peiriant cronfa ddata.
- Yn dychwelyd cadarnhad i'r cleient bod y trafodiad wedi'i gymhwyso'n llwyddiannus.
- Anfon data i gopïau a chymhwyso newidiadau iddynt.
Mae'r dull hwn yn arwain at y ffaith bod y clwstwr yn gweithio'n gyflym, oherwydd nid ydym yn cadw'r cleient yn aros i'r data gyrraedd y replicas a hyd yn oed fod yn ymroddedig.
Ond gall cyflwr dympio data ar atgynyrchiadau “rywbryd yn ddiweddarach” arwain at golli trafodiad, ac at golli trafodiad a gadarnhawyd gan y defnyddiwr, oherwydd os nad oedd gan y data amser i gael ei ailadrodd, cadarnhad i'r cleient anfonwyd am lwyddiant y llawdriniaeth, a chwalodd y nod y cyrhaeddodd y newidiadau HDD iddo, rydym yn colli'r trafodiad, a all arwain at ganlyniadau annymunol iawn.
Dyblygiad semisync
Yn olaf, rydym yn cyrraedd at atgynhyrchu lled-gydamserol. Nid yw'r math hwn o ddyblygiad yn adnabyddus iawn nac yn gyffredin iawn, ond mae o ddiddordeb sylweddol oherwydd gall gyfuno manteision atgynhyrchu cydamserol ac asyncronig.
Gadewch i ni geisio cyfuno'r 2 ddull blaenorol. Ni fyddwn yn cadw'r cleient yn hir, ond byddwn yn mynnu bod y data'n cael ei ailadrodd:
- Logio trafodiad i log y gronfa ddata.
- Defnyddio trafodiad mewn peiriant cronfa ddata.
- Anfon data i atgynyrchiadau.
- Yn derbyn cadarnhad gan y replica bod y newidiadau wedi dod i law (byddant yn cael eu gweithredu “rywbryd yn ddiweddarach”).
- Yn dychwelyd cadarnhad i'r cleient bod y trafodiad wedi'i gymhwyso'n llwyddiannus.
Sylwch, gyda'r algorithm hwn, mai dim ond os bydd y nod sy'n derbyn y newidiadau a'r nod replica yn methu y bydd colled trafodion yn digwydd. Ystyrir bod y tebygolrwydd o fethiant o'r fath yn isel, a derbynnir y risgiau hyn.
Ond gyda'r dull hwn mae risg bosibl o ddarllen rhith. Gadewch i ni ddychmygu'r senario canlynol: yng ngham 4, ni chawsom gadarnhad gan unrhyw replica. Rhaid inni rolio'r trafodiad hwn yn ôl a pheidio â dychwelyd cadarnhad i'r cleient. Ers i'r data gael ei gymhwyso yng ngham 2, mae bwlch amser rhwng diwedd cam 2 a dychwelyd y trafodiad, pan fydd trafodion cyfochrog yn gallu gweld newidiadau na ddylai fod yn y gronfa ddata.
Colled-llai atgynhyrchu semisync
Os ydych chi'n meddwl ychydig, gallwch chi wrthdroi camau'r algorithm a thrwsio'r broblem o ddarlleniadau rhith yn y senario hwn:
- Logio trafodiad i log y gronfa ddata.
- Anfon data replica.
- Yn derbyn cadarnhad gan y replica bod y newidiadau wedi dod i law (byddant yn cael eu gweithredu “rywbryd yn ddiweddarach”).
- Defnyddio trafodiad mewn peiriant cronfa ddata.
- Yn dychwelyd cadarnhad i'r cleient bod y trafodiad wedi'i gymhwyso'n llwyddiannus.
Nawr rydym yn ymrwymo newidiadau dim ond os ydynt wedi cael eu hailadrodd.
Allbwn
Fel bob amser, nid oes unrhyw atebion delfrydol; mae set o atebion, ac mae gan bob un ohonynt ei fanteision a'i anfanteision ei hun ac mae'n addas ar gyfer datrys gwahanol ddosbarthiadau o broblemau. Mae hyn yn gwbl wir ar gyfer dewis mecanwaith ar gyfer cysoni data mewn cronfa ddata ddyblygu. Mae'r set o fanteision sydd gan ddyblygiad lled-gydamserol yn ddigon cadarn a diddorol fel y gellir ei ystyried yn deilwng o sylw, er gwaethaf ei fynychder isel.
Dyna i gyd. Welwn ni chi yn !
Ffynhonnell: hab.com
