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

Alla pratar om utvecklings- och testprocesser, personalutbildning, ökad motivation, men dessa processer rÀcker inte till nÀr en minuts driftstopp kostar astronomiska summor pengar. Vad ska man göra nÀr man genomför finansiella transaktioner under ett strikt SLA? Hur ökar man tillförlitligheten och feltoleransen hos sina system, utan att ta utveckling och testning ur ekvationen?

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

NÀsta HighLoad++-konferens kommer att hÄllas den 6-7 april 2020 i St. Petersburg. Detaljer och biljetter via lÀnk9 november, 18:00. HighLoad++ Moskva 2018, Delhi + Kolkata-hallen. Sammanfattningar och presentation.

Evgeny Kuzovlev (nedan – EK): - VĂ€nner, hej! Jag heter Evgeniy Kuzovlev. Jag kommer frĂ„n EcommPay, en specifik avdelning - EcommPay IT, en IT-avdelning inom en företagsgrupp. Och idag ska vi prata om driftstopp - hur man undviker dem, hur man minimerar deras konsekvenser om man inte kan undvika dem. Ämnet Ă€r: "Vad ska man göra nĂ€r en minuts driftstopp kostar 100 000 dollar"? Om vi ​​blickar framĂ„t Ă€r vĂ„ra siffror jĂ€mförbara.

Vad gör EcommPay IT?

Vilka Àr vi? Varför stÄr jag hÀr framför er? Varför har jag rÀtt att berÀtta vad som helst för er hÀr? Och vad ska vi diskutera mer i detalj hÀr?

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

EcommPay-koncernen Ă€r en internationell inlösare. Vi hanterar betalningar över hela vĂ€rlden – i Ryssland, Europa, Sydostasien (över hela vĂ€rlden). Vi har 9 kontor, totalt 500 anstĂ€llda, och ungefĂ€r hĂ€lften av dem Ă€r IT-specialister. Allt vi gör, allt vi tjĂ€nar pengar pĂ„, har vi gjort sjĂ€lva.

Vi skrev alla vĂ„ra produkter sjĂ€lva (och vi har en hel del av dem – i vĂ„r serie av stora IT-produkter har vi ungefĂ€r 16 olika komponenter); vi skriver dem sjĂ€lva, vi utvecklar dem sjĂ€lva. Och för nĂ€rvarande genomför vi ungefĂ€r en miljon transaktioner om dagen (miljoner – det Ă€r nog rĂ€tt ord). Vi Ă€r ett ganska ungt företag – vi Ă€r bara ungefĂ€r sex Ă„r gamla.

För 6 Är sedan var det en startup, nÀr killarna kom med företaget. De var enade av idén (det fanns inget annat Àn idén), och vi körde. Som alla startups körde vi snabbare... För oss var snabbhet viktigare Àn kvalitet.

Vid nÄgon tidpunkt stannade vi upp: vi insÄg att vi inte lÀngre kunde leva med den hastigheten och kvaliteten och att vi behövde prioritera kvalitet först och frÀmst. Vid den tidpunkten bestÀmde vi oss för att skriva en ny plattform som skulle vara korrekt, skalbar och pÄlitlig. Vi började skriva den hÀr plattformen (vi började investera, utveckla och testa), men vid nÄgon tidpunkt insÄg vi att utveckling och testning inte tillÀt oss att nÄ en ny nivÄ av servicekvalitet.

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

StillestÄndstider. Utnyttjandets budord.

Alltid den viktigaste hörnstenen, det vi faktiskt ska prata om idag Ă€r driftstopp. Ett skrĂ€mmande ord. Om vi ​​har driftstopp Ă€r allt dĂ„ligt för oss. Vi springer för att fĂ„ upp den, administratörerna hĂ„ller servern – Gud förbjude att den faller, som de sjunger i den dĂ€r sĂ„ngen. Det Ă€r det vi ska prata om idag.

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

NÀr vi började Àndra vÄra tillvÀgagÄngssÀtt formulerade vi fyra budord. Jag har presenterat dem pÄ bilderna:

Dessa budord Àr ganska enkla:

HighLoad++, Evgeny Kuzovlev (EcommPay IT): Vad ska man 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 metoder.

LÄt mig rikta er uppmÀrksamhet mot punkt nummer 2. Vi löser inte problemet. Att lösa det Àr sekundÀrt. Det primÀra för oss Àr att anvÀndaren skyddas frÄn problemet. Det kommer att existera i en isolerad miljö, men denna miljö kommer inte att kontakta honom pÄ nÄgot sÀtt. Vi kommer faktiskt att gÄ igenom dessa fyra problemgrupper (vissa mer detaljerat, vissa mindre detaljerat). Jag kommer att berÀtta vad vi anvÀnder, vilken erfarenhet vi har av lösningar.

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

Men vi börjar i fel ordning, vi börjar med punkt nummer 2 – hur blir man snabbt av med problemet? Det finns ett problem – vi mĂ„ste eliminera det. ”Vad ska vi göra Ă„t det?” – huvudfrĂ„gan. Och nĂ€r vi började fundera pĂ„ hur vi skulle eliminera problemet, utvecklade vi nĂ„gra krav för oss sjĂ€lva som elimineringen av problemen skulle följa.

HighLoad++, Evgeny Kuzovlev (EcommPay IT): Vad ska man 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 frÄgan: "NÀr har vi problem?" Och problem, som det visade sig, uppstÄr i fyra fall:

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

  • Maskinvarufel.
  • Fel pĂ„ externa tjĂ€nster.
  • Ändra programvaruversionen (samma distribution).
  • Explosiv tillvĂ€xt av last.

Vi ska inte prata om de tvÄ första. HÄrdvarufel löses helt enkelt: du mÄste ha allt duplicerat. Om det Àr diskar mÄste diskarna monteras i RAID, om det Àr en server mÄste servern dupliceras, om du har en nÀtverksinfrastruktur mÄste du installera en andra kopia av nÀtverksinfrastrukturen, det vill sÀga du tar och duplicerar. Och om nÄgot gÄr fel byter du till sÀkerhetskopieringskapacitet. Det Àr svÄrt att sÀga nÄgot mer hÀr.

Det andra Àr att externa tjÀnster inte fungerar. För de flesta system Àr detta inte alls ett problem, men inte för oss. Eftersom vi behandlar betalningar Àr vi en aggregator som stÄr mellan anvÀndaren (som anger sina kortuppgifter) 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. För det första, om möjligt, bör man pÄ nÄgot sÀtt duplicera den hÀr tjÀnsten. Till exempel, om vi kan, överför vi trafik frÄn en tjÀnst till en annan: till exempel behandlar vi kort via Sberbank, Sberbank har problem - vi överför trafik [villkorligt] till Raiffeisen. Det andra vi kan göra Àr att mycket snabbt mÀrka ett fel i externa tjÀnster, och dÀrför kommer vi att prata om svarshastigheten i nÀsta del av rapporten.

Faktum Àr att vi frÄn dessa fyra specifikt kan pÄverka Àndringen av programvaruversioner - vidta ÄtgÀrder som leder till en förbÀttring i samband med distributioner och i samband med explosiv tillvÀxt av belastningen. Det gjorde vi faktiskt. HÀr, Äterigen, en liten anmÀrkning ...

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

Vi Ă€r ett lite ovanligare företag. HĂ€r pratar alla om Kubernetes, om moln – vi har varken Kubernetes 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 Ă€r tvungna att vara ansvariga för allt detta. DĂ€rför kommer vi att prata i detta sammanhang. SĂ„, om problemen. De tvĂ„ första Ă€r utelĂ€mnade.

Ändra programvaruversionen. Grunderna

VÄra utvecklare har inte tillgÄng till produktion. Varför det? Vi Àr PCI DSS-certifierade, och vÄra utvecklare har helt enkelt inte rÀtt att gÄ i produktion. Det Àr allt, punkt slut. Absolut. DÀrför upphör utvecklingsansvaret exakt i det ögonblick dÄ utvecklaren har överfört builden för release.

HighLoad++, Evgeny Kuzovlev (EcommPay IT): Vad ska man 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 avsaknaden av unik odokumenterad kunskap. Jag hoppas att ni har detsamma. För om ni inte har det kommer ni att fĂ„ problem. Problem kommer att uppstĂ„ nĂ€r denna unika odokumenterade kunskap inte finns nĂ€rvarande 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, hen Ă€r pĂ„ semester eller sjuk – det Ă€r allt, ni har problem.

Och den tredje grunden kom vi fram till. Vi kom fram till den genom smĂ€rta, blod, tĂ„rar – vi kom fram till slutsatsen att alla vĂ„ra byggen innehĂ„ller fel, Ă€ven om de Ă€r felfria. Vi bestĂ€mde sjĂ€lva: nĂ€r vi driftsĂ€tter nĂ„got, nĂ€r vi rullar nĂ„got i produktion – har vi en byggen med fel. Vi utformade de krav som vĂ„rt system mĂ„ste uppfylla.

Krav för att Àndra programvaruversionen

Det finns tre av dessa krav:

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

  • Vi mĂ„ste snabbt Ă„terstĂ€lla utplaceringen.
  • Vi mĂ„ste minimera effekterna av en misslyckad implementering.
  • Och vi mĂ„ste kunna driftsĂ€ttas snabbt parallellt.
    I den ordningen! Varför? För det första Ă€r hastighet inte viktigt nĂ€r man driftsĂ€tter en ny version, utan det Ă€r viktigt att snabbt kunna backa och ha minimal pĂ„verkan om nĂ„got gĂ„r fel. Men om du har en uppsĂ€ttning versioner i produktion dĂ€r det visar sig att det finns ett fel (helt ovĂ€ntat, det skedde ingen driftsĂ€ttning, men felet finns dĂ€r) – bryr du dig om hastigheten pĂ„ nĂ€sta driftsĂ€ttning. Vad gjorde vi för att uppfylla dessa krav? Vi anvĂ€nde följande metod:

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

    Det Ă€r ganska vĂ€lkĂ€nt, vi har inte uppfunnit det alls – det Ă€r Blue/Green deploy. Vad Ă€r det? Du bör ha en kopia för varje grupp av servrar dĂ€r dina applikationer finns. Kopian Ă€r "varm": det finns ingen trafik pĂ„ den, men denna trafik kan nĂ€r som helst skickas till denna kopia. Denna kopia innehĂ„ller den tidigare versionen. Och vid driftsĂ€ttningstillfĂ€llet rullar du ut koden till den inaktiva kopian. Sedan vĂ€xlar du en del av trafiken (eller all) till den nya versionen. För att Ă€ndra trafikflödet frĂ„n den gamla versionen till den nya behöver du alltsĂ„ bara göra en sak: du behöver Ă€ndra balanseraren i uppströms, Ă€ndra riktningen – frĂ„n en uppströms till en annan. Detta Ă€r mycket bekvĂ€mt och löser problemet med snabb vĂ€xling, snabb Ă„terstĂ€llning.

    HĂ€r Ă€r lösningen pĂ„ den andra frĂ„gan – minimering: du kan bara skicka en del av din trafik (lĂ„t oss sĂ€ga 2%) till en ny rad, till en rad med en ny kod. Och dessa 2% Ă€r inte 100%! Om du förlorar 100% av trafiken pĂ„ grund av en misslyckad distribution – det Ă€r skrĂ€mmande, om du förlorar 2% av trafiken – det Ă€r obehagligt, men det Ă€r inte skrĂ€mmande. Dessutom kommer anvĂ€ndarna troligtvis inte ens att mĂ€rka detta, eftersom i vissa fall (inte alla) samma anvĂ€ndare, efter att ha tryckt pĂ„ F5, kommer till en annan, fungerande version.

    BlÄ/grön driftsÀttning. Routing

    Det Ă€r dock inte sĂ„ enkelt som att ”implementera BlĂ„/Grön”... Alla vĂ„ra komponenter kan delas in i tre grupper:

    • detta Ă€r anvĂ€ndargrĂ€nssnittet (betalningssidorna som vĂ„ra kunder ser);
    • processorkĂ€rna;
    • adapter för att arbeta med betalningssystem (banker, MasterCard, Visa, etc.).

    Och hĂ€r finns en nyans – nyansen ligger i routingen mellan linjerna. Om man helt enkelt byter 100 % av trafiken har man inte dessa problem. Men om man vill byta 2 % börjar man stĂ€lla frĂ„gor: "Hur gör man detta?" Det enklaste, rakt pĂ„ sak: man kan stĂ€lla in ett slumpmĂ€ssigt urval, Round Robin i nginx, och man har 2 % till vĂ€nster, 98 % till höger. Men detta Ă€r inte alltid lĂ€mpligt.

    Till exempel, i vĂ„rt fall interagerar anvĂ€ndaren med systemet med mer Ă€n en förfrĂ„gan. Detta Ă€r normalt: 2, 3, 4, 5 förfrĂ„gningar – era system kan vara desamma. Och om det Ă€r viktigt för dig att alla anvĂ€ndarförfrĂ„gningar kommer till samma rad dĂ€r den första förfrĂ„gan kom, eller (andra punkten) alla anvĂ€ndarförfrĂ„gningar kommer till en ny rad efter byte (han kunde ha börjat arbeta med systemet tidigare, innan bytet), dĂ„ passar inte denna slumpmĂ€ssiga fördelning dig. DĂ„ finns det följande alternativ:

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

    Det första alternativet, det enklaste, baseras pÄ klientens grundlÀggande parametrar (IP-hash). Du har en IP-adress och du delar den Ät vÀnster och höger med IP-adressen. DÄ fungerar det andra fallet jag beskrev för dig. NÀr driftsÀttningen har skett kan anvÀndaren redan börja arbeta med ditt system, och frÄn driftsÀttningsögonblicket kommer alla förfrÄgningar att gÄ till den nya raden (till samma, lÄt oss sÀga).

    Om detta av nÄgon anledning inte passar dig och du mÄste skicka förfrÄgningar till den rad dÀr anvÀndarens ursprungliga förfrÄgan kom ifrÄn, har du tvÄ alternativ...
    Det första alternativet: du kan vÀlja en betald nginx+. Den har en mekanism som kallas Sticky sessions, som, pÄ anvÀndarens första begÀran, sÀtter upp en session för anvÀndaren och binder den till en eller annan uppströms plattform. Alla efterföljande förfrÄgningar frÄn anvÀndaren inom sessionens livslÀngd skickas till samma uppströms plattform dÀr sessionen stÀlldes in.

    Detta fungerade inte för oss eftersom vi redan hade vanlig nginx. Att byta till nginx+ Àr inte sÄ att det Àr dyrt, det var bara lite smÀrtsamt för oss och inte riktigt rÀtt. Till exempel fungerade inte Sticky Sessions för oss av den enkla anledningen att Sticky Sessions inte tillÄter routing baserat pÄ "Either-Or". DÀr kan du ange vad Sticky Sessions gör, till exempel via IP eller via IP och cookies eller via postparameter, men "Either-Or" Àr mer komplicerat.

    Det Àr dÀrför vi kom fram till det fjÀrde alternativet. Vi tog nginx pÄ "steroider" (detta Àr openresty) - det Àr samma nginx, som dessutom stöder inkludering av "last scripts". Du kan skriva ett "last script", skjuta det till "openresty", och detta "last script" kommer att köras nÀr en anvÀndarförfrÄgan kommer.

    Och vi skrev faktiskt ett sÄdant skript, satte oss sjÀlva "openrest" och i det hÀr skriptet gÄr vi igenom 6 olika parametrar genom sammankoppling "Eller". Beroende pÄ nÀrvaron av den eller den parametern vet vi att anvÀndaren kom till en eller annan sida, till en eller annan rad.

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

    Naturligtvis skulle det förmodligen kunna göras lite enklare (med samma "Stick Sessions"), men vi har ocksĂ„ denna nyans, att inte bara anvĂ€ndaren interagerar med oss ​​inom ramen för en bearbetning av en transaktion... Utan betalningssystem interagerar ocksĂ„ med oss: efter att vi bearbetat transaktionen (genom att skicka en begĂ€ran till betalningssystemet) fĂ„r vi en coolback.
    Och lÄt oss sÀga, om vi inom vÄr krets kan skicka 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 till samma Visa: "Grabbar, vi Àr ett sÄnt retroföretag, vi Àr lite internationella (pÄ webbplatsen och i Ryssland)... Men snÀlla, skicka oss anvÀndarens IP-adress i ett extra fÀlt, ert protokoll Àr standardiserat"! Naturligtvis kommer de inte att hÄlla med.

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

    SÄ det fungerade inte för oss - vi skapade openresty. Följaktligen fick vi detta med routing:

    BlÄ/grön implementering har följaktligen de fördelar jag nÀmnde, och nackdelar.

    Det finns tvÄ nackdelar:

    • du behöver bry dig om routing;
    • Den andra stora nackdelen Ă€r kostnaden.

    Ni behöver dubbelt sÄ mÄnga servrar, ni behöver dubbelt sÄ mÄnga driftsresurser, ni behöver lÀgga ner dubbelt sÄ mycket anstrÀngning pÄ att underhÄlla hela djurparken.

    Förresten, bland fördelarna finns en annan sak som jag inte nÀmnt tidigare: du har en reserv i hÀndelse av belastningstillvÀxt. Om du har en explosionsartad belastningstillvÀxt, ett stort antal anvÀndare har kommit till dig, sÄ inkluderar du helt enkelt den andra raden i 50/50-fördelningen - och du har omedelbart x2 servrar i ditt kluster tills du löser problemet med att ha fler servrar.

    Hur gör man en snabb utplacering?

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

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

    HÀr Àr allt kort och enkelt.

    • Ni mĂ„ste ha ett CD-system (Continuous Delivery) – ni klarar er inte utan det. Om ni har en server kan ni driftsĂ€tta manuellt. Vi har ungefĂ€r ett och ett halvt tusen servrar och ett och ett halvt tusen manuellt, det Ă€r klart – vi kan sĂ€tta en avdelning av den hĂ€r hallens storlek bara för driftsĂ€ttning.
    • Implementeringen bör ske parallellt. Om din implementering Ă€r sekventiell Ă€r allt fel. En server Ă€r bra, du kommer att distribuera ett och ett halvt tusen servrar hela dagen.
    • Återigen, för hastighetens skull Ă€r detta förmodligen inte nödvĂ€ndigt. Vid driftsĂ€ttning monteras projektet vanligtvis. Du har ett webbprojekt, det finns en frontend-del (du skapar ett webbpaket dĂ€r, bygger npm - nĂ„got liknande), och den hĂ€r processen Ă€r i princip kort - 5 minuter, men dessa 5 minuter kan vara kritiska. Det Ă€r dĂ€rför vi till exempel inte gör det pĂ„ det hĂ€r sĂ€ttet: vi tog bort dessa 5 minuter, vi driftsĂ€tter artefakter.

      Vad Àr en artefakt? En artefakt Àr en kompilerad build dÀr hela assemblerdelen redan Àr fÀrdigstÀlld. Vi lagrar denna artefakt i ett artefaktarkiv. Vi anvÀnde tvÄ sÄdana arkiv samtidigt - Nexus och nu jFrog Artifactory. Vi anvÀnde initialt Nexus eftersom vi började öva pÄ detta tillvÀgagÄngssÀtt i Java-applikationer (det passade vÀl för detta). Sedan lade vi nÄgra applikationer skrivna i PHP dÀr; och Nexus var inte lÀngre lÀmpligt, och det Àr dÀrför vi valde jFrog Artefactory, som kan artikulera nÀstan allt. Vi kom till och med till den punkt att vi lagrar vÄra egna binÀra paket i detta artefaktarkiv, som vi kompilerar för servrar.

    Explosiv tillvÀxt av last

    Vi pratade om att Ă€ndra programvaruversionen. NĂ€sta sak vi har Ă€r en explosiv ökning av belastningen. HĂ€r förstĂ„r jag nog att en explosiv ökning av belastningen inte Ă€r helt rĂ€tt sak


    Vi skrev ett nytt system – det Ă€r serviceinriktat, modernt, vackert, arbetare överallt, köer överallt, asynkronitet överallt. Och i sĂ„dana system kan data gĂ„ igenom olika flöden. För den första transaktionen kan den 1:a, 3:e, 10:e arbetaren vara involverad, 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 involverar de tre första arbetarna, och pĂ„ kvĂ€llen Ă€ndras det plötsligt, och allt involverar de andra tre arbetarna.

    Och hÀr visar det sig att du pÄ nÄgot sÀtt mÄste skala upp arbetarna, du mÄste pÄ nÄgot sÀtt skala upp dina tjÀnster, men samtidigt inte tillÄta resursöverskott.

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

    Vi definierade kraven för oss sjĂ€lva. Dessa krav Ă€r ganska enkla: det ska finnas 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 avskriva resurser sĂ„ att servrarna vĂ€rmer luften. Vi tog "Consul", vi tog "Nomad", som hanterar vĂ„ra arbetare.

    Varför Àr detta ett problem för oss? LÄt mig backa lite. Vi har för nÀrvarande cirka 70 betalningssystem bakom oss. PÄ morgonen gÄr trafiken genom Sberbank, sedan sjunker Sberbank till exempel, och vi byter till ett annat betalningssystem. Vi hade 100 arbetare före Sberbank, och efter det behöver vi snabbt rekrytera 100 arbetare till ett annat betalningssystem. Och det Àr önskvÀrt att allt detta sker utan mÀnsklig inblandning. För om det finns mÀnsklig inblandning borde det finnas en ingenjör dÀr dygnet runt som bara ska göra detta, eftersom sÄdana fel, nÀr det finns 24 system bakom dig, hÀnder regelbundet.

    SĂ„ vi tittade pĂ„ Nomad, som har en öppen IP, och skrev vĂ„r egen grej, Scale-Nomad – ScaleNo, som gör ungefĂ€r sĂ„ hĂ€r: den övervakar kötillvĂ€xten och minskar eller ökar antalet arbetare beroende pĂ„ dynamiken i köförĂ€ndringen. NĂ€r vi gjorde det tĂ€nkte vi: "Kanske borde vi anvĂ€nda öppen kĂ€llkod för det?" Sedan tittade vi pĂ„ det – det Ă€r sĂ„ enkelt som tvĂ„ kopek.

    Vi har inte gjort det öppen kĂ€llkod Ă€n, men om du efter rapporten, efter att ha insett att du behöver nĂ„got sĂ„dant, plötsligt fĂ„r ett behov av det, mina kontakter finns pĂ„ sista bilden – skriv till mig. Om minst 3-5 personer ansluter sig till oss – kommer vi att göra det öppen kĂ€llkod.

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

    Hur fungerar det? Nu fÄr vi se! FramÄtblickande: pÄ vÀnster sida finns en del av vÄr övervakning: detta Àr en rad, högst upp Àr hÀndelsens bearbetningstid, i mitten Àr antalet transaktioner, lÀngst ner Àr antalet arbetare.

    Om du tittar sĂ„ finns det ett fel i den hĂ€r bilden. I den övre grafen kraschade en av graferna pĂ„ 45 sekunder – ett av betalningssystemen gick ner. Trafiken visades ocksĂ„ i 2 minuter och kön började vĂ€xa pĂ„ ett annat betalningssystem, dĂ€r det inte fanns nĂ„gra arbetare (vi utnyttjade inte resurserna – tvĂ€rtom utnyttjade vi resurserna korrekt). Vi ville inte vĂ€rma upp oss – det fanns ett minimumantal, cirka 5–10 arbetare, men de klarade inte av det.

    Den sista grafen visar en "puckel", vilket bara visar att "Scaleno" har fördubblat detta tal. Och sedan, nÀr grafen sjönk lite, minskade den lite - antalet arbetare Àndrades automatiskt. Det Àr sÄ det hÀr fungerar. Vi pratade om punkt #2 - "Hur man snabbt blir av med orsaker".

    Övervakning. Hur identifierar man snabbt ett problem?

    Nu Ă€r den första punkten: "Hur identifierar vi problemet snabbt?" Övervakning! Vi behöver snabbt förstĂ„ vissa saker. Vilka saker behöver vi snabbt förstĂ„?

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

    Tre saker!

    • Vi mĂ„ste snabbt 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 nĂ€r systemet fungerar för dig, allt Ă€r bra enligt alla indikatorer, men nĂ„got gĂ„r fel.

    HÀr kommer jag nog inte att berÀtta sÄ mycket som Àr sÄ coolt. Jag ska vara Kapten Obvious. Vi letade efter vad som fanns pÄ marknaden. Vi hade ett "roligt zoo". Det hÀr Àr zooet vi har nu:

    HighLoad++, Evgeny Kuzovlev (EcommPay IT): Vad ska man 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 de viktigaste serverindikatorerna. 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, och vissa av dem med Grafana och Prometheus, och vissa av dem med Grafana med Influx och Telegraf.

    För ett Är sedan ville vi anvÀnda New Relic. Det Àr en cool grej, den kan göra allt. Men hur mycket den Àn kan göra allt Àr den ocksÄ 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 skriva ett kontrakt för nÀsta Är." Vi tittade pÄ priset och sa: "Nej, det gör vi inte." Nu vÀgrar vi New Relic, vi har ungefÀr 15 servrar kvar under New Relic-övervakning. Priset visade sig vara helt orimligt.

    Och det finns ett verktyg som vi sjĂ€lva implementerade – det Ă€r Debugger. Först kallade vi det ”Bagger”, men sedan kom en engelsklĂ€rare förbi, skrattade vilt och döpte om det till ”Debugger”. Vad Ă€r det? Det Ă€r ett verktyg som faktiskt pĂ„ 15–30 sekunder pĂ„ varje komponent, som en ”svart lĂ„da” i systemet, kör tester för komponentens övergripande prestanda.

    Om det till exempel Ă€r en extern sida (betalningssida) öppnar han den helt enkelt och tittar pĂ„ hur den ska se ut. Om den bearbetas utlöser han en testtransaktion – ser till att denna "transaktion" gĂ„r igenom. Om det Ă€r en koppling till betalningssystem utlöser vi en testförfrĂ„gan dĂ€r vi kan, och ser till att allt Ă€r bra hos oss.

    Vilka indikatorer Àr viktiga att övervaka?

    Vad övervakar vi huvudsakligen? Vilka indikatorer Àr viktiga för oss?

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

    • Svarstid/RPS pĂ„ frontpanelerna Ă€r en mycket viktig indikator. Den reagerar omedelbart pĂ„ att nĂ„got Ă€r fel med dig.
    • Antalet meddelanden som bearbetats i alla köer.
    • Antal arbetare.
    • GrundlĂ€ggande mĂ„tt pĂ„ korrekthet.

    Den sista punkten Àr "affÀrer", "affÀrs"-mÄtt. Om du vill övervaka samma sak mÄste du definiera ett eller tvÄ mÄtt som Àr de viktigaste indikatorerna för dig. VÄrt mÄtt Àr genomströmning (förhÄllandet mellan antalet lyckade transaktioner och det totala transaktionsflödet). Om nÄgot förÀndras i det under ett intervall pÄ 5-10-15 minuter, dÄ har vi problem (om det förÀndras dramatiskt).

    SÄ hÀr ser det ut för oss Àr ett exempel pÄ en av vÄra tavlor:

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

    PĂ„ vĂ€nster sida finns sex grafer, dessa visar antalet arbetare respektive antalet meddelanden i köer lĂ€ngs raderna. PĂ„ höger sida finns RPS och RTS. Nedanför finns samma "affĂ€rs"-mĂ„tt. Och pĂ„ "affĂ€rs"-mĂ„ttet kan vi direkt se att nĂ„got gick fel pĂ„ de tvĂ„ mittersta graferna
 Det var bara ytterligare ett system som kraschade, vilket ligger bakom oss.

    Det andra vi var tvungna att göra var att övervaka fallet för externa betalningssystem. HĂ€r tog vi OpenTracing – en mekanism, ett standardparadigm som möjliggör spĂ„rning av distribuerade system; och Ă€ndrade det lite. Standardparadigmet för OpenTracing sĂ€ger att vi bygger ett spĂ„r av varje enskild begĂ€ran. Vi behövde inte detta, och vi lindade in det i ett sammanfattande, aggregeringsspĂ„r. Vi skapade ett verktyg som lĂ„ter oss spĂ„ra hastigheten pĂ„ systemen bakom oss.

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

    Diagrammet visar att ett av betalningssystemen började svara inom 3 sekunder – vi har problem. Samtidigt kommer den hĂ€r saken att reagera nĂ€r problemen uppstĂ„r, med intervall pĂ„ 20–30 sekunder.

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

    Ärligt talat visste jag inte vad jag skulle rita pĂ„ den hĂ€r bilden, eftersom vi letat lĂ€nge pĂ„ marknaden efter nĂ„got som skulle passa oss. Vi hittade ingenting, sĂ„ vi fick göra det sjĂ€lva.

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

    Vad menar jag med logisk övervakning? TÀnk dig: du skapar ett system för dig sjÀlv (till exempel en klon av Tinder); du skapade det, lanserade det. En framgÄngsrik chef Vasya Pupkin installerade det pÄ sin telefon, ser en tjej dÀr, gillar henne... och liken gÄr inte till tjejen - liken gÄr till sÀkerhetsvakten Mikhalych frÄn samma affÀrscenter. Chefen gÄr ner för trappan och undrar sedan: "Varför ler den hÀr sÀkerhetsvakten Mikhalych sÄ trevligt mot honom"?

    I sĂ„dana situationer... För oss lĂ„ter den hĂ€r situationen lite annorlunda, eftersom (skrev jag) det Ă€r en sĂ„dan ryktesförlust som indirekt leder till ekonomiska förluster. Vi har den motsatta situationen: vi kan drabbas av direkta ekonomiska förluster – till exempel om vi genomförde en transaktion som framgĂ„ngsrik, men den misslyckades (eller vice versa). Vi var tvungna att skriva vĂ„rt eget verktyg som spĂ„rar antalet framgĂ„ngsrika transaktioner dynamiskt över ett tidsintervall baserat pĂ„ affĂ€rsindikatorer. Vi hittade ingenting pĂ„ marknaden! Det Ă€r precis den idĂ©n jag ville förmedla. Det finns inget pĂ„ marknaden som löser den hĂ€r typen av problem.

    Det hÀr handlade om hur man snabbt identifierar ett problem.

    Hur man faststÀller orsakerna till utplacering

    Den tredje gruppen av uppgifter som vi löser Ă€r efter att vi har identifierat problemet, efter att vi har blivit av med det, vore det bra att förstĂ„ orsaken till utvecklingen, för testning och göra nĂ„got Ă„t ​​det. Följaktligen behöver vi undersöka, vi behöver skapa loggar.

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

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

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

    Det finns ett problem hÀr. Vi fixade det, korrigerade felet för anvÀndaren, började grÀva, vad som fanns dÀr, klÀttrade in i Kibana, angav transaktions-ID:t dÀr och fick den hÀr loggen (visar mycket). Och i den hÀr loggen Àr absolut ingenting tydligt. Varför? För att det inte Àr tydligt vilken del som refererar till vilken arbetare, vilken del som refererar till vilken komponent. Och i det ögonblicket insÄg vi att vi behövde spÄrning - samma OpenTracing som jag pratade om.

    Vi funderade pĂ„ det för ett Ă„r sedan, vĂ€nde vĂ„r uppmĂ€rksamhet mot marknaden, och dĂ€r fanns tvĂ„ verktyg – Zipkin och Jaeger. Jaeger Ă€r i sjĂ€lva verket en ideologisk eftertrĂ€dare, en ideologisk eftertrĂ€dare till Zipkin. Allt Ă€r bra i Zipkin, förutom att det inte kan aggregera, inte kan inkludera loggar i spĂ„rning, bara tidsspĂ„rning. Och Jaeger stödde detta.

    Vi tittade pÄ "Eger": man kan instrumentera applikationer, man kan skriva i API (API-standarden för PHP vid den tiden var dock inte godkÀnd - det var för ett Är sedan, och nu har den blivit godkÀnd), men det fanns absolut ingen klient. "Okej", tÀnkte vi, och skrev vÄr egen klient. Vad fick vi? UngefÀr sÄ hÀr ser det ut:

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

    I "Eger" skapas spann för varje meddelande. Det vill sÀga, nÀr en anvÀndare öppnar systemet ser hen ett eller tvÄ block för varje inkommande förfrÄgan (1-2-3 - lika mÄnga inkommande förfrÄgningar frÄn anvÀndaren som det fanns block). För att göra det enklare för anvÀndarna har vi lagt till taggar i loggarna och tidsspÄrningen. Följaktligen, i hÀndelse av ett fel, kommer vÄr applikation att markera loggen med motsvarande Error-tagg. Du kan filtrera efter Error-taggen och endast spann som innehÄller detta block med felet kommer att visas. SÄ hÀr ser det ut om vi expanderar spannet:

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

    Inuti intervallet finns en uppsÀttning spÄr. I det hÀr fallet Àr det tre testspÄr, och det tredje spÄret berÀttar att ett fel intrÀffade. Samtidigt ser vi hÀr ett tidsspÄr: vi har en tidsskala högst upp, och vi ser med vilket tidsintervall den eller den loggen registrerades.

    Följaktligen gick det bra för oss. Vi skrev vÄrt eget tillÀgg, och vi gjorde det till öppen kÀllkod. Om du vill arbeta med spÄrning, om du vill arbeta med "Eger" i PHP - finns vÄrt tillÀgg, vÀlkommen att anvÀnda, som de sÀger:

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

    För oss Àr den hÀr tillÀgget en klient för OpenTracing API, skapad som en php-tillÀgg, det vill sÀga att du behöver assemblera det och installera systemet under det. För ett Är sedan fanns det inget annat. Nu finns det andra klienter som Àr som komponenter. HÀr Àr det upp till dig: antingen laddar du ner komponenter med composer, eller sÄ anvÀnder du tillÀgget, bestÀmmer du sjÀlv.

    Företagsstandarder

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

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

    Varför anvÀnds 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, borde ha sina egna standarder, inklusive din. Vilka standarder har vi?

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

    • Vi har en utplaceringsordning. Vi rör oss inte nĂ„gonstans utan den, vi kan inte. Vi utplacerar ungefĂ€r 60 gĂ„nger i veckan, det vill sĂ€ga vi utplacerar nĂ€stan konstant. Samtidigt finns det till exempel i vĂ„r utplaceringsordning ett tabu mot utplacering pĂ„ fredagar – i princip utplacerar vi inte.
    • Vi krĂ€ver dokumentation. Ingen ny komponent gĂ„r i produktion utan dokumentation, Ă€ven om den skapats av vĂ„ra RnD-tekniker. Vi krĂ€ver att de tillhandahĂ„ller driftsĂ€ttningsinstruktioner, en övervakningskarta och en grov beskrivning (som programmerare kan skriva) av hur komponenten fungerar och 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 toleranser. Till exempel betraktar vi det inte som driftstopp om vi förlorat 2 % av trafiken under tvĂ„ minuter. I princip rĂ€knas inte detta med i vĂ„r statistik. Om det Ă€r mer i procent eller tid rĂ€knar vi det redan.
    • Och vi skriver alltid obduktioner. Vad som Ă€n hĂ€nder oss, varje situation dĂ€r nĂ„got gick fel i produktionen, kommer det att Ă„terspeglas i obduktionen. En obduktion Ă€r ett dokument dĂ€r du skriver ner vad som hĂ€nde, en detaljerad tidpunkt, vad du gjorde för att Ă„tgĂ€rda det och (detta Ă€r ett obligatoriskt block!) vad du kommer att göra för att förhindra att detta hĂ€nder i framtiden. Detta Ă€r obligatoriskt, nödvĂ€ndigt för efterföljande analys.

    Vad anses vara driftstopp?

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

    Vad ledde allt detta till?

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

    Vi har lĂ€rt oss att sova pĂ„ natten. Äntligen! För sex mĂ„nader sedan kunde vi inte. Och med tanke pĂ„ resultaten vill jag göra en kommentar. IgĂ„r kvĂ€ll kom det en fantastisk rapport om kĂ€rnreaktorns kontrollsystem. Om de som skrev det hĂ€r systemet lyssnar pĂ„ mig, glöm vad jag sa om att "2 % Ă€r inte stillestĂ„ndstid". För er Ă€r 2 % stillestĂ„ndstid, Ă€ven om det Ă€r i tvĂ„ minuter!"

    Det var allt för nu! Dina frÄgor.

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

    Om balanserare och databasmigrering

    FrĂ„ga frĂ„n publiken (nedan kallad B): – God kvĂ€ll. Tack sĂ„ mycket för en sĂ„dan administratörsrapport! En kort frĂ„ga, om era balanserare. Ni nĂ€mnde att ni har en WAF, det vill sĂ€ga, som jag förstĂ„r det, anvĂ€nder ni nĂ„gon extern balanserare


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

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

    EG: - Som jag redan sagt, detta Àr en grupp servrar i OpenResty. Vi har nu 5 grupper av dem, reserverade, som svarar exklusivt... det vill sÀga en server dÀr OpenResty Àr installerat exklusivt, den hanterar bara proxytrafik. För att förstÄ hur mycket vi stöder: vÄrt vanliga trafikflöde Àr nu flera hundra megabit. De klarar sig, de gör bra ifrÄn sig, de anstrÀnger sig inte ens.

    PÅ: - OcksĂ„ en enkel frĂ„ga. HĂ€r Ă€r blĂ„/grön implementering. Och vad gör ni till exempel med migreringar frĂ„n databasen?

    EG: – Bra frĂ„ga! I Blue/Green-distributionen 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 den gröna linjen. Om vi ​​pratar om sjĂ€lva databasen har vi begrĂ€nsat den sĂ„ mycket vi kunnat, vi har flyttat nĂ€stan allt till köer, i databasen lagrar vi bara transaktionsstacken. Och transaktionsstacken Ă€r densamma för alla rader. Med databasen i detta sammanhang: vi separerar den inte i blĂ„ och grön, eftersom bĂ„da versionerna av koden mĂ„ste veta vad som hĂ€nder med transaktionen.

    VĂ€nner, jag har ytterligare ett litet pris att sporra er till – en bok. Och jag mĂ„ste ge det till den bĂ€sta frĂ„gan.

    PÅ: - Hej. Tack för rapporten. HĂ€r Ă€r frĂ„gan. Ni övervakar betalningar, ni övervakar de tjĂ€nster ni kommunicerar med... Men hur övervakar ni att en person pĂ„ nĂ„got sĂ€tt hamnat pĂ„ er betalningssida, gjort en betalning och att projektet krediterat hen med pengar? Det vill sĂ€ga, hur övervakar ni att sĂ€ljaren Ă€r tillgĂ€nglig och accepterat ert Ă„teruppringning?

    EG: – För oss Ă€r ”handlaren” i det hĂ€r fallet exakt samma externa tjĂ€nst som betalningssystemet. Vi övervakar hastigheten pĂ„ ”handlarens” svar.

    Om databaskryptering

    PÅ: - Hej. Jag har en nĂ„got relaterad frĂ„ga. Ni har kĂ€nsliga uppgifter enligt PCI DSS. Jag undrar hur ni lagrar PAN:er i köer, som ni behöver vidarebefordra till? AnvĂ€nder ni nĂ„gon kryptering? Och dĂ€rav den andra frĂ„gan: enligt PCI DSS Ă€r det nödvĂ€ndigt att regelbundet kryptera om databasen vid Ă€ndringar (avskedande av administratörer etc.) - hur hĂ€nder detta med tillgĂ€ngligheten?

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

    EG: – En utmĂ€rkt frĂ„ga! För det första lagrar vi inte PAN i köer. Vi har i princip inte rĂ€tt att lagra PAN nĂ„gonstans i öppen form, sĂ„ vi anvĂ€nder en speciell tjĂ€nst (vi kallar den "Keydemon") – det hĂ€r Ă€r en tjĂ€nst som bara gör en sak: den accepterar ett meddelande som indata och returnerar ett krypterat meddelande. Och vi lagrar allt med detta krypterade meddelande. Följaktligen Ă€r lĂ€ngden pĂ„ vĂ„r nyckel under en kilobyte, sĂ„ den Ă€r verkligen seriös och pĂ„litlig.

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

    EG: – Det kĂ€nns som igĂ„r var det 256... Var annars?!

    Följaktligen Àr detta det första. Och för det andra, den lösning som finns, den stöder omkrypteringsproceduren - det finns tvÄ par "keks" (nycklar), som ger "deks" som krypterar (nyckel - dessa Àr nycklar, dek - Àr derivat av nycklar som krypterar). Och om proceduren initieras (det hÀnder regelbundet, frÄn 3 mÄnader till ± nÄgra) laddar vi ett nytt par "keks", och vi har omkryptering av data. Vi har separata tjÀnster som river ut all data, krypterar den pÄ ett nytt sÀtt; data har en identifierare för nyckeln som de krypteras med lagrad i nÀrheten. Följaktligen, sÄ snart vi krypterar data med nya nycklar, raderar vi de gamla nycklarna.

    Ibland mĂ„ste betalningar göras manuellt


    PÅ: - Det vill sĂ€ga, om en Ă„terbetalning för nĂ„gon transaktion har kommit, kommer ni att dekryptera den med den gamla nyckeln för tillfĂ€llet?

    EG: - Ja.

    PÅ: - Sedan en liten frĂ„ga till. NĂ€r ett fel, fall eller en incident intrĂ€ffar Ă€r det nödvĂ€ndigt att genomföra transaktionen manuellt. En sĂ„dan situation uppstĂ„r.

    EG: – Ja, det hĂ€nder.

    PÅ: - VarifrĂ„n fĂ„r du dessa uppgifter? Eller gĂ„r du manuellt till den hĂ€r lagringsanlĂ€ggningen sjĂ€lv?

    EG: – Nej, det Ă€r ju klart – vi har ett slags backoffice-system som innehĂ„ller ett grĂ€nssnitt för vĂ„r support. Om vi ​​inte vet transaktionens status (till exempel förrĂ€n betalningssystemet har gĂ„tt ut) – vet vi inte det a priori, det vill sĂ€ga att vi tilldelar den slutliga statusen först nĂ€r vi Ă€r helt sĂ€kra. I det hĂ€r fallet ger vi transaktionen en sĂ€rskild status för manuell bearbetning. PĂ„ morgonen nĂ€sta dag, sĂ„ snart supporten fĂ„r information om att den och den transaktionen finns kvar i betalningssystemet, bearbetar de dem manuellt i det hĂ€r grĂ€nssnittet.

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

    PÅ: – Jag har ett par frĂ„gor. En av dem gĂ€ller fortsĂ€ttningen av PCI DSS-zonen: hur tar man ut loggar frĂ„n deras kontur? Den hĂ€r frĂ„gan beror pĂ„ att utvecklaren kunde ha lagt vad som helst i loggarna! Den andra frĂ„gan: hur rullar man ut snabbkorrigeringar? Manuellt i databasen – det Ă€r ett alternativ, men det kan finnas gratis snabbkorrigeringar – hur fungerar det dĂ€r? Och den tredje frĂ„gan Ă€r förmodligen relaterad till RTO, RPO. Er tillgĂ€nglighet var 99,97, nĂ€stan fyra nior, men som jag förstĂ„r det har ni ett andra datacenter, och ett tredje datacenter, och ett femte datacenter
 Hur hanterar ni deras synkronisering, replikering, allt annat?

    EG: – LĂ„t oss börja med det första. Den första frĂ„gan handlade om loggar? NĂ€r vi skriver loggar finns det ett lager som maskerar all kĂ€nslig data. Det tittar pĂ„ masken och ytterligare fĂ€lt. Följaktligen kommer vĂ„ra loggar ut med redan maskerad data och en PCI DSS-struktur. Detta Ă€r en av de regelbundna uppgifterna som tilldelas testavdelningen. De Ă€r skyldiga att kontrollera varje uppgift, inklusive de loggar de skriver, och detta Ă€r en av de regelbundna uppgifterna under kodgranskningen, för att kontrollera att utvecklaren inte har skrivit ner nĂ„got. Efterföljande verifiering av detta utförs regelbundet av informationssĂ€kerhetsavdelningen ungefĂ€r en gĂ„ng i veckan: loggar för den senaste dagen tas selektivt, och de körs genom en speciell skanner-analysator frĂ„n testservrarna för att kontrollera allt detta.
    AngÄende snabbkorrigeringar. Detta ingÄr i vÄra distributionsregler. Vi har en separat punkt om snabbkorrigeringar. Vi anser att vi driftsÀtter snabbkorrigeringar dygnet runt nÀr vi behöver det. SÄ snart versionen Àr kompilerad, sÄ snart den körs, sÄ snart vi har en artefakt - har vi en jourhavande systemadministratör frÄn supporten, och han driftsÀtter den nÀr det behövs.

    UngefÀr "fyra nior". Den siffra vi har nu, den uppnÄddes verkligen, och vi strÀvade efter den pÄ ett annat datacenter. Nu har vi ett andra datacenter, och vi börjar routa mellan dem, och frÄgan om replikering mellan datacenter Àr egentligen en icke-trivial frÄga. Vi försökte lösa det dÄ pÄ olika sÀtt: vi försökte anvÀnda samma "Tarantula" - det fungerade inte för oss, jag ska berÀtta det direkt. DÀrför kom vi till den punkt att vi gör en bestÀllning för "sens" manuellt. Faktum Àr att varje applikation i vÄrt asynkrona lÀge för den nödvÀndiga synkroniseringen "Àndras - klar" körs mellan datacenter.

    PÅ: - Om du har en andra, varför har inte en tredje dykt upp? För Split-brain Ă€r ingen Ă€n...

    EG: – Och vi har ingen "Split-brain". Eftersom varje applikation körs av en multimaster spelar det ingen roll för oss vilket center förfrĂ„gan kom till. Vi Ă€r beredda pĂ„ att om ett av vĂ„ra datacenter gĂ„r ner (vi rĂ€knar med detta) och byter till det andra datacentret mitt i en anvĂ€ndares förfrĂ„gan, Ă€r vi beredda att förlora den hĂ€r anvĂ€ndaren, visserligen; men dessa kommer att vara vĂ€ldigt fĂ„, absolut fĂ„.

    PÅ: – God kvĂ€ll. Tack för rapporten. Du pratade om din felsökare, som kör vissa testtransaktioner i produktion. BerĂ€tta nu om testtransaktioner! Hur djupt gĂ„r den?

    EG: - Den gÄr igenom hela komponentens cykel. För komponenten Àr det ingen skillnad mellan en testtransaktion och en livetransaktion. Och ur logikens synvinkel Àr det helt enkelt ett separat projekt i systemet, pÄ vilket endast testtransaktioner körs.

    PÅ: - Var klipper du av den? KĂ€rnan skickades...

    EG: – Vi Ă€r för ”Kor” i det hĂ€r fallet för testtransaktioner... Vi har ett sĂ„dant koncept som routing: ”Kor” vet vilket betalningssystem den ska skicka till – vi skickar till ett falskt betalningssystem, som helt enkelt ger en http-retur och det Ă€r allt.

    PÅ: – SnĂ€lla, sĂ€g mig, Ă€r din applikation skriven som en enda stor monolit, eller har du delat upp den i nĂ„gra tjĂ€nster eller till och med mikrotjĂ€nster?

    EG: – Vi har förstĂ„s ingen monolit, vi har en tjĂ€nsteorienterad applikation. Vi skĂ€mtar om att vi har en tjĂ€nst gjord av monoliter – de Ă€r egentligen ganska stora. Det Ă€r svĂ„rt att kalla dem mikrotjĂ€nster, men det hĂ€r Ă€r tjĂ€nster inom vilka distribuerade maskinarbetare arbetar.

    Om tjÀnsten pÄ servern Àr komprometterad


    PÅ: – Sedan har jag nĂ€sta frĂ„ga. Även om det vore en monolit, sa du Ă€ndĂ„ att du har mĂ„nga av dessa snabbservrar, alla bearbetar i princip data, och frĂ„gan Ă€r: "Om en av snabbservrarna eller en applikation, nĂ„gon enskild lĂ€nk, komprometteras, har de nĂ„gon form av Ă„tkomstkontroll? Vilka av dem kan göra vad? Vem ska man kontakta, för vilka data?"

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

    EG: – Ja, definitivt. SĂ€kerhetskraven Ă€r ganska allvarliga. För det första har vi öppna dataflöden, och bara de portar genom vilka vi förvĂ€ntar oss trafikflöde. Om en komponent kommunicerar med en databas (sĂ€g med Muskul) via 5-4-3-2, kommer bara 5-4-3-2 att vara öppen för den, och andra portar, andra riktningar för trafikflödet, kommer inte att vara tillgĂ€ngliga. Dessutom mĂ„ste vi förstĂ„ att det i vĂ„r produktion finns cirka 10 olika sĂ€kerhetskonturer. Och Ă€ven om applikationen pĂ„ nĂ„got sĂ€tt komprometterades, 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 Ă€r jag mer intresserad av det faktum 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 begĂ€r vissa specifika tjĂ€nster en viss rad, en lista med â€Ă„tgĂ€rder” pĂ„ en annan. De kontaktar inte andra i en normal situation, och de har andra ansvarsomrĂ„den. Om en av dem komprometteras, kommer den att kunna hĂ€mta â€Ă„tgĂ€rderna” för den tjĂ€nsten?..

    EG: – Jag förstĂ„r. Om kommunikation överhuvudtaget var tillĂ„ten i en normal situation med en annan server, sĂ„ ja. Enligt SLA-avtalet övervakar vi inte att man bara fĂ„r de första 3 "Ă„tgĂ€rderna", och 4 "Ă„tgĂ€rder" Ă€r inte tillĂ„tna. Detta Ă€r förmodligen överdrivet för oss, eftersom vi redan i princip har ett 4-nivĂ„s skyddssystem för konturerna. Vi föredrar att skydda oss med konturer, och inte pĂ„ insidans nivĂ„.

    Hur Visa, MasterCard och Sberbank fungerar

    PÅ: – Jag vill förtydliga punkten kring att byta anvĂ€ndare frĂ„n ett datacenter till ett annat. SĂ„vitt jag vet fungerar Visa och MasterCard med det binĂ€ra synkrona protokollet 8583, det finns blandningar dĂ€r. Och jag ville veta, Ă€r detta en direkt vĂ€xling mellan Visa och MasterCard eller före betalningssystemen, före bearbetningen?

    EG: – Detta Ă€r före mixarna. VĂ„ra mixar finns i ett och samma datacenter.

    PÅ: – Grovt sett har ni en kopplingspunkt?

    EG: - Visa och MasterCard - ja. Helt enkelt för att Visa och MasterCard krÀver ganska stora investeringar i infrastruktur för att ingÄ separata kontrakt för att ta emot ett andra par mixar, till exempel. De Àr reserverade inom ett datacenter, men om, Gud förbjude, vÄrt datacenter dÀr mixarna för anslutning till Visa och MasterCard finns dör, dÄ kommer vÄr anslutning till Visa och MasterCard att försvinna...

    PÅ: – Hur kan de reserveras? Jag vet att Visa i princip bara tillĂ„ter att en anslutning upprĂ€tthĂ„lls!

    EG: – De levererar utrustningen sjĂ€lva. I vilket fall som helst fick vi utrustning som Ă€r helt sĂ€kerhetskopierad internt.

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

    EG: - Ja.

    PÅ: – Och hur Ă€r det med det hĂ€r fallet: om ert datacenter försvinner, hur fortsĂ€tter ni att anvĂ€nda det? Eller upphör trafiken helt enkelt?

    EG: – Nej. I det hĂ€r fallet kommer vi helt enkelt att byta trafik till en annan kanal, vilket naturligtvis blir dyrare för oss, dyrare för kunderna. Men trafiken kommer inte att gĂ„ via vĂ„r direkta anslutning till Visa, MasterCard, utan via en villkorad Sberbank (vĂ€ldigt överdrivet).

    Jag ber sÄ hemskt mycket om ursÀkt om jag har förolÀmpat Sberbanks anstÀllda. Men enligt vÄr statistik Àr Sberbank den ryska bank som oftast faller. Det gÄr inte en mÄnad utan att nÄgot faller i Sberbank.

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

    Spela upp video

    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

Köp pĂ„litlig hosting för webbplatser med DDoS-skydd, VPS VDS-servrar đŸ”„ Köp pĂ„litlig webbhotell med DDoS-skydd, VPS VDS-servrar | ProHoster