Çima dibe ku hûn hewceyê dubarekirina nîv-senkronî bikin?

Silav hemû. Vladislav Rodin di têkiliyê de ye. Ez niha li OTUS qursên li ser Mîmariya Nermalava Nermalavê û Mîmariya Nermalava Bilind a Stresê didim. Li hêviya destpêkirina qursek nû "Mîmarê Barkirina Bilind" Min biryar da ku ez beşek kurt ji materyalê orjînal binivîsim ku ez dixwazim bi we re parve bikim.

Çima dibe ku hûn hewceyê dubarekirina nîv-senkronî bikin?

Pîrozbahiyê

Ji ber vê yekê ku HDD tenê dikare di çirkeyê de nêzî 400-700 operasyonan pêk bîne (ku ji bo pergalek bargiraniyê bi rps-ya tîpîk re bêhempa ye), databasa dîskê ya klasîk stûna mîmariyê ye. Ji ber vê yekê, pêdivî ye ku meriv bi taybetî bala xwe bide şêwazên pîvandina vê hilanînê.

Heya nuha, 2 şêweyên pîvandina databasê hene: dubarekirin û parvekirin. Sharding destûrê dide te ku hûn operasyona nivîsandinê mezin bikin, û, wekî encam, rps-a nivîsandina her serverek di koma xwe de kêm bikin. Replication dihêle hûn heman tiştî bikin, lê bi operasyonên xwendinê. Ev nimûne ev e ku ev gotar jê re tê veqetandin.

Replication

Ger hûn di astek pir bilind de li dubarekirinê mêze bikin, ew tiştek hêsan e: we yek serverek hebû, li ser wê dane hebûn, û wê hingê ev server nema dikare bi barê xwendina van daneyan re mijûl bibe. Hûn çend serverên din lê zêde dikin, daneyan li hemî serveran hevdeng dikin, û bikarhêner dikare ji her serverek di koma we de bixwîne.

Tevî sadebûna wê ya eşkere, ji bo dabeşkirina pêkanînên cihêreng ên vê nexşeyê çend vebijark hene:

  • Ji hêla rolên di komê de (master-master an master-xulam)
  • Ji hêla tiştên ku têne şandin (bingeha rêzê, li gorî daxuyaniyê an tevlihev)
  • Li gorî mekanîzmaya hevdemkirina girêk

Îro em ê bi xala 3 re mijûl bibin.

Peymana danûstendinê çawa çêdibe?

Ev mijar rasterast bi dubarekirinê ve ne girêdayî ye; gotarek cihêreng dikare li ser were nivîsandin, lê ji ber ku xwendina bêtir bêyî têgihîştina mekanîzmaya pêkanîna danûstendinê bêkêr e, bila ez tiştên herî bingehîn bi bîr bînim. Peymana danûstendinê di 3 qonaxan de pêk tê:

  1. Têketinek danûstendinek di navnîşana databasê de.
  2. Bikaranîna danûstendinek di motorek databasê de.
  3. Vegerandina pejirandina xerîdar ku danûstendin bi serfirazî hate sepandin.

Di databasên cihêreng de, dibe ku ev algorîtma xwedan nuwaze be: Mînakî, di motora InnoDB ya databasa MySQL de 2 têketin hene: yek ji bo dubarekirinê (loga binary), û ya din ji bo domandina ACID (qeyda betal / ji nû ve), dema ku di PostgreSQL de ye. yek têketin heye ku her du fonksiyonan pêk tîne (têketinê li pêş = WAL binivîse). Lê ya ku li jor hatî pêşkêş kirin bi rastî têgîna gelemperî ye, ku dihêle ku nuwazeyên weha neyên hesibandin.

Hevdem (senkronîk) dubarekirin

Ka em mantiqê lê zêde bikin da ku guheztinên wergirtî li algorîtmaya kirina danûstendinê dubare bikin:

  1. Têketinek danûstendinek di navnîşana databasê de.
  2. Bikaranîna danûstendinek di motorek databasê de.
  3. Daneyên ji hemî replicayan re şandin.
  4. Wergirtina pejirandinê ji hemî kopiyan ku danûstendinek li ser wan qediyaye.
  5. Vegerandina pejirandina xerîdar ku danûstendin bi serfirazî hate sepandin.

Bi vê rêbazê em çend kêmasiyan digirin:

  • xerîdar li bendê ye ku guheztin li hemî kopiyan bêne sepandin.
  • her ku hejmara girêkên di komê de zêde dibe, em îhtîmala ku operasyona nivîsandinê serketî be kêm dikin.

Ger bi xala 1-an re her tişt kêm-zêde zelal be, wê hingê sedemên xala 2-an hêjayî ravekirinê ne. Ger di dema dubarekirina hevdemî de em bi kêmanî yek girêk bersivek wernegirin, em danûstendinê paşde vedigerînin. Bi vî rengî, bi zêdekirina hejmara girêkên di komê de, hûn îhtîmala ku operasyona nivîsandinê têk biçe zêde dikin.

Ma em dikarin li benda pejirandinê tenê ji sedî diyarkirî ya girêkan bin, mînakî, ji %51 (quorum)? Erê, em dikarin, lê di guhertoya klasîk de, pejirandina ji hemî girêkan hewce ye, ji ber ku bi vî rengî em dikarin lihevhatina daneya bêkêmasî ya di komê de misoger bikin, ku ev yek feydeyek bê guman a vî rengî dubarekirinê ye.

Replika asînkron (asînkron).

Ka em algorîtmaya berê biguherînin. Em ê daneyan ji kopiyan re "hinek paşê" bişînin, û "hinek paşê" dê guhertin li kopiyan werin sepandin:

  1. Têketinek danûstendinek di navnîşana databasê de.
  2. Bikaranîna danûstendinek di motorek databasê de.
  3. Vegerandina pejirandina xerîdar ku danûstendin bi serfirazî hate sepandin.
  4. Şandina daneyan ji kopîyan re û sepandina guhertinan li wan.

Ev nêzîkatî rê li ber vê yekê vedike ku kom bi lez dixebite, ji ber ku em xerîdar li bendê nahêlin ku dane bigihîje kopiyan û tewra jî bête kirin.

Lê şertê avêtina daneyan li ser kopiyan "hinek paşê" dikare bibe sedema windakirina danûstendinê, û windakirina danûstendinek ku ji hêla bikarhêner ve hatî pejirandin, ji ber ku heke daneyan wextê dubarekirinê tunebû, piştrastiyek ji xerîdar re. di derbarê serkeftina operasyonê de hate şandin, û girêka ku guheztin gihîştiye HDD-ê têk çû, em danûstendinê winda dikin, ku dikare bibe sedema encamên pir ne xweş.

Replication Semisync

Di dawiyê de em digihîjin dubarekirina nîv-senkron. Ev celeb dubarekirinê ne pir baş tê zanîn an jî pir gelemperî ye, lê ew balkêş e ji ber ku ew dikare avantajên hemdem û asynchronous bihevre bike.

Ka em hewl bidin ku 2 nêzîkatiyên berê bi hev re bikin. Em ê xerîdar demek dirêj nehêlin, lê em ê hewce bikin ku dane bêne dubare kirin:

  1. Têketinek danûstendinek di navnîşana databasê de.
  2. Bikaranîna danûstendinek di motorek databasê de.
  3. Daneyên ji kopî re dişînin.
  4. Wergirtina pejirandinê ji kopya ku guhertin hatine wergirtin (ew ê "hinek paşê" werin sepandin).
  5. Vegerandina pejirandina xerîdar ku danûstendin bi serfirazî hate sepandin.

Ji kerema xwe bala xwe bidin ku bi vê algorîtmê re, windakirina danûstendinê tenê heke hem girêka ku guheztinan werdigire hem jî girêka replica têk neçe. Îhtîmala têkçûnek weha kêm tê hesibandin, û ev xetere têne pejirandin.

Lê bi vê nêzîkbûnê re metirsiyek gengaz a xwendina fantaz heye. Ka em senaryoya jêrîn xeyal bikin: di gava 4-an de, me ji ti kopiyek piştrast negirt. Divê em vê danûstendinê paşde vegerînin û erêkirinê ji xerîdar re venegerînin. Ji ber ku dane di gava 2-an de hate sepandin, di navbera dawiya gava 2-an û vegerandina danûstendinê de navberek dem heye, di dema ku danûstendinên paralel dikarin guhertinên ku divê di databasê de nebin bibînin.

Replication semisync-kêmtir winda bike

Ger hûn piçekî bifikirin, hûn dikarin tenê gavên algorîtmê berevajî bikin û di vê senaryoyê de pirsgirêka xwendinên fantomê çareser bikin:

  1. Têketinek danûstendinek di navnîşana databasê de.
  2. Daneyên replica şandin.
  3. Wergirtina pejirandinê ji kopya ku guhertin hatine wergirtin (ew ê "hinek paşê" werin sepandin).
  4. Bikaranîna danûstendinek di motorek databasê de.
  5. Vegerandina pejirandina xerîdar ku danûstendin bi serfirazî hate sepandin.

Naha em guhertinan pêk tînin tenê heke ew hatine dubare kirin.

encamê

Mîna her gav, çareseriyên îdeal nîn in; komek çareseriyan hene, ku her yek ji wan xwedî avantaj û dezawantajên xwe ne û ji bo çareserkirina çînên cûda yên pirsgirêkan guncan e. Ev ji bo hilbijartina mekanîzmayek ji bo hevdengkirina daneyan di databasek dubarekirî de bi rastî rast e. Komeka avantajên ku dubarekirina nîv-senkronî heye têra xwe zexm û balkêş e ku tevî belavbûna wê ya kêm dikare hêjayî balê were hesibandin.

Navê pêger. Te bibînin li qurs!

Source: www.habr.com

Add a comment