Hi kollha. Vladislav Rodin huwa f'kuntatt. Bħalissa ngħallem korsijiet dwar l-Arkitettura tas-Software u l-Arkitettura tas-Software ta' Stress Għoli fl-OTUS. B'antiċipazzjoni tal-bidu ta' kors ġdid Iddeċidejt li nikteb biċċa qasira ta’ materjal oriġinali li nixtieq naqsam magħkom.

Introduzzjoni
Minħabba l-fatt li l-HDD jista 'jwettaq biss madwar 400-700 operazzjoni kull sekonda (li huwa inkomparabbli ma' rps tipiċi għal sistema ta 'tagħbija għolja), id-database tad-diska klassika hija l-konġestjoni tal-arkitettura. Għalhekk, huwa meħtieġ li tingħata attenzjoni speċjali lill-mudelli tal-iskala ta 'din il-ħażna.
Bħalissa, hemm 2 mudelli ta' skalar tad-database: replikazzjoni u sharding. Sharding jippermettilek li tiskala l-operazzjoni tal-kitba, u, bħala riżultat, tnaqqas l-rps għal kull kitba għal kull server fil-cluster tiegħek. Ir-replikazzjoni tippermettilek tagħmel l-istess ħaġa, iżda b'operazzjonijiet ta 'qari. Huwa dan il-mudell li dan l-artikolu huwa ddedikat għalih.
Replikazzjoni
Jekk tħares lejn ir-replikazzjoni f'livell għoli ħafna, hija ħaġa sempliċi: kellek server wieħed, kien hemm dejta fuqha, u allura dan is-server ma setax ilaħħaq aktar mat-tagħbija tal-qari ta 'din id-dejta. Inti żżid ftit servers aktar, tissinkronizza d-data fuq is-servers kollha, u l-utent jista 'jaqra minn kwalunkwe server fil-cluster tiegħek.
Minkejja s-sempliċità apparenti tagħha, hemm diversi għażliet biex jiġu kklassifikati diversi implimentazzjonijiet ta 'din l-iskema:
- Skont ir-rwoli fil-cluster (master-master jew master-slave)
- Permezz ta' oġġetti mibgħuta (ibbażat fuq ringieli, ibbażati fuq stqarrija jew imħallta)
- Skont il-mekkaniżmu ta 'sinkronizzazzjoni tan-nodi
Illum se nittrattaw il-punt 3.
Kif iseħħ impenn ta' tranżazzjoni?
Dan is-suġġett mhuwiex direttament relatat mar-replikazzjoni jista 'jinkiteb fuqu artikolu separat, iżda peress li aktar qari huwa inutli mingħajr ma nifhem il-mekkaniżmu ta' impenn tat-tranżazzjoni, ħalluni nfakkarkom fl-aktar affarijiet bażiċi. Impenn ta' tranżazzjoni jseħħ fi 3 stadji:
- Logging ta' tranżazzjoni fil-log tad-database.
- L-użu ta' tranżazzjoni f'magna tad-database.
- Tirritorna konferma lill-klijent li t-tranżazzjoni ġiet applikata b'suċċess.
F'databases differenti, dan l-algoritmu jista' jkollu sfumaturi: pereżempju, fil-magna InnoDB tad-database MySQL hemm 2 zkuk: wieħed għar-replikazzjoni (log binarju), u l-ieħor għaż-żamma tal-ACID (undo/redo log), filwaqt li f'PostgreSQL hemm log wieħed li jwettaq iż-żewġ funzjonijiet (write ahead log = WAL). Iżda dak li huwa ppreżentat hawn fuq huwa preċiżament il-kunċett ġenerali, li jippermetti li tali sfumaturi ma jitqiesux.
Replikazzjoni sinkronika (sinkronizzata).
Ejja nżidu l-loġika biex nirreplikaw il-bidliet riċevuti fl-algoritmu tal-kommit tat-tranżazzjoni:
- Logging ta' tranżazzjoni fil-log tad-database.
- L-użu ta' tranżazzjoni f'magna tad-database.
- Tibgħat data lir-repliki kollha.
- Jirċievu konferma mir-repliki kollha li tranżazzjoni tlestiet fuqhom.
- Tirritorna konferma lill-klijent li t-tranżazzjoni ġiet applikata b'suċċess.
B'dan l-approċċ ikollna numru ta 'żvantaġġi:
- il-klijent jistenna li l-bidliet jiġu applikati għar-repliki kollha.
- hekk kif in-numru ta 'nodi fil-cluster jiżdied, innaqqsu l-probabbiltà li l-operazzjoni tal-kitba tkun ta' suċċess.
Jekk kollox huwa xi ftit jew wisq ċar mal-1 punt, allura r-raġunijiet għat-2 punt huma ta 'min jispjegaw. Jekk waqt replikazzjoni sinkronika ma nirċievux tweġiba minn mill-inqas nodu wieħed, aħna nirritornaw it-tranżazzjoni. Għalhekk, billi żżid in-numru ta 'nodi fil-cluster, iżżid il-probabbiltà li operazzjoni ta' kitba tonqos.
Nistgħu nistennew konferma minn ċertu persentaġġ biss ta 'nodi, pereżempju, minn 51% (kworum)? Iva, nistgħu, iżda fil-verżjoni klassika, hija meħtieġa konferma min-nodi kollha, għaliex dan huwa kif nistgħu niżguraw konsistenza sħiħa tad-dejta fil-cluster, li hija vantaġġ bla dubju ta 'dan it-tip ta' replikazzjoni.
Replikazzjoni asinkronika (async).
Ejja nimmodifikaw l-algoritmu preċedenti. Aħna nibagħtu d-dejta lir-repliki "xi żmien wara", u "xi żmien wara" il-bidliet se jiġu applikati għar-repliki:
- Logging ta' tranżazzjoni fil-log tad-database.
- L-użu ta' tranżazzjoni f'magna tad-database.
- Tirritorna konferma lill-klijent li t-tranżazzjoni ġiet applikata b'suċċess.
- Tibgħat data lil repliki u tapplika bidliet għalihom.
Dan l-approċċ iwassal għall-fatt li l-cluster jaħdem malajr, għaliex aħna ma nżommux lill-klijent jistenna li d-data tasal għar-repliki u saħansitra tkun impenjata.
Iżda l-kundizzjoni tad-dumping tad-dejta fuq repliki "xi żmien wara" tista 'twassal għat-telf ta' tranżazzjoni, u għat-telf ta 'tranżazzjoni kkonfermata mill-utent, għaliex jekk id-dejta ma kellhiex ħin biex tiġi replikata, konferma lill-klijent dwar is-suċċess ta 'l-operazzjoni ntbagħtet, u n-node li għalih waslu l-bidliet ġġarraf HDD, nitilfu t-tranżazzjoni, li tista' twassal għal konsegwenzi spjaċevoli ħafna.
Replikazzjoni semisinkronizzata
Fl-aħħar naslu għal replikazzjoni semi-sinkronika. Dan it-tip ta 'replikazzjoni mhix magħrufa sew jew komuni ħafna, iżda hija ta' interess konsiderevoli minħabba li tista 'tgħaqqad il-vantaġġi ta' kemm replikazzjoni sinkronika kif ukoll mhux sinkronika.
Ejja nippruvaw ngħaqqdu ż-żewġ approċċi preċedenti. Mhux se nżommu l-klijent għal żmien twil, iżda se neħtieġu li d-dejta tiġi replikata:
- Logging ta' tranżazzjoni fil-log tad-database.
- L-użu ta' tranżazzjoni f'magna tad-database.
- Tibgħat data lil repliki.
- Jirċievu konferma mir-replika li l-bidliet ġew irċevuti (se jiġu applikati "xi żmien wara").
- Tirritorna konferma lill-klijent li t-tranżazzjoni ġiet applikata b'suċċess.
Jekk jogħġbok innota li b'dan l-algoritmu, it-telf tat-tranżazzjoni jseħħ biss jekk kemm in-nodu li jirċievi l-bidliet kif ukoll in-nodu replika jfallu. Il-probabbiltà ta' falliment bħal dan hija kkunsidrata baxxa, u dawn ir-riskji huma aċċettati.
Iżda b'dan l-approċċ hemm riskju possibbli ta 'qari fantażma. Ejja nimmaġinaw ix-xenarju li ġej: fil-pass 4, ma rċevejna konferma minn ebda replika. Irridu nroddu lura din it-tranżazzjoni u ma nirritornawx konferma lill-klijent. Peress li d-dejta ġiet applikata fil-pass 2, hemm vojt ta 'żmien bejn it-tmiem tal-pass 2 u t-tkeċċija tat-tranżazzjoni, li matulha tranżazzjonijiet paralleli jistgħu jaraw bidliet li m'għandhomx ikunu fid-database.
Replikazzjoni semisync mingħajr telf
Jekk taħseb ftit, tista 'sempliċement taqleb il-passi tal-algoritmu u tirranġa l-problema tal-qari fantażma f'dan ix-xenarju:
- Logging ta' tranżazzjoni fil-log tad-database.
- Tibgħat id-data replika.
- Jirċievu konferma mir-replika li l-bidliet ġew irċevuti (se jiġu applikati "xi żmien wara").
- L-użu ta' tranżazzjoni f'magna tad-database.
- Tirritorna konferma lill-klijent li t-tranżazzjoni ġiet applikata b'suċċess.
Issa nimpenjaw bidliet biss jekk ikunu ġew replikati.
Output
Bħal dejjem, m'hemm l-ebda soluzzjonijiet ideali hemm sett ta 'soluzzjonijiet, li kull wieħed minnhom għandu l-vantaġġi u l-iżvantaġġi tiegħu u huwa adattat biex isolvi klassijiet differenti ta' problemi. Dan huwa assolutament veru għall-għażla ta 'mekkaniżmu għas-sinkronizzazzjoni tad-data f'database replikata. Is-sett ta 'vantaġġi li għandha r-replikazzjoni semi-sinkronika huwa sod biżżejjed u interessanti li jista' jitqies denju ta 'attenzjoni, minkejja l-prevalenza baxxa tiegħu.
Dak kollox. Narak fuq !
Sors: www.habr.com
