
Artem Denisov ( , )
Badoo se pi gwo sit datant nan mond lan. Kounye a nou gen anviwon 330 milyon itilizatè ki anrejistre atravè lemond. Men, sa ki pi enpòtan nan kontèks konvèsasyon nou an jodi a se ke nou estoke apeprè 3 petabyte foto itilizatè yo. Chak jou itilizatè nou yo telechaje apeprè 3,5 milyon nouvo foto, ak chaj lekti a se sou 80 mil demann pa segonn. Sa a se byen anpil pou backend nou an, epi pafwa gen difikilte ak sa a.

Mwen pral pale sou konsepsyon sistèm sa a, ki magazen ak voye foto an jeneral, epi mwen pral gade li nan pwen de vi yon pwomotè. Pral gen yon brèf retrospektiv sou fason li devlope, kote mwen pral dekri etap enpòtan yo, men mwen pral sèlman pale an plis detay sou solisyon yo ke nou ap itilize kounye a.
Koulye a, ann kòmanse.

Kòm mwen te di, sa a pral yon retrospektiv, epi yo nan lòd yo kòmanse li yon kote, ann pran egzanp ki pi komen an.

Nou gen yon travay komen, nou bezwen aksepte, magazen ak voye foto itilizatè. Nan fòm sa a, travay la se jeneral, nou ka itilize nenpòt bagay:
- depo nwaj modèn,
- yon solisyon bwat, nan ki gen tou yon anpil kounye a;
- Nou ka mete plizyè machin nan sant done nou an epi mete gwo disk di sou yo epi estoke foto la.
Badoo istorikman - tou de kounye a ak lè sa a (nan moman an lè li te jis nan anfans li) - ap viv sou pwòp serveurs li yo, andedan pwòp DC nou yo. Se poutèt sa, opsyon sa a te pi bon pou nou.

Nou jis pran plizyè machin, yo rele yo "foto", epi nou te resevwa yon gwoup ki estoke foto. Men, sanble yon bagay ki manke. Nan lòd pou tout bagay sa yo travay, nou bezwen yon jan kanmenm detèmine sou ki machin nou pral estoke ki foto. Ak isit la, tou, pa gen okenn nesesite yo louvri Amerik la.

Nou ajoute kèk jaden nan depo nou an ak enfòmasyon sou itilizatè yo. Sa a pral kle a sharding. Nan ka nou an, nou te rele li place_id, epi id kote sa a lonje dwèt sou plas kote foto itilizatè yo estoke. Nou fè kat.
Nan premye etap la, sa a ka menm fè manyèlman - nou di ke yon foto itilizatè sa a ak yon kote konsa pral ateri sou yon sèvè konsa. Gras a kat sa a, nou toujou konnen lè yon itilizatè telechaje yon foto, ki kote pou konsève pou li, epi nou konnen ki kote pou bay li.
Sa a se yon konplo absoliman trivial, men li gen avantaj byen enpòtan. Premye a se ke li se senp, jan mwen te di, ak dezyèm lan se ke ak apwòch sa a nou ka fasilman echèl orizontal pa tou senpleman fournir nouvo machin ak ajoute yo nan kat la. Ou pa bezwen fè anyen ankò.
Se konsa sa te ye pou nou depi kèk tan.

Sa a te alantou 2009. Yo te delivre machin, yo te delivre...
E a en moman nouân komans remarke ki sa scheme i annan serten dezavantaz. Ki dezavantaj yo?
Premye a tout, gen kapasite limite. Nou pa ka mete anpil disk di sou yon sèl sèvè fizik jan nou ta renmen. Lè sa a te vin yon sèten pwoblèm sou tan ak kwasans lan nan dataset la.
Ak dezyèm. Sa a se yon konfigirasyon atipik nan machin, depi machin sa yo difisil pou reitilize nan kèk lòt grap yo byen espesifik, i.e. yo ta dwe fèb nan pèfòmans, men an menm tan an ak yon gwo kondwi difisil.
Sa a te tout pou 2009, men, nan prensip, kondisyon sa yo toujou enpòtan jodi a. Nou gen yon retrospektiv, se konsa nan 2009 tout bagay te konplètman move ak sa a.
Ak dènye pwen an se pri a.

Pri a te trè apik nan moman sa a, epi nou te bezwen chèche kèk altènativ. Moun sa yo. nou te bezwen yon jan kanmenm pi byen itilize tou de espas ki la nan sant done yo ak sèvè fizik yo kote tout bagay sa yo sitiye. Ak enjenyè sistèm nou yo te kòmanse yon gwo etid kote yo te revize yon pakèt opsyon diferan. Yo te gade tou sistèm dosye gwoup tankou PolyCeph ak Luster. Te gen pwoblèm pèfòmans ak operasyon byen difisil. Yo te refize. Nou te eseye monte done an antye atravè NFS sou chak machin yo nan lòd yo yon jan kanmenm echèl li moute. Lekti tou te mache mal, nou te eseye solisyon diferan de fournisseurs diferan.
Ak nan fen a, nou rezoud sou lè l sèvi avèk sa yo rele Rezo Zòn Depo.

Sa yo se gwo SHD ki fèt espesyalman pou estoke gwo kantite done. Yo se etajè ak disk ki monte sou machin final pwodiksyon optik yo. Sa. nou gen kèk kalite pisin nan machin, byen piti, ak SHD sa yo, ki transparan nan lojik voye nou an, i.e. pou nginx nou an oswa nenpòt lòt moun sèvi demann pou foto sa yo.
Desizyon sa a te gen avantaj evidan. Sa a se SHD. Li vize pou estoke foto yo. Sa a travay pi bon mache pase tou senpleman ekipe machin ak kondui di.
Dezyèm plis.

Sa a se ke kapasite a te vin pi gwo, i.e. nou ka akomode pi plis depo nan yon volim pi piti anpil.
Men, te gen tou dezavantaj ki parèt byen vit. Kòm kantite itilizatè yo ak chaj sou sistèm sa a te grandi, pwoblèm pèfòmans yo te kòmanse leve. Ak pwoblèm nan isit la se byen evidan - nenpòt SHD ki fèt pou estoke anpil foto nan yon ti volim, tankou yon règ, soufri nan lekti entansif. Sa a se aktyèlman vre pou nenpòt depo nwaj oswa nenpòt lòt bagay. Koulye a, nou pa gen yon depo ideyal ki ta ka enfiniman Êvolutive, ou ta ka mete anyen nan li, epi li ta tolere lekti trè byen. Espesyalman lekti aksidantèl.

Kòm se ka a ak foto nou an, paske foto yo mande enkonsistan, e sa pral anpil afekte pèfòmans yo.
Menm dapre figi jodi a, si nou jwenn yon kote plis pase 500 RPS pou foto sou yon machin ki konekte depo, pwoblèm deja kòmanse. Epi li te move ase pou nou, paske kantite itilizatè yo ap grandi, bagay yo pral sèlman vin pi mal. Sa a bezwen yo dwe optimize yon jan kanmenm.
Yo nan lòd yo optimize, nou te deside nan moman sa a, evidamman, yo gade nan pwofil la chaj - sa, an jeneral, k ap pase, sa ki bezwen yo dwe optimize.

Ak isit la tout bagay jwe nan men nou.
Mwen te deja di nan premye glisad la: nou gen 80 mil demann lekti pa segonn ak sèlman 3,5 milyon uploads pa jou. Sa vle di, sa a se yon diferans nan twa lòd nan grandè. Li evidan ke lekti bezwen yo dwe optimize epi li se pratikman klè ki jan.
Gen yon lòt ti pwen. Espesifik yo nan sèvis la se tankou ke yon moun anrejistre, Uploads yon foto, Lè sa a, kòmanse aktivman gade lòt moun, tankou yo, epi yo montre aktivman bay lòt moun. Lè sa a, li jwenn yon konpayon oswa li pa jwenn yon konpayon, sa depann de ki jan li vire soti, epi li sispann sèvi ak sèvis la pou yon ti tan. Nan moman sa a, lè li sèvi ak li, foto li yo trè cho - yo nan demann, anpil moun wè yo. Le pli vit ke li sispann fè sa, byen vit li tonbe soti nan anpil ekspoze ak lòt moun jan li te gen anvan, ak foto li yo prèske pa janm mande.

Moun sa yo. Nou gen yon ti done cho anpil. Men, an menm tan gen yon anpil nan demann pou li. Ak yon solisyon konplètman evidan isit la se ajoute yon kachèt.
Yon kachèt ak LRU pral rezoud tout pwoblèm nou yo. Kisa nap fè?

Nou ajoute yon lòt relativman ti devan gwo gwoup nou an ak depo, ki rele photocaches. Sa a se esansyèlman jis yon prokurasyon kachèt.
Ki jan li travay soti nan anndan an? Isit la se itilizatè nou an, isit la se depo. Tout bagay se menm jan ak anvan. Ki sa nou ajoute nan mitan?

Li se jis yon machin ki gen yon disk lokal fizik, ki se vit. Sa a se ak yon SSD, pou egzanp. Ak kèk kalite kachèt lokal yo estoke sou disk sa a.
Ak kisa li sanble? Itilizatè a voye yon demann pou yon foto. NGINX chèche li an premye nan kachèt lokal la. Si ou pa, lè sa a tou senpleman proxy_pass nan depo nou an, telechaje foto a soti nan la epi bay itilizatè a li.
Men, yon sèl sa a trè ordinèr epi li pa klè sa k ap pase andedan. Li travay yon bagay tankou sa a.

Kachèt la lojikman divize an twa kouch. Lè m 'di "twa kouch", sa pa vle di ke gen yon kalite sistèm konplèks. Non, kondisyon sa yo se jis twa repèrtwar nan sistèm dosye a:
- Sa a se yon tanpon kote foto jis telechaje soti nan yon proxy ale.
- Sa a se yon kachèt cho ki estoke aktivman foto yo mande yo.
- Ak yon kachèt frèt, kote foto yo piti piti pouse soti nan kachèt la cho lè mwens demann vini nan yo.
Pou sa a travay, nou bezwen yon jan kanmenm jere kachèt sa a, nou bezwen reranje foto yo nan li, elatriye. Sa a se tou yon pwosesis trè primitif.

Nginx tou senpleman ekri nan RAMDisk access.log pou chak demann, nan ki li endike chemen an nan foto a ke li te sèvi kounye a (chemen relatif, nan kou), ak ki patisyon li te sèvi. Moun sa yo. li ka di "foto 1" ak Lè sa a, swa yon tanpon, oswa yon kachèt cho, oswa yon kachèt frèt, oswa yon proxy.
Tou depan de sa a, nou bezwen yon jan kanmenm deside kisa pou fè ak foto a.
Nou gen yon ti demon k ap kouri sou chak machin ki toujou ap li boutèy demi lit sa a epi ki estoke estatistik sou itilizasyon sèten foto nan memwa li.

Li tou senpleman kolekte la, kenbe kontè yo ak detanzantan fè sa ki annapre yo. Li deplase aktivman mande foto, pou ki gen anpil demann, nan kachèt la cho, kèlkeswa kote yo ye.

Foto ke yo mande raman epi yo te vin mande mwens souvan yo piti piti pouse soti nan kachèt la cho nan yon sèl la frèt.

Men, lè nou kouri soti nan espas nan kachèt la, nou tou senpleman kòmanse efase tout bagay soti nan kachèt la frèt aveuglesman. Ak nan chemen an, sa a travay byen.
Nan lòd pou foto a dwe sove imedyatman lè proxy li nan tanpon an, nou itilize direktiv la proxy_store ak tanpon an se tou yon RAMDisk, i.e. pou itilizatè a li travay trè vit. Sa a konsène entèn yo nan sèvè a caching tèt li.
Kesyon ki rete a se kijan pou distribye demann atravè serveurs sa yo.
Ann di gen yon gwoup ven machin depo ak twa serveurs kachèt (sa a se ki jan li te rive).

Nou bezwen yon jan kanmenm detèmine ki demann yo se pou ki foto ak ki kote yo ateri yo.
Opsyon ki pi komen se Round Robin. Oswa fè li pa aksidan?
Sa a evidamman gen yon kantite dezavantaj paske nou ta dwe itilize kachèt la trè efikas nan yon sitiyasyon konsa. Demann yo pral ateri sou kèk machin o aza: isit la li te kachèt, men sou youn nan pwochen li pa la ankò. Men, si tout bagay sa yo travay, li pral trè move. Menm ak yon ti kantite machin nan gwoup la.
Nou bezwen yon jan kanmenm unambiguously detèmine ki sèvè ateri ki demann.
Gen yon fason ordinèr. Nou pran hash la nan URL la oswa hash la nan kle sharding nou an, ki se nan URL la, epi divize li pa kantite sèvè. Pral travay? Will.

Moun sa yo. Nou gen yon demann 2%, pou egzanp, pou kèk "example_url" li pral toujou ateri sou sèvè a ak endèks "XNUMX", epi yo pral kachèt la toujou ap jete pi byen ke posib.
Men, gen yon pwoblèm ak resharding nan yon konplo konsa. Resharding - mwen vle di chanje kantite serveurs.
Ann sipoze ke gwoup kachèt nou an pa ka fè fas ankò epi nou deside ajoute yon lòt machin.
Ann ajoute.

Koulye a, tout bagay se divizib pa twa, men pa kat. Kidonk, prèske tout kle yo ke nou te konn genyen, prèske tout URL yo kounye a ap viv sou lòt serveurs. Tout kachèt la te invalide tou senpleman pou yon ti moman. Tout demann te tonbe sou gwoup depo nou an, li te vin malad, echèk sèvis ak itilizatè yo pa satisfè. Mwen pa vle fè sa.
Opsyon sa a pa bon pou nou tou.
Sa. kisa nou ta dwe fè? Nou dwe yon jan kanmenm fè itilizasyon efikas nan kachèt la, ateri menm demann lan sou menm sèvè a ankò ak sou ankò, men yo dwe rezistan nan resharding. Epi gen yon solisyon konsa, li pa sa ki konplike. Yo rele sa cohÊrente hachage.

Ki sa li sanble?

Nou pran kèk fonksyon nan kle sharding la epi gaye tout valè li yo sou sèk la. Moun sa yo. nan pwen 0, valè minimòm ak maksimòm li yo konvèje. Apre sa, nou mete tout sèvè nou yo sou menm sèk la apeprè fason sa a:

Chak sèvè defini pa yon pwen, epi sektè a ki ale nan echwa a, kòmsadwa, se lame sa a sèvi. Lè demann vin jwenn nou, imedyatman nou wè ke, pou egzanp, demann A - li gen yon hash la - epi li se sèvi pa sèvè 2. Demann B - pa sèvè 3. Ak sou sa.

Kisa k ap pase nan sitiyasyon sa a pandan restructuration?

Nou pa anile tout kachèt la, tankou anvan, epi nou pa deplase tout kle yo, men nou deplase chak sektè yon ti distans pou, relativman pale, sizyèm sèvè nou an, ke nou vle ajoute, anfòm nan espas lib la, ak nou ajoute li la.

Natirèlman, nan yon sitiyasyon konsa kle yo tou deplase soti. Men, yo deplase pi fèb pase anvan. Epi nou wè ke de premye kle nou yo rete sou serveurs yo, ak sèvè kachèt la chanje sèlman pou dènye kle a. Sa a travay byen efikas, epi si ou ajoute nouvo lame enkreman, Lè sa a, pa gen okenn gwo pwoblèm isit la. Ou ajoute epi ajoute yon ti kras nan yon moman, rete tann jiskaske kachèt la plen ankò, ak tout bagay mache byen.
Kesyon an sèlman rete ak refi. Ann sipoze ke kèk kalite machin pa nan lòd.

Epi nou pa ta reyèlman vle rejenere kat jeyografik sa a nan moman sa a, invalid yon pati nan kachèt la, ak sou sa, si, pou egzanp, machin nan te rdemare, epi nou bezwen yon jan kanmenm demann sèvis. Nou tou senpleman kenbe yon kachèt foto backup nan chak sit, ki aji kòm yon ranplasman pou nenpòt machin ki se kounye a desann. Men, si toudenkou youn nan serveurs nou yo vin pa disponib, trafik la ale la. Natirèlman, nou pa gen okenn kachèt la, i.e. li frèt, men omwen demann itilizatè yo trete. Si sa a se yon entèval kout, Lè sa a, nou fè eksperyans li konplètman avèk kalm. Genyen jis plis chaj sou depo. Si entèval sa a long, Lè sa a, nou ka deja pran yon desizyon - retire sèvè sa a nan kat la oswa ou pa, oswa petèt ranplase li ak yon lòt.
Sa a se sou sistèm nan kachèt. Ann gade rezilta yo.
Li ta sanble ke pa gen anyen konplike isit la. Men, metòd sa a nan jere kachèt la te ban nou yon pousantaj Trick nan apeprè 98%. Moun sa yo. soti nan 80 mil demann sa yo pou chak segonn, sèlman 1600 rive nan depo, e sa a se yon chaj konplètman nòmal, yo avèk kalm andire li, nou toujou gen yon rezèv.
Nou te plase sèvè sa yo nan twa nan DC nou yo, epi nou te resevwa twa pwen prezans - Prag, Miami ak Hong Kong.

Sa. yo plis oswa mwens lokalman nan chak nan mache sib nou yo.
Epi kòm yon bonis bèl, nou te resevwa sa a prokurasyon kachèt, sou ki CPU a se aktyèlman san fè anyen konsa, paske li pa tèlman nesesè yo sèvi kontni. Epi la, lè l sèvi avèk NGINX + Lua, nou aplike yon anpil nan lojik utilitarist.

Pa egzanp, nou ka fè eksperyans ak webp oswa jpeg pwogresif (sa yo se fòma modèn efikas), wè ki jan li afekte trafik, pran kèk desizyon, pèmèt li pou sèten peyi, elatriye; fè redimansyon dinamik oswa koupe foto sou vole.
Sa a se yon bon ka itilize lè, pou egzanp, ou gen yon aplikasyon mobil ki montre foto, ak aplikasyon mobil lan pa vle gaspiye CPU kliyan an sou mande yon gwo foto ak Lè sa a, redimansyonman li nan yon sèten gwosè yo nan lòd yo pouse li nan. vi a. Nou ka tou senpleman presize kèk paramèt dinamik nan URL la kondisyonèl UPort, ak kachèt foto a pral redimansyonman foto a tèt li. Kòm yon règ, li pral chwazi gwosè a ke nou fizikman gen sou disk la, pi pre ke posib nan yon sèl yo mande a, ak downsell li nan kowòdone espesifik.
By wout la, nou te fè piblikman disponib anrejistreman videyo nan senk dènye ane yo nan konferans lan nan devlopè nan sistèm gwo chaj. . Gade, aprann, pataje epi abònman .
Nou kapab tou ajoute anpil lojik pwodwi la. Pou egzanp, nou ka ajoute filigrane diferan lè l sèvi avèk paramèt URL, nou ka flou, flou oswa pixelate foto. Sa a se lè nou vle montre yon foto yon moun, men nou pa vle montre figi l ', sa a travay byen, li nan tout aplike isit la.
Kisa nou te jwenn? Nou te gen twa pwen nan prezans, yon bon pousantaj Trick, epi an menm tan an nou pa gen CPU san fè anyen konsa sou machin sa yo. Li te vin kounye a, nan kou, pi enpòtan pase anvan. Nou bezwen bay tèt nou machin ki pi fò, men li vo li.
Sa a konsène retou foto yo. Tout bagay isit la se byen klè ak evidan. Mwen panse mwen pa t dekouvri Amerik, prèske nenpòt CDN ap travay nan fason sa a.
Epi, gen plis chans, yon koute sofistike ta ka gen yon kesyon: poukisa yo pa jis chanje tout bagay nan CDN? Li ta apeprè menm bagay la tou; tout CDN modèn yo ka fè sa. E gen yon kantite rezon.
Premye a se foto.

Sa a se youn nan pwen kle nan enfrastrikti nou an, e nou bezwen otan kontwòl posib sou li. Si sa a se yon kalite solisyon ki soti nan yon machann twazyèm pati, epi ou pa gen okenn pouvwa sou li, li pral byen difisil pou ou viv ak li lè ou gen yon seri done gwo, epi lè ou gen yon gwo koule. nan demann itilizatè yo.
Kite m ba w yon egzanp. Koulye a, ak enfrastrikti nou an, nou ka, pou egzanp, nan ka ta gen kèk pwoblèm oswa frape anba tè, ale nan machin nan ak dezòd alantou la, relativman pale. Nou ka ajoute koleksyon an nan kèk metrik ke nou sèlman bezwen, nou ka fè eksperyans yon jan kanmenm, wè ki jan sa a afekte graf yo, ak sou sa. Koulye a, yon anpil nan estatistik yo te kolekte sou gwoup sa a kachèt. Epi nou detanzantan gade li epi pase yon bon bout tan eksplore kèk anomali. Si li te sou bò CDN, li ta pi difisil pou kontwole. Oswa, pou egzanp, si yon kalite aksidan rive, nou konnen sa ki te pase, nou konnen ki jan yo viv ak li ak ki jan simonte li. Sa a se premye konklizyon an.
Dezyèm konklizyon an tou se pito istorik, paske sistèm nan te devlope pou yon tan long, e te gen anpil kondisyon biznis diferan nan diferan etap, epi yo pa toujou anfòm nan konsèp la CDN.
Ak pwen ki swiv nan yon sèl anvan an se

Sa a se paske sou kachèt foto nou gen anpil lojik espesifik, ki pa ka toujou ajoute sou demann. Li pa posib ke nenpòt CDN pral ajoute kèk bagay koutim ba ou sou demann ou an. Pou egzanp, kode URL si ou pa vle kliyan an kapab chanje yon bagay. Ou vle chanje URL la sou sèvè a epi ankripte li, epi voye kèk paramèt dinamik isit la.
Ki konklizyon sa a sijere? Nan ka nou an, CDN se pa yon altènatif trè bon.

Ak nan ka ou a, si ou gen nenpòt kondisyon biznis espesifik, Lè sa a, ou ka byen fasil aplike sa mwen te montre ou tèt ou. Ak sa a pral travay parfe ak yon pwofil chaj menm jan an.
Men, si ou gen kèk kalite solisyon jeneral, ak travay la pa trè espesifik, ou ka absoliman san danje pran yon CDN. Oswa si tan ak resous yo pi enpòtan pou ou pase kontwòl.

Ak CDN modèn yo gen prèske tout sa mwen te di ou sou kounye a. Ak eksepsyon de plis oswa mwens kèk karakteristik.
Sa a se sou bay lwen foto.
Koulye a, ann avanse yon ti kras nan retrospektiv nou an epi pale sou depo.
2013 tap pase.

Yo te ajoute serveurs Caching, pwoblèm pèfòmans ale. Tout bagay anfòm. Dataset ap grandi. Kòm nan 2013, nou te gen apeprè 80 sèvè ki konekte ak depo, ak apeprè 40 sa yo kachèt nan chak DC. Sa a se 560 terabytes done sou chak DC, i.e. apeprè yon petaocte an total.

Ak kwasans lan nan dataset la, depans fonksyònman yo te kòmanse ogmante anpil. Kisa sa te vle di?

Nan dyagram sa a ki trase - ak yon SAN, ak machin ak kachèt ki konekte ak li - gen yon anpil nan pwen echèk. Si nou te deja fè fas ak echèk nan serveurs kachèt anvan, tout bagay te plis oswa mwens previzib ak konprann, men sou bò depo tout bagay te pi mal.
Premyèman, Rezo Zòn Depo (SAN) tèt li, ki ka echwe.
Dezyèmman, li konekte atravè optik ak machin fen yo. Ka gen pwoblèm ak kat optik ak bouji.

Natirèlman, pa gen anpil nan yo menm jan ak SAN nan tèt li, men, kanmenm, sa yo se tou pwen echèk.
Next se machin nan tèt li, ki konekte ak depo a. Li ka febli tou.

An total, nou gen twa pwen echèk.
Pli lwen, nan adisyon a pwen nan echèk, gen antretyen lou nan depo nan tèt li.
Sa a se yon sistèm konplèks milti-konpozan, ak enjenyè sistèm yo ka gen yon tan difisil travay ak li.
Ak dènye, pwen ki pi enpòtan an. Si yon echèk rive nan nenpòt nan twa pwen sa yo, nou gen yon chans ki pa zewo pou pèdi done itilizatè paske sistèm dosye a ka aksidan.

Ann di sistèm dosye nou an kase. Premyèman, rekiperasyon li yo pran yon bon bout tan - li ka pran yon semèn ak yon gwo kantite done. Ak dezyèmman, nan fen a nou pral gen plis chans fini ak yon pakèt moun sou dosye enkonpreyansib ki pral bezwen yon jan kanmenm konbine nan foto itilizatè. Epi nou riske pèdi done yo. Risk la se byen wo. Ak pi souvan sitiyasyon sa yo rive, ak plis pwoblèm rive nan tout chèn sa a, se pi gwo risk sa a.
Yon bagay te dwe fè sou sa. Epi nou deside ke nou jis bezwen backup done yo. Sa a se aktyèlman yon solisyon evidan ak yon bon. Kisa nou fè?

Sa a se sa sèvè nou an te sanble lè li te konekte ak depo anvan. Sa a se yon sèl seksyon prensipal, li se jis yon aparèy blòk ki aktyèlman reprezante yon mòn pou depo aleka atravè optik.
Nou jis ajoute yon dezyèm seksyon.

Nou mete yon dezyèm depo akote li (ererezman, li pa chè an tèm de lajan), epi nou rele li yon patisyon backup. Li konekte tou atravè optik epi li sitiye sou menm machin nan. Men, nou bezwen yon jan kanmenm senkronize done ki genyen ant yo.
Isit la nou tou senpleman fè yon keu asynchrone ki tou pre.

Li pa trè okipe. Nou konnen nou pa gen ase dosye. Yon keu se jis yon tab nan MySQL nan ki liy tankou "ou bezwen fè bak foto sa a" yo ekri. Avèk nenpòt chanjman oswa Upload, nou kopye soti nan patisyon prensipal la nan backup lè l sèvi avèk yon asynchrone oswa jis kèk kalite travayè background.
Se konsa, nou toujou gen de seksyon ki konsistan. Menm si yon pati nan sistèm sa a echwe, nou ka toujou chanje patisyon prensipal la ak yon backup, ak tout bagay ap kontinye travay.
Men, poutèt sa, chaj lekti a ogmante anpil, paske... nplis de kliyan ki li nan seksyon prensipal la, paske yo premye gade foto a la (li pi resan la), ak Lè sa a, gade pou li sou backup la, si yo pa te jwenn li (men NGINX jis fè sa), sistèm nou an se tou yon backup plis kounye a li soti nan patisyon prensipal la. Li pa ke sa a te yon bouche, men mwen pa t 'vle ogmante chaj la, esansyèlman, jis tankou sa.
Epi nou te ajoute yon twazyèm disk, ki se yon ti SSD, epi nou rele li yon tanpon.

Ki jan li fonksyone kounye a.
Itilizatè a telechaje yon foto nan tanpon an, Lè sa a, yon evènman jete nan keu a ki endike ke li bezwen yo dwe kopye nan de seksyon. Li kopye, ak foto a ap viv sou tanpon an pou kèk tan (di, yon jou), epi sèlman Lè sa a, se purge soti nan la. Sa a anpil amelyore eksperyans itilizatè a, paske itilizatè a Uploads yon foto, kòm yon règ, demann imedyatman kòmanse swiv, oswa li menm li mete ajou paj la ak rafrechi li. Men, tout depann sou aplikasyon an ki fè tÊlÊchargement a.
Oswa, pou egzanp, lòt moun ki moun li te kòmanse montre tèt li imedyatman voye demann apre foto sa a. Li poko nan kachèt la premye demann lan fèt trè vit. Esansyèlman menm jan ak yon kachèt foto. Depo dousman pa enplike nan sa a ditou. Men, lè yon jou apre li purge, li deja swa nan kachèt sou kouch kachèt nou an, oswa, gen plis chans, pa gen moun ki bezwen li ankò. Moun sa yo. Eksperyans itilizatè isit la te grandi trè byen akòz manipilasyon senp sa yo.
Oke, ak pi enpòtan: nou sispann pèdi done.

Ann jis di nou sispann potansyèlman pèdi done, paske nou pa t 'reyèlman pèdi li. Men, te gen danje. Nou wè ke solisyon sa a se, nan kou, bon, men li se yon ti kras tankou lis soti sentòm yo nan pwoblèm nan, olye pou yo rezoud li nèt. Ak kèk pwoblèm rete isit la.
Premyèman, sa a se yon pwen nan echèk nan fòm nan lame fizik tèt li sou ki tout machin sa a li pa te ale.

Dezyèmman, toujou gen pwoblèm ak SAN, antretyen lou yo, elatriye rete. Li pa t 'ke li te yon faktè kritik, men mwen te vle eseye yon jan kanmenm viv san li.
Epi nou te fè twazyèm vèsyon an (an reyalite, dezyèm lan an reyalite) - vèsyon an rezèvasyon. Ki jan li te sanble?
Sa a se sa li te -

Pwoblèm prensipal nou yo se ak lefèt ke sa a se yon lame fizik.
Premyèman, nou ap retire SAN paske nou vle fè eksperyans, nou vle eseye jis disk lokal yo.

Sa a se deja 2014-2015, ak nan moman sa a sitiyasyon an ak disk ak kapasite yo nan yon sèl lame te vin pi bon. Nou te deside poukisa nou pa eseye li.
Lè sa a, nou tou senpleman pran patisyon backup nou an ak fizikman transfere li nan yon machin separe.

Kidonk, nou jwenn dyagram sa a. Nou gen de machin ki estoke menm dataset yo. Yo fè bak youn ak lòt nèt epi senkronize done sou rezo a atravè yon keu asynchrone nan menm MySQL la.

Poukisa sa travay byen se paske nou gen kèk dosye. Moun sa yo. si ekriti te konparab ak lekti, petèt nou ta gen kèk kalite rezo anlè ak pwoblèm. Gen ti ekriti, anpil lekti - metòd sa a travay byen, i.e. Nou raman kopye foto ant de serveurs sa yo.
Ki jan sa a travay, si ou gade yon ti kras plis an detay.

Telechaje. Balansè a tou senpleman chwazi lame o aza ak yon pè ak Uploads sou li. An menm tan an, li natirèlman fè chèk sante ak asire w ke machin nan pa tonbe. Moun sa yo. li telechaje foto sèlman nan yon sèvè ap viv, ak Lè sa a, atravè yon keu asynchrone li nan tout kopye nan frè parèy li. Avèk Upload tout bagay se trè senp.
Travay la se yon ti kras pi difisil.

Lua te ede nou isit la, paske li ka difisil pou fè lojik sa yo sou vaniy NGINX. Nou premye fè yon demann nan premye sèvè a, wè si foto a la, paske potansyèlman li ta ka Uploaded, pou egzanp, nan yon vwazen, men li poko rive isit la. Si foto a la, sa bon. Nou imedyatman bay kliyan an li epi, pètèt, kachèt li.

Si li pa la, nou tou senpleman fè yon demann bay frè parèy nou an epi yo gen garanti yo resevwa li soti nan la.

Sa. ankò nou ka di: ka gen pwoblèm ak pèfòmans, paske gen konstan vwayaj wonn - foto a te Uploaded, li pa isit la, nou ap fè de demann olye de youn, sa a ta dwe travay tou dousman.
Nan sitiyasyon nou an, sa a pa travay tou dousman.

Nou kolekte yon pakèt mezi sou sistèm sa a, ak pousantaj entelijan kondisyonèl nan yon mekanis konsa se apeprè 95%. Moun sa yo. Lag nan backup sa a piti, ak akòz sa a nou prèske garanti, apre yo fin telechaje foto a, nou pral pran li premye fwa epi yo pa pral oblije ale nenpòt kote de fwa.
Se konsa, ki lòt bagay nou genyen ki vrèman fre?
PrÊcÊdemment, nou te gen patisyon prensipal la backup, epi nou li nan men yo sekans. Moun sa yo. Nou toujou fouye sou prensipal la an premye, ak Lè sa a, sou backup la. Se te yon sèl mouvman.
Koulye a, nou itilize lekti nan de machin nan yon fwa. Nou distribye demann lè l sèvi avèk Round Robin. I annan en pti poursantaz ka nou fer de demann. Men, an jeneral, kounye a nou gen de fwa plis aksyon lekti ke nou te genyen anvan. Ak chaj la te redwi anpil tou de sou machin yo voye ak dirèkteman sou machin yo depo, ki nou menm tou nou te gen nan tan sa a.
Kòm pou tolerans fòt. Aktyèlman, sa a se sa nou sitou goumen pou. Avèk tolerans fòt, tout bagay te tounen gwo isit la.

Yon machin kraze.

Pa gen pwoblèm! Yon enjenyè sistèm ka pa menm reveye nan mitan lannwit, li pral tann jiska maten an, pa gen anyen mal ki pral rive.
Si menm si machin sa a echwe, keu la pa nan lòd, pa gen okenn pwoblèm tou, boutèy la pral tou senpleman akimile premye sou machin vivan an, ak Lè sa a, li pral ajoute nan keu la, ak Lè sa a, sou machin nan ki pral. antre nan operasyon apre kèk tan.

Menm bagay ak antretyen. Nou tou senpleman fèmen youn nan machin yo, manyèlman rale li soti nan tout pisin yo, li sispann resevwa trafik, nou fè kèk kalite antretyen, nou edite yon bagay, Lè sa a, nou retounen li nan sèvis, ak backup sa a kenbe byen vit. Moun sa yo. chak jou, tan an nan yon machin pwan moute nan yon koup de minit. Sa vrèman trè piti. Avèk tolerans fòt, mwen di ankò, tout bagay se fre isit la.
Ki konklizyon yo ka tire nan plan redondance sa a?
Nou te gen tolerans fòt.
Fasil pou itilize. Depi machin yo gen kondui dis lokal, sa a se pi plis pratik nan yon pwen de vi operasyonèl pou enjenyè yo ki travay avèk li.
Nou te resevwa yon alokasyon pou lekti doub.
Sa a se yon bonis trè bon anplis tolerans fay.
Men, gen pwoblèm tou. Koulye a, nou gen yon devlopman pi konplèks nan kèk karakteristik ki gen rapò ak sa a, paske sistèm nan te vin 100% evantyèlman konsistan.

Nou dwe, di, nan kèk travay background, toujou ap panse: "sou ki sèvè nou ap kouri kounye a?", "Ăske gen reyèlman yon foto aktyèl isit la?" elatriye. Sa a, nan kou, tout vlope moute, ak pou pwogramè a ki ekri lojik biznis, li se transparan. Men, kanmenm, gwo kouch konplèks sa a te parèt. Men, nou pare pou sipòte sa a an echanj pou goodies ke nou te resevwa nan men li.
Ak isit la ankò kèk konfli rive.
Mwen te di nan kòmansman an ke estoke tout bagay sou disk lokal yo pa bon. Epi kounyeya mwen di ke nou te renmen li.
Wi, tout bon, sou tan sitiyasyon an te chanje anpil, e kounye a, apwòch sa a gen anpil avantaj. Premyèman, nou jwenn operasyon ki pi senp.
Dezyèmman, li pi pwodiktif, paske nou pa gen kontwolè otomatik sa yo oswa koneksyon ak etajè disk.
Gen yon gwo kantite machin la, ak sa yo se jis kèk disk ki reyini isit la sou machin nan nan yon atak.
Men, gen tou dezavantaj.

Sa a se apeprè 1,5 fwa pi chè pase lè l sèvi avèk SAN menm nan pri jodi a. Se poutèt sa, nou deside pa avèk fòs konviksyon konvèti tout gwo gwoup nou an nan machin ak kondui di lokal yo epi nou deside kite yon solisyon ibrid.
Mwatye nan machin nou yo travay ak kondui di (byen, pa mwatye - pwobableman 30 pousan). Ak rès yo se machin fin vye granmoun ki te konn gen premye konplo rezèvasyon an. Nou tou senpleman remonte yo, paske nou pa t 'bezwen nouvo done oswa nenpòt lòt bagay, nou tou senpleman deplase mòn yo soti nan yon lame fizik nan de.
Epi kounye a nou gen yon gwo stock nan lekti, epi nou elaji li. Si pi bonè nou te monte yon sèl depo sou yon machin, kounye a nou monte kat, pou egzanp, sou yon sèl pè. Epi li travay byen.
Ann pran yon rezime tou kout sou sa nou te akonpli, pou kisa nou te goumen ak si nou te reyisi.
Rezilta
Nou gen itilizatè - otan ke 33 milyon dola.
Nou gen twa pwen prezans - Prag, Miami, Hong Kong.
Yo genyen yon kouch kachèt, ki gen ladann machin ak disk lokal rapid (SSD), sou ki machin senp ki soti nan NGINX, access.log li yo ak demon Python kouri, ki trete tout bagay sa yo epi jere kachèt la.
Si ou vle, ou nan pwojè ou a, si foto yo pa kritik pou ou menm jan yo pou nou, oswa si komès-off kontwòl kont vitès devlopman ak depans resous se nan lòt direksyon an pou ou, Lè sa a, ou ka san danje ranplase li. ak yon CDN, CDN modèn yo fè byen.
Apre yo vini kouch nan depo, sou ki nou gen grap nan pè machin ki fè bak youn ak lòt, dosye yo asynchrone kopye soti nan youn nan yon lòt chak fwa yo chanje.
Anplis, kèk nan machin sa yo travay ak lokal dis lou.
Gen kèk nan machin sa yo ki konekte ak SAN.

Epi, sou yon bò, li pi pratik pou itilize ak yon ti kras pi pwodiktif, nan lòt men an, li se pratik an tèm de dansite plasman ak pri pou chak gigaocte.
Sa a se tankou yon apèsi kout sou achitekti a nan sa nou te resevwa ak ki jan li tout devlope.
Yon kèk lòt konsèy nan men kòmandan an, yo menm ki trè senp.
Premyèman, si ou toudenkou deside ke ou ijan bezwen amelyore tout bagay nan enfrastrikti foto ou, mezire an premye, paske petèt pa gen anyen ki bezwen amelyore.

Kite m ba w yon egzanp. Nou gen yon gwoup machin ki voye foto nan atachman nan chat, ak konplo a ap travay la depi 2009, epi pèsonn pa soufri nan li. Tout moun anfòm, tout moun renmen tout bagay.
Pou w ka mezire, premye pann yon pakèt mezi, gade yo, epi answit deside kisa w pa kontan ak sa ki bezwen amelyore. Pou nou ka mezire sa, nou gen yon zouti fre ki rele Pinba.
Li pèmèt ou kolekte estatistik trè detaye nan men NGINX pou chak demann ak kòd repons, ak distribisyon fwa - tou sa ou vle. Li gen koneksyon ak tout kalite sistèm analiz diferan, ak Lè sa a, ou ka gade nan li tout trè byen.
Premye nou mezire li, apre sa nou amelyore li.
Pli lwen. Nou optimize lekti ak kachèt, ekri ak sharding, men sa a se yon pwen evidan.

Pli lwen. Si ou jis kounye a kòmanse bati sistèm ou a, Lè sa a, li se pi bon fè foto kòm dosye imuiabl. Paske ou imedyatman pèdi yon klas antye nan pwoblèm ak envalidasyon kachèt, ak ki jan lojik la ta dwe jwenn vèsyon ki kòrèk la nan foto a, ak sou sa.

Ann di ou telechaje yon santèn, Lè sa a, vire l ', fè li pou ke li te yon fichye fizikman diferan. Moun sa yo. pa bezwen panse: kounye a mwen pral sove yon ti espas, ekri li nan menm dosye a, chanje vèsyon an. Sa a toujou pa travay byen epi li lakòz anpil tèt fè mal pita.
Pwochen pwen. Sou redimansyon sou vole.
PrÊcÊdemment, lè itilizatè yo telechaje yon foto, nou imedyatman koupe yon pakèt tout gwosè pou tout okazyon, pou kliyan diferan, epi yo tout te sou disk la. Koulye a, nou te abandone sa a.
Nou kite sèlman twa gwosè prensipal: ti, mwayen ak gwo. Nou tou senpleman downscale tout lòt bagay soti nan gwosè a ki dèyè youn ki te mande nou nan Uport, nou tou senpleman fè downscale a epi bay itilizatè a li.
CPU a nan kouch nan kachèt isit la vire soti yo dwe pi bon mache pase si nou toujou ap rejenere gwosè sa yo sou chak depo. Ann di nou vle ajoute yon nouvo, sa a pral pran yon mwa - kouri yon script toupatou ki ta fè tout bagay sa yo nètman, san yo pa detwi gwoup la. Moun sa yo. Si ou gen opòtinite pou yo chwazi kounye a, li pi bon pou fè kòm kèk gwosè fizik ke posib, men pou omwen kèk distribisyon se, di, twa. Ak tout lòt bagay ka tou senpleman redimensionnÊ sou vole a lè l sèvi avèk modil pare yo. Li trè fasil ak aksesib kounye a.
Ak backup asynchrone incrĂŠmentielle se yon bon bagay.
Kòm pratik nou an te montre, konplo sa a travay byen ak reta kopi dosye chanje.

Dènye pwen an tou evidan. Si enfrastrikti ou a pa gen pwoblèm sa yo kounye a, men gen yon bagay ki ka kraze, li pral definitivman kraze lè li vin yon ti kras plis. Se poutèt sa, li pi bon panse sou sa davans epi yo pa fè eksperyans pwoblèm ak li. Se tout sa mwen te vle di.
kontak
Âť
Âť
Rapò sa a se yon transkripsyon youn nan pi bon diskou yo nan konferans devlopè sistèm gwo chaj yo . Gen mwens pase yon mwa ki rete jiskaske HighLoad++ 2017 konferans lan.
Nou deja pare , orè a kounye a ap aktivman fòme.
Ane sa a nou kontinye eksplore sijè achitekti ak echèl la:
- / Igor Vasiliev
- / Dmitri Egorov
- / Anatoly Plaskovsky
- / Women Chekhovtsov, Alexey Gromatchikov
- / Filip Delgado
Nou itilize tou kèk nan materyèl sa yo nan kou fòmasyon sou entènèt nou an sou devlopman sistèm gwo chaj se yon chenn lèt, atik, materyèl, videyo espesyalman chwazi. Liv nou an deja gen plis pase 30 materyèl inik. Konekte!
Sous: www.habr.com
