Chifukwa chiyani mungafunikire kubwereza kofanana?

Moni nonse. Vladislav Rodin akugwirizana. Panopa ndimaphunzitsa maphunziro a Software Architecture ndi High-Stress Software Architecture ku OTUS. Poyembekezera kuyamba kwa maphunziro atsopano otaya "High Load Architect" Ndinaganiza zolembera kachidutswa kakang'ono kazinthu zoyambirira zomwe ndikufuna kugawana nanu.

Chifukwa chiyani mungafunikire kubwereza kofanana?

Mau oyamba

Chifukwa chakuti HDD imatha kugwira ntchito pafupifupi 400-700 pa sekondi imodzi (yomwe siyingafanane ndi ma rps amtundu wonyamula katundu), nkhokwe yachikale ya disk ndiyomwe imalepheretsa zomangamanga. Choncho, m'pofunika kulabadira mwapadera njira makulitsidwe yosungirako izi.

Pakadali pano, pali mitundu iwiri ya makulitsidwe a database: kubwereza ndi kugawa. Sharding imakulolani kuti muwonjezere ntchito yolembera ndipo, chifukwa chake, muchepetse ma rps polemba pa seva pagulu lanu. Kubwereza kumakulolani kuti muchite zomwezo, koma ndi ntchito zowerengera. Ndi chitsanzo ichi chomwe nkhaniyi idaperekedwa.

Kubwereza

Ngati muyang'ana kubwereza pamlingo wapamwamba kwambiri, ndi chinthu chophweka: munali ndi seva imodzi, panali deta pa izo, ndiyeno seva iyi sikanatha kupiriranso ndi katundu wowerenga deta iyi. Mumawonjezera ma seva ena angapo, kulunzanitsa deta pamaseva onse, ndipo wogwiritsa ntchito amatha kuwerenga kuchokera pa seva iliyonse pagulu lanu.

Ngakhale kuti ndizosavuta, pali zosankha zingapo zogawira machitidwe osiyanasiyana a chiwembu ichi:

  • Ndi maudindo mu gulu (mbuye-mbuye kapena mbuye-kapolo)
  • Ndi zinthu zotumizidwa (zotengera mizere, mawu kapena zosakanikirana)
  • Malinga ndi mfundo kalunzanitsidwe limagwirira

Lero tithana ndi mfundo 3.

Kodi transaction imachitika bwanji?

Mutuwu sunakhudzidwe mwachindunji ndi kubwereza; nkhani ina imatha kulembedwapo, koma popeza kuwerenga kopitilira muyeso ndikopanda phindu popanda kumvetsetsa njira yochitira zinthu, ndiloleni ndikukumbutseni zinthu zofunika kwambiri. Kupangana kumachitika mu magawo atatu:

  1. Kulowetsa ntchito ku log database.
  2. Kugwiritsa ntchito injini ya database.
  3. Kubwezera chitsimikizo kwa kasitomala kuti ntchitoyo idagwiritsidwa ntchito bwino.

M'malo osiyanasiyana, algorithm iyi ikhoza kukhala ndi ma nuances: mwachitsanzo, mu injini ya InnoDB ya database ya MySQL pali zipika za 2: imodzi yobwereza (chipika cha binary), ndi ina yosungira ACID (kusintha / kubwereza chipika), pomwe mu PostgreSQL. pali chipika chimodzi chomwe chimagwira ntchito zonse ziwiri (lembani kutsogolo = WAL). Koma zomwe zaperekedwa pamwambapa ndi lingaliro lodziwika bwino, lomwe limalola kuti ma nuances awa asaganizidwe.

Kubwereza kofanana (kulunzanitsa).

Tiyeni tiwonjezere malingaliro kuti tifanizire zosintha zomwe zalandilidwa ku algorithm ya transaction:

  1. Kulowetsa ntchito ku log database.
  2. Kugwiritsa ntchito injini ya database.
  3. Kutumiza deta ku zofananira zonse.
  4. Kulandira chitsimikizo kuchokera ku zofananira zonse kuti ntchito yamalizidwa pa iwo.
  5. Kubwezera chitsimikizo kwa kasitomala kuti ntchitoyo idagwiritsidwa ntchito bwino.

Ndi njira iyi timapeza zovuta zingapo:

  • kasitomala amadikirira kuti zosinthazo zigwiritsidwe ntchito pazofananira zonse.
  • pamene chiwerengero cha node mumagulu chikuwonjezeka, timachepetsa mwayi woti ntchito yolemba ikhale yopambana.

Ngati zonse zikuwonekera momveka bwino ndi mfundo ya 1, ndiye kuti zifukwa za mfundo ya 2 ndizoyenera kufotokozera. Ngati panthawi yobwerezabwereza sitilandira yankho kuchokera ku node imodzi, timabwezeretsanso ntchitoyo. Chifukwa chake, powonjezera kuchuluka kwa node mumagulu, mumawonjezera mwayi woti ntchito yolemba idzalephereke.

Kodi tingadikire chitsimikiziro kuchokera ku gawo lina la nodi, mwachitsanzo, kuchokera ku 51% (quorum)? Inde, titha, koma mu mtundu wakale, chitsimikiziro chochokera ku ma node onse chimafunikira, chifukwa ndi momwe tingatsimikizire kusasinthika kwa data mgululi, chomwe ndi mwayi wosakayikitsa wa mtundu uwu wa kubwereza.

Kubwereza kwa Asynchronous (async).

Tiyeni tisinthe algorithm yam'mbuyomu. Titumiza zidziwitso ku zofananira "nthawi ina", ndipo "nthawi ina" zosintha zidzagwiritsidwa ntchito pazofananira:

  1. Kulowetsa ntchito ku log database.
  2. Kugwiritsa ntchito injini ya database.
  3. Kubwezera chitsimikizo kwa kasitomala kuti ntchitoyo idagwiritsidwa ntchito bwino.
  4. Kutumiza deta ku replicas ndikusintha zosintha kwa iwo.

Njirayi imatsogolera ku mfundo yakuti gulu limagwira ntchito mofulumira, chifukwa sitimasunga kasitomala akudikirira kuti deta ifike pazithunzizo komanso ngakhale kudzipereka.

Koma mkhalidwe wa kutaya deta pa replicas "nthawi ina pambuyo pake" ungayambitse kutayika kwa malonda, ndi kutayika kwa malonda omwe amatsimikiziridwa ndi wogwiritsa ntchito, chifukwa ngati deta inalibe nthawi yoti ibwerezedwe, chitsimikiziro kwa kasitomala. za kupambana kwa opareshoni anatumizidwa, ndi mfundo imene kusintha anafika anagwa HDD, ife kutaya ndikupeleka, zomwe zingayambitse zotsatira zosasangalatsa kwambiri.

Semisync kubwereza

Pomaliza timafika ku semi-synchronous replication. Kubwereza kotereku sikudziwika bwino kapena kofala kwambiri, koma ndikosangalatsa kwambiri chifukwa kumatha kuphatikiza ubwino wa kubwereza kofanana ndi kofanana.

Tiyeni tiyese kuphatikiza 2 njira zam'mbuyo. Sitisunga kasitomala kwa nthawi yayitali, koma tidzafuna kuti deta ibwerezedwenso:

  1. Kulowetsa ntchito ku log database.
  2. Kugwiritsa ntchito injini ya database.
  3. Kutumiza deta ku replicas.
  4. Kulandira chitsimikiziro kuchokera pachifaniziro chakuti zosinthazo zalandiridwa (zidzagwiritsidwa ntchito "nthawi ina").
  5. Kubwezera chitsimikizo kwa kasitomala kuti ntchitoyo idagwiritsidwa ntchito bwino.

Chonde dziwani kuti ndi aligorivimu iyi, kutayika kwa malonda kumachitika pokhapokha ngati mfundo zonse zomwe zimalandira zosintha komanso zofananira zalephera. Kuthekera kwa kulephera koteroko kumaonedwa kuti ndi otsika, ndipo zoopsazi zimavomerezedwa.

Koma ndi njira iyi pali chiopsezo chotheka cha kuwerenga kwa phantom. Tiyeni tiyerekeze zotsatirazi: mu gawo 4, sitinalandire chitsimikiziro kuchokera ku chofanizira chilichonse. Tiyenera kubweza izi ndipo tisabwezere chitsimikizo kwa kasitomala. Popeza kuti deta idagwiritsidwa ntchito mu sitepe 2, pali kusiyana kwa nthawi pakati pa mapeto a sitepe 2 ndi kubwezeretsanso, pamene zochitika zofanana zimatha kuwona kusintha komwe sikuyenera kukhala mu database.

Kubwereza pang'ono kwa semisync

Ngati mukuganiza pang'ono, mutha kungosintha masitepe a aligorivimu ndikukonza vuto la kuwerenga kwa phantom muzochitika izi:

  1. Kulowetsa ntchito ku log database.
  2. Kutumiza deta yofananira.
  3. Kulandira chitsimikiziro kuchokera pachifaniziro chakuti zosinthazo zalandiridwa (zidzagwiritsidwa ntchito "nthawi ina").
  4. Kugwiritsa ntchito injini ya database.
  5. Kubwezera chitsimikizo kwa kasitomala kuti ntchitoyo idagwiritsidwa ntchito bwino.

Tsopano timapanga zosintha pokhapokha ngati zasinthidwa.

Pomaliza

Monga nthawi zonse, palibe njira zothetsera mavuto; pali njira zothetsera mavuto, zomwe zili ndi ubwino ndi zovuta zake ndipo ndizoyenera kuthetsa mavuto osiyanasiyana. Izi ndizowona posankha njira yolumikizira deta mumndandanda wofananizidwa. Zopindulitsa zomwe kubwereza kwa semi-synchronous kumakhala kolimba mokwanira komanso kosangalatsa komwe kumatha kuonedwa kuti ndi koyenera kuyang'aniridwa, ngakhale kufalikira kwake kuli kochepa.

Ndizomwezo. Tikuwonani pa Inde!

Source: www.habr.com

Kuwonjezera ndemanga