NewSQL = NoSQL+ACID

NewSQL = NoSQL+ACID
Txog thaum tsis ntev los no, Odnoklassniki khaws cia txog 50 TB ntawm cov ntaub ntawv ua tiav hauv lub sijhawm tiag tiag hauv SQL Server. Rau cov ntim zoo li no, nws yuav luag tsis yooj yim sua kom muab ceev thiab txhim khu kev qha, thiab txawm tias cov ntaub ntawv chaw tsis ua haujlwm-hloov nkag siv SQL DBMS. Feem ntau, hauv cov xwm txheej zoo li no, ib qho ntawm NoSQL khaws cia yog siv, tab sis tsis yog txhua yam tuaj yeem hloov mus rau NoSQL: qee qhov chaw xav tau ACID kev lav phib xaub.

Qhov no coj peb mus rau kev siv NewSQL cia, uas yog, DBMS uas muab kev ua txhaum cai, scalability thiab kev ua tau zoo ntawm NoSQL systems, tab sis tib lub sijhawm tswj hwm ACID lav paub txog cov txheej txheem classical. Muaj ob peb txoj haujlwm kev lag luam ntawm chav kawm tshiab no, yog li peb tau siv cov txheej txheem no peb tus kheej thiab muab tso rau hauv kev lag luam.

Nws ua haujlwm li cas thiab qhov tshwm sim - nyeem hauv qab txiav.

Niaj hnub no, cov neeg tuaj saib txhua hli ntawm Odnoklassniki yog ntau dua 70 lab tus qhua tshwj xeeb. Peb Peb nyob saum tsib kev sib tham loj tshaj plaws hauv ntiaj teb, thiab ntawm nees nkaum qhov chaw uas cov neeg siv siv sijhawm ntau tshaj. Cov txheej txheem OK ua haujlwm siab heev: ntau tshaj li ib lab HTTP thov / sec ib sab. Qhov chaw ntawm lub nkoj xa khoom ntawm ntau dua 8000 daim nyob ze rau ib leeg - hauv plaub lub chaw khaws ntaub ntawv Moscow, uas tso cai rau lub network latency tsawg dua 1 ms ntawm lawv.

Peb tau siv Cassandra txij thaum 2010, pib nrog version 0.6. Niaj hnub no muaj ntau lub kaum os pawg ua haujlwm. Cov pawg ceev tshaj plaws ua haujlwm ntau dua 4 lab kev ua haujlwm ib ob, thiab cov khw muag khoom loj tshaj 260 TB.

Txawm li cas los xij, cov no yog txhua yam NoSQL pawg siv los khaws cia ua hauj lwm tsis muaj zog cov ntaub ntawv. Peb xav hloov lub ntsiab zoo ib yam cia, Microsoft SQL Server, uas tau siv txij li thaum tsim Odnoklassniki. Qhov chaw cia muaj ntau dua 300 SQL Server Standard Edition tshuab, uas muaj 50 TB ntawm cov ntaub ntawv - cov chaw lag luam. Cov ntaub ntawv no raug hloov kho raws li ib feem ntawm ACID kev hloov pauv thiab xav tau siab sib xws.

Txhawm rau faib cov ntaub ntawv hla SQL Server nodes, peb siv ob qho tib si ntsug thiab kab rov tav muab faib (sharding). Keeb kwm, peb tau siv cov ntaub ntawv yooj yim sharding scheme: txhua qhov chaw tau cuam tshuam nrog lub token - qhov ua haujlwm ntawm qhov chaw ID. Cov chaw nrog tib lub token tau muab tso rau ntawm tib SQL server. Kev sib raug zoo ntawm tus tswv-ntxhais tau muab coj los ua kom cov tokens ntawm cov ntaub ntawv tseem ceeb thiab cov menyuam yaus ib txwm sib luag thiab nyob ntawm tib lub server. Hauv kev sib raug zoo network, yuav luag tag nrho cov ntaub ntawv raug tsim tawm sawv cev ntawm cov neeg siv - uas txhais tau hais tias txhua tus neeg siv cov ntaub ntawv hauv ib qho kev ua haujlwm tau muab khaws cia rau ntawm ib lub server. Ntawd yog, kev lag luam kev lag luam yuav luag ib txwm koom nrog cov rooj los ntawm ib tus SQL neeg rau zaub mov, uas ua rau nws muaj peev xwm ua kom cov ntaub ntawv sib xws siv ACID kev lag luam hauv zos, tsis tas yuav siv. qeeb thiab tsis ntseeg faib ACID kev hloov pauv.

Ua tsaug rau sharding thiab kom ceev SQL:

  • Peb tsis siv txawv teb chaws tseem ceeb txwv, txij li thaum sharding lub chaw ID tej zaum yuav nyob rau hauv lwm tus neeg rau zaub mov.
  • Peb tsis siv cov txheej txheem khaws cia thiab ua rau vim muaj kev thauj khoom ntxiv ntawm DBMS CPU.
  • Peb tsis siv JOINs vim hais tias ntawm tag nrho cov saum toj no thiab ntau random nyeem los ntawm disk.
  • Nyob rau sab nraud ntawm kev sib pauv, peb siv Read Uncommitted kev cais theem kom txo tau qhov kev tuag.
  • Peb tsuas yog ua haujlwm luv luv (qhov nruab nrab luv dua 100 ms).
  • Peb tsis siv ntau kab UPDATE thiab DELETE vim muaj coob tus neeg tuag - peb tsuas yog hloov kho cov ntaub ntawv ib zaug xwb.
  • Peb ib txwm ua cov lus nug tsuas yog ntawm kev ntsuas - cov lus nug nrog lub rooj sib tham tag nrho rau peb txhais tau tias overloading cov ntaub ntawv thiab ua rau nws ua tsis tiav.

Cov kauj ruam no tso cai rau peb nyem yuav luag qhov ua tau zoo tshaj plaws ntawm SQL servers. Txawm li cas los xij, cov teeb meem tau dhau los ua ntau thiab ntau dua. Cia peb saib lawv.

Teeb meem nrog SQL

  • Txij li thaum peb siv tus kheej sau sharding, ntxiv shards tshiab tau ua manually los ntawm cov thawj coj. Txhua lub sijhawm no, cov ntaub ntawv hloov pauv hloov tau yooj yim tsis tau txais kev thov.
  • Raws li tus naj npawb ntawm cov ntaub ntawv nyob rau hauv lub rooj loj hlob, qhov ceev ntawm kev ntxig thiab kev hloov kho txo ​​qis; thaum ntxiv indexes rau ib lub rooj uas twb muaj lawm, qhov ceev poob los ntawm qhov zoo; kev tsim thiab rov tsim cov indexes tshwm sim nrog downtime.
  • Muaj me me ntawm Windows rau SQL Server hauv kev tsim khoom ua rau kev tswj hwm kev tswj hwm nyuaj

Tab sis qhov teeb meem tseem ceeb yog

txhaum cai

Classic SQL neeg rau zaub mov muaj kev ua txhaum tsis zoo. Cia peb hais tias koj tsuas muaj ib tus neeg rau zaub mov database xwb, thiab nws ua tsis tau ib zaug txhua peb xyoos. Thaum lub sij hawm no lub site yog down rau 20 feeb, uas yog txaus. Yog tias koj muaj 64 servers, ces lub vev xaib poob ib zaug txhua peb lub lis piam. Thiab yog tias koj muaj 200 servers, ces lub xaib tsis ua haujlwm txhua lub lis piam. Qhov no yog teeb meem.

Dab tsi tuaj yeem ua tau los txhim kho qhov ua txhaum cai ntawm SQL server? Wikipedia caw peb los tsim muaj ntau pawg: qhov twg nyob rau hauv cov ntaub ntawv ntawm tsis ua hauj lwm ntawm ib yam ntawm cov Cheebtsam muaj ib tug thaub qab.

Qhov no yuav tsum muaj lub nkoj ntawm cov khoom kim heev: ntau duplications, kho qhov muag fiber ntau, sib koom cia, thiab kev suav nrog ib qho chaw cia tsis ua haujlwm tau zoo: txog 10% ntawm kev hloov pauv xaus nrog qhov tsis ua tiav ntawm qhov thaub qab ntawm lub tsheb ciav hlau zoo li lub tsheb ciav hlau tom qab lub ntsiab ntawm lub ntsiab.

Tab sis lub ntsiab tsis zoo ntawm xws li ib tug heev muaj pawg yog xoom muaj yog hais tias cov ntaub ntawv chaw nyob rau hauv uas nws nyob tsis tau. Odnoklassniki muaj plaub lub chaw zov me nyuam, thiab peb yuav tsum ua kom muaj kev ua haujlwm nyob rau hauv qhov xwm txheej ntawm qhov ua tsis tiav hauv ib qho ntawm lawv.

Rau qhov no peb tuaj yeem siv Multi-Master replication ua rau SQL Server. Qhov kev daws teeb meem no kim dua vim yog tus nqi ntawm software thiab raug kev txom nyem los ntawm cov teeb meem paub zoo nrog kev rov ua dua - kev hloov pauv tsis tuaj yeem ncua nrog synchronous replication thiab qeeb hauv kev siv cov replications (thiab, vim li ntawd, poob kev hloov kho) nrog asynchronous replication. Qhov cuam tshuam phau ntawv kev daws teeb meem ua rau qhov kev xaiv no siv tsis tau rau peb.

Tag nrho cov teeb meem no xav tau kev daws teeb meem, thiab peb pib txheeb xyuas lawv kom meej. Ntawm no peb yuav tsum tau paub txog dab tsi SQL Server feem ntau ua - kev lag luam.

Kev lag luam yooj yim

Cia peb xav txog qhov kev hloov pauv yooj yim tshaj plaws, los ntawm qhov pom ntawm kev siv SQL programmer: ntxiv cov duab rau ib qho album. Albums thiab duab tau muab khaws cia rau hauv daim phiaj sib txawv. Lub album muaj ib tug pej xeem yees duab txee. Tom qab ntawd xws li kev sib pauv tau muab faib ua cov kauj ruam hauv qab no:

  1. Peb kaw lub album los ntawm tus yuam sij.
  2. Tsim ib qho kev nkag rau hauv lub rooj yees duab.
  3. Yog tias daim duab muaj cov xwm txheej pej xeem, tom qab ntawd ntxiv cov duab rau pej xeem rau lub album, hloov kho cov ntaub ntawv thiab ua qhov kev hloov pauv.

Los yog hauv pseudocode:

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

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

TX.commit();

Peb pom tias qhov xwm txheej feem ntau rau kev lag luam kev lag luam yog nyeem cov ntaub ntawv los ntawm cov ntaub ntawv mus rau hauv lub cim xeeb ntawm daim ntawv thov server, hloov qee yam thiab txuag cov txiaj ntsig tshiab rov qab rau hauv cov ntaub ntawv. Feem ntau nyob rau hauv xws li kev lag luam peb hloov kho ntau qhov chaw, ntau lub rooj.

Thaum ua tiav qhov kev sib pauv, kev hloov pauv ntawm tib cov ntaub ntawv los ntawm lwm qhov system yuav tshwm sim. Piv txwv li, Antispam tej zaum yuav txiav txim siab tias tus neeg siv yuav ua li cas tsis txaus ntseeg thiab yog li ntawd tag nrho cov neeg siv cov duab yuav tsum tsis txhob muaj pej xeem, lawv yuav tsum tau xa mus rau kev sib haum xeeb, uas txhais tau hais tias hloov photo.status rau qee qhov nqi thiab tua cov txee sib raug. Pom tseeb, yog tias qhov haujlwm no tshwm sim yam tsis muaj kev lees paub ntawm atomicity ntawm daim ntawv thov thiab kev sib cais ntawm kev sib tw hloov kho, xws li hauv acid, tom qab ntawd qhov tshwm sim yuav tsis yog qhov xav tau - txawm tias lub txee yees duab yuav qhia tus nqi tsis raug, lossis tsis yog tag nrho cov duab yuav raug xa mus rau qhov nruab nrab.

Ntau tus lej zoo sib xws, tswj hwm ntau yam kev lag luam hauv ib qho kev sib pauv, tau sau tseg thoob plaws tag nrho lub neej ntawm Odnoklassniki. Raws li kev paub ntawm kev tsiv teb tsaws mus rau NoSQL los ntawm Thaum kawg Consistency Peb paub tias qhov kev sib tw loj tshaj plaws (thiab lub sijhawm peev) los ntawm kev tsim cov cai tswj xyuas cov ntaub ntawv sib xws. Yog li ntawd, peb tau txiav txim siab qhov tseem ceeb ntawm kev cia khoom tshiab los muab kev hloov pauv ACID tiag tiag rau daim ntawv thov logic.

Lwm yam, tsis muaj qhov tseem ceeb tsawg, cov kev xav tau yog:

  • Yog tias lub chaw khaws ntaub ntawv ua tsis tiav, nyeem ntawv thiab sau ntawv mus rau qhov chaw cia tshiab yuav tsum muaj.
  • Tuav txoj kev loj hlob tam sim no. Uas yog, thaum ua hauj lwm nrog ib tug tshiab repository, tus nqi ntawm cov code yuav tsum yog tib yam; yuav tsum tsis txhob ntxiv ib yam dab tsi rau lub repository, tsim algorithms rau kev daws teeb meem tsis sib haum xeeb, tswj cov theem nrab indexes, thiab lwm yam.
  • Qhov ceev ntawm qhov chaw cia tshiab yuav tsum tau siab heev, ob qho tib si thaum nyeem cov ntaub ntawv thiab thaum ua kev lag luam, uas txhais tau hais tias kev kawm nruj, thoob ntiaj teb, tab sis kev daws teeb meem qeeb, xws li, piv txwv li, tsis muaj feem xyuam. ob-theem commits.
  • Automatic on-the-fly scaling.
  • Siv cov servers pheej yig tsis tu ncua, tsis tas yuav yuav cov khoom siv txawv txawv.
  • Muaj peev xwm khaws cia kev txhim kho los ntawm cov tuam txhab tsim tawm. Hauv lwm lo lus, qhov tseem ceeb tau muab rau cov tswv lag luam lossis qhib qhov kev daws teeb meem, nyiam dua hauv Java.

Kev txiav txim siab, kev txiav txim siab

Txheeb xyuas cov kev daws teeb meem, peb tuaj rau ob qhov kev xaiv tsim qauv:

Thawj yog coj ib qho SQL neeg rau zaub mov thiab ua raws li qhov yuav tsum tau ua txhaum cai, scaling mechanism, tsis ua hauj lwm pawg, kev daws teeb meem thiab faib, txhim khu kev qha thiab ceev ACID kev lag luam. Peb ntsuas qhov kev xaiv no yog qhov tsis tseem ceeb thiab siv zog ua haujlwm.

Qhov kev xaiv thib ob yog ua kom npaj txhij-ua NoSQL cia nrog kev siv qhov ntsuas, qhov ua tsis tiav, kev daws teeb meem tsis sib haum xeeb, thiab siv kev lag luam thiab SQL koj tus kheej. Thaum xub thawj siab ib muag, txawm tias txoj hauj lwm ntawm kev siv SQL, tsis hais txog ACID kev lag luam, zoo li ib txoj hauj lwm uas yuav siv sij hawm ntau xyoo. Tab sis tom qab ntawd peb pom tau tias SQL feature peb siv hauv kev xyaum yog deb ntawm ANSI SQL li Cassandra CQL deb ntawm ANSI SQL. Ua tib zoo saib ntawm CQL, peb pom tau tias nws nyob ze rau qhov peb xav tau.

Cassandra thiab CQL

Yog li, dab tsi nthuav txog Cassandra, nws muaj peev xwm dab tsi?

Ua ntej, ntawm no koj tuaj yeem tsim cov rooj uas txhawb ntau hom ntaub ntawv; koj tuaj yeem ua SELECT lossis UPDATE ntawm tus yuam sij tseem ceeb.

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

Los xyuas kom meej cov ntaub ntawv sib xws, Cassandra siv pawg ntseeg mus kom ze. Hauv qhov yooj yim tshaj plaws, qhov no txhais tau hais tias thaum peb qhov kev hloov pauv ntawm tib kab tau muab tso rau ntawm qhov sib txawv ntawm cov pawg, kev sau ntawv suav tias ua tiav yog tias feem ntau ntawm cov nodes (uas yog, ob ntawm peb) tau lees paub qhov ua tiav ntawm qhov kev sau ntawv no. . Cov ntaub ntawv kab yog suav tias yog qhov sib xws yog tias, thaum nyeem ntawv, feem ntau ntawm cov nodes tau soj ntsuam thiab lees paub lawv. Yog li, nrog peb replicas, ua kom tiav thiab instant cov ntaub ntawv sib xws yog guaranteed yog ib tug node tsis. Txoj hauv kev no tau tso cai rau peb los ua ib qho kev ntseeg siab dua: ib txwm xa cov lus thov mus rau tag nrho peb qhov kev hloov pauv, tos cov lus teb los ntawm ob qhov ceev tshaj plaws. Cov lus teb lig ntawm qhov thib peb replica yog muab pov tseg hauv qhov no. Ib qho ntawm cov lus teb lig tuaj yeem muaj teeb meem loj - nres tsheb, khib nyiab pov tseg hauv JVM, kev cia siab ncaj qha rov qab rau hauv Linux ntsiav, kho vajtse tsis ua haujlwm, cuam tshuam los ntawm lub network. Txawm li cas los xij, qhov no tsis cuam tshuam rau tus neeg siv khoom lag luam lossis cov ntaub ntawv hauv txhua txoj kev.

Txoj hauv kev thaum peb hu peb lub nodes thiab tau txais cov lus teb los ntawm ob yog hu ua kev kwv yees: ib qho kev thov rau cov replicas ntxiv tau xa txawm tias ua ntej nws "poob tawm".

Lwm qhov txiaj ntsig ntawm Cassandra yog Batchlog, lub tshuab ua kom ntseeg tau tias ib pawg ntawm cov kev hloov pauv uas koj ua tau siv tag nrho lossis tsis siv txhua. Qhov no tso cai rau peb los daws A hauv ACID - atomicity tawm ntawm lub thawv.

Qhov ze tshaj plaws rau kev lag luam hauv Cassandra yog qhov hu ua "sib pauv hloov". Tab sis lawv nyob deb ntawm "qhov tseeb" ACID kev lag luam: qhov tseeb, qhov no yog lub sijhawm ua CAS ntawm cov ntaub ntawv los ntawm tsuas yog ib cov ntaub ntawv, siv kev pom zoo siv qhov hnyav Paxos raws tu qauv. Yog li ntawd, qhov ceev ntawm xws li kev lag luam yog tsawg.

Qhov peb tau ploj lawm hauv Cassandra

Yog li, peb yuav tsum tau siv cov kev hloov pauv ACID tiag tiag hauv Cassandra. Siv uas peb tuaj yeem siv tau yooj yim siv ob qho yooj yim ntawm classic DBMS: qhov ntsuas nrawm nrawm, uas yuav tso cai rau peb ua cov ntaub ntawv xaiv tsis yog los ntawm lub ntsiab tseem ceeb, thiab lub tshuab hluav taws xob tsis tu ncua ntawm monotonic auto-incrementing IDs.

C* ib

Yog li DBMS tshiab tau yug los C* ib, muaj peb hom server nodes:

  • Cia - (yuav luag) tus qauv Cassandra servers lub luag haujlwm rau khaws cov ntaub ntawv ntawm cov disks hauv zos. Raws li kev thauj khoom thiab ntim ntawm cov ntaub ntawv loj tuaj, lawv qhov ntau tuaj yeem yooj yim scaled rau kaum thiab pua.
  • Transaction coordinators - xyuas kom meej qhov kev ua tiav ntawm kev lag luam.
  • Cov neeg siv khoom yog cov ntawv thov servers uas siv cov haujlwm ua lag luam thiab pib ua lag luam. Yuav muaj ntau txhiab tus neeg siv khoom zoo li no.

NewSQL = NoSQL+ACID

Cov neeg rau zaub mov ntawm txhua hom yog ib feem ntawm pawg sib koom, siv cov lus Cassandra sab hauv los sib txuas lus nrog ib leeg thiab lus xaiv rau kev sib pauv ntaub ntawv pawg. Nrog Heartbeat, servers kawm txog kev sib nrig sib tsis ua haujlwm, tswj cov ntaub ntawv ib leeg - cov ntxhuav, lawv cov qauv thiab rov ua dua; partitioning scheme, pawg topology, thiab lwm yam.

Cov Neeg

NewSQL = NoSQL+ACID

Hloov cov qauv tsav tsheb, Fat Client hom siv. Xws li cov node tsis khaws cov ntaub ntawv, tab sis tuaj yeem ua tus tswj hwm kev thov ua tiav, uas yog, Client nws tus kheej ua tus tswj hwm ntawm nws qhov kev thov: nws nug cov ntaub ntawv khaws cia thiab daws teeb meem. Qhov no tsis yog tsuas yog txhim khu kev qha thiab nrawm dua li tus qauv tsav tsheb, uas yuav tsum muaj kev sib txuas lus nrog tus neeg saib xyuas chaw taws teeb, tab sis kuj tso cai rau koj los tswj kev sib kis ntawm kev thov. Sab nraud ntawm kev sib pauv qhib ntawm tus neeg siv khoom, cov lus thov raug xa mus rau qhov chaw khaws cia. Yog tias tus neeg siv khoom tau qhib qhov kev sib pauv, ces txhua qhov kev thov hauv kev sib pauv yuav raug xa mus rau tus neeg saib xyuas kev sib pauv.
NewSQL = NoSQL+ACID

C*One Transaction Coordinator

Tus neeg saib xyuas yog ib yam uas peb tau siv rau C * Ib qho los ntawm kos. Nws yog lub luag haujlwm rau kev tswj hwm kev lag luam, xauv, thiab qhov kev txiav txim uas siv cov kev hloov pauv.

Rau txhua qhov kev pabcuam kev pabcuam, tus neeg ua haujlwm pabcuam tsim lub sijhawm sijhawm: txhua qhov kev hloov pauv tom ntej yog ntau dua li qhov kev sib pauv dhau los. Txij li Cassandra qhov kev daws teeb meem tsis sib haum xeeb yog ua raws li lub sijhawm teev tseg (ntawm ob cov ntaub ntawv tsis sib haum xeeb, ib qho nrog cov ntawv teev sijhawm zaum kawg yog suav tias yog tam sim no), qhov kev tsis sib haum xeeb yuav raug daws los ntawm kev sib tw tom ntej. Yog li peb tau siv Lamport saib - ib txoj hauv kev pheej yig los daws qhov tsis sib haum xeeb hauv kev faib tawm.

Locks

Txhawm rau kom muaj kev sib cais, peb tau txiav txim siab siv txoj kev yooj yim tshaj plaws - pessimistic locks raws li tus yuam sij tseem ceeb ntawm cov ntaub ntawv. Hauv lwm lo lus, hauv kev lag luam, cov ntaub ntawv yuav tsum tau muab xauv ua ntej, tsuas yog tom qab ntawd nyeem, hloov kho, thiab khaws cia. Tsuas yog tom qab ua tiav kev ua tiav tuaj yeem kaw cov ntaub ntawv kom cov kev sib tw sib tw siv tau.

Kev ua raws li kev kaw haujlwm yog qhov yooj yim hauv qhov chaw tsis muaj kev faib tawm. Nyob rau hauv ib qho kev faib tawm, muaj ob txoj kev xaiv tseem ceeb: ob qho tib si siv faib xauv rau ntawm pawg, lossis faib cov kev lag luam kom cov kev lag luam uas muaj cov ntaub ntawv qub ib txwm muab kev pabcuam los ntawm tib tus neeg koom tes.

Txij li thaum peb cov ntaub ntawv twb tau muab faib rau hauv cov pab pawg ntawm kev lag luam hauv zos hauv SQL, nws tau txiav txim siab los muab cov pab pawg hauv zos rau cov neeg koom tes: ib tus neeg koom tes ua txhua yam kev lag luam nrog tokens ntawm 0 txog 9, qhov thib ob - nrog tokens ntawm 10 txog 19, thiab lwm yam. Yog li ntawd, txhua qhov kev sib koom ua ke tau dhau los ua tus tswv ntawm pawg kev sib pauv.

Tom qab ntawd cov xauv tuaj yeem siv tau hauv daim ntawv ntawm banal HashMap hauv lub cim xeeb ntawm tus neeg koom tes.

Coordinator ua tsis tiav

Txij li thaum ib tus neeg saib xyuas tshwj xeeb tsuas yog ua haujlwm rau pab pawg ntawm kev lag luam, nws tseem ceeb heev kom txiav txim siab sai sai rau qhov tseeb ntawm nws qhov tsis ua haujlwm kom qhov kev sim thib ob los ua qhov kev sib pauv yuav ncua sijhawm. Txhawm rau ua kom nrawm thiab txhim khu kev qha, peb siv cov txheej txheem sib txuas tag nrho ntawm pawg mloog pob ntseg:

Txhua lub chaw cov ntaub ntawv muaj tsawg kawg yog ob tus neeg koom tes ntawm cov nodes. Nyob rau tib lub sijhawm, txhua tus neeg koom tes xa xov lub plawv mus rau lwm tus neeg koom tes thiab qhia lawv txog nws txoj haujlwm, nrog rau cov xov xwm lub plawv uas nws tau txais los ntawm cov neeg koom tes hauv pawg neeg zaum kawg.

NewSQL = NoSQL+ACID

Tau txais cov ntaub ntawv zoo sib xws los ntawm lwm tus raws li ib feem ntawm lawv lub plawv dhia lus, txhua tus neeg koom tes txiav txim siab rau nws tus kheej uas pawg nodes ua haujlwm thiab qhov twg tsis yog, coj los ntawm pawg thawj coj hauv paus ntsiab lus: yog cov node X tau txais cov ntaub ntawv los ntawm feem ntau ntawm cov nodes hauv pawg txog qhov qub. tau txais cov lus los ntawm node Y, ces, Y ua haujlwm. Thiab vice versa, sai li sai tau raws li feem ntau tshaj tawm cov lus ploj lawm ntawm node Y, ces Y tau tsis kam. Nws yog qhov xav paub tias yog pawg ntseeg qhia rau ntawm X tias nws tsis tau txais cov lus los ntawm nws lawm, ces ntawm X nws tus kheej yuav txiav txim siab nws tus kheej ua tsis tiav.

Lub plawv dhia lus yog xa nrog lub siab zaus, kwv yees li 20 zaug hauv ib ob, nrog rau lub sijhawm ntawm 50 ms. Hauv Java, nws yog ib qho nyuaj rau lav daim ntawv thov teb nyob rau hauv 50 ms vim qhov sib piv ntev ntawm pauses tshwm sim los ntawm cov khib nyiab collector. Peb muaj peev xwm ua tiav lub sij hawm teb no siv G1 cov khoom khib nyiab, uas tso cai rau peb txheeb xyuas lub hom phiaj rau lub sijhawm ntawm GC ncua. Txawm li cas los xij, qee zaum, tsis tshua muaj, tus neeg khaws khoom nres ntau dua 50 ms, uas tuaj yeem ua rau pom qhov tsis raug. Txhawm rau tiv thaiv qhov no los ntawm qhov tshwm sim, tus neeg saib xyuas tsis tau tshaj tawm qhov tsis ua haujlwm ntawm lub chaw taws teeb ntawm lub plawv thaum thawj lub plawv dhia lus los ntawm nws ploj mus, tsuas yog ob peb tau ploj mus ua ke.Qhov no yog qhov peb tau tswj xyuas qhov tsis ua haujlwm ntawm tus tswj hwm ntawm 200. ms.

Tab sis nws tsis txaus kom nkag siab sai sai uas cov node tau tso tseg tsis ua haujlwm. Peb yuav tsum ua ib yam dab tsi txog qhov no.

Kev tshwj tseg

Cov txheej txheem classic suav nrog, nyob rau hauv qhov xwm txheej ntawm tus tswv tsis ua haujlwm, pib kev xaiv tsa tshiab siv ib qho ntawm zam universal algorithms. Txawm li cas los xij, xws li algorithms muaj cov teeb meem paub zoo nrog lub sij hawm sib koom ua ke thiab qhov ntev ntawm txoj kev xaiv tsa nws tus kheej. Peb muaj peev xwm zam kom tsis txhob muaj qhov ncua sij hawm ntxiv uas siv cov txheej txheem hloov pauv tus tswj hwm hauv lub network txuas tag nrho:

NewSQL = NoSQL+ACID

Cia peb hais tias peb xav ua kom tiav kev lag luam hauv pab pawg 50. Cia peb txiav txim siab ua ntej lub tswv yim hloov pauv, uas yog, cov nodes yuav ua tiav kev lag luam hauv pab pawg 50 nyob rau hauv qhov xwm txheej ntawm qhov ua tsis tiav ntawm tus thawj tswj hwm. Peb lub hom phiaj yog los tswj cov kev ua haujlwm hauv qhov xwm txheej ntawm cov ntaub ntawv chaw tsis ua haujlwm. Cia peb txiav txim siab tias thawj qhov tshwj xeeb yuav yog ib qho ntawm lwm qhov chaw khaws ntaub ntawv, thiab qhov thib ob cia yuav yog ib qho ntawm peb. Cov tswv yim no raug xaiv ib zaug thiab tsis hloov mus txog thaum lub topology ntawm pawg hloov pauv, uas yog, kom txog thaum cov nodes tshiab nkag mus rau nws (uas tshwm sim tsis tshua muaj). Cov txheej txheem rau kev xaiv tus tswv tshiab yog tias tus qub tsis ua haujlwm yuav ib txwm ua raws li hauv qab no: thawj qhov tshwj xeeb yuav dhau los ua tus tswv haujlwm, thiab yog tias nws tau tso tseg tsis ua haujlwm, qhov thib ob cia yuav dhau los ua tus tswv haujlwm.

Cov tswv yim no yog qhov txhim khu kev qha ntau dua li cov algorithm universal, txij li kom qhib tus tswv tshiab nws txaus los txiav txim siab qhov tsis ua tiav ntawm qhov qub.

Tab sis cov neeg siv yuav nkag siab li cas tus tswv ua haujlwm tam sim no? Nws tsis tuaj yeem xa cov ntaub ntawv rau ntau txhiab tus neeg siv khoom hauv 50 ms. Ib qho xwm txheej tuaj yeem ua tau thaum tus neeg siv khoom xa daim ntawv thov qhib kev lag luam, tseem tsis tau paub tias tus tswv no tsis ua haujlwm lawm, thiab qhov kev thov yuav dhau sijhawm. Txhawm rau tiv thaiv qhov no los ntawm qhov tshwm sim, cov neeg siv khoom xav tau xa daim ntawv thov qhib kev lag luam rau pawg tswv thiab ob qho tib si ntawm nws cov peev txheej ib zaug, tab sis tsuas yog tus uas yog tus tswv haujlwm tam sim no yuav teb rau qhov kev thov no. Tus neeg siv yuav ua txhua qhov kev sib txuas lus tom ntej hauv kev sib pauv tsuas yog nrog tus tswv nquag.

Backup masters qhov chaw tau txais kev thov rau kev lag luam uas tsis yog lawv li rau hauv cov kab ntawm cov kev lag luam hauv plab, qhov twg lawv tau khaws cia rau qee lub sijhawm. Yog tias tus tswv nquag tuag, tus tswv tshiab thov kom qhib kev lag luam los ntawm nws cov kab thiab teb rau tus neeg siv khoom. Yog tias tus neeg siv khoom twb tau qhib kev lag luam nrog tus tswv qub, ces cov lus teb thib ob tsis quav ntsej (thiab, pom tseeb, xws li kev lag luam yuav tsis ua tiav thiab yuav rov qab los ntawm tus neeg siv khoom).

Yuav ua li cas kev lag luam ua haujlwm

Cia peb hais tias tus neeg siv khoom tau xa ib daim ntawv thov mus rau tus neeg saib xyuas kom qhib kev sib pauv rau xws li thiab ib qho chaw nrog xws li thiab qhov tseem ceeb. Tus neeg saib xyuas kaw qhov chaw no thiab muab tso rau hauv lub rooj xauv lub cim xeeb. Yog tias tsim nyog, tus neeg koom tes nyeem qhov chaw no los ntawm kev khaws cia thiab khaws cov ntaub ntawv tshwm sim hauv lub xeev kev hloov pauv hauv tus tswj hwm lub cim xeeb.

NewSQL = NoSQL+ACID

Thaum tus neeg siv khoom xav hloov cov ntaub ntawv hauv kev sib pauv, nws xa ib daim ntawv thov mus rau tus neeg saib xyuas kom hloov kho qhov chaw, thiab tus neeg saib xyuas muab cov ntaub ntawv tshiab tso rau hauv cov lus sib pauv hauv lub cim xeeb. Qhov no ua kom tiav cov ntaubntawv povthawj siv - tsis muaj cov ntaubntawv povthawj siv rau qhov chaw cia.

NewSQL = NoSQL+ACID

Thaum tus neeg siv khoom thov nws tus kheej cov ntaub ntawv hloov pauv raws li ib feem ntawm kev lag luam nquag, tus neeg koom tes ua raws li hauv qab no:

  • Yog hais tias tus ID yog twb nyob rau hauv kev sib pauv, ces cov ntaub ntawv yog muab los ntawm lub cim xeeb;
  • Yog tias tsis muaj ID hauv lub cim xeeb, ces cov ntaub ntawv uas ploj lawm yog nyeem los ntawm cov chaw khaws cia, ua ke nrog cov uas twb muaj nyob hauv lub cim xeeb, thiab cov txiaj ntsig tau muab rau tus neeg siv khoom.

Yog li, tus neeg siv tuaj yeem nyeem nws tus kheej cov kev hloov pauv, tab sis lwm tus neeg siv khoom tsis pom cov kev hloov pauv no, vim tias lawv tsuas yog khaws cia hauv lub cim xeeb ntawm tus neeg koom tes; lawv tseem tsis tau nyob hauv Cassandra nodes.

NewSQL = NoSQL+ACID

Thaum tus neeg siv khoom xa tuaj, lub xeev uas nyob rau hauv qhov kev pab cuam lub cim xeeb tau txais kev cawmdim los ntawm tus neeg saib xyuas hauv ib pawg uas tau teev tseg, thiab raug xa mus ua ib pawg nkag mus rau Cassandra cia. Cov khw muag khoom ua txhua yam tsim nyog los xyuas kom meej tias cov pob no yog atomically (tag nrho) thov, thiab xa cov lus teb rau tus neeg koom tes, uas tso cov xauv thiab lees paub qhov ua tiav ntawm kev sib pauv rau tus neeg siv khoom.

NewSQL = NoSQL+ACID

Thiab rau rollback, tus neeg saib xyuas tsuas yog yuav tsum tau tso tseg lub cim xeeb nyob hauv lub xeev kev lag luam.

Raws li qhov txiaj ntsig ntawm kev txhim kho saum toj no, peb tau siv ACID cov hauv paus ntsiab lus:

  • Atomicity. Qhov no yog ib qho kev lees paub tias tsis muaj kev hloov pauv yuav raug kaw ib nrab hauv qhov system; txawm tias tag nrho nws cov haujlwm suboperations yuav ua tiav, lossis tsis muaj ib qho yuav ua tiav. Peb ua raws li txoj cai no los ntawm kev nkag mus rau hauv Cassandra.
  • Kev sib raug zoo. Txhua qhov kev lag luam ua tiav, los ntawm kev txhais, cov ntaub ntawv tsuas yog siv tau. Yog tias, tom qab qhib kev sib pauv thiab ua ib feem ntawm kev ua haujlwm, nws pom tias qhov tshwm sim tsis raug, qhov rov qab ua tiav.
  • Muab cais nyob ib leeg. Thaum kev ua lag luam raug ua tiav, kev sib koom ua ke yuav tsum tsis txhob cuam tshuam nws cov txiaj ntsig. Kev sib tw kev lag luam raug cais los ntawm kev siv lub ntsuas pim tsis zoo ntawm tus neeg koom tes. Rau kev nyeem sab nraud ntawm kev sib pauv, txoj cai cais tawm yog pom ntawm qib Read Committed.
  • Sustainability. Txawm hais tias muaj teeb meem nyob rau theem qis - qhov system blackout, kho vajtse tsis ua haujlwm - kev hloov pauv los ntawm kev ua tiav tiav yuav tsum tau khaws cia thaum ua haujlwm rov pib dua.

Nyeem los ntawm indexes

Wb coj ib lub rooj yooj yim:

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

Nws muaj tus ID (tus yuam sij tseem ceeb), tus tswv thiab hnub hloov kho. Koj yuav tsum ua qhov kev thov yooj yim heev - xaiv cov ntaub ntawv ntawm tus tswv nrog rau hnub hloov "rau hnub kawg".

SELECT *
WHERE owner=?
AND modified>?

Txhawm rau kom cov lus nug zoo li no tau ua tiav sai, hauv SQL DBMS classic koj yuav tsum tsim qhov ntsuas los ntawm txhua kab (tus tswv, hloov kho). Peb tuaj yeem ua qhov no yooj yim heev, txij li tam sim no peb muaj ACID lav!

Index hauv C * Ib

Muaj ib lub rooj nrog cov duab uas cov ntaub ntawv ID yog tus yuam sij tseem ceeb.

NewSQL = NoSQL+ACID

Rau qhov ntsuas, C * Ib qho tsim ib lub rooj tshiab uas yog ib daim qauv ntawm tus thawj. Tus yuam sij yog tib yam li qhov kev qhia qhia, thiab nws kuj suav nrog tus yuam sij tseem ceeb ntawm cov ntaub ntawv los ntawm cov lus hauv qab no:

NewSQL = NoSQL+ACID

Tam sim no cov lus nug rau "tus tswv rau hnub kawg" tuaj yeem sau dua tshiab raws li kev xaiv los ntawm lwm lub rooj:

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

Qhov sib xws ntawm cov ntaub ntawv nyob rau hauv lub hauv paus cov duab duab thiab qhov Performance index rooj i1 yog khaws cia cia los ntawm tus coordinator. Raws li cov ntaub ntawv schema ib leeg, thaum qhov kev hloov pauv tau txais, tus neeg koom tes tsim thiab khaws cov kev hloov pauv tsis yog hauv cov lus tseem ceeb xwb, tab sis kuj muaj cov ntawv luam. Tsis muaj kev nqis tes ua ntxiv rau ntawm lub rooj ntsuas ntsuas, cov ntawv teev lus tsis tau nyeem, thiab tsis siv lub ntsuas phoo. Ntawd yog, ntxiv indexes siv yuav luag tsis muaj peev txheej thiab tsis muaj kev cuam tshuam rau kev ceev ntawm kev hloov kho.

Siv ACID, peb tuaj yeem siv SQL-zoo li indexes. Lawv zoo ib yam, scalable, ceev, composable, thiab ua rau hauv CQL lus nug. Tsis muaj kev hloov pauv rau daim ntawv thov code yuav tsum tau txhawb nqa indexes. Txhua yam yooj yim li hauv SQL. Thiab qhov tseem ceeb tshaj plaws, indexes tsis cuam tshuam rau kev ua haujlwm ceev ntawm kev hloov kho rau thawj lub rooj sib pauv.

Ua li cas

Peb tsim C * Ib qho peb xyoos dhau los thiab tau pib ua lag luam.

Peb tau txais dab tsi thaum kawg? Cia peb ntsuas qhov no siv cov piv txwv ntawm kev ua cov duab thiab kev khaws cia, ib qho ntawm cov ntaub ntawv tseem ceeb tshaj plaws hauv kev sib raug zoo. Peb tsis tau tham txog lub cev ntawm cov duab lawv tus kheej, tab sis hais txog txhua yam ntawm cov ntaub ntawv meta. Tam sim no Odnoklassniki muaj txog 20 billion li cov ntaub ntawv, cov txheej txheem ua haujlwm 80 txhiab nyeem ntawv thov ib ob, mus txog 8 txhiab ACID kev hloov pauv ib thib ob cuam tshuam nrog cov ntaub ntawv hloov kho.

Thaum peb siv SQL nrog replication factor = 1 (tab sis nyob rau hauv RAID 10), cov duab metainformation tau khaws cia rau ntawm ib pawg muaj ntau ntawm 32 lub tshuab khiav Microsoft SQL Server (ntxiv rau 11 thaub qab). 10 servers kuj tau muab faib rau khaws cia thaub qab. Tag nrho ntawm 50 lub tsheb kim. Nyob rau tib lub sijhawm, lub kaw lus ua haujlwm ntawm qhov ntsuas load, tsis muaj cia.

Tom qab tsiv mus rau qhov system tshiab, peb tau txais replication factor = 3 - ib daim ntawv luam nyob rau hauv txhua qhov chaw cov ntaub ntawv. Lub kaw lus muaj 63 Cassandra cia nodes thiab 6 coordinator tshuab, rau tag nrho ntawm 69 servers. Tab sis cov tshuab no pheej yig dua, lawv cov nqi tag nrho yog kwv yees li 30% ntawm tus nqi ntawm SQL system. Nyob rau tib lub sijhawm, lub load yog khaws cia ntawm 30%.

Nrog rau kev qhia txog C * Ib qho, latency kuj txo qis: hauv SQL, kev sau ntawv tau siv li 4,5 ms. Hauv C * Ib - txog 1,6 ms. Lub sijhawm ua lag luam yog qhov nruab nrab tsawg dua 40 ms, qhov kev cog lus tiav hauv 2 ms, lub sijhawm nyeem thiab sau ntawv yog qhov nruab nrab 2 ms. 99th feem pua ​​- tsuas yog 3-3,1 ms, tus naj npawb ntawm lub sij hawm tau txo los ntawm 100 zaug - tag nrho vim yog siv dav dav ntawm kev xav.

Txog tam sim no, feem ntau ntawm SQL Server nodes tau decommissioned; cov khoom tshiab tau tsim tsuas yog siv C * Ib. Peb hloov C * Ib qho los ua haujlwm hauv peb huab ib huab, uas ua rau nws muaj peev xwm ua kom ceev cov kev xa tawm ntawm pawg tshiab, ua kom yooj yim teeb tsa thiab ua haujlwm ua haujlwm. Yog tsis muaj lub hauv paus code, ua qhov no yuav nyuaj dua thiab cumbersome.

Tam sim no peb tab tom ua haujlwm ntawm kev hloov pauv peb lwm qhov chaw khaws cia rau huab - tab sis qhov ntawd yog ib zaj dab neeg sib txawv kiag li.

Tau qhov twg los: www.hab.com

Ntxiv ib saib