NewSQL = NoSQL+ACID

NewSQL = NoSQL+ACID
Mpaka posachedwa, Odnoklassniki idasunga pafupifupi 50 TB ya data yomwe idakonzedwa munthawi yeniyeni mu SQL Server. Kwa voliyumu yotereyi, ndizosatheka kupereka mwachangu komanso kodalirika, komanso ngakhale kulephera kwa data center pogwiritsa ntchito SQL DBMS. Nthawi zambiri, muzochitika zotere, imodzi mwazosungira za NoSQL imagwiritsidwa ntchito, koma sizinthu zonse zomwe zingatumizidwe ku NoSQL: mabungwe ena amafuna zitsimikizo za ACID.

Izi zinatipangitsa kugwiritsa ntchito kusungirako kwa NewSQL, ndiko kuti, DBMS yomwe imapereka kulekerera zolakwika, scalability ndi machitidwe a NoSQL machitidwe, koma panthawi imodzimodziyo kusunga ACID kumatsimikizira zodziwika bwino ku machitidwe akale. Pali machitidwe ochepa ogwirira ntchito a gulu latsopanoli, kotero tidakhazikitsa dongosolo lotere ndikuliyika muzamalonda.

Momwe zimagwirira ntchito ndi zomwe zidachitika - werengani pansi pa odulidwa.

Masiku ano, omvera a Odnoklassniki pamwezi ndi alendo oposa 70 miliyoni. Ife Ife tiri mu asanu apamwamba malo ochezera akulu kwambiri padziko lonse lapansi, komanso pakati pamasamba makumi awiri omwe ogwiritsa ntchito amakhala nthawi yayitali. Zomangamanga za OK zimanyamula katundu wokwera kwambiri: zopitilira miliyoni miliyoni za HTTP / mphindi kutsogolo. Magawo a seva yamagulu opitilira 8000 amakhala pafupi ndi mnzake - m'malo anayi a data a Moscow, omwe amalola kuti pakhale kuchedwa kwapaintaneti osakwana 1 ms pakati pawo.

Takhala tikugwiritsa ntchito Cassandra kuyambira 2010, kuyambira ndi mtundu 0.6. Masiku ano pali magulu khumi ndi awiri omwe akugwira ntchito. Magulu othamanga kwambiri amagwira ntchito zoposa 4 miliyoni pamphindikati, ndipo masitolo akuluakulu 260 TB.

Komabe, awa onse ndi magulu wamba a NoSQL omwe amagwiritsidwa ntchito posungira kugwirizana mofooka deta. Tinkafuna kusintha malo osungira osasinthika, Microsoft SQL Server, yomwe yakhala ikugwiritsidwa ntchito kuyambira kukhazikitsidwa kwa Odnoklassniki. Chosungiracho chinali ndi makina opitilira 300 a SQL Server Standard Edition, omwe anali ndi 50 TB ya data - mabungwe azamalonda. Deta iyi imasinthidwa ngati gawo la zochitika za ACID ndipo zimafunikira kusasinthasintha kwakukulu.

Kuti tigawire deta pa SQL Server node, tidagwiritsa ntchito moyima komanso yopingasa kugawa (kugawana). M'mbiri, tidagwiritsa ntchito chiwembu chosavuta cha data: gulu lililonse limalumikizidwa ndi chizindikiro - ntchito ya ID. Mabungwe okhala ndi chizindikiro chomwecho adayikidwa pa seva ya SQL yomweyo. Ubale wa mwatsatanetsatane-tsatanetsatane unakhazikitsidwa kotero kuti zizindikiro za zolemba zazikulu ndi za ana nthawi zonse zimagwirizana ndipo zinali pa seva yomweyo. Pamalo ochezera a pa Intaneti, pafupifupi zolemba zonse zimapangidwira m'malo mwa wogwiritsa ntchito - zomwe zikutanthauza kuti deta yonse ya ogwiritsa ntchito mkati mwa subsystem imodzi yogwira ntchito imasungidwa pa seva imodzi. Ndiko kuti, kugulitsa bizinesi pafupifupi nthawi zonse kumaphatikizapo matebulo ochokera ku seva imodzi ya SQL, zomwe zinapangitsa kuti zitsimikizire kusasinthasintha kwa deta pogwiritsa ntchito zochitika za ACID, popanda kufunikira kogwiritsa ntchito. wodekha komanso wosadalirika kugawa zochitika za ACID.

Chifukwa cha sharding komanso kufulumizitsa SQL:

  • Sitigwiritsa ntchito zopinga zachinsinsi zakunja, chifukwa pakugawana ID yagulu ikhoza kukhala pa seva ina.
  • Sitigwiritsa ntchito njira zosungidwa ndi zoyambitsa chifukwa cha katundu wowonjezera pa DBMS CPU.
  • Sitigwiritsa ntchito ma JOIN chifukwa cha zonse zomwe zili pamwambazi komanso zowerenga mwachisawawa kuchokera pa disk.
  • Kunja kwa malonda, timagwiritsa ntchito mulingo wodzipatula wa Read Uncommitted kuti tichepetse kuchedwa.
  • Timangochita zazifupi (pafupifupi zazifupi kuposa 100 ms).
  • Sitigwiritsa ntchito mizere yambiri UPDATE ndi DELETE chifukwa cha kuchuluka kwa ma deadlocks - timasintha mbiri imodzi yokha.
  • Nthawi zonse timangofunsa pama index - funso lomwe lili ndi dongosolo lathunthu lojambula patebulo limatanthauza kudzaza nkhokwe ndikupangitsa kuti izilephereke.

Izi zidatipangitsa kuti tifinyize magwiridwe antchito a SQL. Komabe, mavutowo anachulukirachulukira. Tiyeni tiyang'ane pa iwo.

Mavuto ndi SQL

  • Popeza tidagwiritsa ntchito sharding yolemba tokha, kuwonjezera ma shards atsopano kunachitika pamanja ndi oyang'anira. Nthawi yonseyi, zofananira za data scalable sanali kupereka zopempha.
  • Pamene chiwerengero cha zolemba patebulo chikukula, kuthamanga kwa kuika ndi kusinthidwa kumachepa; powonjezera ma index pa tebulo lomwe lilipo, liwiro limatsika ndi chinthu; kulenga ndi kukonzanso ma index kumachitika ndi nthawi yopuma.
  • Kukhala ndi Windows pang'ono ya SQL Server pakupanga kumapangitsa kuti kasamalidwe kazinthu zikhale zovuta

Koma vuto lalikulu ndi

kulekerera zolakwika

Seva yapamwamba ya SQL ili ndi vuto lololera bwino. Tiyerekeze kuti muli ndi seva imodzi yokha ya database, ndipo imalephera kamodzi pazaka zitatu zilizonse. Panthawiyi malowa ali pansi kwa mphindi 20, zomwe ndizovomerezeka. Ngati muli ndi ma seva 64, ndiye kuti tsambalo limatsika kamodzi pa milungu itatu iliyonse. Ndipo ngati muli ndi ma seva 200, ndiye kuti tsambalo siligwira ntchito sabata iliyonse. Ili ndi vuto.

Kodi chingachitike ndi chiyani kuti muchepetse kulekerera kwa seva ya SQL? Wikipedia ikutipempha kuti timange gulu lopezeka kwambiri: pamene kulephera kwa gawo lililonse pali chosungira.

Izi zimafuna zida zamtengo wapatali: zobwerezabwereza zambiri, kuwala kwa kuwala, kusungirako komweko, ndi kuphatikizidwa kwa malo osungiramo zinthu sizikugwira ntchito modalirika: pafupifupi 10% ya kusintha kumathera ndi kulephera kwa node yosunga zobwezeretsera ngati sitima kumbuyo kwa node yaikulu.

Koma choyipa chachikulu cha gulu lopezeka kwambiri lotere ndi kupezeka kwa zero ngati malo a data omwe amakhala akulephera. Odnoklassniki ili ndi malo anayi a data, ndipo tiyenera kuonetsetsa kuti ntchito ikalephera kwathunthu mu imodzi mwazo.

Kwa ichi tikhoza kugwiritsa ntchito Multi-Master kubwereza komwe kumapangidwa mu SQL Server. Njira yothetsera vutoli ndi yokwera mtengo kwambiri chifukwa cha mtengo wa mapulogalamu ndipo imakhala ndi mavuto odziwika bwino ndi kubwereza - kuchedwa kosayembekezereka ndi kubwereza kofanana ndi kuchedwa kugwiritsa ntchito kubwereza (ndipo, chifukwa chake, kutayika kosinthika) ndi kubwereza kosasinthasintha. Zolingaliridwa kuthetsa kusamvana pamanja zimapangitsa kuti chisankhochi zisagwiritsidwe ntchito kwathunthu kwa ife.

Mavuto onsewa anafunika kuthetseratu, ndipo tinayamba kuwapenda mwatsatanetsatane. Apa tikuyenera kudziwa zomwe SQL Server imachita makamaka - zotuluka.

Kusintha kosavuta

Tiyeni tilingalire njira yosavuta kwambiri, kuchokera pamawonedwe a wopanga mapulogalamu a SQL: kuwonjezera chithunzi ku chimbale. Albums ndi zithunzi amasungidwa mbale zosiyanasiyana. Chimbalecho chili ndi kauntala ya zithunzi za anthu onse. Ndiye kugulitsa kotereku kumagawidwa m'njira zotsatirazi:

  1. Timatseka chimbale ndi kiyi.
  2. Pangani cholowa mu tebulo lazithunzi.
  3. Ngati chithunzicho chili pagulu, yonjezerani chithunzi chapagulu ku chimbale, sinthani mbiriyo ndikuchita malondawo.

Kapena mu pseudocode:

TX.start("Albums", id);
Album album = albums.lock(id);
Photo photo = photos.create(…);

if (photo.status == PUBLIC ) {
    album.incPublicPhotosCount();
}
album.update();

TX.commit();

Tikuwona kuti zomwe zimachitika kwambiri pabizinesi ndikuwerenga deta kuchokera pankhokwe ndikukumbukira seva yogwiritsira ntchito, kusintha china chake ndikusunga zatsopano ku database. Nthawi zambiri muzochitika zotere timasintha mabungwe angapo, matebulo angapo.

Pamene mukuchita malonda, kusinthidwa nthawi imodzi kwa deta yofanana kuchokera ku dongosolo lina likhoza kuchitika. Mwachitsanzo, Antispam angasankhe kuti wogwiritsa ntchitoyo ali wokayikitsa mwanjira ina choncho zithunzi zonse za wogwiritsa ntchito siziyenera kukhala zapagulu, ziyenera kutumizidwa kuti zisamayende bwino, zomwe zikutanthauza kusintha chithunzi. Mwachiwonekere, ngati opaleshoniyi ikuchitika popanda zitsimikizo za atomicity ya ntchito ndi kudzipatula kwa zosintha zopikisana, monga momwe zilili. ACID, ndiye zotsatira zake sizidzakhala zofunikira - mwina chithunzithunzi chazithunzi chidzawonetsa mtengo wolakwika, kapena zithunzi zonse zidzatumizidwa kuti zikhale zochepetsetsa.

Ma code ambiri ofanana, owongolera mabizinesi osiyanasiyana mkati mwa bizinesi imodzi, adalembedwa nthawi yonse ya Odnoklassniki. Kutengera zomwe zidachitika pakusamukira ku NoSQL kuchokera Kusasinthasintha Kwambiri Tikudziwa kuti vuto lalikulu (ndi kusungitsa nthawi) kumachokera pakukhazikitsa ma code kuti asunge kusasinthika kwa data. Chifukwa chake, tidawona chofunikira chofunikira pakusungirako kwatsopano kukhala makonzedwe enieni a ACID pamalingaliro ogwiritsira ntchito.

Zina, zofunikanso, zinali:

  • Ngati data center ikulephera, kuwerenga ndi kulemba kusungirako kwatsopano ziyenera kupezeka.
  • Kusunga liwiro lachitukuko. Ndiye kuti, pogwira ntchito ndi malo atsopano, kuchuluka kwa ma code kuyenera kukhala kofanana; sipayenera kukhala chifukwa chowonjezera chilichonse kunkhokwe, kupanga ma algorithms othetsera mikangano, kusunga ma index achiwiri, ndi zina zambiri.
  • Kuthamanga kwa malo osungirako atsopano kunayenera kukhala okwera kwambiri, powerenga deta komanso pokonza zochitika, zomwe zikutanthawuza kuti maphunziro okhwima, onse, koma ochepetsetsa, monga, mwachitsanzo, sanali kugwira ntchito. magawo awiri.
  • Makulitsidwe ongoyenda pang'onopang'ono.
  • Kugwiritsa ntchito ma seva otsika mtengo nthawi zonse, popanda kufunikira kogula zida zakunja.
  • Kuthekera kwa chitukuko chosungirako ndi opanga makampani. Mwa kuyankhula kwina, chidwi chinaperekedwa ku mayankho a eni ake kapena otseguka, makamaka mu Java.

Zosankha, zosankha

Kusanthula mayankho zotheka, tinafika pa zosankha ziwiri zomanga:

Yoyamba ndikutenga seva iliyonse ya SQL ndikukhazikitsa zololera zolakwa zomwe zimafunikira, kukulitsa njira, gulu la failover, kuthetsa mikangano ndi kugawa, kudalirika komanso kufulumira kwa ACID. Tidavotera chisankhochi ngati chosachepera komanso cholimbikira ntchito.

Njira yachiwiri ndikutenga malo osungira a NoSQL okonzeka ndi makulitsidwe, gulu la failover, kuthetsa mikangano, ndikukhazikitsa zochitika ndi SQL nokha. Poyang'ana koyamba, ngakhale ntchito yokhazikitsa SQL, osatchulapo za ACID, ikuwoneka ngati ntchito yomwe itenga zaka. Koma tidazindikira kuti mawonekedwe a SQL omwe timagwiritsa ntchito pochita ndi kutali ndi ANSI SQL monga Cassandra CQL kutali ndi ANSI SQL. Titayang'anitsitsa CQL, tidazindikira kuti inali pafupi kwambiri ndi zomwe timafunikira.

Cassandra ndi CQL

Ndiye, chosangalatsa cha Cassandra ndi chiyani, ali ndi kuthekera kotani?

Choyamba, apa mutha kupanga matebulo omwe amathandizira mitundu yosiyanasiyana ya data; mutha kuchita SKHANI kapena KUSINTHA pa kiyi yoyamba.

CREATE TABLE photos (id bigint KEY, owner bigint,…);
SELECT * FROM photos WHERE id=?;
UPDATE photos SET … WHERE id=?;

Kuonetsetsa kusasinthika kwa data, Cassandra amagwiritsa njira ya quorum. Mwachidule, izi zikutanthauza kuti ngati zofananira zitatu za mzere womwewo zimayikidwa pamagulu osiyanasiyana a gululo, zolembazo zimawonedwa ngati zopambana ngati ma node ambiri (ndiko kuti, awiri mwa atatu) adatsimikizira kupambana kwa ntchitoyi. . Deta ya mzere imatengedwa kuti ndi yofanana ngati, powerenga, ma node ambiri adafunsidwa ndikuwatsimikizira. Chifukwa chake, ndi zofananira zitatu, kusasinthika kwathunthu komanso pompopompo kumatsimikiziridwa ngati node imodzi ikulephera. Njirayi idatithandiza kukhazikitsa chiwembu chodalirika kwambiri: nthawi zonse tumizani zopempha kwa zofananira zonse zitatu, kuyembekezera kuyankha kuchokera kwa awiri othamanga kwambiri. Kuyankha mochedwa kwa chifaniziro chachitatu kumatayidwa pankhaniyi. Node yomwe yachedwa kuyankha ikhoza kukhala ndi zovuta zazikulu - mabuleki, kusonkhanitsa zinyalala mu JVM, kubwezeredwa kwachindunji kukumbukira mu Linux kernel, kulephera kwa hardware, kuchotsedwa pamaneti. Komabe, izi sizikhudza ntchito kapena deta ya kasitomala mwanjira iliyonse.

Njira tikamalumikizana ndi mfundo zitatu ndikulandira yankho kuchokera kwa awiri imatchedwa kulingalira: pempho lowonjezera zowonjezera limatumizidwa ngakhale "lisanagwe".

Ubwino wina wa Cassandra ndi Batchlog, njira yomwe imatsimikizira kuti zosintha zomwe mumapanga zitha kugwiritsidwa ntchito kapena kusagwiritsidwa ntchito konse. Izi zimatithandiza kuthetsa A mu ACID - atomiki kunja kwa bokosi.

Zomwe zili pafupi kwambiri ndi zochitika ku Cassandra ndizomwe zimatchedwa "zochita zopepuka". Koma iwo ali kutali ndi "zenizeni" zochitika za ACID: Ndipotu, uwu ndi mwayi wochita CAS pa data kuchokera ku mbiri imodzi yokha, pogwiritsa ntchito mgwirizano pogwiritsa ntchito protocol ya Paxos yolemetsa. Choncho, liwiro la zochitika zoterezi ndizochepa.

Zomwe timasowa ku Cassandra

Chifukwa chake, tidayenera kukhazikitsa zochitika zenizeni za ACID ku Cassandra. Pogwiritsa ntchito zomwe titha kugwiritsa ntchito zinthu zina ziwiri zosavuta za DBMS zachikale: ma index osasinthika, omwe angatilole kusankha makiyi oyambira, komanso jenereta wanthawi zonse wa ma ID a monotonic auto-incrementing.

C*Mmodzi

Motero DBMS yatsopano inabadwa C*Mmodzi, yokhala ndi mitundu itatu ya ma seva:

  • Kusungirako - (pafupifupi) ma seva a Cassandra omwe ali ndi udindo wosunga deta pa disks zakomweko. Pamene katundu ndi kuchuluka kwa deta zikukula, kuchuluka kwawo kumatha kuwerengedwa mosavuta mpaka makumi ndi mazana.
  • Ogwirizanitsa ntchito - onetsetsani kuti ntchitoyo ikuchitika.
  • Makasitomala ndi maseva ogwiritsira ntchito omwe amagwiritsa ntchito bizinesi ndikuyambitsa zochitika. Pakhoza kukhala zikwizikwi zamakasitomala otere.

NewSQL = NoSQL+ACID

Ma seva amitundu yonse ndi gawo la gulu limodzi, gwiritsani ntchito protocol yamkati ya Cassandra kuti mulumikizane wina ndi mnzake komanso miseche posinthana zambiri zamagulu. Ndi Heartbeat, ma seva amaphunzira za kulephera kwapawiri, kusunga schema imodzi ya data - matebulo, kapangidwe kake ndi kubwereza; partitioning scheme, cluster topology, etc.

Otsatsa

NewSQL = NoSQL+ACID

M'malo mwa madalaivala wamba, Fat Client mode imagwiritsidwa ntchito. Node yotereyi siyisunga deta, koma imatha kukhala ngati wogwirizira pakufunsidwa, ndiye kuti, Wothandizirayo amakhala ngati wogwirizanitsa zopempha zake: amafunsa zofananira zosungira ndikuthetsa mikangano. Izi sizongodalirika komanso zofulumira kuposa dalaivala wokhazikika, zomwe zimafuna kulankhulana ndi wogwirizanitsa akutali, komanso zimakulolani kuti muzitha kuyendetsa zopempha. Kunja kwa malonda otsegulidwa kwa kasitomala, zopempha zimatumizidwa ku repositories. Ngati kasitomala atsegula malonda, ndiye kuti zopempha zonse zomwe zili mkati mwazogulitsazo zimatumizidwa kwa wogwirizanitsa ntchito.
NewSQL = NoSQL+ACID

C * One Transaction Coordinator

Wogwirizanitsa ndichinthu chomwe tidakhazikitsa C * One kuyambira pachiyambi. Lili ndi udindo woyang'anira zochitika, maloko, ndi dongosolo lomwe ndalama zimagwiritsidwira ntchito.

Pazochitika zilizonse, wogwirizira amapanga sitampu yanthawi: chilichonse chotsatira chimakhala chachikulu kuposa kale. Popeza njira yothanirana ndi mikangano ya Cassandra imatengera masitampu anthawi (za malekodi awiri osagwirizana, yomwe ili ndi sitampu yaposachedwa imatengedwa kuti ndi yapano), mkanganowu udzathetsedwa nthawi zonse mokomera zomwe zidzachitike. Motero tinakhazikitsa Wotchi ya Lamport - njira yotsika mtengo yothetsera mikangano mu dongosolo logawidwa.

Maloko

Kuonetsetsa kudzipatula, tinaganiza zogwiritsa ntchito njira yosavuta kwambiri - maloko opanda chiyembekezo potengera fungulo loyambirira la zolemba. Mwa kuyankhula kwina, pochita malonda, cholembera chiyenera kutsekedwa, kenako kuwerengedwa, kusinthidwa, ndi kusungidwa. Pokhapokha mutachita bwino pomwe mbiri ingatsegulidwe kuti opikisana nawo agwiritse ntchito.

Kukhazikitsa kutseka koteroko ndikosavuta m'malo osagawidwa. M'dongosolo logawidwa, pali njira ziwiri zazikuluzikulu: mwina khazikitsani zotsekera zogawika pamagulu, kapena kugawa zochitika kuti zochitika zomwe zimakhudzana ndi mbiri yomweyo zizithandizidwa ndi wogwirizanitsa yemweyo.

Popeza kwa ife deta kale anagawira pakati pa magulu a zochitika m'deralo mu SQL, anaganiza perekani magulu wobwereketsa m'deralo kwa ogwirizanitsa: wogwirizira mmodzi amachita zochitika zonse ndi zizindikiro 0 mpaka 9, chachiwiri - ndi zizindikiro 10 mpaka 19, ndi zina zotero. Zotsatira zake, zochitika zonse za ogwirizanitsa zimakhala mtsogoleri wa gulu lochita malonda.

Kenako maloko amatha kukhazikitsidwa ngati banal HashMap pokumbukira wogwirizanitsa.

Zolephera za ogwirizanitsa

Popeza wogwirizira m'modzi amangogwiritsa ntchito gulu lazochita, ndikofunikira kwambiri kudziwa mwachangu za kulephera kwake kuti kuyesa kwachiwiri kuchita ntchitoyo kuthe. Kuti izi zikhale zachangu komanso zodalirika, tidagwiritsa ntchito protocol yolumikizidwa yolumikizidwa bwino ndi ma quorum heartbeat:

Deta iliyonse imakhala ndi ma node osachepera awiri. Nthawi ndi nthawi, wogwirizanitsa aliyense amatumiza uthenga wa kugunda kwa mtima kwa ogwirizanitsa ena ndikuwadziwitsa za momwe amagwirira ntchito, komanso mauthenga okhudza kugunda kwa mtima omwe adalandira kuchokera kwa ogwirizanitsa gulu nthawi yatha.

NewSQL = NoSQL+ACID

Kulandira chidziwitso chofanana kuchokera kwa ena monga gawo la mauthenga awo a kugunda kwa mtima, wogwirizanitsa aliyense amadzipangira yekha kuti ndi magulu ati omwe akugwira ntchito ndi omwe sakugwira ntchito, motsogozedwa ndi mfundo ya quorum: ngati mfundo X yalandira zambiri kuchokera kumagulu ambiri omwe ali mgululi okhudza zachibadwa. kulandira mauthenga kuchokera ku mfundo Y, ndiye, Y amagwira ntchito. Ndipo mosemphanitsa, ambiri akangonena kuti palibe mauthenga ochokera ku Y, ndiye Y wakana. Ndizodabwitsa kuti ngati quorum idziwitsa node X kuti sikulandiranso mauthenga kuchokera kwa iyo, ndiye kuti X imadziona ngati yalephera.

Mauthenga a kugunda kwa mtima amatumizidwa pafupipafupi, pafupifupi 20 pa sekondi imodzi, ndi nthawi ya 50 ms. Ku Java, ndizovuta kutsimikizira kuyankha kwa ntchito mkati mwa 50 ms chifukwa cha kutalika kofananako kwa kuyimitsidwa komwe kumachitika chifukwa chotolera zinyalala. Tinatha kukwaniritsa nthawi yoyankhirayi pogwiritsa ntchito chotolera zinyalala cha G1, chomwe chimatilola kufotokoza cholinga cha nthawi yomwe GC imayima. Komabe, nthawi zina, kawirikawiri, wokhometsayo amaima kuposa 50 ms, zomwe zingayambitse kuzindikira zolakwika. Kuti izi zisachitike, wogwirizira sanena za kulephera kwa node yakutali pomwe uthenga woyamba wa kugunda kwa mtima ukuchoka, pokhapokha ngati angapo asowa motsatizana. Ms.

Koma sikokwanira kuti mumvetsetse kuti ndi mfundo iti yomwe yasiya kugwira ntchito. Tiyenera kuchitapo kanthu pankhaniyi.

Kusungitsa

Chiwembu chachikale chimaphatikizapo, pakagwa kulephera kwakukulu, kuyambitsa chisankho chatsopano pogwiritsa ntchito imodzi mwa zapamwamba chilengedwe chonse ma aligorivimu. Komabe, ma aligorivimu oterowo ali ndi mavuto odziwika bwino ndi kusinthika kwa nthawi komanso kutalika kwa chisankho chokha. Tinatha kupewa kuchedwetsa kotereku pogwiritsa ntchito chiwembu choloweza m'malo mwa netiweki yolumikizidwa kwathunthu:

NewSQL = NoSQL+ACID

Tiyerekeze kuti tikufuna kuchita malonda mu gulu la 50. Tiyeni tidziΕ΅ike pasadakhale ndondomeko yowonjezera, ndiko kuti, ndi ma node ati omwe adzachita malonda mu gulu la 50 pakalephera kwa wogwirizanitsa wamkulu. Cholinga chathu ndikusunga magwiridwe antchito pakagwa vuto la data center. Tiyeni tiwone kuti nkhokwe yoyamba idzakhala mfundo yochokera kumalo ena a deta, ndipo malo osungirako achiwiri adzakhala mfundo kuchokera kuchitatu. Chiwembuchi chimasankhidwa kamodzi ndipo sichisintha mpaka topology ya masango isintha, ndiye kuti, mpaka ma node atsopano alowemo (zomwe zimachitika kawirikawiri). Njira yosankha mbuye watsopano wogwira ntchito ngati wakaleyo alephera nthawi zonse amakhala motere: nkhokwe yoyamba idzakhala mbuye yogwira, ndipo ngati yasiya kugwira ntchito, nkhokwe yachiwiri idzakhala mbuye yogwira.

Chiwembu ichi ndi chodalirika kuposa algorithm yapadziko lonse lapansi, chifukwa kuyambitsa mbuye watsopano ndikokwanira kudziwa kulephera kwa wakale.

Koma kodi makasitomala angamvetse bwanji mbuye amene akugwira ntchito pano? Ndizosatheka kutumiza chidziwitso kwa makasitomala masauzande ambiri mu 50 ms. Zomwe zingatheke pamene kasitomala atumiza pempho kuti atsegule malonda, osadziwa kuti mbuyeyu sakugwiranso ntchito, ndipo pempholo lidzatha. Kuti izi zisachitike, makasitomala amangotumiza pempho loti atsegule malonda kwa mbuye wa gulu ndi nkhokwe zake zonse nthawi imodzi, koma yekhayo amene ali mbuye wogwira ntchito panthawiyo adzayankha pempholi. Wothandizirayo apanga zoyankhulana zonse zotsatila mkati mwazochitazo kokha ndi mbuye wogwira ntchito.

Osunga zosunga zobwezeretsera amayika zopempha zolandilidwa zomwe sizili zawo pamzere wa zochitika zomwe sizinabadwe, pomwe zimasungidwa kwakanthawi. Ngati mbuye wogwira ntchito amwalira, mbuye watsopanoyo amapempha kuti atsegule zochitika kuchokera pamzere wake ndikuyankha kasitomala. Ngati kasitomala atsegula kale malonda ndi mbuye wakale, ndiye kuti yankho lachiwiri limanyalanyazidwa (ndipo, mwachiwonekere, kugulitsa koteroko sikudzatha ndipo kudzabwerezedwa ndi kasitomala).

Momwe ntchitoyo imagwirira ntchito

Tiyerekeze kuti kasitomala watumiza pempho kwa wogwirizira kuti atsegule bizinesi ya izi ndi makiyi oterowo. Wogwirizanitsa amatseka chinthu ichi ndikuchiyika patebulo lokhoma pokumbukira. Ngati ndi kotheka, wogwirizira amawerenga izi kuchokera kosungidwa ndikusunga zomwe zachitikazo muchikumbutso cha wogwirizanitsa.

NewSQL = NoSQL+ACID

Pamene kasitomala akufuna kusintha deta muzochitikazo, amatumiza pempho kwa wogwirizanitsa kuti asinthe bungwe, ndipo wogwirizanitsa amaika deta yatsopano patebulo la zochitika zamalonda pokumbukira. Izi zimamaliza kujambula - palibe kujambula komwe kumasungidwa.

NewSQL = NoSQL+ACID

Ngati kasitomala apempha zomwe zasinthidwa monga gawo la zochitika, wogwirizanitsa amachita motere:

  • ngati ID ili kale mumalonda, ndiye kuti deta imachotsedwa pamtima;
  • ngati palibe ID mu kukumbukira, ndiye kuti deta yosowa imawerengedwa kuchokera kumalo osungira, kuphatikizapo omwe ali kale mu kukumbukira, ndipo zotsatira zake zimaperekedwa kwa kasitomala.

Chifukwa chake, kasitomala amatha kuwerenga zosintha zake, koma makasitomala ena samawona zosintha izi, chifukwa zimasungidwa kukumbukira wogwirizira; iwo sali mu mfundo za Cassandra.

NewSQL = NoSQL+ACID

Wothandizira akatumiza, dziko lomwe linali mu kukumbukira kwautumiki limasungidwa ndi wogwirizira mu batch yolowetsedwa, ndipo amatumizidwa ngati batch yosungidwa ku Cassandra yosungirako. Masitolo amachita zonse zofunikira kuti atsimikizire kuti phukusili likugwiritsidwa ntchito (kwathunthu), ndikubwezerani yankho kwa wogwirizanitsa, yemwe amamasula maloko ndikutsimikizira kupambana kwa malondawo kwa kasitomala.

NewSQL = NoSQL+ACID

Ndipo kuti mubwererenso, wogwirizanitsa amangofunika kumasula kukumbukira komwe kukuchitika.

Chifukwa cha zosinthazi, takhazikitsa mfundo za ACID:

  • Atomiki. Ichi ndi chitsimikizo chakuti palibe ntchito yomwe idzalembedwe pang'ono mu dongosolo; mwina zonse zomwe zimagwira ntchito zidzamalizidwa, kapena palibe chomwe chidzamalizidwe. Timatsatira mfundo imeneyi kudzera mu gulu lolowera ku Cassandra.
  • Kusasinthasintha. Kuchita kulikonse kopambana, mwa kutanthauzira, kumalemba zotsatira zomveka zokha. Ngati, mutatha kutsegula malonda ndikuchita mbali ya ntchitoyo, zikuwoneka kuti zotsatira zake ndizosavomerezeka, kubwezeretsanso kumachitika.
  • Kudzipatula. Pamene ntchito ikuchitika, zochitika panthawi imodzi siziyenera kusokoneza zotsatira zake. Zochita zopikisana zimasiyanitsidwa pogwiritsa ntchito maloko opanda chiyembekezo pa ogwirizanitsa. Zowerengedwa kunja kwa malonda, mfundo yodzipatula imawonedwa pamlingo wa Read Committed.
  • Kukhazikika. Mosasamala kanthu za mavuto omwe ali pazigawo zotsika - kuzimitsa kwadongosolo, kulephera kwa hardware - zosintha zomwe zimapangidwa ndi ntchito yomaliza bwino ziyenera kusungidwa pamene ntchito ziyambiranso.

Kuwerenga ndi indexes

Tiyeni titenge tebulo losavuta:

CREATE TABLE photos (
id bigint primary key,
owner bigint,
modified timestamp,
…)

Ili ndi ID (kiyi yoyamba), mwini wake ndi tsiku losinthidwa. Muyenera kupanga pempho losavuta kwambiri - sankhani deta kwa mwiniwake ndi tsiku losintha "tsiku lomaliza".

SELECT *
WHERE owner=?
AND modified>?

Kuti funso lotereli lichitidwe mwachangu, mu SQL DBMS yachikale muyenera kupanga index ndi mizati (mwini, kusinthidwa). Titha kuchita izi mosavuta, popeza tsopano tili ndi zitsimikizo za ACID!

Ma index mu C * One

Pali tebulo loyambira lomwe lili ndi zithunzi momwe ID yojambulira ndiye kiyi yoyamba.

NewSQL = NoSQL+ACID

Pazolozera, C * One imapanga tebulo latsopano lomwe ndi kopi ya choyambirira. Mfungulo ndi yofanana ndi mawu a index, komanso imaphatikizanso kiyi yoyamba ya mbiri kuchokera pagawo loyambira:

NewSQL = NoSQL+ACID

Tsopano funso la "mwini wake wa tsiku lomaliza" likhoza kulembedwanso ngati kusankha patebulo lina:

SELECT * FROM i1_test
WHERE owner=?
AND modified>?

Kusasinthika kwa deta muzithunzi za tebulo la magwero ndi tebulo la index i1 kumasungidwa ndi wogwirizanitsa. Malingana ndi schema ya deta yokha, pamene kusintha kulandiridwa, wogwirizanitsa amapanga ndikusunga kusintha osati pa tebulo lalikulu, komanso m'makope. Palibe zowonjezera zomwe zimachitika pa tebulo la index, zipika sizimawerengedwa, ndipo palibe maloko omwe amagwiritsidwa ntchito. Ndiko kuti, kuwonjezera ma index kumawononga pafupifupi chilichonse ndipo sikumakhudzanso kuthamanga kwa zosintha.

Pogwiritsa ntchito ACID, tinatha kugwiritsa ntchito ma index ngati SQL. Ndizosasinthasintha, zowongoka, zachangu, zophatikizika, komanso zomangidwira muchilankhulo chafunso cha CQL. Palibe zosintha pamakhodi ogwiritsira ntchito zomwe zimafunikira kuti zithandizire ma index. Zonse ndi zophweka monga mu SQL. Ndipo chofunikira kwambiri, ma index samakhudza kuthamanga kwa zosintha patebulo loyambilira.

Chinachitika ndi chiyani

Tidapanga C * One zaka zitatu zapitazo ndikuyambitsa ntchito zamalonda.

Tinapeza chiyani pamapeto pake? Tiyeni tiwunikire izi pogwiritsa ntchito chitsanzo cha kachitidwe kazithunzi ndi kasungidwe kakang'ono, imodzi mwamitundu yofunikira kwambiri pamasamba ochezera. Sitikulankhula za matupi a zithunzi okha, koma za mitundu yonse ya chidziwitso. Tsopano Odnoklassniki ili ndi zolemba ngati mabiliyoni 20, dongosololi limayendetsa zopempha 80 zomwe zimawerengedwa pamphindikati, mpaka 8 pa sekondi iliyonse yokhudzana ndi kusintha kwa data.

Pamene timagwiritsa ntchito SQL ndi replication factor = 1 (koma mu RAID 10), chithunzithunzi chazithunzi chinasungidwa pamagulu omwe amapezeka kwambiri a makina 32 omwe akuyendetsa Microsoft SQL Server (kuphatikiza zosunga zobwezeretsera 11). Ma seva 10 adaperekedwanso kuti asunge zosunga zobwezeretsera. Magalimoto okwana 50 okwera mtengo. Pa nthawi yomweyo, dongosolo ntchito pa katundu oveteredwa, popanda kusungitsa.

Titasamukira ku dongosolo latsopano, tinalandira replication factor = 3 - kopi mu data center iliyonse. Dongosololi lili ndi ma 63 Cassandra storage node and 6 coordinator machines, pa ma seva okwana 69. Koma makinawa ndi otchipa kwambiri, mtengo wawo wonse ndi pafupifupi 30% ya mtengo wa dongosolo la SQL. Pa nthawi yomweyi, katunduyo amasungidwa pa 30%.

Ndi kukhazikitsidwa kwa C * One, latency idatsikanso: mu SQL, ntchito yolemba idatenga pafupifupi 4,5 ms. Mu C * Mmodzi - pafupifupi 1,6 ms. Nthawi yogulitsirayo imakhala yochepera 40 ms, kudzipereka kumamalizidwa mu 2 ms, nthawi yowerengera ndi kulemba ndi pafupifupi 2 ms. 99th percentile - 3-3,1 ms yokha, chiwerengero cha nthawi yopuma chatsika ndi nthawi 100 - zonsezi chifukwa cha kufalikira kwa malingaliro.

Pakalipano, ma node ambiri a SQL Server achotsedwa ntchito; zatsopano zikupangidwa pogwiritsa ntchito C * One. Tinasintha C * One kuti igwire ntchito mumtambo wathu mtambo umodzi, zomwe zinapangitsa kuti zikhale zotheka kufulumizitsa kutumizidwa kwa magulu atsopano, kuphweka masinthidwe ndi automate ntchito. Popanda code source, kuchita izi kungakhale kovuta komanso kovuta.

Tsopano tikuyesetsa kusamutsa malo athu ena osungira kumtambo - koma iyi ndi nkhani yosiyana kwambiri.

Source: www.habr.com

Kuwonjezera ndemanga