HighLoad++, Evgeniy Kuzovlev (EcommPay IT): vad man ska göra nÀr en minuts stillestÄnd kostar $100000 XNUMX

Alla pratar om processerna för utveckling och testning, utbildning av personal, ökad motivation, men dessa processer rÀcker inte nÀr en minuts driftstopp kostar enorma summor pengar. Vad ska du göra nÀr du utför finansiella transaktioner under en strikt SLA? Hur ökar man tillförlitligheten och feltoleransen för sina system, tar utveckling och testning ur ekvationen?

HighLoad++, Evgeniy Kuzovlev (EcommPay IT): vad man ska göra nÀr en minuts stillestÄnd kostar $100000 XNUMX

NÀsta HighLoad++-konferens kommer att hÄllas den 6 och 7 april 2020 i St. Petersburg. Detaljer och biljetter till lÀnk. 9 november, 18:00. HighLoad++ Moskva 2018, Delhi + Kolkata hall. Avhandlingar och presentation.

Evgeniy Kuzovlev (nedan – EC): - VĂ€nner, hej! Jag heter Kuzovlev Evgeniy. Jag kommer frĂ„n företaget EcommPay, en specifik division Ă€r EcommPay IT, företagsgruppens IT-avdelning. Och idag ska vi prata om stillestĂ„ndstider – om hur man undviker dem, om hur man minimerar deras konsekvenser om det inte kan undvikas. Ämnet anges enligt följande: "Vad ska man göra nĂ€r en minuts stillestĂ„nd kostar $100 000"? NĂ€r vi blickar framĂ„t Ă€r vĂ„ra siffror jĂ€mförbara.

Vad gör EkommPay IT?

Vilka Àr vi? Varför stÄr jag hÀr framför dig? Varför har jag rÀtt att berÀtta nÄgot hÀr? Och vad ska vi prata om hÀr mer i detalj?

HighLoad++, Evgeniy Kuzovlev (EcommPay IT): vad man ska göra nÀr en minuts stillestÄnd kostar $100000 XNUMX

EcommPay-företagsgruppen Àr en internationell förvÀrvare. Vi behandlar betalningar över hela vÀrlden - i Ryssland, Europa, Sydostasien (allt i vÀrlden). Vi har 9 kontor, totalt 500 anstÀllda, och ungefÀr lite mindre Àn hÀlften av dem Àr IT-specialister. Allt vi gör, allt vi tjÀnar pengar pÄ, gjorde vi sjÀlva.

Vi skrev alla vÄra produkter (och vi har ganska mÄnga av dem - i vÄrt sortiment av stora IT-produkter har vi cirka 16 olika komponenter) sjÀlva; Vi skriver sjÀlva, vi utvecklar oss sjÀlva. Och för tillfÀllet genomför vi ungefÀr en miljon transaktioner om dagen (miljoner Àr förmodligen rÀtt sÀtt att sÀga det). Vi Àr ett ganska ungt företag - vi Àr bara cirka sex Är gamla.

För 6 Är sedan var det en sÄdan startup nÀr killarna kom med verksamheten. De förenades av en idé (det fanns inget annat Àn en idé), och vi sprang. Som alla startuper sprang vi snabbare... För oss var snabbhet viktigare Àn kvalitet.

Vid nÄgot tillfÀlle slutade vi: vi insÄg att vi pÄ nÄgot sÀtt inte lÀngre kunde leva i den hastigheten och med den kvaliteten och vi behövde fokusera pÄ kvalitet först. Just nu bestÀmde vi oss för att skriva en ny plattform som skulle vara korrekt, skalbar och pÄlitlig. De började skriva den hÀr plattformen (de började investera, utveckla utveckling, testa), men vid nÄgot tillfÀlle insÄg de att utveckling och testning inte tillÀt oss att nÄ en ny nivÄ av servicekvalitet.

Du gör en ny produkt, du sÀtter den i produktion, men ÀndÄ kommer nÄgot att gÄ fel nÄgonstans. Och idag ska vi prata om hur man nÄr en ny kvalitetsnivÄ (hur vi gjorde det, om vÄr erfarenhet), ta utveckling och testning ur ekvationen; vi kommer att prata om vad som finns tillgÀngligt för drift - vad drift kan göra sjÀlv, vad det kan erbjuda att testa för att pÄverka kvaliteten.

Driftstopp. Driftbud.

Alltid den viktigaste hörnstenen, vad vi faktiskt kommer att prata om idag Ă€r driftstopp. Ett hemskt ord. Om vi ​​har stillestĂ„nd Ă€r allt dĂ„ligt för oss. Vi springer för att höja den, administratörerna hĂ„ller servern - Gud förbjude att den inte faller, som de sĂ€ger i den lĂ„ten. Detta Ă€r vad vi kommer att prata om idag.

HighLoad++, Evgeniy Kuzovlev (EcommPay IT): vad man ska göra nÀr en minuts stillestÄnd kostar $100000 XNUMX

NÀr vi började Àndra vÄrt förhÄllningssÀtt, bildade vi 4 bud. Jag har dem presenterade pÄ bilderna:

Dessa bud Àr ganska enkla:

HighLoad++, Evgeniy Kuzovlev (EcommPay IT): vad man ska göra nÀr en minuts stillestÄnd kostar $100000 XNUMX

  • Identifiera problemet snabbt.
  • Bli av med det Ă€nnu snabbare.
  • HjĂ€lp till att förstĂ„ orsaken (senare, för utvecklare).
  • Och standardisera tillvĂ€gagĂ„ngssĂ€tt.

Jag skulle vilja uppmÀrksamma er pÄ punkt nr 2. Vi blir av med problemet, inte löser det. Att bestÀmma sig Àr sekundÀrt. För oss Àr det primÀra att anvÀndaren Àr skyddad frÄn detta problem. Det kommer att finnas i nÄgon isolerad miljö, men den hÀr miljön kommer inte att ha nÄgon kontakt med det. Egentligen kommer vi att gÄ igenom dessa fyra problemgrupper (nÄgra mer detaljerat, vissa i mindre detalj), jag kommer att berÀtta vad vi anvÀnder, vilken relevant erfarenhet vi har av lösningar.

Felsökning: NÀr hÀnder de och vad ska man göra Ät dem?

Men vi börjar ur funktion, vi börjar med punkt nr 2 - hur blir man snabbt av med problemet? Det finns ett problem - vi mÄste ÄtgÀrda det. "Vad ska vi göra Ät det hÀr?" - huvudfrÄgan. Och nÀr vi började fundera pÄ hur vi skulle ÄtgÀrda problemet utvecklade vi för oss sjÀlva nÄgra krav som felsökning mÄste följa.

HighLoad++, Evgeniy Kuzovlev (EcommPay IT): vad man ska göra nÀr en minuts stillestÄnd kostar $100000 XNUMX

För att formulera dessa krav bestĂ€mde vi oss för att stĂ€lla oss sjĂ€lva frĂ„gan: ”NĂ€r har vi problem”? Och problem, som det visade sig, uppstĂ„r i fyra fall:

HighLoad++, Evgeniy Kuzovlev (EcommPay IT): vad man ska göra nÀr en minuts stillestÄnd kostar $100000 XNUMX

  • Maskinvarufel.
  • Externa tjĂ€nster misslyckades.
  • Ändra programversionen (samma distribution).
  • Explosiv belastningstillvĂ€xt.

Vi ska inte prata om de tvÄ första. Ett hÄrdvarufel kan lösas helt enkelt: du mÄste ha allt duplicerat. Om dessa Àr diskar mÄste diskarna monteras i RAID; om detta Àr en server mÄste servern dupliceras; om du har en nÀtverksinfrastruktur mÄste du tillhandahÄlla en andra kopia av nÀtverksinfrastrukturen, det vill sÀga du tar den och duplicera det. Och om nÄgot misslyckas byter du till reservkraft. Det Àr svÄrt att sÀga nÄgot mer hÀr.

Det andra Àr de externa tjÀnsternas misslyckande. För de flesta Àr systemet inget problem alls, men inte för oss. Eftersom vi behandlar betalningar Àr vi en aggregator som stÄr mellan anvÀndaren (som anger hans kortdata) och banker, betalningssystem (Visa, MasterCard, Mira, etc.). VÄra externa tjÀnster (betalningssystem, banker) tenderar att misslyckas. Varken vi eller du (om du har sÄdana tjÀnster) kan pÄverka detta.

Vad ska man göra dÄ? Det finns tvÄ alternativ hÀr. Först, om du kan, bör du duplicera den hÀr tjÀnsten pÄ nÄgot sÀtt. Till exempel, om vi kan, överför vi trafik frÄn en tjÀnst till en annan: till exempel behandlades kort genom Sberbank, Sberbank har problem - vi överför trafik [villkorligt] till Raiffeisen. Det andra vi kan göra Àr att mÀrka felet i externa tjÀnster mycket snabbt, och dÀrför kommer vi att prata om svarshastighet i nÀsta del av rapporten.

Faktum Àr att av dessa fyra kan vi specifikt pÄverka förÀndringen av mjukvaruversioner - vidta ÄtgÀrder som kommer att leda till en förbÀttring av situationen i samband med utplaceringar och i samband med explosiv ökning av belastningen. Det var faktiskt vad vi gjorde. HÀr Äterigen en liten notis...

Av dessa fyra problem löses flera direkt om du har ett moln. Om du befinner dig i Microsoft Azhur-, Ozon-molnen, eller anvÀnder vÄra moln, frÄn Yandex eller Mail, sÄ blir Ätminstone ett hÄrdvarufel deras problem och allt blir omedelbart bra för dig i samband med ett hÄrdvarufel.

Vi Àr ett lite okonventionellt företag. HÀr pratar alla om "Kubernets", om moln - vi har varken "Kubernets" eller moln. Men vi har rack med hÄrdvara i mÄnga datacenter, och vi Àr tvungna att leva pÄ den hÀr hÄrdvaran, vi tvingas ta ansvar för allt. DÀrför kommer vi att prata i detta sammanhang. AlltsÄ om problemen. De tvÄ första togs ur parentes.

Ändra mjukvaruversionen. Baser

VÄra utvecklare har inte tillgÄng till produktion. Varför Àr det sÄ? Det Àr bara det att vi Àr PCI DSS-certifierade, och vÄra utvecklare har helt enkelt inte rÀtt att komma in i "produkten". Det Àr det, punkt. Alls. DÀrför upphör utvecklingsansvaret exakt i det ögonblick dÄ utvecklingen lÀmnar in bygget för release.

HighLoad++, Evgeniy Kuzovlev (EcommPay IT): vad man ska göra nÀr en minuts stillestÄnd kostar $100000 XNUMX

VÄr andra grund som vi har, som ocksÄ hjÀlper oss mycket, Àr frÄnvaron av unik odokumenterad kunskap. Jag hoppas att det Àr samma sak för dig. För om sÄ inte Àr fallet kommer du att fÄ problem. Problem kommer att uppstÄ nÀr denna unika, odokumenterade kunskap inte finns vid rÀtt tidpunkt pÄ rÀtt plats. LÄt oss sÀga att du har en person som vet hur man distribuerar en specifik komponent - personen Àr inte dÀr, han Àr pÄ semester eller Àr sjuk - det Àr det, du har problem.

Och den tredje grunden som vi har kommit till. Vi kom till det genom smÀrta, blod, tÄrar - vi kom fram till att alla vÄra byggen innehÄller fel, Àven om den Àr felfri. Vi bestÀmde detta för oss sjÀlva: nÀr vi distribuerar nÄgot, nÀr vi rullar nÄgot i produktion, har vi en build med fel. Vi har format de krav som vÄrt system ska uppfylla.

Krav för att Àndra mjukvaruversionen

Det finns tre krav:

HighLoad++, Evgeniy Kuzovlev (EcommPay IT): vad man ska göra nÀr en minuts stillestÄnd kostar $100000 XNUMX

  • Vi mĂ„ste snabbt rulla tillbaka utbyggnaden.
  • Vi mĂ„ste minimera effekten av en misslyckad implementering.
  • Och vi mĂ„ste snabbt kunna sĂ€tta in parallellt.
    Precis i den ordningen! Varför? För, först och frÀmst, nÀr du distribuerar en ny version Àr hastigheten inte viktig, men det Àr viktigt för dig, om nÄgot gÄr fel, att snabbt rulla tillbaka och ha minimal pÄverkan. Men om du har en uppsÀttning versioner i produktion, för vilka det visar sig att det finns ett fel (av det blÄ, det fanns ingen distribution, men det finns ett fel) - hastigheten för efterföljande distribution Àr viktig för dig. Vad har vi gjort för att möta dessa krav? Vi anvÀnde oss av följande metod:

    HighLoad++, Evgeniy Kuzovlev (EcommPay IT): vad man ska göra nÀr en minuts stillestÄnd kostar $100000 XNUMX

    Det Àr ganska vÀlkÀnt, vi har aldrig uppfunnit det - det hÀr Àr Blue/Green deploy. Vad det Àr? Du mÄste ha en kopia för varje grupp av servrar som dina applikationer Àr installerade pÄ. Kopian Àr "varm": det finns ingen trafik pÄ den, men nÀr som helst kan denna trafik skickas till denna kopia. Detta exemplar innehÄller den tidigare versionen. Och vid tidpunkten för implementering rullar du ut koden till en inaktiv kopia. Sedan byter du en del av trafiken (eller hela) till den nya versionen. SÄledes, för att Àndra trafikflödet frÄn den gamla versionen till den nya, behöver du bara göra en ÄtgÀrd: du behöver Àndra balanseringsanordningen i uppströms, Àndra riktning - frÄn en uppströms till en annan. Detta Àr mycket bekvÀmt och löser problemet med snabb vÀxling och snabb ÄterstÀllning.

    HÀr Àr lösningen pÄ den andra frÄgan minimering: du kan bara skicka en del av din trafik till en ny linje, till en linje med en ny kod (lÄt det vara t.ex. 2%). Och dessa 2% Àr inte 100%! Om du tappade 100 % av din trafik pÄ grund av en misslyckad implementering Àr det skrÀmmande; om du tappade 2 % av din trafik Àr det obehagligt, men det Àr inte skrÀmmande. Dessutom kommer anvÀndare med största sannolikhet inte ens att mÀrka detta, eftersom i vissa fall (inte i alla) samma anvÀndare, som trycker pÄ F5, kommer att tas till en annan fungerande version.

    BlÄ/grön utplacering. Routing

    Allt Àr dock inte sÄ enkelt "BlÄ/Grön deploy"... Alla vÄra komponenter kan delas in i tre grupper:

    • detta Ă€r frontend (betalningssidor som vĂ„ra kunder ser);
    • bearbetning kĂ€rna;
    • adapter för att arbeta med betalningssystem (banker, MasterCard, Visa...).

    Och det finns en nyans hÀr - nyansen ligger i routingen mellan linjerna. Om du bara byter till 100 % av trafiken har du inte dessa problem. Men om du vill byta 2 % börjar du stÀlla frÄgor: "Hur gör man det hÀr?" Det enklaste Àr rakt fram: du kan stÀlla in Round Robin i nginx genom slumpmÀssiga val, och du har 2% till vÀnster, 98% till höger. Men detta Àr inte alltid lÀmpligt.

    Till exempel, i vÄrt fall, interagerar en anvÀndare med systemet med mer Àn en begÀran. Detta Àr normalt: 2, 3, 4, 5 förfrÄgningar - dina system kan vara desamma. Och om det Àr viktigt för dig att alla anvÀndarens förfrÄgningar kommer till samma linje som den första förfrÄgan kom, eller (andra punkten) kommer alla anvÀndarens förfrÄgningar till den nya raden efter bytet (han kunde ha börjat arbeta tidigare med system, före bytet), - dÄ Àr denna slumpmÀssiga distribution inte lÀmplig för dig. Sedan finns det följande alternativ:

    HighLoad++, Evgeniy Kuzovlev (EcommPay IT): vad man ska göra nÀr en minuts stillestÄnd kostar $100000 XNUMX

    Det första alternativet, det enklaste, Àr baserat pÄ klientens grundlÀggande parametrar (IP Hash). Du har en IP, och du delar den frÄn höger till vÀnster efter IP-adress. Sedan kommer det andra fallet jag beskrev att fungera för dig, nÀr implementeringen intrÀffade kunde anvÀndaren redan börja arbeta med ditt system, och frÄn och med driftsÀttningsögonblicket kommer alla förfrÄgningar att gÄ till en ny rad (till samma rad, sÀg).

    Om detta av nÄgon anledning inte passar dig och du mÄste skicka förfrÄgningar till den linje dÀr anvÀndarens första, första förfrÄgan kom, sÄ har du tvÄ alternativ...
    Första alternativet: du kan köpa betald nginx+. Det finns en Sticky sessions-mekanism, som pÄ anvÀndarens första begÀran tilldelar en session till anvÀndaren och binder den till en eller annan uppströms. Alla efterföljande anvÀndarförfrÄgningar inom sessionens livslÀngd kommer att skickas till samma uppströms dÀr sessionen publicerades.

    Detta passade inte oss eftersom vi redan hade vanlig nginx. Att byta till nginx+ Àr inte att det Àr dyrt, det Àr bara att det var lite smÀrtsamt för oss och inte sÀrskilt rÀtt. "Sticks Sessions", till exempel, fungerade inte för oss av den enkla anledningen att "Sticks Sessions" inte tillÄter routing baserat pÄ "Antingen-eller". DÀr kan du specificera vad vi "Sticks Sessions" gör, till exempel genom IP-adress eller med IP-adress och cookies eller med postparameter, men "Antingen-eller" Àr mer komplicerat dÀr.

    DÀrför kom vi till det fjÀrde alternativet. Vi tog nginx pÄ steroider (detta Àr openresty) - det hÀr Àr samma nginx, som dessutom stöder införandet av de senaste skripten. Du kan skriva ett sista skript, ge det en "öppen vila", och det sista skriptet kommer att exekveras nÀr anvÀndarens begÀran kommer.

    Och vi skrev faktiskt ett sÄdant skript, satte oss "openresti" och i det hÀr skriptet sorterar vi igenom 6 olika parametrar genom sammanlÀnkning "Eller". Beroende pÄ nÀrvaron av en eller annan parameter vet vi att anvÀndaren kom till en eller annan sida, en eller annan rad.

    BlÄ/grön utplacering. Fördelar och nackdelar

    Naturligtvis var det förmodligen möjligt att göra det lite enklare (anvĂ€nd samma "Sticky Sessions"), men vi har ocksĂ„ en sĂ„dan nyans att inte bara anvĂ€ndaren interagerar med oss ​​inom ramen för en bearbetning av en transaktion... Men betalningssystem interagerar ocksĂ„ med oss: Efter att vi har behandlat transaktionen (genom att skicka en förfrĂ„gan till betalningssystemet) fĂ„r vi en coolback.
    Och lĂ„t oss sĂ€ga, om vi inuti vĂ„r krets kan vidarebefordra anvĂ€ndarens IP-adress i alla förfrĂ„gningar och dela upp anvĂ€ndare baserat pĂ„ IP-adressen, dĂ„ kommer vi inte att sĂ€ga samma "Visa": "Dude, vi Ă€r ett sĂ„dant retroföretag, vi verkar att vara internationell (pĂ„ webbplatsen och i Ryssland)... VĂ€nligen ange anvĂ€ndarens IP-adress i ett extra fĂ€lt, ditt protokoll Ă€r standardiserat”! Det Ă€r klart att de inte kommer överens.

    HighLoad++, Evgeniy Kuzovlev (EcommPay IT): vad man ska göra nÀr en minuts stillestÄnd kostar $100000 XNUMX

    DĂ€rför fungerade inte detta för oss – vi gjorde openresty. Följaktligen, med routing fick vi nĂ„got sĂ„ hĂ€r:

    Blue/Green Deployment har följaktligen de fördelar som jag nÀmnde och nackdelar.

    TvÄ nackdelar:

    • du behöver bry dig om routing;
    • den andra största nackdelen Ă€r kostnaden.

    Du behöver dubbelt sÄ mÄnga servrar, du behöver dubbelt sÄ mÄnga operativa resurser, du behöver lÀgga dubbelt sÄ mycket anstrÀngning pÄ att underhÄlla hela denna djurpark.

    Förresten, bland fördelarna finns det en sak till som jag inte har nĂ€mnt tidigare: du har en reserv vid lasttillvĂ€xt. Om du har en explosiv ökning av belastningen har du ett stort antal anvĂ€ndare, dĂ„ inkluderar du helt enkelt den andra raden i 50 till 50-distributionen – och du har direkt x2-servrar i ditt kluster tills du löser problemet med att ha fler servrar.

    Hur gör man en snabb implementering?

    Vi pratade om hur man löser problemet med minimering och snabb ÄterstÀllning, men frÄgan kvarstÄr: "Hur distribueras snabbt?"

    HighLoad++, Evgeniy Kuzovlev (EcommPay IT): vad man ska göra nÀr en minuts stillestÄnd kostar $100000 XNUMX

    Det Àr kort och enkelt hÀr.

    • Du mĂ„ste ha ett CD-system (Continuous Delivery) - du kan inte leva utan det. Om du har en server kan du distribuera manuellt. Vi har ungefĂ€r ett och ett halvt tusen servrar och ett och ett halvt tusen handtag, naturligtvis - vi kan plantera en avdelning av storleken pĂ„ det hĂ€r rummet bara för att distribuera.
    • Utbyggnaden mĂ„ste vara parallell. Om din distribution Ă€r sekventiell Ă€r allt dĂ„ligt. En server Ă€r normalt, du kommer att distribuera ett och ett halvt tusen servrar hela dagen.
    • Återigen, för acceleration Ă€r detta förmodligen inte lĂ€ngre nödvĂ€ndigt. Under driftsĂ€ttningen byggs projektet vanligtvis. Du har ett webbprojekt, det finns en front-end-del (du gör ett webbpaket dĂ€r, du kompilerar npm - nĂ„got sĂ„dant), och den hĂ€r processen Ă€r i princip kortlivad - 5 minuter, men dessa 5 minuter kan vara kritisk. Det Ă€r dĂ€rför vi till exempel inte gör det: vi tog bort dessa 5 minuter, vi distribuerar artefakter.

      Vad Àr en artefakt? En artefakt Àr en monterad byggnad dÀr alla monteringsdelar redan har slutförts. Vi lagrar denna artefakt i artefaktförrÄdet. En gÄng anvÀnde vi tvÄ sÄdana lagringar - det var Nexus och nu jFrog Artifactory. Vi anvÀnde först "Nexus" eftersom vi började öva pÄ detta tillvÀgagÄngssÀtt i java-applikationer (det passade det bra). Sedan lÀgger de in nÄgra av applikationerna skrivna i PHP dÀr; och "Nexus" passade inte lÀngre, och dÀrför valde vi jFrog Artefactory, som kan artifaktisera nÀstan allt. Vi har till och med kommit till den punkten att vi i detta artefaktförrÄd lagrar vÄra egna binÀra paket som vi samlar in för servrar.

    Explosiv belastningstillvÀxt

    Vi pratade om att Àndra mjukvaruversionen. NÀsta sak vi har Àr en explosiv ökning av belastningen. HÀr menar jag förmodligen med explosiv tillvÀxt av lasten inte helt rÀtt...

    Vi skrev ett nytt system - det Àr serviceinriktat, moderiktigt, vackert, arbetare överallt, köer överallt, asynkront överallt. Och i sÄdana system kan data flöda genom olika flöden. För den första transaktionen kan den 1:a, 3:e, 10:e arbetaren anvÀndas, för den andra transaktionen - den 2:a, 4:e, 5:e. Och idag, lÄt oss sÀga, pÄ morgonen har du ett dataflöde som anvÀnder de tre första arbetarna, och pÄ kvÀllen förÀndras det dramatiskt, och allt anvÀnder de andra tre arbetarna.

    Och hÀr visar det sig att du pÄ nÄgot sÀtt behöver skala arbetarna, du mÄste pÄ nÄgot sÀtt skala dina tjÀnster, men samtidigt förhindra resursuppsvÀllning.

    HighLoad++, Evgeniy Kuzovlev (EcommPay IT): vad man ska göra nÀr en minuts stillestÄnd kostar $100000 XNUMX

    Vi har definierat vÄra krav. Dessa krav Àr ganska enkla: att det finns Service discovery, parametrisering - allt Àr standard för att bygga sÄdana skalbara system, förutom en punkt - resursavskrivning. Vi sa att vi inte Àr redo att amortera resurser sÄ att servrarna vÀrmer luften. Vi tog "Konsul", vi tog "Nomad", som sköter vÄra arbetare.

    Varför Àr detta ett problem för oss? LÄt oss backa lite. Vi har nu ett 70-tal betalningssystem bakom oss. PÄ morgonen gÄr trafiken genom Sberbank, sedan föll till exempel Sberbank och vi byter till ett annat betalningssystem. Vi hade 100 anstÀllda före Sberbank, och efter det mÄste vi kraftigt öka 100 anstÀllda för ett annat betalningssystem. Och det Àr önskvÀrt att allt detta sker utan mÀnsklig medverkan. För om det finns mÀnskligt deltagande borde det finnas en ingenjör som sitter dÀr 24/7, som bara borde göra detta, eftersom sÄdana misslyckanden, nÀr 70 system Àr bakom dig, intrÀffar regelbundet.

    DÀrför tittade vi pÄ Nomad, som har en öppen IP, och skrev vÄr egen grej, Scale-Nomad - ScaleNo, som gör ungefÀr följande: den övervakar köns tillvÀxt och minskar eller ökar antalet arbetare beroende pÄ dynamiken av kön. NÀr vi gjorde det tÀnkte vi: "Vi kanske kan öppna kÀllkod?" Sedan tittade de pÄ henne - hon var sÄ enkel som tvÄ kopek.

    Hittills har vi inte öppna kÀllkod, men om du plötsligt efter rapporten, efter att ha insett att du behöver nÄgot sÄdant, behöver det, mina kontakter finns i den sista bilden - skriv till mig. Om det Àr minst 3-5 personer sÄ sponsrar vi det.

    HighLoad++, Evgeniy Kuzovlev (EcommPay IT): vad man ska göra nÀr en minuts stillestÄnd kostar $100000 XNUMX

    Hur det fungerar? LÄt oss ta en titt! Framöver: pÄ vÀnster sida finns en del av vÄr övervakning: det hÀr Àr en rad, överst Àr tiden för hÀndelsebearbetning, i mitten Àr antalet transaktioner, lÀngst ner Àr antalet arbetare.

    Om du tittar sĂ„ finns det ett fel i den hĂ€r bilden. PĂ„ toppdiagrammet kraschade ett av diagrammen pĂ„ 45 sekunder – ett av betalningssystemen gick ner. Omedelbart kom trafik in pĂ„ 2 minuter och kön började vĂ€xa pĂ„ ett annat betalningssystem, dĂ€r det inte fanns nĂ„gra arbetare (vi utnyttjade inte resurser - tvĂ€rtom, vi disponerade resursen korrekt). Vi ville inte vĂ€rma - det fanns ett minimalt antal, cirka 5-10 arbetare, men de klarade sig inte.

    Den sista grafen visar en "puckel", vilket bara betyder att "Skaleno" fördubblade detta belopp. Och sedan, nÀr grafen sjönk lite, minskade han den lite - antalet arbetare Àndrades automatiskt. Det Àr sÄ den hÀr saken fungerar. Vi pratade om punkt nummer 2 - "Hur man snabbt blir av med skÀl."

    Övervakning. Hur identifierar man snabbt problemet?

    Nu Ă€r den första punkten "Hur identifierar man snabbt problemet?" Övervakning! Vi mĂ„ste förstĂ„ vissa saker snabbt. Vilka saker bör vi förstĂ„ snabbt?

    HighLoad++, Evgeniy Kuzovlev (EcommPay IT): vad man ska göra nÀr en minuts stillestÄnd kostar $100000 XNUMX

    Tre saker!

    • Vi mĂ„ste förstĂ„ och snabbt förstĂ„ hur vĂ„ra egna resurser presterar.
    • Vi mĂ„ste snabbt förstĂ„ fel och övervaka prestandan hos system som Ă€r externa för oss.
    • Den tredje punkten Ă€r att identifiera logiska fel. Det Ă€r dĂ„ systemet fungerar för dig, allt Ă€r normalt enligt alla indikatorer, men nĂ„got gĂ„r fel.

    Jag kommer förmodligen inte att berÀtta nÄgot sÄ coolt hÀr. Jag blir Captain Obvious. Vi letade efter vad som fanns pÄ marknaden. Vi har ett "roligt zoo". Det hÀr Àr den sortens djurpark vi har nu:

    HighLoad++, Evgeniy Kuzovlev (EcommPay IT): vad man ska göra nÀr en minuts stillestÄnd kostar $100000 XNUMX

    Vi anvÀnder Zabbix för att övervaka hÄrdvara, för att övervaka servrarnas huvudindikatorer. Vi anvÀnder Okmeter för databaser. Vi anvÀnder "Grafana" och "Prometheus" för alla andra indikatorer som inte passar de tvÄ första, nÄgra med "Grafana" och "Prometheus", och nÄgra med "Grafana" med "Influx" och Telegraf.

    För ett Är sedan ville vi anvÀnda New Relic. Cool grej, den kan göra allt. Men sÄ mycket hon kan göra allt sÄ Àr hon sÄ dyr. NÀr vi vÀxte till en volym pÄ 1,5 tusen servrar kom en leverantör till oss och sa: "LÄt oss ingÄ ett avtal för nÀsta Är." Vi tittade pÄ priset och sa nej, det kommer vi inte att göra. Nu överger vi New Relic, vi har cirka 15 servrar kvar under övervakning av New Relic. Priset visade sig vara helt vilt.

    Och det finns ett verktyg som vi implementerade sjÀlva - det hÀr Àr Debugger. Först kallade vi det "Bagger", men sedan gick en engelsklÀrare förbi, skrattade vilt och döpte om det till "Debagger." Vad det Àr? Detta Àr ett verktyg som i sjÀlva verket pÄ 15-30 sekunder pÄ varje komponent, som en "svart lÄda" i systemet, kör tester pÄ komponentens övergripande prestanda.

    Om det till exempel finns en extern sida (betalningssida) öppnar han den helt enkelt och tittar pÄ hur den ska se ut. Om detta bearbetas skickar han en test "transaktion" och ser till att denna "transaktion" kommer fram. Om detta Àr en koppling till betalningssystem sÄ avfyrar vi en testförfrÄgan i enlighet med detta, dÀr vi kan, och ser att allt Àr bra med oss.

    Vilka indikatorer Àr viktiga för uppföljning?

    Vad bevakar vi frÀmst? Vilka indikatorer Àr viktiga för oss?

    HighLoad++, Evgeniy Kuzovlev (EcommPay IT): vad man ska göra nÀr en minuts stillestÄnd kostar $100000 XNUMX

    • Responstid / RPS pĂ„ fronter Ă€r en mycket viktig indikator. Han svarar direkt att nĂ„got Ă€r fel pĂ„ dig.
    • Antalet behandlade meddelanden i alla köer.
    • Antal arbetare.
    • GrundlĂ€ggande korrekthetsmĂ„tt.

    Den sista punkten Àr "affÀr", "affÀrs"-mÄtt. Om du vill övervaka samma sak mÄste du definiera en eller tvÄ mÀtvÀrden som Àr huvudindikatorerna för dig. VÄrt mÄtt Àr genomströmning (detta Àr förhÄllandet mellan antalet framgÄngsrika transaktioner och det totala transaktionsflödet). Om nÄgot Àndras i den med ett intervall pÄ 5-10-15 minuter betyder det att vi har problem (om det förÀndras radikalt).

    Hur det ser ut för oss Àr ett exempel pÄ en av vÄra styrelser:

    HighLoad++, Evgeniy Kuzovlev (EcommPay IT): vad man ska göra nÀr en minuts stillestÄnd kostar $100000 XNUMX

    PÄ vÀnster sida finns 6 grafer, detta Àr enligt linjerna - antalet arbetare och antalet meddelanden i köerna. PÄ höger sida - RPS, RTS. Nedan finns samma "affÀrs"-mÄtt. Och i "affÀrs"-mÄttet kan vi omedelbart se att nÄgot gick fel i de tvÄ mittersta graferna... Detta Àr bara ytterligare ett system som stÄr bakom oss som har fallit.

    Det andra vi var tvungna att göra var att övervaka de externa betalningssystemens fall. HÀr tog vi OpenTracing - en mekanism, standard, paradigm som lÄter dig spÄra distribuerade system; och det Àndrades lite. Standard OpenTracing-paradigmet sÀger att vi bygger ett spÄr för varje enskild begÀran. Vi behövde inte detta, och vi slog in det i ett sammanfattande, aggregeringsspÄr. Vi gjorde ett verktyg som lÄter oss spÄra hastigheten pÄ systemen bakom oss.

    HighLoad++, Evgeniy Kuzovlev (EcommPay IT): vad man ska göra nÀr en minuts stillestÄnd kostar $100000 XNUMX

    Grafen visar att ett av betalningssystemen började svara pÄ 3 sekunder - vi har problem. Dessutom kommer den hÀr saken att reagera nÀr problemen börjar, med ett intervall pÄ 20-30 sekunder.

    Och den tredje klassen av övervakningsfel som finns Àr logisk övervakning.

    För att vara Àrlig sÄ visste jag inte vad jag skulle rita pÄ den hÀr bilden, för vi hade lÀnge letat pÄ marknaden efter nÄgot som skulle passa oss. Vi hittade ingenting, sÄ vi fick göra det sjÀlva.

    HighLoad++, Evgeniy Kuzovlev (EcommPay IT): vad man ska göra nÀr en minuts stillestÄnd kostar $100000 XNUMX

    Vad menar jag med logisk övervakning? Tja, förestÀll dig: du gör dig sjÀlv till ett system (till exempel en Tinder-klon); du gjorde det, lanserade det. Den framgÄngsrika chefen Vasya Pupkin satte den pÄ sin telefon, ser en tjej dÀr, gillar henne... och liknande gÄr inte till tjejen - liknande gÄr till sÀkerhetsvakten Mikhalych frÄn samma affÀrscenter. Chefen gÄr ner och undrar sedan: "Varför ler den hÀr sÀkerhetsvakten Mikhalych sÄ glatt mot honom?"

    I sÄdana situationer... För oss lÄter den hÀr situationen lite annorlunda, eftersom (skrev jag) detta Àr en anseendeförlust som indirekt leder till ekonomiska förluster. VÄr situation Àr den motsatta: vi kan drabbas av direkta ekonomiska förluster - till exempel om vi genomförde en transaktion som framgÄngsrik, men den var misslyckad (eller vice versa). Jag var tvungen att skriva ett eget verktyg som spÄrar antalet framgÄngsrika transaktioner över tid med hjÀlp av affÀrsindikatorer. Hittade inget pÄ marknaden! Det var precis den idén jag ville förmedla. Det finns inget pÄ marknaden för att lösa den hÀr typen av problem.

    Det hÀr handlade om hur man snabbt kunde identifiera problemet.

    Hur man bestÀmmer orsakerna till distributionen

    Den tredje gruppen av problem som vi löser Ă€r efter att vi har identifierat problemet, efter att vi blivit av med det, skulle det vara bra att förstĂ„ orsaken till utvecklingen, för att testa, och göra nĂ„got Ă„t ​​det. DĂ€rför mĂ„ste vi undersöka, vi mĂ„ste höja stockarna.

    HighLoad++, Evgeniy Kuzovlev (EcommPay IT): vad man ska göra nÀr en minuts stillestÄnd kostar $100000 XNUMX

    Om vi ​​pratar om stockar (huvudorsaken Ă€r stockar), sĂ„ finns huvuddelen av vĂ„ra stockar i ELK Stack - nĂ€stan alla har samma. För vissa Ă€r det kanske inte i ELK, men om du skriver loggar i gigabyte sĂ„ kommer du förr eller senare till ELK. Vi skriver dem i terabyte.

    HighLoad++, Evgeniy Kuzovlev (EcommPay IT): vad man ska göra nÀr en minuts stillestÄnd kostar $100000 XNUMX

    Det finns ett problem hÀr. Vi fixade det, rÀttade till felet för anvÀndaren, började grÀva fram vad som fanns, klÀttrade in i Kibana, skrev in transaktions-id dÀr och fick en sÄn hÀr fotduk (visar mycket). Och absolut ingenting Àr klart i denna fotduk. Varför? Ja, eftersom det inte framgÄr vilken del som tillhör vilken arbetare, vilken del som tillhör vilken komponent. Och i det ögonblicket insÄg vi att vi behövde spÄrning - samma OpenTracing som jag talade om.

    Vi trodde det hÀr för ett Är sedan, riktade vÄr uppmÀrksamhet mot marknaden och det fanns tvÄ verktyg dÀr - "Zipkin" och "Jaeger". "Jager" Àr faktiskt en sÄdan ideologisk arvtagare, en ideologisk eftertrÀdare till "Zipkin". Allt Àr bra i Zipkin, förutom att det inte vet hur man aggregerar, det vet inte hur man inkluderar loggar i spÄret, bara tidsspÄrning. Och "Jager" stödde detta.

    Vi tittade pÄ "Jager": du kan instrumentera applikationer, du kan skriva i Api (Api-standarden för PHP pÄ den tiden godkÀndes dock inte - det hÀr var ett Är sedan, men nu Àr det redan godkÀnt), men dÀr var absolut ingen kund. "Okej", tÀnkte vi och skrev till vÄr egen klient. Vad fick vi? UngefÀr sÄ hÀr ser det ut:

    HighLoad++, Evgeniy Kuzovlev (EcommPay IT): vad man ska göra nÀr en minuts stillestÄnd kostar $100000 XNUMX

    I Jaeger skapas spann för varje meddelande. Det vill sÀga nÀr en anvÀndare öppnar systemet ser han ett eller tvÄ block för varje inkommande begÀran (1-2-3 - antalet inkommande förfrÄgningar frÄn anvÀndaren, antalet block). För att göra det enklare för anvÀndarna har vi lagt till taggar i loggarna och tidsspÄr. Följaktligen, i hÀndelse av ett fel, kommer vÄr applikation att markera loggen med lÀmplig feltagg. Du kan filtrera efter Error-tagg och endast spann som innehÄller detta block med ett fel kommer att visas. SÄ hÀr ser det ut om vi utökar spann:

    HighLoad++, Evgeniy Kuzovlev (EcommPay IT): vad man ska göra nÀr en minuts stillestÄnd kostar $100000 XNUMX

    Inne i spÀnnet finns en uppsÀttning spÄr. I det hÀr fallet Àr det tre testspÄr, och det tredje spÄret talar om för oss att ett fel uppstod. Samtidigt ser vi hÀr ett tidsspÄr: vi har en tidsskala överst, och vi ser vid vilket tidsintervall den eller den loggen registrerades.

    DÀrför gick det bra för oss. Vi skrev vÄrt eget tillÀgg och vi öppnade det. Om du vill arbeta med spÄrning, om du vill arbeta med "Jager" i PHP, finns vÄrt tillÀgg, vÀlkommen att anvÀnda, som de sÀger:

    HighLoad++, Evgeniy Kuzovlev (EcommPay IT): vad man ska göra nÀr en minuts stillestÄnd kostar $100000 XNUMX

    Vi har det hÀr tillÀgget - det Àr en klient för OpenTracing Api, det Àr gjort som php-förlÀngning, det vill sÀga du mÄste montera det och installera det pÄ systemet. För ett Är sedan var det inget annorlunda. Nu finns det andra klienter som Àr som komponenter. HÀr Àr det upp till dig: antingen pumpar du ut komponenterna med en kompositör, eller sÄ anvÀnder du förlÀngning upp till dig.

    Företagsstandarder

    Vi pratade om de tre buden. Det fjÀrde budet Àr att standardisera tillvÀgagÄngssÀtt. Vad handlar det hÀr om? Det handlar om detta:

    HighLoad++, Evgeniy Kuzovlev (EcommPay IT): vad man ska göra nÀr en minuts stillestÄnd kostar $100000 XNUMX

    Varför finns ordet "företag" hÀr? Inte för att vi Àr ett stort eller byrÄkratiskt företag, nej! Jag ville anvÀnda ordet "företag" hÀr i sammanhanget att varje företag, varje produkt bör ha sina egna standarder, inklusive du. Vilka standarder har vi?

    HighLoad++, Evgeniy Kuzovlev (EcommPay IT): vad man ska göra nÀr en minuts stillestÄnd kostar $100000 XNUMX

    • Vi har utbyggnadsregler. Vi flyttar ingenstans utan honom, det kan vi inte. Vi sĂ€tter in cirka 60 gĂ„nger i veckan, det vill sĂ€ga vi sĂ€tter in nĂ€stan konstant. Samtidigt har vi till exempel i insĂ€ttningsbestĂ€mmelserna ett tabu om insatser pĂ„ fredag ​​– i princip sĂ€tter vi inte in.
    • Vi krĂ€ver dokumentation. Inte en enda ny komponent kommer i produktion om det inte finns dokumentation för den, Ă€ven om den föddes under pennan av vĂ„ra RnD-specialister. Vi krĂ€ver av dem installationsinstruktioner, en övervakningskarta och en grov beskrivning (ja, som programmerare kan skriva) av hur den hĂ€r komponenten fungerar, hur man felsöker den.
    • Vi löser inte orsaken till problemet, utan problemet - det jag redan har sagt. Det Ă€r viktigt för oss att skydda anvĂ€ndaren frĂ„n problem.
    • Vi har tillstĂ„nd. Vi anser till exempel inte att det Ă€r stillestĂ„nd om vi tappade 2 % av trafiken inom tvĂ„ minuter. Detta ingĂ„r i princip inte i vĂ„r statistik. Om det Ă€r mer procentuellt eller tillfĂ€lligt rĂ€knar vi redan.
    • Och vi skriver alltid obduktioner. Oavsett vad som hĂ€nder med oss, kommer varje situation dĂ€r nĂ„gon betedde sig onormalt i produktionen att Ă„terspeglas i obduktionen. En obduktion Ă€r ett dokument dĂ€r du skriver vad som hĂ€nde dig, en detaljerad tidpunkt, vad du gjorde för att rĂ€tta till det och (detta Ă€r en obligatorisk spĂ€rr!) vad du kommer att göra för att förhindra att detta hĂ€nder i framtiden. Detta Ă€r obligatoriskt och nödvĂ€ndigt för efterföljande analys.

    Vad anses vara stillestÄnd?

    HighLoad++, Evgeniy Kuzovlev (EcommPay IT): vad man ska göra nÀr en minuts stillestÄnd kostar $100000 XNUMX

    Vad ledde allt detta till?

    Detta ledde till att (vi hade vissa problem med stabiliteten, detta passade varken kunder eller oss) under de senaste 6 mÄnaderna var vÄr stabilitetsindikator 99,97. Vi kan sÀga att detta inte Àr sÀrskilt mycket. Ja, vi har nÄgot att strÀva efter. Av denna indikator Àr ungefÀr hÀlften stabiliteten, sÄ att sÀga, inte av vÄr, utan av vÄr webbapplikationsbrandvÀgg, som stÄr framför oss och anvÀnds som en tjÀnst, men kunderna bryr sig inte om detta.

    Vi lÀrde oss att sova pÄ natten. Till sist! För sex mÄnader sedan kunde vi inte. Och pÄ den hÀr lappen med resultatet, skulle jag vilja göra en anteckning. I gÄr kvÀll kom ett underbart reportage om styrsystemet för en kÀrnreaktor. Om personerna som skrev det hÀr systemet kan höra mig, vÀnligen glöm vad jag sa om "2% Àr inte driftstopp." För dig Àr 2 % stillestÄnd, Àven om det Àr tvÄ minuter!

    Det Àr allt! Dina frÄgor.

    HighLoad++, Evgeniy Kuzovlev (EcommPay IT): vad man ska göra nÀr en minuts stillestÄnd kostar $100000 XNUMX

    Om balanserare och databasmigrering

    FrĂ„ga frĂ„n publiken (nedan – B): – God kvĂ€ll. Tack sĂ„ mycket för en sĂ„dan adminrapport! En kort frĂ„ga om dina balansörer. Du nĂ€mnde att du har en WAF, det vill sĂ€ga som jag förstĂ„r det anvĂ€nder du nĂ„gon form av extern balanserare...

    EK: – Nej, vi anvĂ€nder vĂ„ra tjĂ€nster som en balanserare. I det hĂ€r fallet Ă€r WAF exklusivt ett DDoS-skyddsverktyg för oss.

    PÅ: – Kan du sĂ€ga nĂ„gra ord om balanserare?

    EK: – Som jag redan sa, det hĂ€r Ă€r en grupp servrar i openresty. Vi har nu 5 reservgrupper som svarar exklusivt... det vill sĂ€ga en server som kör enbart openresty, den proxar bara trafik. Följaktligen, för att förstĂ„ hur mycket vi har: vi har nu ett regelbundet trafikflöde pĂ„ flera hundra megabit. De klarar sig, de mĂ„r bra, de anstrĂ€nger sig inte ens.

    PÅ: – OcksĂ„ en enkel frĂ„ga. HĂ€r Ă€r blĂ„/grön implementering. Vad gör man till exempel med databasmigreringar?

    EK: - Bra frĂ„ga! Titta, i Blue/Green-distribution har vi separata köer för varje rad. Det vill sĂ€ga, om vi pratar om hĂ€ndelseköer som överförs frĂ„n arbetare till arbetare, finns det separata köer för den blĂ„ linjen och för den gröna linjen. Om vi ​​pratar om sjĂ€lva databasen, sĂ„ har vi medvetet minskat den sĂ„ mycket vi kunde, flyttat allt praktiskt taget till köer; i databasen lagrar vi bara en stapel med transaktioner. Och vĂ„r transaktionsstapel Ă€r densamma för alla linjer. Med databasen i detta sammanhang: vi delar inte upp den i blĂ„tt och grönt, eftersom bĂ„da versionerna av koden mĂ„ste veta vad som hĂ€nder med transaktionen.

    VÀnner, jag har ocksÄ ett litet pris att sporra er - en bok. Och jag borde tilldelas den för den bÀsta frÄgan.

    PÅ: - HallĂ„. Tack för rapporten. FrĂ„gan Ă€r denna. Du övervakar betalningar, du övervakar de tjĂ€nster som du kommunicerar med... Men hur övervakar du sĂ„ att en person pĂ„ nĂ„got sĂ€tt kom till din betalningssida, gjorde en betalning och projektet krediterade honom med pengar? Det vill sĂ€ga, hur övervakar du att marchant Ă€r tillgĂ€nglig och har accepterat din callback?

    EK: – "Merchant" för oss Ă€r i detta fall exakt samma externa tjĂ€nst som betalningssystemet. Vi övervakar handlarens svarshastighet.

    Om databaskryptering

    PÅ: - HallĂ„. Jag har en lite relaterad frĂ„ga. Du har PCI DSS-kĂ€nsliga data. Jag ville veta hur du lagrar PAN i köer som du behöver överföra till? AnvĂ€nder du nĂ„gon kryptering? Och detta leder till den andra frĂ„gan: enligt PCI DSS Ă€r det nödvĂ€ndigt att periodiskt omkryptera databasen vid Ă€ndringar (avskedande av administratörer, etc.) - vad hĂ€nder med tillgĂ€ngligheten i det hĂ€r fallet?

    HighLoad++, Evgeniy Kuzovlev (EcommPay IT): vad man ska göra nÀr en minuts stillestÄnd kostar $100000 XNUMX

    EK: – Underbar frĂ„ga! För det första lagrar vi inte PAN i köer. Vi har inte rĂ€tt att lagra PAN var som helst i tydlig form, i princip, sĂ„ vi anvĂ€nder en speciell tjĂ€nst (vi kallar det "Kademon") - det hĂ€r Ă€r en tjĂ€nst som bara gör en sak: den tar emot ett meddelande som input och skickar ut ett krypterat meddelande. Och vi lagrar allt med detta krypterade meddelande. Följaktligen Ă€r vĂ„r nyckellĂ€ngd under en kilobyte, sĂ„ att detta Ă€r seriöst och pĂ„litligt.

    PÅ: – Behöver du 2 kilobyte nu?

    EK: – Det verkar som om det var 256 igĂ„r... Ja, var annars?!

    Följaktligen Àr detta den första. Och för det andra, lösningen som finns, den stöder omkrypteringsproceduren - det finns tvÄ par "keks" (nycklar), som ger "dÀck" som krypterar (nyckeln Àr nycklarna, dek Àr derivator av nycklarna som krypterar) . Och om proceduren initieras (det hÀnder regelbundet, frÄn 3 mÄnader till ± nÄgra), laddar vi ner ett nytt par "kakor" och vi krypterar om data. Vi har separata tjÀnster som river ut all data och krypterar den pÄ ett nytt sÀtt; Data lagras bredvid identifieraren för nyckeln med vilken den Àr krypterad. Följaktligen, sÄ snart vi krypterar data med nya nycklar, tar vi bort den gamla nyckeln.

    Ibland mÄste betalningar göras manuellt...

    PÅ: – Det vill sĂ€ga, om en Ă„terbetalning har kommit för nĂ„gon operation, kommer du fortfarande att dekryptera den med den gamla nyckeln?

    EK: - Ja.

    PÅ: – Sedan en liten frĂ„ga till. NĂ€r nĂ„gon form av fel, fall eller incident intrĂ€ffar Ă€r det nödvĂ€ndigt att driva igenom transaktionen manuellt. Det finns en sĂ„dan situation.

    EK: - Ja ibland.

    PÅ: – Var fĂ„r du dessa uppgifter ifrĂ„n? Eller gĂ„r du sjĂ€lv till det hĂ€r förrĂ„det?

    EK: – Nej, visst, vi har nĂ„got slags back-office-system som innehĂ„ller ett grĂ€nssnitt för vĂ„r support. Om vi ​​inte vet vilken status transaktionen har (till exempel tills betalningssystemet svarade med en timeout), vet vi inte pĂ„ förhand, det vill sĂ€ga att vi tilldelar slutstatus endast med fullt förtroende. I det hĂ€r fallet tilldelar vi transaktionen en speciell status för manuell bearbetning. PĂ„ morgonen, nĂ€sta dag, sĂ„ snart supporten fĂ„r information om att sĂ„dana och sĂ„dana transaktioner finns kvar i betalningssystemet, bearbetar de dem manuellt i detta grĂ€nssnitt.

    HighLoad++, Evgeniy Kuzovlev (EcommPay IT): vad man ska göra nÀr en minuts stillestÄnd kostar $100000 XNUMX

    PÅ: – Jag har ett par frĂ„gor. En av dem Ă€r fortsĂ€ttningen av PCI DSS-zonen: hur loggar du deras krets? Den hĂ€r frĂ„gan beror pĂ„ att utvecklaren kunde ha lagt vad som helst i loggarna! Andra frĂ„gan: hur rullar du ut snabbkorrigeringar? Att anvĂ€nda handtag i databasen Ă€r ett alternativ, men det kan finnas gratis snabbkorrigeringar - vad Ă€r proceduren dĂ€r? Och den tredje frĂ„gan Ă€r förmodligen relaterad till RTO, RPO. Din tillgĂ€nglighet var 99,97, nĂ€stan fyra nior, men som jag förstĂ„r det har du ett andra datacenter, ett tredje datacenter och ett femte datacenter... Hur synkroniserar du dem, replikerar dem och allt annat?

    EK: – LĂ„t oss börja med den första. GĂ€llde den första frĂ„gan loggar? NĂ€r vi skriver loggar har vi ett lager som maskerar all kĂ€nslig data. Hon tittar pĂ„ masken och pĂ„ de ytterligare fĂ€lten. Följaktligen kommer vĂ„ra loggar ut med redan maskerade data och en PCI DSS-krets. Detta Ă€r en av de vanliga uppgifterna som tilldelas testavdelningen. De mĂ„ste kontrollera varje uppgift, inklusive loggarna som de skriver, och detta Ă€r en av de vanliga uppgifterna under kodgranskning, för att kontrollera att utvecklaren inte skrev ner nĂ„got. Efterföljande kontroller av detta utförs regelbundet av informationssĂ€kerhetsavdelningen ungefĂ€r en gĂ„ng i veckan: loggar för den sista dagen tas selektivt och de körs genom en speciell skanner-analysator frĂ„n testservrar för att kontrollera allt.
    Om hotfixar. Detta ingÄr i vÄra distributionsregler. Vi har en separat klausul om snabbkorrigeringar. Vi tror att vi distribuerar snabbkorrigeringar dygnet runt nÀr vi behöver det. SÄ fort versionen Àr monterad, sÄ fort den körs, sÄ fort vi har en artefakt, har vi en systemadministratör i tjÀnst pÄ ett samtal frÄn supporten, och han distribuerar den i det ögonblick det Àr nödvÀndigt.

    UngefÀr "fyra nior". Den siffra som vi har nu har verkligen uppnÄtts, och vi strÀvade efter den i ett annat datacenter. Nu har vi ett andra datacenter, och vi börjar gÄ mellan dem, och frÄgan om replikering mellan datacenter Àr verkligen en icke-trivial frÄga. Vi försökte lösa det pÄ en gÄng med olika metoder: vi försökte anvÀnda samma "Tarantula" - det fungerade inte för oss, jag ska berÀtta omedelbart. Det var dÀrför det slutade med att vi bestÀllde "sens" manuellt. Faktum Àr att varje applikation i vÄrt system kör den nödvÀndiga "Àndring - klar"-synkroniseringen mellan datacenter asynkront.

    PÅ: – Om du fick en andra, varför fick du inte en tredje? För ingen har split-brain Ă€nnu...

    EK: – Men vi har inte Split Brain. PĂ„ grund av att varje applikation drivs av en multimaster spelar det ingen roll för oss vilket center förfrĂ„gan kom till. Vi Ă€r redo för det faktum att om ett av vĂ„ra datacenter misslyckas (vi förlitar oss pĂ„ detta) och mitt i en anvĂ€ndarförfrĂ„gan byter till det andra datacentret, Ă€r vi beredda att förlora denna anvĂ€ndare, verkligen; men dessa kommer att vara enheter, absoluta enheter.

    PÅ: - God kvĂ€ll. Tack för rapporten. Du pratade om din debugger, som kör nĂ„gra testtransaktioner i produktionen. Men berĂ€tta om testtransaktioner! Hur djupt gĂ„r det?

    EK: – Den gĂ„r igenom hela cykeln för hela komponenten. För en komponent Ă€r det ingen skillnad mellan en testtransaktion och en produktionstransaktion. Men frĂ„n en logisk synvinkel Ă€r detta helt enkelt ett separat projekt i systemet, pĂ„ vilket endast testtransaktioner körs.

    PÅ: -Var skĂ€r du av den? HĂ€r skickade Core...

    EK: – Vi ligger bakom “Kor” i det hĂ€r fallet för testtransaktioner... Vi har en sĂ„dan sak som routing: “Kor” vet vilket betalningssystem vi ska skicka till - vi skickar till ett falskt betalningssystem som helt enkelt ger en http-signal och det Ă€r allt.

    PÅ: – SĂ€g mig, snĂ€lla, var din ansökan skriven i en stor monolit, eller skar du den i nĂ„gra tjĂ€nster eller till och med mikrotjĂ€nster?

    EK: – Vi har ingen monolit, naturligtvis, vi har en serviceinriktad applikation. Vi skĂ€mtar om att vĂ„r tjĂ€nst Ă€r gjord av monoliter - de Ă€r egentligen ganska stora. Det Ă€r svĂ„rt att kalla det mikrotjĂ€nster, men det hĂ€r Ă€r tjĂ€nster inom vilka arbetare pĂ„ distribuerade maskiner verkar.

    Om tjÀnsten pÄ servern Àventyras...

    PÅ: – DĂ„ har jag nĂ€sta frĂ„ga. Även om det vore en monolit, sa du fortfarande att du har mĂ„nga av dessa direktservrar, de bearbetar alla i princip data, och frĂ„gan Ă€r: "I hĂ€ndelse av en kompromiss med en av instantservrarna eller en applikation, varje enskild lĂ€nk , har de nĂ„gon form av Ă„tkomstkontroll? Vem av dem kan göra vad? Vem ska jag kontakta för vilken information?

    HighLoad++, Evgeniy Kuzovlev (EcommPay IT): vad man ska göra nÀr en minuts stillestÄnd kostar $100000 XNUMX

    EK: - Ja definitivt. SÀkerhetskraven Àr ganska allvarliga. För det första har vi öppna datarörelser, och portarna Àr bara de som vi förutser trafikrörelser genom i förvÀg. Om en komponent kommunicerar med databasen (sÀg, med Muskul) via 5-4-3-2, kommer endast 5-4-3-2 att vara öppen för den, och andra hamnar och andra trafikriktningar kommer inte att vara tillgÀngliga. Dessutom mÄste du förstÄ att det i vÄr produktion finns ett 10-tal olika sÀkerhetsslingor. Och Àven om applikationen pÄ nÄgot sÀtt Àventyras, Gud förbjude, kommer angriparen inte att kunna komma Ät serverhanteringskonsolen, eftersom detta Àr en annan nÀtverkssÀkerhetszon.

    PÅ: – Och i det hĂ€r sammanhanget, det som Ă€r mer intressant för mig Ă€r att man har vissa kontrakt med tjĂ€nster - vad de kan göra, genom vilka "Ă„tgĂ€rder" de kan kontakta varandra... Och i ett normalt flöde krĂ€ver vissa specifika tjĂ€nster nĂ„gra rad, en lista med "Ă„tgĂ€rder" pĂ„ den andra. De verkar inte vĂ€nda sig till andra i en normal situation, och de har andra ansvarsomrĂ„den. Om en av dem Ă€ventyras, kommer den att kunna störa tjĂ€nstens "Ă„tgĂ€rder"?

    EK: - Jag förstÄr. Om i en normal situation med en annan server kommunikation alls var tillÄten, sÄ ja. Enligt SLA-kontraktet övervakar vi inte att du endast tillÄts de första 3 "ÄtgÀrderna", och du tillÄts inte de 4 "ÄtgÀrderna". Detta Àr förmodligen överflödigt för oss, eftersom vi redan har ett 4-nivÄs skyddssystem, i princip, för kretsar. Vi föredrar att försvara oss med konturerna, snarare Àn pÄ insidans nivÄ.

    Hur Visa, MasterCard och Sberbank fungerar

    PÅ: – Jag vill förtydliga en punkt om att byta en anvĂ€ndare frĂ„n ett datacenter till ett annat. SĂ„ vitt jag vet anvĂ€nder Visa och MasterCard det binĂ€ra synkrona protokollet 8583, och det finns blandningar dĂ€r. Och jag ville veta, nu menar vi byte – Ă€r det direkt "Visa" och "MasterCard" eller före betalningssystem, innan bearbetning?

    EK: – Det hĂ€r Ă€r före blandningarna. VĂ„ra mixar finns i samma datacenter.

    PÅ: – Grovt sett, har du en anslutningspunkt?

    EK: – “Visa” och “MasterCard” - ja. Helt enkelt för att Visa och MasterCard krĂ€ver ganska seriösa investeringar i infrastruktur för att sluta separata kontrakt för att till exempel fĂ„ ett andra par mixar. De Ă€r reserverade inom ett datacenter, men om, gud förbjude, vĂ„rt datacenter, dĂ€r det finns blandningar för att ansluta till Visa och MasterCard, dör, kommer vi att förlora en anslutning med Visa och MasterCard...

    PÅ: – Hur kan de reserveras? Jag vet att Visa endast tillĂ„ter en anslutning i princip!

    EK: – De levererar utrustningen sjĂ€lva. Vi fick i alla fall utrustning som Ă€r helt redundant inuti.

    PÅ: – SĂ„ stativet Ă€r frĂ„n deras Connects Orange?..

    EK: - Ja.

    PÅ: – Men hur Ă€r det med det hĂ€r fallet: om ditt datacenter försvinner, hur kan du fortsĂ€tta anvĂ€nda det? Eller stannar trafiken bara?

    EK: - Nej. I det hÀr fallet kommer vi helt enkelt att byta trafik till en annan kanal, vilket naturligtvis kommer att bli dyrare för oss och dyrare för vÄra kunder. Men trafiken kommer inte att gÄ via vÄr direkta anslutning till Visa, MasterCard, utan genom den villkorade Sberbank (mycket överdrivet).

    Jag ber vilt om ursÀkt om jag förolÀmpade Sberbank-anstÀllda. Men enligt vÄr statistik, bland de ryska bankerna, faller Sberbank oftast. Det gÄr inte en mÄnad utan att nÄgot faller av pÄ Sberbank.

    HighLoad++, Evgeniy Kuzovlev (EcommPay IT): vad man ska göra nÀr en minuts stillestÄnd kostar $100000 XNUMX

    NĂ„gra annonser 🙂

    Tack för att du stannar hos oss. Gillar du vĂ„ra artiklar? Vill du se mer intressant innehĂ„ll? Stöd oss ​​genom att lĂ€gga en bestĂ€llning eller rekommendera till vĂ€nner, moln VPS för utvecklare frĂ„n $4.99, en unik analog av ingĂ„ngsservrar, som uppfanns av oss för dig: Hela sanningen om VPS (KVM) E5-2697 v3 (6 kĂ€rnor) 10GB DDR4 480GB SSD 1Gbps frĂ„n $19 eller hur delar man en server? (tillgĂ€nglig med RAID1 och RAID10, upp till 24 kĂ€rnor och upp till 40 GB DDR4).

    Dell R730xd 2 gÄnger billigare i Equinix Tier IV datacenter i Amsterdam? Bara hÀr 2 x Intel TetraDeca-Core Xeon 2x E5-2697v3 2.6GHz 14C 64GB DDR4 4x960GB SSD 1Gbps 100 TV frÄn $199 i NederlÀnderna! Dell R420 - 2x E5-2430 2.2Ghz 6C 128GB DDR3 2x960GB SSD 1Gbps 100TB - frÄn $99! LÀs om Hur man bygger infrastructure corp. klass med anvÀndning av Dell R730xd E5-2650 v4-servrar vÀrda 9000 XNUMX euro för en slant?

KĂ€lla: will.com

LĂ€gg en kommentar