HighLoad++, Yuri Nasretdinov (VKontakte): ki jan VK mete done nan ClickHouse soti nan plizyè dizèn de milye de sèvè

HighLoad++ Moskou 2018, Sal Kongrè a. 9 Novanm, 15:00

Rezime ak prezantasyon: http://www.highload.ru/moscow/2018/abstracts/4066

Yuri Nasretdinov (VKontakte): rapò a pral pale sou eksperyans nan aplike ClickHouse nan konpayi nou an - poukisa nou bezwen li, konbyen done nou estoke, ki jan nou ekri li, ak sou sa.

HighLoad++, Yuri Nasretdinov (VKontakte): ki jan VK mete done nan ClickHouse soti nan plizyè dizèn de milye de sèvè

Lòt materyèl: lè l sèvi avèk Clickhouse kòm yon ranplasman pou ELK, Big Query ak TimescaleDB

Youri Nasretdinov: - Bonjou tout moun! Non mwen se Yuri Nasretdinov, jan mwen te deja prezante. Mwen travay nan VKontakte. Mwen pral pale sou fason nou mete done nan ClickHouse nan flòt sèvè nou an (dè dizèn de milye).

Ki sa ki mòso bwa ak poukisa kolekte yo?

Ki sa nou pral di ou: sa nou te fè, poukisa nou te bezwen "ClickHouse", respektivman, poukisa nou te chwazi li, ki kalite pèfòmans ou ka apeprè jwenn san yo pa konfigirasyon anyen espesyalman. Mwen pral di w plis sou tab tanpon, sou pwoblèm nou te genyen ak yo ak sou solisyon nou yo ke nou devlope nan sous louvri - KittenHouse ak Lighthouse.

HighLoad++, Yuri Nasretdinov (VKontakte): ki jan VK mete done nan ClickHouse soti nan plizyè dizèn de milye de sèvè

Poukisa nou te bezwen fè anyen ditou (tout bagay toujou bon sou VKontakte, pa vre?). Nou te vle kolekte mòso bwa debug (e te gen dè santèn de teraocte nan done la), petèt yon jan kanmenm li ta pi pratik yo kalkile estatistik; epi nou gen yon flòt de dizèn de milye de sèvè ki soti nan ki tout sa a bezwen fè.

HighLoad++, Yuri Nasretdinov (VKontakte): ki jan VK mete done nan ClickHouse soti nan plizyè dizèn de milye de sèvè

Poukisa nou te deside? Nou pwobableman te gen solisyon pou estoke mòso bwa. Isit la - gen tankou yon piblik "Backend VK". Mwen rekòmande anpil abònman ak li.

HighLoad++, Yuri Nasretdinov (VKontakte): ki jan VK mete done nan ClickHouse soti nan plizyè dizèn de milye de sèvè

Ki sa ki mòso bwa? Sa a se yon motè ki retounen ranje vid. Motè nan VK se sa lòt moun rele microservices. Ak isit la nan yon fich souri (byen yon anpil nan renmen). Kòman sa? Oke, koute pi lwen!

HighLoad++, Yuri Nasretdinov (VKontakte): ki jan VK mete done nan ClickHouse soti nan plizyè dizèn de milye de sèvè

Ki sa ki ka itilize pou estoke mòso bwa? Li enposib pou nou pa mansyone Hadup. Lè sa a, pou egzanp, Rsyslog (estoke mòso bwa sa yo nan dosye). LSD. Ki moun ki konnen ki sa LSD ye? Non, pa LSD sa a. Sere dosye, respektivman, tou. Oke, ClickHouse se yon opsyon etranj.

Clickhouse ak konpetitè: kondisyon ak opòtinite

Kisa nou vle? Nou vle asire ke nou pa bezwen enkyete twòp sou operasyon an, pou ke li travay soti nan bwat la, de preferans ak konfigirasyon minim. Nou vle ekri anpil, epi ekri byen vit. Epi nou vle kenbe li pou tout kalite mwa, ane, se sa ki, pou yon tan long. Nou ka vle konprann kèk pwoblèm ke yo te vin jwenn nou ak di, "Yon bagay ki pa travay isit la," e sa te 3 mwa de sa), epi nou vle kapab wè sa ki te pase 3 mwa de sa " Done konpresyon - li klè poukisa li ta yon plis - paske li diminye kantite espas li pran.

HighLoad++, Yuri Nasretdinov (VKontakte): ki jan VK mete done nan ClickHouse soti nan plizyè dizèn de milye de sèvè

Epi nou gen tankou yon egzijans enteresan: nou pafwa ekri pwodiksyon an nan kèk kòmandman (pa egzanp, mòso bwa), li ka plis pase 4 kilobyte byen fasil. Men, si bagay sa a travay sou UDP, Lè sa a, li pa bezwen depanse ... li pa pral gen okenn "sou tèt" pou koneksyon an, ak pou yon gwo kantite serveurs sa a pral yon plis.

HighLoad++, Yuri Nasretdinov (VKontakte): ki jan VK mete done nan ClickHouse soti nan plizyè dizèn de milye de sèvè

Ann wè sa sous louvri ofri nou. Premyèman, nou gen Logs Engine - sa a se motè nou an; Nan prensip, li ka fè tout bagay, li ka menm ekri liy long. Oke, li pa transparan konprese done - nou ka konprese gwo kolòn tèt nou si nou vle ... nou, nan kou, pa vle (si sa posib). Sèl pwoblèm nan se ke li ka bay sèlman sa ki anfòm nan memwa li; Pou li rès la, ou bezwen jwenn binlog motè sa a epi, kòmsadwa, li pran yon bon bout tan.

HighLoad++, Yuri Nasretdinov (VKontakte): ki jan VK mete done nan ClickHouse soti nan plizyè dizèn de milye de sèvè

Ki lòt opsyon ki genyen? Pou egzanp, "Hadup". Fasilite operasyon... Ki moun ki panse ke Hadup fasil pou mete sou pye? Natirèlman, pa gen okenn pwoblèm ak anrejistreman an. Lè lekti, kesyon pafwa leve. Nan prensip, mwen ta di pwobableman pa, espesyalman pou mòso bwa. Depo alontèm - nan kou, wi, konpresyon done - wi, strings long - li klè ke ou ka anrejistre. Men, anrejistreman nan yon gwo kantite serveurs... Ou toujou gen pou fè yon bagay tèt ou!

Rsyslog. An reyalite, nou te itilize li kòm yon opsyon backup pou nou te kapab li li san yo pa jete binlog la, men li pa ka ekri liy long; an prensip, li pa ka ekri plis pase 4 kilobyte. Ou dwe fè konpresyon done nan menm fason an tèt ou. Lekti ap soti nan dosye.

HighLoad++, Yuri Nasretdinov (VKontakte): ki jan VK mete done nan ClickHouse soti nan plizyè dizèn de milye de sèvè

Lè sa a, gen devlopman "badushka" nan LSD. Esansyèlman menm jan ak "Rsyslog": li sipòte strings long, men li pa ka travay atravè UDP epi, an reyalite, akòz sa a, malerezman, byen yon anpil nan bagay yo bezwen reekri la. LSD bezwen reamenaje pou kapab anrejistre nan plizyè dizèn de milye de serveurs.

HighLoad++, Yuri Nasretdinov (VKontakte): ki jan VK mete done nan ClickHouse soti nan plizyè dizèn de milye de sèvè

Ak isit la! Yon opsyon komik se ElasticSearch. Ki jan yo di? Li fè byen ak lekti, sa vle di, li byen vit, men li pa trè byen ak ekri. Premyèman, si li konprese done, li trè fèb. Gen plis chans, yon rechèch konplè mande pou pi gwo estrikti done pase volim orijinal la. Li difisil pou opere ak pwoblèm souvan rive ak li. Epi, ankò, anrejistreman nan elastik - nou dwe fè tout bagay tèt nou.

HighLoad++, Yuri Nasretdinov (VKontakte): ki jan VK mete done nan ClickHouse soti nan plizyè dizèn de milye de sèvè

Isit la ClickHouse se yon opsyon ideyal, nan kou. Bagay la sèlman se ke anrejistreman soti nan dè dizèn de milye de serveurs se yon pwoblèm. Men, omwen gen yon pwoblèm, nou ka eseye rezoud li yon jan kanmenm. E rès rapò a se sou pwoblèm sa a. Ki kalite pèfòmans ou ka atann de ClickHouse?

Ki jan nou pral mete l? MergeTree

Kiyès nan nou ki pa tande oswa konnen sou "ClickHouse"? Mwen bezwen di ou, pa vre? Trè vit. Ensèsyon an la - 1-2 gigabit pou chak segonn, eklat ki rive jiska 10 gigabit pou chak segonn ka aktyèlman kenbe tèt ak konfigirasyon sa a - gen de Xeons 6-nwayo (ki se, pa menm pi pwisan an), 256 gigabit RAM, 20 terabytes. nan RAID (pèsonn pa configuré, paramèt default). Alexey Milovidov, devlopè ClickHouse, pwobableman chita la ap kriye paske nou pa t 'konfigirasyon anyen (tout bagay te travay konsa pou nou). An konsekans, yon vitès optik nan, di, apeprè 6 milya liy pou chak segonn ka jwenn si done yo byen konprese. Si ou renmen % sou yon fisèl tèks - 100 milyon liy pa segonn, se sa ki, li sanble byen vit.

HighLoad++, Yuri Nasretdinov (VKontakte): ki jan VK mete done nan ClickHouse soti nan plizyè dizèn de milye de sèvè

Ki jan nou pral mete l? Oke, ou konnen ke VK itilize PHP. Nou pral mete soti nan chak travayè PHP atravè HTTP nan "ClickHouse", nan tablo MergeTree pou chak dosye. Lekel ki vwar en problenm avek sa scheme? Pou kèk rezon, se pa tout moun ki leve men yo. Kite m di w.

Premyèman, gen yon anpil nan serveurs - kòmsadwa, pral gen yon anpil nan koneksyon (move). Lè sa a, li pi bon pou mete done nan MergeTree pa pi souvan pase yon fwa pa segonn. Ak ki moun ki konnen poukisa? Oke, oke. Mwen pral di w yon ti kras plis sou sa a. Yon lòt kesyon enteresan an se ke nou pa fè analiz, nou pa bezwen anrichi done yo, nou pa bezwen sèvè entèmedyè, nou vle mete dirèkteman nan "ClickHouse" (de preferans - plis dirèkteman, pi bon an).

HighLoad++, Yuri Nasretdinov (VKontakte): ki jan VK mete done nan ClickHouse soti nan plizyè dizèn de milye de sèvè

An konsekans, ki jan yo fè ensèsyon nan MergeTree? Poukisa li pi bon pou mete nan li pa pi souvan pase yon fwa yon dezyèm oswa mwens souvan? Reyalite a se ke "ClickHouse" se yon baz done kolòn ak klasman done yo nan lòd monte nan kle prensipal la, epi lè ou fè yon insert, yo kreye yon kantite fichye omwen egal a kantite kolòn kote done yo klase. nan lòd monte nan kle prensipal la (yo kreye yon anyè separe, yon seri dosye sou disk pou chak insert). Lè sa a, pwochen ensèsyon an vini, ak nan background nan yo konbine nan pi gwo "partisyon". Depi done yo klase, li posib pou "fizyone" de dosye klase san yo pa konsome anpil memwa.

Men, jan ou ta ka devine, si ou ekri 10 fichye pou chak insert, Lè sa a, ClickHouse (oswa sèvè ou a) pral byen vit fini, kidonk li rekòmande pou mete nan pakèt gwo. An konsekans, nou pa janm te lanse premye konplo a nan pwodiksyon. Nou imedyatman te lanse youn, ki isit la nimewo 2 gen:

HighLoad++, Yuri Nasretdinov (VKontakte): ki jan VK mete done nan ClickHouse soti nan plizyè dizèn de milye de sèvè

Isit la imajine ke gen apeprè mil serveurs sou ki nou te lanse, gen jis PHP. Ak sou chak sèvè gen ajan lokal nou an, ke nou rele "Kittenhouse", ki kenbe yon sèl koneksyon ak "ClickHouse" ak foure done chak kèk segonn. Antre done pa nan MergeTree, men nan yon tab tanpon, ki sèvi jisteman pou evite mete dirèkteman nan MergeTree touswit.

HighLoad++, Yuri Nasretdinov (VKontakte): ki jan VK mete done nan ClickHouse soti nan plizyè dizèn de milye de sèvè

Travay ak tab tanpon

Ki sa li ye? Tablo tanpon yo se yon moso memwa ki sharded (ki vle di, li ka antre nan li souvan). Yo konpoze de plizyè moso, epi chak moso yo travay kòm yon tanpon endepandan, epi yo koule poukont yo (si ou gen anpil moso nan tanpon an, Lè sa a, pral gen anpil foure pou chak segonn). Li posib pou li nan tab sa yo - Lè sa a, ou li inyon an nan sa ki nan tanpon an ak tab la paran, men nan moman sa a ekri a bloke, kidonk li se pi bon pa li soti nan la. Ak tab tanpon yo montre trè bon QPS, se sa ki, jiska 3 mil QPS ou pa pral gen okenn pwoblèm ditou lè w ap mete. Li klè ke si sèvè a pèdi pouvwa, Lè sa a, done yo ka pèdi, paske li te sèlman ki estoke nan memwa.

HighLoad++, Yuri Nasretdinov (VKontakte): ki jan VK mete done nan ClickHouse soti nan plizyè dizèn de milye de sèvè

An menm tan an, konplo a ak yon tanpon konplike ALTER, paske ou premye bezwen lage ansyen tab tanpon ak ansyen konplo a (done yo pa pral disparèt nenpòt kote, paske li pral vide anvan tab la efase). Lè sa a, ou "chanje" tab ou bezwen an epi kreye tab tanpon an ankò. An konsekans, pandan ke pa gen okenn tab tanpon, done ou yo pa pral koule nenpòt kote, men ou ka genyen li sou disk omwen lokalman.

HighLoad++, Yuri Nasretdinov (VKontakte): ki jan VK mete done nan ClickHouse soti nan plizyè dizèn de milye de sèvè

Ki sa ki Kittenhouse ak ki jan li fonksyone?

Ki sa ki KittenHouse? Sa a se yon prokurasyon. Devine ki lang? Mwen kolekte sijè ki pi battage nan rapò mwen an - "Clickhouse", Ale, petèt mwen pral sonje yon lòt bagay. Wi, sa ekri nan Go, paske mwen pa vrèman konnen ki jan yo ekri nan C, mwen pa vle.

HighLoad++, Yuri Nasretdinov (VKontakte): ki jan VK mete done nan ClickHouse soti nan plizyè dizèn de milye de sèvè

An konsekans, li kenbe yon koneksyon ak chak sèvè epi li ka ekri nan memwa. Pou egzanp, si nou ekri mòso bwa erè nan Clickhouse, Lè sa a, si Clickhouse pa gen tan mete done (apre tout, si yo ekri twòp), Lè sa a, nou pa anfle memwa a - nou tou senpleman jete rès la. Paske si nou ekri plizyè gigabit pa segonn nan erè, Lè sa a, nou ka pwobableman jete kèk deyò. Kittenhouse ka fè sa. Anplis de sa, li ka fè livrezon serye, se sa ki ekri sou disk sou machin lokal la ak yon fwa chak fwa (gen, yon fwa chak de segonn) li eseye delivre done ki soti nan dosye sa a. E nan premye nou te itilize fòma Valè regilye yo - pa kèk fòma binè, yon fòma tèks (tankou nan SQL regilye).

HighLoad++, Yuri Nasretdinov (VKontakte): ki jan VK mete done nan ClickHouse soti nan plizyè dizèn de milye de sèvè

Men, Lè sa a, sa a te rive. Nou te itilize livrezon serye, ekri mòso bwa, Lè sa a, deside (se te yon gwoup tès kondisyonèl) ... Li te mete deyò pou plizyè èdtan epi yo te pote tounen moute, ak yon ensèsyon te kòmanse soti nan yon mil sèvè - li te tounen soti ke Clickhouse toujou te gen yon "Thread sou koneksyon" - kòmsadwa, nan mil koneksyon, yon ensèsyon aktif mennen nan yon mwayèn chaj sou sèvè a apeprè mil ak yon mwatye. Surprenante, sèvè a te aksepte demann, men done yo te toujou antre apre kèk tan; men li te trè difisil pou sèvè a sèvi li...

Ajoute nginx

Yon solisyon konsa pou Thread pou chak modèl koneksyon se nginx. Nou enstale nginx devan Clickhouse, an menm tan mete balans pou de kopi (vitès insert nou an ogmante de fwa, byenke se pa yon reyalite ke sa a ta dwe ka a) ak limite kantite koneksyon ak Clickhouse, nan la. en ak, kòmsadwa, plis pase nan 2 koneksyon, li sanble pa gen okenn pwen nan mete.

HighLoad++, Yuri Nasretdinov (VKontakte): ki jan VK mete done nan ClickHouse soti nan plizyè dizèn de milye de sèvè

Lè sa a, nou reyalize ke konplo sa a jeneralman gen dezavantaj, paske nou gen sèlman yon sèl nginx isit la. An konsekans, si nginx sa a aksidan, malgre prezans nan kopi, nou pèdi done oswa, omwen, pa ekri nenpòt kote. Se poutèt sa nou te fè pwòp balans chaj nou an. Nou menm tou nou reyalize ke "Clickhouse" toujou apwopriye pou mòso bwa, ak "demon an" tou te kòmanse ekri mòso bwa li nan "Clickhouse" - trè pratik, yo dwe onèt. Nou toujou sèvi ak li pou lòt "demon".

HighLoad++, Yuri Nasretdinov (VKontakte): ki jan VK mete done nan ClickHouse soti nan plizyè dizèn de milye de sèvè

Lè sa a, nou dekouvri pwoblèm sa a enteresan: si ou itilize yon metòd ki pa estanda pou mete nan mòd SQL, li fòse yon analizeur SQL ki baze sou AST, ki se byen dousman. An konsekans, nou te ajoute anviwònman asire ke sa a pa janm rive. Nou te fè balans chaj, chèk sante, pou ke si yon moun mouri, nou toujou kite done yo. Kounye a nou gen anpil tab ke nou bezwen gen diferan gwoup Clickhouse. Epi nou menm tou nou te kòmanse panse sou lòt itilizasyon - pou egzanp, nou te vle ekri mòso bwa nan modil nginx, men yo pa konnen ki jan yo kominike lè l sèvi avèk RPC nou an. Oke, mwen ta renmen anseye yo ki jan yo voye omwen yon jan kanmenm - pou egzanp, yo resevwa evènman sou localhost atravè UDP epi answit voye yo bay Clickhouse.

Yon etap lwen solisyon an

Konplo final la te kòmanse sanble sa a (katriyèm vèsyon an nan konplo sa a): sou chak sèvè devan Clickhouse gen nginx (sou sèvè a menm) ak tou senpleman proxy demann nan localhost ak yon limit sou kantite koneksyon 50 moso. . Ak konplo sa a te deja byen travay, tout bagay te trè bon ak li.

HighLoad++, Yuri Nasretdinov (VKontakte): ki jan VK mete done nan ClickHouse soti nan plizyè dizèn de milye de sèvè

Nou te viv konsa pou apeprè yon mwa. Tout moun te kontan, yo te ajoute tab, yo te ajoute, yo te ajoute... An jeneral, li te tounen soti ke fason nou te ajoute tab tanpon an pa te trè optimal (an nou mete li konsa). Nou te fè 16 moso nan chak tab ak yon entèval flash nan yon koup la segonn; nou te gen 20 tab ak chak tab te resevwa 8 foure pou chak segonn - ak nan pwen sa a "Clickhouse" te kòmanse ... dosye yo te kòmanse ralanti. Yo pa t 'menm ale nan ... Nginx pa default te gen yon bagay konsa enteresan ke si koneksyon te fini nan en an, Lè sa a, li tou senpleman retounen "502" nan tout nouvo demann.

HighLoad++, Yuri Nasretdinov (VKontakte): ki jan VK mete done nan ClickHouse soti nan plizyè dizèn de milye de sèvè

Ak isit la nou gen (mwen jis gade mòso bwa yo nan Clickhouse tèt li) apeprè mwatye yon pousan nan demann echwe. An konsekans, itilizasyon disk te wo, te gen yon anpil nan fusions. Bon, kisa mwen te fè? Natirèlman, mwen pa t 'anmède konnen poukisa egzakteman koneksyon an ak en te fini.

Ranplase nginx ak yon prokurasyon ranvèse

Mwen deside ke nou bezwen jere sa a tèt nou, nou pa bezwen kite li nan nginx - nginx pa konnen ki tab ki genyen nan Clickhouse, epi mwen ranplase nginx ak yon prokurasyon ranvèse, ki mwen menm mwen te ekri.

HighLoad++, Yuri Nasretdinov (VKontakte): ki jan VK mete done nan ClickHouse soti nan plizyè dizèn de milye de sèvè

Ki sa l ap fè? Li travay ki baze sou fasthttp bibliyotèk "goshnoy", se sa ki, vit, prèske osi vit ke nginx. Padon, Igor, si ou prezan isit la (nòt: Igor Sysoev se yon pwogramè Ris ki te kreye sèvè entènèt nginx la). Li ka konprann ki kalite demann sa yo - INSERT oswa SELECT - kòmsadwa, li kenbe pisin koneksyon diferan pou diferan kalite demann.

HighLoad++, Yuri Nasretdinov (VKontakte): ki jan VK mete done nan ClickHouse soti nan plizyè dizèn de milye de sèvè

An konsekans, menm si nou pa gen tan ranpli demann ensèsyon yo, "seleksyon yo" ap pase, ak vis vèrsa. Epi li gwoupe done yo nan tab tanpon - ak yon ti tanpon: si te gen nenpòt erè, erè sentaks, ak sou sa - pou yo pa ta afekte anpil rès done yo, paske lè nou tou senpleman mete nan tab tanpon, nou te gen ti "bachi", ak tout erè sentaks yo sèlman afekte ti moso sa a; ak isit la yo pral deja afekte yon tanpon gwo. Ti se 1 megabyte, se sa ki pa tèlman piti.

HighLoad++, Yuri Nasretdinov (VKontakte): ki jan VK mete done nan ClickHouse soti nan plizyè dizèn de milye de sèvè

Mete yon senkronizasyon ak esansyèlman ranplase nginx, fè esansyèlman menm bagay ke nginx te fè anvan - ou pa bezwen chanje lokal "Kittenhouse" pou sa. Epi depi li itilize fasthttp, li trè vit - ou ka fè plis pase 100 mil demann pou chak segonn pou yon sèl foure atravè yon prokurasyon ranvèse. Teyorikman, ou ka mete yon liy nan yon moman nan proxy ranvèse kittenhouse, men nan kou nou pa fè sa.

HighLoad++, Yuri Nasretdinov (VKontakte): ki jan VK mete done nan ClickHouse soti nan plizyè dizèn de milye de sèvè

Konplo a te kòmanse sanble sa a: "Kittenhouse", proxy ranvèse gwoup anpil demann nan tab epi, nan vire, tab tanpon yo mete yo nan sa yo prensipal yo.

Asasen se yon solisyon tanporè, chat se yon solisyon pèmanan

Sa a se yon pwoblèm enteresan... Eske nenpòt nan nou te itilize fasthttp? Ki moun ki itilize fasthttp ak demann POST? Pwobableman, sa a reyèlman pa ta dwe fè, paske li tanpon kò demann lan pa default, ak gwosè tanpon nou an te mete sou 16 megabyte. Ensèsyon an te sispann kenbe nan kèk pwen, ak 16-megaocte fragman yo te kòmanse rive soti nan tout dizèn de milye de serveurs, epi yo tout te tampon nan memwa anvan yo te voye nan Clickhouse. An konsekans, memwa a te fini, Asasen an Out-Of-Memory te vini ak touye prokurasyon ranvèse a (oswa "Clickhouse", ki teyorikman ta ka "manje" plis pase prokurasyon ranvèse a). Sik la repete tèt li. Pa yon pwoblèm trè bèl. Malgre ke nou bite sou sa a sèlman apre plizyè mwa nan operasyon.

Kisa mwen te fè? Ankò, mwen pa vrèman renmen konprann sa ki te pase egzakteman. Mwen panse ke li trè evidan ke ou pa ta dwe tampon nan memwa. Mwen pa t 'kapab patch fasthttp, byenke mwen te eseye. Men, mwen te jwenn yon fason yo fè li pou ke pa te gen okenn bezwen patch anyen, epi mwen te vini ak pwòp metòd mwen an HTTP - mwen te rele li KITTEN. Oke, li lojik - "VK", "Chat"... Ki lòt bagay?...

HighLoad++, Yuri Nasretdinov (VKontakte): ki jan VK mete done nan ClickHouse soti nan plizyè dizèn de milye de sèvè

Si yon demann vini sou sèvè a ak metòd Kitten an, Lè sa a, sèvè a ta dwe reponn "meow" - lojikman. Si li reponn a sa a, Lè sa a, li konsidere ke li konprann pwotokòl sa a, ak Lè sa a, mwen entèsepte koneksyon an (fasthttp gen yon metòd konsa), ak koneksyon an ale nan "kri" mòd. Poukisa mwen bezwen li? Mwen vle kontwole kijan lekti soti nan koneksyon TCP rive. TCP gen yon bèl pwopriyete: si pa gen moun ki ap li nan lòt bò a, Lè sa a, ekri a kòmanse rete tann, ak memwa pa patikilyèman depanse sou sa a.

Se konsa, mwen li soti nan apeprè 50 kliyan nan yon moman (soti nan senkant paske senkant ta dwe definitivman ase, menm si pousantaj la soti nan yon lòt DC) ... Konsomasyon te diminye ak apwòch sa a omwen 20 fwa, men mwen, yo dwe onèt. , Mwen pa t 'kapab mezire egzakteman ki lè, paske li deja initil (li te deja rive nan nivo erè a). Pwotokòl la se binè, se sa ki, li gen non tab la ak done; pa gen okenn headers http, kidonk mwen pa t 'sèvi ak yon priz entènèt (mwen pa bezwen kominike ak navigatè - mwen te fè yon pwotokòl ki kostim bezwen nou yo). Epi tout bagay te vin byen avè l.

Tablo tanpon an tris

Dènyèman nou te rankontre yon lòt karakteristik enteresan nan tab tanpon. Ak pwoblèm sa a deja pi douloure pase lòt yo. Ann imajine sitiyasyon sa a: ou deja itilize Clickhouse aktivman, ou gen plizyè douzèn serveurs Clickhouse, epi ou gen kèk demann ki pran anpil tan pou li (an nou di, plis pase 60 segonn); epi ou vin fè Alter nan moman sa a... Antretan, "seleksyon" ki te kòmanse anvan "Alter" pa pral enkli nan tablo sa a, "Alter" pa pral kòmanse - pwobableman kèk karakteristik ki jan "Clickhouse" travay nan kote sa a. Petèt sa a ka ranje? Oswa èske li enposib?

HighLoad++, Yuri Nasretdinov (VKontakte): ki jan VK mete done nan ClickHouse soti nan plizyè dizèn de milye de sèvè

An jeneral, li klè ke an reyalite sa a se pa tankou yon gwo pwoblèm, men ak tab tanpon li vin pi douloure. Paske, si, ann di, "Alter" timeout ou a (epi li ka tan sou yon lòt lame - pa sou ou a, men sou yon kopi, pou egzanp), Lè sa a,... Ou te efase tab tanpon an, "Alter" ou a ( oswa kèk lòt lame) tan soti. Lè sa a, yon erè "Alter" te fèt) - ou toujou bezwen asire ke done yo kontinye ap ekri: ou kreye tab tanpon yo tounen (dapre menm konplo a ak tablo paran an), Lè sa a "Alter" ale nan, fini apre tout, ak tanpon tab la kòmanse diferan nan chema ak paran an. Tou depan de sa ki te "Alter" la, insert la ka pa ale nan tab tanpon sa a ankò - sa a trè tris.

HighLoad++, Yuri Nasretdinov (VKontakte): ki jan VK mete done nan ClickHouse soti nan plizyè dizèn de milye de sèvè

Genyen tou yon siy konsa (petèt yon moun remake li) - li rele query_thread_log nan nouvo vèsyon Clickhouse. Pa default, nan kèk vèsyon te gen youn. Isit la nou akimile 840 milyon dosye nan yon koup de mwa (100 jigokte). Sa a se akòz lefèt ke "insert" yo te ekri la (petèt kounye a, nan chemen an, yo pa ekri). Kòm mwen te di ou, "insert" nou yo piti - nou te gen anpil "insert" nan tab tanpon yo. Li klè ke sa a se enfim - mwen jis di ou sa mwen te wè sou sèvè nou an. Poukisa? Sa a se yon lòt agiman kont itilize tab tanpon! Spotty tris anpil.

HighLoad++, Yuri Nasretdinov (VKontakte): ki jan VK mete done nan ClickHouse soti nan plizyè dizèn de milye de sèvè

Ki moun ki te konnen ke mesye sa a te rele Spotty? Anplwaye VK leve men yo. OK.

Konsènan plan yo pou "KitttenHouse"

Anjeneral, plan yo pa pataje, pa vre? Toudenkou ou pa pral ranpli yo epi yo pa pral gade trè bon nan je lòt moun. Men, mwen pral pran risk la! Nou vle fè sa ki annapre yo: tab tanpon, mwen sanble, yo toujou yon beki epi nou bezwen tampon ensèsyon an tèt nou. Men, nou toujou pa vle tampon li sou disk, kidonk nou pral tampon ensèsyon an nan memwa.

HighLoad++, Yuri Nasretdinov (VKontakte): ki jan VK mete done nan ClickHouse soti nan plizyè dizèn de milye de sèvè

An konsekans, lè yo fè yon "insert", li p'ap synchrone ankò - li pral deja travay kòm yon tab tanpon, li pral mete nan tab paran an (byen, yon jou pita) epi rapòte atravè yon chanèl separe ki foure yo te pase ak ki. pa genyen.

HighLoad++, Yuri Nasretdinov (VKontakte): ki jan VK mete done nan ClickHouse soti nan plizyè dizèn de milye de sèvè

Poukisa mwen pa ka kite insert synchrone a? Li pi plis pratik. Reyalite a se ke si ou mete soti nan 10 mil lame, Lè sa a, tout bagay anfòm - ou pral jwenn yon ti kras nan chak lame, ou mete la yon fwa yon dezyèm fwa, tout bagay anfòm. Men, mwen ta renmen konplo sa a travay, pou egzanp, nan de machin, pou ke ou ka telechaje a gwo vitès - petèt pa jwenn maksimòm nan soti nan Clickhouse, men ekri omwen 100 megabyte pou chak segonn nan yon machin atravè yon prokurasyon ranvèse - sa a konplo a dwe echèl nan tou de gwo ak ti kantite, kidonk nou pa ka tann yon segonn pou chak ensèsyon, kidonk li dwe asynchrone. Ak nan menm fason an, konfimasyon asynchrone ta dwe vini apre ensèsyon an te fini. Nou pral konnen si li te pase oswa ou pa.

Bagay ki pi enpòtan an se ke nan konplo sa a nou konnen pou asire w si ensèsyon an te fèt oswa ou pa. Imajine sitiyasyon sa a: ou gen yon tab tanpon, ou te ekri yon bagay nan li, ak Lè sa a, an n di, tab la te antre nan mòd lekti sèlman epi yo te eseye kole tanpon an. Ki kote done yo prale? Yo pral rete nan tanpon an. Men, nou pa ka sèten de sa a - e si gen kèk lòt erè, akòz ki done yo pa pral rete nan tanpon an ... (Adrese Alexey Milovidov, Yandex, ClickHouse pwomotè) Oswa li pral rete? Toujou? Alexey konvenk nou ke tout bagay pral anfòm. Nou pa gen okenn rezon pou nou pa kwè li. Men, tout menm bagay la tou: si nou pa sèvi ak tab tanpon, Lè sa a, pa pral gen okenn pwoblèm ak yo. Kreye de fwa plis tab se tou enkonvenyan, byenke nan prensip pa gen okenn gwo pwoblèm. Sa a se plan an.

Ann pale sou lekti

Koulye a, ann pale sou lekti. Nou menm tou nou te ekri pwòp zouti nou isit la. Li ta sanble, byen, poukisa ekri pwòp enstriman ou isit la? .. E ki moun ki itilize Tabix? Yon jan kèk moun te leve men yo... E kiyès ki satisfè ak pèfòmans Tabix la? Oke, nou pa kontan ak li, epi li pa trè pratik pou gade done. Li bon pou analytics, men jis pou gade li klèman pa optimize. Se konsa, mwen te ekri pwòp mwen, koòdone pwòp mwen.

HighLoad++, Yuri Nasretdinov (VKontakte): ki jan VK mete done nan ClickHouse soti nan plizyè dizèn de milye de sèvè

Li trè senp - li ka sèlman li done. Li pa konn montre grafik, li pa konn fè anyen. Men, li ka montre sa nou bezwen: pou egzanp, konbyen ranje ki nan tablo a, konbyen espas li pran (san yo pa kraze nan kolòn), se sa ki, yon koòdone trè debaz se sa nou bezwen.

HighLoad++, Yuri Nasretdinov (VKontakte): ki jan VK mete done nan ClickHouse soti nan plizyè dizèn de milye de sèvè

Epi li sanble anpil ak Sequel Pro, men sèlman te fè sou Bootstrap Twitter a, ak dezyèm vèsyon an. Ou mande: "Yuri, poukisa sou dezyèm vèsyon an?" Ki ane? 2018? An jeneral, mwen te fè sa byen lontan de sa pou "Misk" (MySQL) ak jis chanje yon koup la liy nan demann yo la, epi li te kòmanse travay pou "Clickhouse", pou ki mèsi espesyal! Paske analizeur a sanble anpil ak "misk la", ak demann yo sanble anpil - trè pratik, espesyalman nan premye.

HighLoad++, Yuri Nasretdinov (VKontakte): ki jan VK mete done nan ClickHouse soti nan plizyè dizèn de milye de sèvè

Oke, li ka filtre tab, ka montre estrikti ak sa ki nan tab la, pèmèt ou sòt, filtre pa kolòn, montre rechèch la ki te lakòz rezilta a, ranje ki afekte yo (konbyen kòm yon rezilta), se sa ki, la. bagay debaz pou gade done yo. Ase vit.

HighLoad++, Yuri Nasretdinov (VKontakte): ki jan VK mete done nan ClickHouse soti nan plizyè dizèn de milye de sèvè

Genyen tou yon editè. Mwen onètman te eseye vòlè tout editè a soti nan Tabix, men mwen pa t 'kapab. Men, yon jan kanmenm li travay. An prensip, se tout.

"Clickhouse" se apwopriye pou twou

Mwen vle di ou ke Clickhouse, malgre tout pwoblèm yo dekri, trè byen adapte pou mòso bwa. Sa ki pi enpòtan, li rezoud pwoblèm nou an - li trè vit epi li pèmèt ou filtre mòso bwa pa kolòn. Nan prensip, tab tanpon yo pa te fè byen, men anjeneral pèsonn pa konnen poukisa... Petèt kounye a ou konnen pi byen ki kote ou pral gen pwoblèm.

HighLoad++, Yuri Nasretdinov (VKontakte): ki jan VK mete done nan ClickHouse soti nan plizyè dizèn de milye de sèvè

TCP? An jeneral, nan VK li se nòmal yo sèvi ak UDP. Epi lè mwen te itilize TCP... Natirèlman, pèsonn pa di m: "Yuri, de kisa w ap pale! Ou pa kapab, ou bezwen UDP." Li te tounen soti ke TCP se pa tèlman pè. Bagay la sèlman se, si ou gen dè dizèn de milye de konpoze aktif ke ou ekri, ou bezwen prepare li yon ti kras plis ak anpil atansyon; men li posib, ak byen fasil.

Mwen te pwomèt pou m poste "Kittenhouse" ak "Lighthouse" sou HighLoad Siberia si tout moun te abònman nan "backend VK" piblik nou an... Epi ou konnen, se pa tout moun ki te abònman... Natirèlman, mwen p'ap mande ou abònman ak nou an. piblik. Gen twòp nan nou toujou, yon moun ka menm ofanse, men toujou, tanpri abònman (e isit la mwen dwe fè je tankou sa yo ki nan yon chat). Sa a lyen ak li nan chemen an. Mèsi anpil! Github se pou nou isit la. Avèk Clickhouse cheve ou yo pral mou ak swa.

HighLoad++, Yuri Nasretdinov (VKontakte): ki jan VK mete done nan ClickHouse soti nan plizyè dizèn de milye de sèvè

Plon: - Zanmi, kounye a pou kesyon. Tousuit apre nou prezante sètifika apresyasyon an ak rapò w sou VHS.

Yuri Nasretdinov (ki refere yo kòm YN): – Ki jan ou te kapab anrejistre rapò mwen an sou VHS si li jis fini?

HighLoad++, Yuri Nasretdinov (VKontakte): ki jan VK mete done nan ClickHouse soti nan plizyè dizèn de milye de sèvè

Plon: – Ou pa ka totalman detèmine kijan "Clickhouse" ap travay oswa ou pa! Zanmi, 5 minit pou kesyon!

Kesyon ou yo

Kesyon odyans lan (ki refere yo kòm Q): - Bon apremidi. Mèsi anpil pou rapò a. Mwen gen de kesyon. Mwen pral kòmanse ak yon bagay frivòl: èske kantite lèt t nan non "Kittenhouse" nan dyagram yo (3, 4, 7...) afekte satisfaksyon chat yo?

YN: - Kantite kisa?

З: – Lèt t. Gen twa t, yon kote alantou twa t.

YN: - Èske mwen pa ranje li? Oke, nan kou li fè! Sa yo se pwodwi diferan - mwen te jis twonpe ou tout tan sa a. Oke, mwen plèzantri - li pa enpòtan. Ah, isit la! Non, se menm bagay la, mwen fè yon typo.

HighLoad++, Yuri Nasretdinov (VKontakte): ki jan VK mete done nan ClickHouse soti nan plizyè dizèn de milye de sèvè

З: - Mèsi. Dezyenm kestyon i serye. Dapre mwen konprann, nan Clickhouse, tab tanpon ap viv sèlman nan memwa, yo pa tampon nan disk epi, kòmsadwa, yo pa pèsistan.

YN: - Wi.

З: – Ak an menm tan an, kliyan ou a tanpon sou disk, ki implique kèk garanti nan livrezon sa yo menm mòso bwa. Men, sa pa gen okenn mwayen garanti nan Clickhouse. Eksplike ki jan garanti a te pote soti, akòz ki sa?.. Isit la se mekanis sa a nan plis detay

YN: – Wi, teyorikman pa gen okenn kontradiksyon isit la, paske lè Clickhouse tonbe, ou ka aktyèlman detekte li nan yon milyon fason diferan. Si Clickhouse fè aksidan (si li fini mal), ou ka, apeprè pale, remonte yon ti kras nan boutèy demi lit ou ke ou te ekri epi kòmanse soti nan moman sa a lè tout bagay te egzakteman anfòm. Ann di ou remonte yon minit, se sa ki, li konsidere ke ou te vide tout bagay nan yon minit.

З: – Sa vle di, "Kittenhouse" kenbe fenèt la pi lontan epi, nan ka yon tonbe, li ka rekonèt li epi remonte li?

YN: - Men, sa a se nan teyori. Nan pratik, nou pa fè sa, ak livrezon serye se soti nan zewo a enfini fwa. Men, an mwayèn yon sèl. Nou satisfè ke si Clickhouse aksidan pou kèk rezon oswa sèvè yo "rdemare," Lè sa a, nou pèdi yon ti kras. Nan tout lòt ka yo, anyen p ap rive.

З: - Bonjou. Depi nan konmansman an, mwen te sanble ke ou ta dwe itilize UDP depi nan kòmansman rapò a. Ou gen http, tout sa... Ak pifò nan pwoblèm ou dekri yo, jan mwen konprann li, te koze pa solisyon an patikilye sa a...

YN: – Ki sa nou itilize TCP?

З: - Esansyèlman wi.

YN: - Non.

З: – Se ak fasthttp ke ou te gen pwoblèm, ak koneksyon an ou te gen pwoblèm. Si ou te jis itilize UDP ou ta sove tèt ou kèk tan. Oke, ta gen pwoblèm ak mesaj long oswa yon lòt bagay...

YN: - Ak kisa?

HighLoad++, Yuri Nasretdinov (VKontakte): ki jan VK mete done nan ClickHouse soti nan plizyè dizèn de milye de sèvè

З: – Avèk mesaj long, depi li ka pa anfòm nan MTU a, yon lòt bagay... Oke, ka gen pwoblèm pwòp yo. Kesyon an se: poukisa pa UDP?

YN: – Mwen kwè ke otè yo ki te devlope TCP/IP yo pi entelijan pase m 'epi yo konnen pi byen pase m' ki jan yo seri pake (pou yo ale), an menm tan ajiste fenèt la voye, pa surcharge rezo a, bay fidbak sou sa. se pa li, pa konte sou lòt bò a... Tout pwoblèm sa yo, nan opinyon mwen, ta egziste nan UDP, sèlman mwen ta dwe ekri menm plis kòd ke mwen deja ekri nan lòd yo aplike menm bagay la mwen menm ak gen plis chans. mal. Mwen pa menm renmen ekri nan C, se pou mwen la a...

З: - Jis pratik! Voye ok epi pa tann anyen - li konplètman asynchrone. Yon notifikasyon tounen ke tout bagay te byen - sa vle di li te rive; Si li pa vini, sa vle di li pa bon.

YN: – Mwen bezwen tou de – Mwen bezwen kapab voye tou de ak yon garanti livrezon ak san yon garanti livrezon. Sa yo se de senaryo diferan. Mwen bezwen pa pèdi kèk mòso bwa oswa pa pèdi yo nan rezon.

З: - Mwen pap pèdi tan. Sa a bezwen diskite plis. Mèsi.

Plon: – Ki moun ki gen kesyon – men nan syèl la!

HighLoad++, Yuri Nasretdinov (VKontakte): ki jan VK mete done nan ClickHouse soti nan plizyè dizèn de milye de sèvè

З: - Bonjou, mwen se Sasha. Yon kote nan mitan rapò a, yon santiman parèt ke, anplis TCP, li te posib yo sèvi ak yon solisyon pare-fè - kèk kalite Kafka.

YN: – Oke... Mwen te di ou ke mwen pa vle sèvi ak sèvè entèmedyè, paske ... nan Kafka, li vire soti ke nou gen dimil lame; an reyalite, nou gen plis - dè dizèn de milye de lame. Li kapab tou fè mal pou fè ak Kafka san okenn proxy. Anplis de sa, sa ki pi enpòtan, li toujou bay "latansi", li bay lame siplemantè ke ou bezwen genyen. Men, mwen pa vle genyen yo - mwen vle...

З: "Men, nan fen li te tounen konsa de tout fason."

YN: – Non, pa gen okenn lame! Tout bagay sa yo ap travay sou hôtes Clickhouse.

З: - Oke, ak "Kittenhouse", ki se opoze a - ki kote li rete?

HighLoad++, Yuri Nasretdinov (VKontakte): ki jan VK mete done nan ClickHouse soti nan plizyè dizèn de milye de sèvè

YN: – Sou lame Clickhouse la, li pa ekri anyen sou disk la.

З: - Ann sipoze.

Plon: – Èske w satisfè? Èske nou ka ba ou yon salè?

З: - Wi ou kapab. An reyalite, gen yon anpil nan beki yo nan lòd yo jwenn menm bagay la, e kounye a, - repons anvan an sou sijè a nan TCP kontredi, nan opinyon mwen, sitiyasyon sa a. Li jis santi tankou tout bagay te ka fè sou jenou m 'nan anpil mwens tan.

YN: - Epi tou poukisa mwen pa t 'vle sèvi ak Kafka, paske te gen anpil plent nan chat la Clickhouse Telegram ki, pou egzanp, mesaj soti nan Kafka te pèdi. Pa soti nan Kafka tèt li, men nan entegrasyon an nan Kafka ak Clickhaus; oswa yon bagay pa t 'konekte la. Apeprè pale, li ta nesesè yo ekri yon kliyan pou Kafka lè sa a. Mwen pa panse ta ka gen yon solisyon ki pi senp oswa ki pi serye.

З: – Di m, poukisa ou pa t eseye nenpòt moun kap kriye oswa kèk kalite otobis komen? Depi ou di ke ak asynchrony ou ta ka voye mòso bwa yo tèt yo nan keu a epi resevwa repons lan asynchrone nan keu la?

HighLoad++, Yuri Nasretdinov (VKontakte): ki jan VK mete done nan ClickHouse soti nan plizyè dizèn de milye de sèvè

YN: – Tanpri sijere ki ke moun kap kriye yo ka itilize?

З: – Nenpòt, menm san yo pa yon garanti ke yo nan lòd. Kèk kalite Redis, RMQ...

YN: – Mwen gen yon santiman ke Redis gen plis chans pa pral kapab rale tankou yon volim nan ensèsyon menm sou yon sèl lame (nan sans plizyè serveurs) ki rale soti Clickhouse. Mwen pa ka fè bak sa a ak okenn prèv (mwen pa te benchmarked li), men li sanble ke Redis se pa pi bon solisyon isit la. Nan prensip, sistèm sa a ka konsidere kòm yon keu mesaj enpwovize, men ki se pwepare sèlman pou "Clickhouse"

Plon: – Youri, mèsi anpil. Mwen pwopoze pou fini kesyon ak repons yo la a epi di kiyès nan moun ki te poze kesyon an n ap bay liv la.

YN: – Mwen ta renmen bay premye moun ki te poze yon kesyon yon liv.

Plon: - Bèl bagay! Gwo! Fabuleux! Mèsi anpil!

Kèk piblisite 🙂

Mèsi paske w rete avèk nou. Ou renmen atik nou yo? Vle wè plis kontni enteresan? Sipòte nou pa mete yon lòd oswa rekòmande pou zanmi, nwaj VPS pou devlopè soti nan $ 4.99, yon analogue inik nan sèvè nivo antre, ki te envante pa nou pou ou: Tout verite sou VPS (KVM) E5-2697 v3 (6 Cores) 10GB DDR4 480GB SSD 1Gbps soti nan $ 19 oswa ki jan yo pataje yon sèvè? (disponib ak RAID1 ak RAID10, jiska 24 nwayo ak jiska 40GB DDR4).

Dell R730xd 2 fwa pi bon mache nan sant done Equinix Tier IV nan Amstèdam? Sèlman isit la 2 x Intel TetraDeca-Core Xeon 2x E5-2697v3 2.6GHz 14C 64GB DDR4 4x960GB SSD 1Gbps 100 TV soti nan $199 nan Netherlands! Dell R420 - 2x E5-2430 2.2Ghz 6C 128GB DDR3 2x960GB SSD 1Gbps 100TB - soti nan $ 99! Li sou Ki jan yo bati enfrastrikti corp. klas ak itilizasyon Dell R730xd E5-2650 v4 serveurs ki vo 9000 ero pou yon jounen travay?

Sous: www.habr.com

Add nouvo kòmantè