HighLoad++, Evgeny Kuzovlev (EcommPay IT): hvad gÞr man, nÄr et minut med nedetid koster $100000

Alle taler om udviklings- og testprocesser, uddannelse af medarbejdere, motivation, men disse processer er ikke nok, nÄr et minuts nedetid for servicen koster astronomiske belÞb. Hvad skal man gÞre, nÄr man foretager finansielle transaktioner under strenge SLA'er? Hvordan Þger man pÄlideligheden og fejltolerance af sine systemer uden at inddrage udvikling og test?

HighLoad++, Evgeny Kuzovlev (EcommPay IT): hvad gÞr man, nÄr et minut med nedetid koster $100000

Den nÊste HighLoad++ konference finder sted den 6. og 7. april 2020 i Sankt Petersborg. Detaljer og billetter findes pÄ linket. 9. november, kl. 18:00. HighLoad++ Moskva 2018, sal "Delhi + Kolkata". Noter og prÊsentation.

Evgeny Kuzovlev (nedenfor – EK): – Venner, hej! Mit navn er Kuzovlev Evgeny. Jeg er fra firmaet EcommPay, det specifikke afdeling – EcommPay IT, IT-afdelingen i koncernen. Og i dag vil vi tale om nedetid – hvordan man undgĂ„r det, og hvordan man minimerer konsekvenserne, hvis det ikke kan undgĂ„s. Emnet er: "Hvad skal man gĂžre, nĂ„r et minuts nedetid koster 100.000 dollars"? Tallet vil i vores tilfĂŠlde, spoiler alert, vĂŠre sammenligneligt.

Hvad beskĂŠftiger EcommPay IT sig med?

Hvem er vi? Hvorfor stÄr jeg her foran jer? Hvorfor har jeg ret til at fortÊlle jer noget her? Og hvad vil vi vÊre mere detaljerede omkring?

HighLoad++, Evgeny Kuzovlev (EcommPay IT): hvad gÞr man, nÄr et minut med nedetid koster $100000

EcommPay gruppen er en international betalingsudbyder. Vi behandler betalinger over hele verden – i Rusland, Europa, SydĂžstasien (Overalt i verden). Vi har 9 kontorer, 500 ansatte i alt, og cirka halvdelen af dem er IT-specialister. Alt, hvad vi gĂžr, alt, hvad vi tjener penge pĂ„, det har vi lavet selv.

Alle vores produkter (og vi har mange nok – i vores sortiment af store IT-produkter har vi omkring 16 forskellige komponenter) har vi skrevet selv; vi skriver selv, og vi udvikler selv. Og i Ăžjeblikket foretager vi omkring en million transaktioner om dagen (millioner – det er nok en korrekt mĂ„de at beskrive det). Vi er en relativt ung virksomhed – vi er kun omkring seks Ă„r gamle.

For 6 Är siden var det et startup, da folk kom sammen med forretningen. De var forenet af en idé (der var ikke andet end idéen), og sÄ lÞb vi. Ligesom ethvert startup lÞb vi hurtigere... For os var hastighed vigtigere end kvalitet.

PÄ et tidspunkt stoppede vi op: vi indsÄ, at vi ikke lÊngere kunne leve med den hastighed og kvalitet. Vi mÄtte prioritere kvaliteten. PÄ det tidspunkt besluttede vi at udvikle en ny platform, der ville vÊre korrekt, skalerbar og pÄlidelig. Vi begyndte at skrive denne platform (investere, udvikle, teste), men indsÄ pÄ et tidspunkt, at udvikling og test ikke tillod os at nÄ et nyt kvalitetsniveau for vores service.

Du lancerer et nyt produkt, men alligevel vil der altid ske noget uventet. I dag vil vi tale om, hvordan man nÄr et nyt kvalitetsniveau (det er vores erfaring), hvor udvikling og test ikke er i fokus; vi vil tale om, hvad driftsafdelingen kan gÞre selv, og hvad den kan tilbyde testen for at pÄvirke kvaliteten.

Nedetider. Driftsprincipper.

Den grundlĂŠggende hjĂžrnesten, som vi i dag vil tale om, er nedetid. Et skrĂŠmmende ord. Hvis vi oplever nedetid, sĂ„ er alt galt. Vi lĂžber for at genoprette det, administratorerne holder serveren – lad os hĂ„be, den ikke falder, som der synges i sangen. Dette vil vi tale om i dag.

HighLoad++, Evgeny Kuzovlev (EcommPay IT): hvad gÞr man, nÄr et minut med nedetid koster $100000

Da vi begyndte at Êndre vores tilgange, definerede vi 4 principper. De er prÊsenteret pÄ slides:

Disse principper er relativt enkle:

HighLoad++, Evgeny Kuzovlev (EcommPay IT): hvad gÞr man, nÄr et minut med nedetid koster $100000

  • Hurtigt identificere problemet.
  • Endnu hurtigere fjerne det.
  • HjĂŠlpe med at forstĂ„ Ă„rsagen (senere, for udviklerne).
  • Og standardisere tilgange.

Jeg vil gerne fremhÊve punkt nr. 2. Vi fjerner problemet, ikke lÞser det. At lÞse er sekundÊrt. For os er det primÊre, at brugeren er beskyttet mod dette problem. Det vil eksistere i et eller andet isoleret miljÞ, men dette miljÞ vil ikke interagere med brugeren. Vi vil gennemgÄ disse fire grupper af problemer (nogle dybere, andre mindre dybtgÄende), jeg vil fortÊlle, hvad vi bruger, hvad vores erfaring er med lÞsninger.

ProblemlÞsning: hvornÄr de opstÄr, og hvad man skal gÞre ved dem?

Men begynder vi ikke i rĂŠkkefĂžlge, men med punkt nr. 2 – hvordan man hurtigt slipper af med problemet? Der er et problem – vi skal lĂžse det. "Hvad skal vi gĂžre med det?" – det er det centrale spĂžrgsmĂ„l. Og nĂ„r vi begyndte at tĂŠnke over, hvordan vi kunne lĂžse problemet, udviklede vi nogle krav, som problemlĂžsningen skulle fĂžlge.

HighLoad++, Evgeny Kuzovlev (EcommPay IT): hvad gÞr man, nÄr et minut med nedetid koster $100000

For at formulere disse krav besluttede vi at stille os selv spÞrgsmÄlet: "HvornÄr opstÄr der problemer for os"? Og det viste sig, at problemer opstÄr i fire tilfÊlde:

HighLoad++, Evgeny Kuzovlev (EcommPay IT): hvad gÞr man, nÄr et minut med nedetid koster $100000

  • Hardwarefejl.
  • Uheld i eksterne tjenester.
  • Ændring af softwareversion (den sĂ„kaldte deployment).
  • Eksplosiv vĂŠkst i belastning.

Vi vil ikke tale om de fĂžrste to. Hardwarefejl lĂžses ret enkelt: alt bĂžr vĂŠre duplikeret. Hvis det er diske, skal diske vĂŠre samlet i RAID, hvis det er servere – serverne skal vĂŠre duplikeret, hvis det er dit netvĂŠrk – du skal sĂŠtte en anden kopi af netvĂŠrksinfrastrukturen, sĂ„ du tager og duplikerer. Og hvis noget fejler, skifter du til nĂždstrĂžm. Her er der ikke meget mere at sige.

Det andet – er uheld i eksterne tjenester. For de fleste systemer er dette slet ikke et problem, men ikke for os. Da vi behandler betalinger, er vi en aggregator, der stĂ„r mellem brugeren (som indtaster sine kortoplysninger) og bankerne, betalingssystemer ("Visa", "MasterCard", "Mir" osv.). Vores eksterne tjenester (betalingssystemer, banker) har en tendens til at fejle. Hverken vi eller du (hvis du har sĂ„danne tjenester) kan pĂ„virke det.

Hvad skal man sĂ„ gĂžre? Her er der to muligheder. For det fĂžrste, hvis du kan, bĂžr du duplikere denne tjeneste pĂ„ en eller anden mĂ„de. For eksempel, hvis vi kan, flytter vi trafikken fra Ă©n tjeneste til en anden: hvis vi for eksempel behandler kort via "Sberbank", og "Sberbank" har problemer – sĂ„ overfĂžrer vi trafikken [hypotetisk] til "Raiffeisen". For det andet, hvad vi kan gĂžre – er at meget hurtigt opdage fejl i eksterne tjenester, og derfor vil vi tale om reaktionstiden i nĂŠste del af prĂŠsentationen.

Af de fire punkter kan vi konkret pĂ„virke opdatering af softwareversioner – gĂžre handlinger, der fĂžrer til forbedringer i forhold til deployment og i forhold til den eksplosive vĂŠkst i belastning. Det er prĂŠcist det, vi har gjort. Her, igen, en lille bemĂŠrkning


Af disse fire problemer kan flere lÞses straks, hvis du har cloud. Hvis du bruger 'Microsoft Azure', 'Ozon', vores clouds fra 'Yandex' eller 'Mail', bliver hardwarefejl i det mindste deres problem, og sÄ har du straks en god situation i forhold til hardwarefejl.

Vi er en smule unormale som virksomhed. Her taler alle om 'Kubernetes', om clouds – vi har hverken 'Kubernetes' eller clouds. Men vi har servere med hardware i mange datacentre, og pĂ„ dette hardware mĂ„ vi leve, vi er nĂždt til at tage ansvar for det hele. SĂ„ i denne kontekst vil vi tale om problemer. De fĂžrste to lader vi ligge.

Opdatering af softwareversion. Grundlag

Vores udviklere har ikke adgang til produktionen. Hvorfor er det sÄdan? Fordi vi er certificerede i henhold til PCI DSS, og udviklere har ikke ret til at roame i 'prod'. Punktum. Overhovedet. Derfor slutter udviklernes ansvar nÞjagtigt i det Þjeblik, udviklingen overfÞrer build til release.

HighLoad++, Evgeny Kuzovlev (EcommPay IT): hvad gÞr man, nÄr et minut med nedetid koster $100000

Det andet grundlag, vi har, og som ogsĂ„ hjĂŠlper os meget – er, at der ikke findes unikke, udelte viden. Jeg hĂ„ber, du har det pĂ„ samme mĂ„de. For hvis ikke, vil du fĂ„ problemer. Problemerne opstĂ„r, nĂ„r de unikke, ikke-dokumenterede viden ikke er til stede pĂ„ det rette tidspunkt og sted. Lad os sige, at Ă©n person ved, hvordan man deployerer en specifik komponent – hvis denne person ikke er til stede, da han er pĂ„ ferie eller syg – sĂ„ har du problemer.

Og det tredje grundlag, vi er kommet til. Vi er kommet til det gennem smerte, blod, tĂ„rer – vi er kommet til den erkendelse, at hver af vores builds indeholder fejl, selvom der ikke skulle vĂŠre nogen. Vi har besluttet, at nĂ„r vi deployerer noget, nĂ„r vi sender noget ud i produktion – er vores build med fejl. Vi har dannet kravene, som vores system skal opfylde.

Krav til opdatering af softwareversion

Der er tre krav:

HighLoad++, Evgeny Kuzovlev (EcommPay IT): hvad gÞr man, nÄr et minut med nedetid koster $100000

  • Vi skal hurtigt kunne rulle deployment tilbage.
  • Vi skal minimere indflydelsen af en mislykket deployment.
  • Og vi skal have mulighed for hurtigt at kunne deployere parallelt.
    PrÊcis i den rÊkkefÞlge! Hvorfor? Fordi hastigheden ikke er vigtig, nÄr du deployer en ny version, men hvis der opstÄr problemer, er det vigtigt hurtigt at kunne rulle tilbage og minimere pÄvirkningen. Men hvis du har et sÊt versioner i produktion, som indeholder en fejl (som et lyn fra en klar himmel, ingen deploy er sket, men fejlen er til stede) - sÄ er hastigheden pÄ den efterfÞlgende deploy vigtig. Hvad har vi gjort for at imÞdekomme disse krav? Vi har anvendt en metodologi:

    HighLoad++, Evgeny Kuzovlev (EcommPay IT): hvad gÞr man, nÄr et minut med nedetid koster $100000

    Den er ret kendt, vi har ikke opfundet den – det er Blue/Green deploy. Hvad er det? For hver gruppe servere, hvor dine applikationer kĂžrer, skal du have en kopi. Kopien er "varm": der er ikke trafik pĂ„ den, men i hvilken som helst situation kan trafikken sendes til denne kopi. Denne kopi indeholder den tidligere version. Og i deploy-momentet ruller du koden ud pĂ„ den inaktive kopi. Derefter skifter du en del af trafikken (eller hele delen) til den nye version. For at ĂŠndre trafikflowet fra den gamle version til den nye, skal du kun foretage en enkelt handling: du skal ĂŠndre balancereren upstream, ĂŠndre retningen – fra en upstream til en anden. Det er meget praktisk og lĂžser problemet med hurtig skiftning og hurtig tilbagefĂžrsel.

    Her er lĂžsningen pĂ„ det andet spĂžrgsmĂ„l – minimalisering: du kan sende kun en del af din trafik til den nye linje, linjen med den nye kode (lad os f.eks. sige 2%). Og disse 2% er ikke 100%! Hvis du mister 100 % af trafikken ved en mislykket deploy – det er skrĂŠmmende, hvis du mister 2% af trafikken – det er surt, men det er ikke skrĂŠmmende. Desuden vil brugerne sandsynligvis ikke engang bemĂŠrke det, fordi i nogle tilfĂŠlde (ikke alle) vil den samme bruger, nĂ„r de trykker F5, komme til en anden, fungerende version.

    Blue/Green deploy. Routing

    Men ikke alt er sÄ simpelt med "Blue/Green deploy"
 Alle vores komponenter kan opdeles i tre grupper:

    • det er frontend (betaling sider, som vores kunder ser);
    • kernen af behandlingen;
    • adapteren til at arbejde med betalingssystemer (banker, "MasterCard", "Visa"
).

    Og her er der en nuance – nuancen handler om routing mellem linjerne. Hvis du bare skifter 100% af trafikken, har du ikke disse problemer. Men hvis du vil skifte 2%, sĂ„ opstĂ„r der spĂžrgsmĂ„l: 'Hvordan gĂžr man det?' Det simpleste, lige i ansigtet: du kan indstille det til tilfĂŠldig valg, Round Robin i nginx, og sĂ„ har du 2% – til venstre, 98% – til hĂžjre. Men det passer ikke altid.

    For os interagerer brugeren for eksempel med systemet ikke med Ă©n anmodning. Det er normalt: 2, 3, 4, 5 anmodninger – du kan have systemer, der er ligesĂ„dan. Og hvis det er vigtigt for dig, at alle anmodninger fra brugeren kommer til den samme linje, som den fĂžrste anmodning kom til, eller (det andet punkt) at alle anmodninger fra brugeren kommer til en ny linje efter skiftet (brugeren kunne have begyndt at arbejde med systemet fĂžr skiftet) – sĂ„ passer denne tilfĂŠldige fordeling ikke til dig. SĂ„ er der fĂžlgende muligheder:

    HighLoad++, Evgeny Kuzovlev (EcommPay IT): hvad gÞr man, nÄr et minut med nedetid koster $100000

    Den fĂžrste mulighed, den simpleste – baseret pĂ„ brugerens grundlĂŠggende parametre (IP Hash). Du har en IP, og du opdeler til hĂžjre-venstre baseret pĂ„ IP-adressen. SĂ„ vil det fungere som det andet scenarie, jeg har beskrevet, hvor der er sket en deployment, brugeren allerede kunne begynde at arbejde med dit system, og fra tidspunktet for deployment vil alle anmodninger gĂ„ til den nye linje (til den samme, lad os sige).

    Hvis dette af en eller anden grund ikke passer dig, og du nÞdvendigvis skal sende anmodninger til den linje, som den primÊre, indledende anmodning fra brugeren kom til, sÄ har du to muligheder

    Den fĂžrste mulighed: du kan tage en betalt nginx+. Der findes en mekanisme for Sticky sessions, som ved den primĂŠre anmodning fra brugeren opretter en session for brugeren og knytter den til en eller anden upstream. Alle efterfĂžlgende anmodninger fra brugeren i lĂžbet af sessionens levetid vil blive sendt til den samme upstream, som sessionen blev tildelt.

    Det fungerede ikke for os, fordi vi allerede havde almindelig nginx. At skifte til nginx+ – det er ikke, fordi det er dyrt, det var mere smertefuldt for os og ikke helt rigtigt. 'Sticky sessions' fungerede ikke for os, fordi de simpelthen ikke giver mulighed for at route efter 'Enten-eller'. Der kan man indstille, at vi laver 'Sticky sessions', for eksempel baseret pĂ„ IP-adressen eller pĂ„ IP-adressen og cookies eller pĂ„ postparametre, men 'Enten-eller' – der er det allerede mere kompliceret.

    Derfor er vi kommet frem til den fjerde mulighed. Vi har taget nginx pĂ„ "steroider" (det er openresty) – det er det samme nginx, der yderligere understĂžtter inkludering af last-scripts. Du kan skrive et last-script, indsĂŠtte det i denne "openresty", og dette last-script vil blive udfĂžrt, nĂ„r der kommer en brugerforespĂžrgsel.

    Og vi har faktisk skrevet sÄdan et lille script, sat openresty op, og i dette script gennemgÄr vi 6 forskellige parametre ved konkatenering med "eller". AfhÊngig af tilstedevÊrelsen af den eller den anden parameter ved vi, at brugeren er kommet til den ene eller den anden side, til den ene eller den anden linje.

    Blue/Green deploy. Fordele og ulemper

    SelvfÞlgelig kunne man mÄske have gjort det lidt simplere (bruge de samme "Sticky Sessions"), men vi har ogsÄ det aspekt, at der ikke kun er brugeren, der interagerer med os i lÞbet af en enkelt rÊkkefÞlge... Men der interagerer ogsÄ betalingssystemerne med os: efter vi har behandlet transaktionen (ved at sende en forespÞrgsel til betalingssystemet), modtager vi et callback.
    Og lad os sige, at hvis vi kan sende brugerens IP-adresse i alle forespÞrgsler inde i vores netvÊrk og basere opdelingen pÄ bruger-IP-adressen, sÄ vil vi ikke sige til den samme "Visa": "Hej folk, vi er en slags retro-virksomhed, vi er nogenlunde internationale (pÄ websitet og i Rusland)... Men kunne I sende os brugerens IP-adresse i et yderligere felt, jeres standardiserede protokol!" Det er klart, de vil ikke gÄ med til det.

    HighLoad++, Evgeny Kuzovlev (EcommPay IT): hvad gÞr man, nÄr et minut med nedetid koster $100000

    Derfor passede det ikke til os – vi lavede openresty. SĂ„ vores routing ser sĂ„ledes ud:

    Blue/Green deploy har naturligvis sine fordele, som jeg allerede har nĂŠvnt, og sine ulemper.

    Der er to ulemper:

    • du skal have styr pĂ„ routingen;
    • den anden hovedulempe er omkostningerne.

    Du skal have to gange sÄ mange servere, du skal have to gange sÄ mange driftsressourcer, og du skal bruge to gange sÄ meget krÊfter pÄ at holde hele denne zoologiske have ved lige.

    Forresten, blandt fordelene er der endnu en ting, jeg ikke har nĂŠvnt: du har en backup i tilfĂŠlde af stigende belastning. Hvis du oplever en eksplosiv stigning i belastningen, og mange brugere kommer ind, sĂ„ aktiverer du bare den anden linje med en fordeling pĂ„ 50/50 – og sĂ„ har du straks dobbelte servere i dit cluster, indtil du lĂžser problemet med serverne.

    Hvordan laver man en hurtig deployment?

    Vi har talt om, hvordan man kan minimere problemer og hurtigt rulle tilbage, men spÞrgsmÄlet stÄr tilbage: 'Hvordan kan man deployere hurtigt'?

    HighLoad++, Evgeny Kuzovlev (EcommPay IT): hvad gÞr man, nÄr et minut med nedetid koster $100000

    Her er det kort og enkelt.

    • Du skal have et CD-system (Continuous Delivery) – uden det kommer du ikke langt. Hvis du har Ă©n server, kan du deployere manuelt. Vi har cirka halvandet tusinde servere, og manuelle deployment er selvfĂžlgelig ikke en mulighed – vi ville skulle ansĂŠtte et team pĂ„ stĂžrrelse med denne sal, kun for at foretage deployment.
    • Deployment skal vĂŠre parallelt. Hvis dit deployment er sekventielt, sĂ„ er det skidt. Én server – det gĂ„r, men deployerer du halvandet tusinde servere, vil det tage hele dagen.
    • Igen, for at fremskynde processen, er det mĂ„ske ikke nĂždvendigt. Ved deployment udfĂžres der normalt en projektbygning. Har du et webprojekt, er der frontendent delen (du laver webpack, samlet med npm – noget i den retning), og denne proces tager grundlĂŠggende ikke lang tid – mĂ„ske 5 minutter, men disse 5 minutter kan vĂŠre kritiske. Derfor gĂžr vi for eksempel ikke pĂ„ den mĂ„de: vi har fjernet de 5 minutter, vi deployerer artefakter.

      Hvad er et artefakt? Et artefakt er en samlet bygning, hvor hele byggeprocessen allerede er udfĂžrt. Dette artefakt opbevarer vi i et artefaktlager. Tidligere havde vi to sĂ„danne lagre – Nexus og nu jFrog Artifactory. Vi brugte oprindeligt 'Nexus', fordi vi begyndte at praktisere denne tilgang i Java-applikationer (den var velegnet til dette). Senere inkluderede vi ogsĂ„ nogle applikationer skrevet i PHP; og 'Nexus' var ikke lĂŠngere passende, sĂ„ vi valgte jFrog Artifactory, som kan hĂ„ndtere nĂŠsten alt. Vi kom endda til det punkt, at vi opbevarer egne binĂŠre pakker, som vi samler til serverne, i dette artefaktlager.

    Eksplosiv stigning i belastningen

    Vi har talt om at skifte version af softwaren. Det nÊste, vi har, er en eksplosiv stigning i belastningen. Her, formentlig, forstÄr jeg ikke helt det, som jeg mener med en eksplosiv stigning i belastningen


    Vi har skrevet et nyt system – det er serviceorienteret, moderne og smukt, med arbejdere overalt, kĂžer overalt, asynkronitet overalt. I sĂ„danne systemer kan data fĂžlge forskellige flow. For den fĂžrste transaktion kan den 1. , 3. og 10. arbejder vĂŠre involveret, mens den anden transaktion kan involvere 2., 4. og 5. arbejder. Og i dag, lad os sige, at dataflowet om morgenen involverer de fĂžrste tre arbejdere, og om aftenen ĂŠndres det dramatisk, og alle involverer de andre tre arbejdere.

    Og her bliver det sÄdan, at du pÄ en eller anden mÄde skal skalere arbejderne, du skal pÄ en eller anden mÄde skalere dine tjenester, men samtidig undgÄ at blÊse ressourcerne op.

    HighLoad++, Evgeny Kuzovlev (EcommPay IT): hvad gÞr man, nÄr et minut med nedetid koster $100000

    Vi har defineret vores krav. Disse krav er temmelig enkle: der skal vĂŠre service discovery, parameterisering – alt er standard for opbygning af sĂ„danne skalerbare systemer, bortset fra Ă©t punkt – det er amortisering af ressourcer. Vi har sagt, at vi ikke er klar til at amortisere ressourcerne, sĂ„ serverne ikke bare varmer luften. Vi tog "Consul", vi tog "Nomad", som styrer vores arbejdere.

    Hvorfor er dette et problem for os? Lad os tage et skridt tilbage. Vi har nu omkring 70 betalingssystemer bag os. Om morgenen gĂ„r trafikken gennem "Sberbank", sĂ„ falder "Sberbank", for eksempel, og vi skifter til et andet betalingssystem. Vi havde 100 arbejdere fungerende fĂžr "Sberbank", og efter det skal vi hurtigt Ăžge til 100 arbejdere for det andet betalingssystem. Og dette skal helst ske uden menneskelig indblanding. Fordi, hvis der er menneskelig indblanding – der skal sidde en ingeniĂžr, som udelukkende beskĂŠftiger sig med det 24/7, fordi sĂ„danne nedbrud, nĂ„r 70 systemer er bag dig, sker regelmĂŠssigt.

    Derfor sĂ„ vi pĂ„ "Nomad", som har en Ă„ben IP, og vi skrev vores eget vĂŠrktĂžj Scale-Nomad – ScaleNo, som gĂžr omtrent fĂžlgende: det overvĂ„ger vĂŠksten af kĂžen og reducerer eller Ăžger antallet af arbejdere afhĂŠngigt af den dynamiske ĂŠndring i kĂžen. Da vi gjorde det, tĂŠnkte vi: "MĂ„ske skal vi open-source det?" SĂ„ kiggede vi pĂ„ det – det er simpelt som to Ăžre.

    Indtil nu har vi ikke open-source det, men hvis du efter foredraget, efter at have indset, at du har brug for et sĂ„dan vĂŠrktĂžj, har behov for det, er mine kontaktoplysninger pĂ„ den sidste slide – venligst skriv til mig. Hvis vi samler mindst 3-5 personer – sĂ„ open-source vi det.

    HighLoad++, Evgeny Kuzovlev (EcommPay IT): hvad gÞr man, nÄr et minut med nedetid koster $100000

    Hvordan fungerer det? Lad os tage et kig! For at forudsige: til venstre er der et stykke af vores overvĂ„gning: det er en linje, Ăžverst – behandlingstid for hĂŠndelser, i midten – antal transaktioner, nederst – antal arbejdere.

    Hvis vi kigger, er der et nedbrud pĂ„ dette billede. I den Ăžverste graf er en af graferne steget over 45 sekunder – et af betalingssystemerne gik ned. Straks blev der prĂŠsenteret trafik for 2 minutter, og der kom en stigning i kĂžen i et andet betalingssystem, hvor der ikke var arbejdere (vi udnyttede ikke ressourcerne – tvĂŠrtimod, vi udnyttede ressourcen korrekt). Vi Ăžnskede ikke at overbelaste – der var et minimum antal, omkring 5-10 arbejdere, men de kunne ikke klare opgaven.

    I den sidste graf ses en "bump", som netop viser, at "Skaleno" fordoblede dette antal. Og sĂ„, da grafen faldt lidt, blev det reduceret en smule – antallet af arbejdere blev ĂŠndret automatisk. SĂ„dan fungerer denne ting. Vi talte om punkt nr. 2 – "Hvordan hurtigt fjerne Ă„rsagerne".

    OvervÄgning. Hvordan hurtigt opdage et problem?

    Nu er det fĂžrste punkt – "Hvordan hurtigt opdage et problem?" OvervĂ„gning! Vi skal hurtigt forstĂ„ bestemte ting. Hvilke ting skal vi hurtigt forstĂ„?

    HighLoad++, Evgeny Kuzovlev (EcommPay IT): hvad gÞr man, nÄr et minut med nedetid koster $100000

    Tre ting!

    • Vi skal hurtigt forstĂ„ og hurtigt opfatte tilgĂŠngeligheden af vores egne ressourcer.
    • Vi skal hurtigt forstĂ„ nedbrud, overvĂ„ge tilgĂŠngeligheden af de systemer, der er eksterne for os.
    • Tredje punkt – identificere logiske fejl. Det er nĂ„r systemet fungerer, alle indikatorer er normale, men noget gĂ„r galt.

    Her vil jeg nok ikke fortĂŠlle noget sĂŠrligt spĂŠndende. Jeg vil vĂŠre kaptajn Åbenbaring. Vi har set, hvad der findes pĂ„ markedet. Vi har fĂ„et en "sjov zoologisk have". SĂ„dan en zoologisk have har vi nu:

    HighLoad++, Evgeny Kuzovlev (EcommPay IT): hvad gÞr man, nÄr et minut med nedetid koster $100000

    Vi bruger "Zabbix" til overvĂ„gning af "hardwaren", til overvĂ„gning af de grundlĂŠggende indikatorer for serverne. "Okmeter" bruger vi til databaser. "Grafana" og "Prometheus" bruger vi til alle de andre indikatorer, der ikke hĂžrte til de fĂžrste to, hvoraf en del – med "Grafana" og "Prometheus", en del – "Grafana" med "Influx" og Telegraf.

    For et Är siden overvejede vi at bruge New Relic. Det er et fantastisk vÊrktÞj, det kan alt. Men i takt med at det kan alt, er det ogsÄ meget dyrt. Da vi voksede til 1.500 servere, kom en sÊlger til os og sagde: "Lad os indgÄ en kontrakt til nÊste Är". Vi kiggede pÄ prisen og sagde nej, det kommer vi ikke til at gÞre. Nu fraskriver vi os "New Relic", vi har omkring 15 servere tilbage, der er monitoreret af "New Relic". Prisen viste sig at vÊre helt vanvittig.

    Og der er et vĂŠrktĂžj, som vi har implementeret selv – det er Debugger. FĂžrst kaldte vi det "Bagger", men sĂ„ fik vi besĂžg af vores engelsklĂŠrer, som grinede hĂžjlydt, og vi omdĂžbte det til "Debugger". Hvad er det? Det er et vĂŠrktĂžj, der i realiteten kĂžrer tests pĂ„ hvert komponent indenfor 15-30 sekunder, som en "sort boks" i systemet, for at kontrollere komponentens generelle funktionalitet.

    For eksempel, hvis det er en ekstern side (betalingssiden) – den Ă„bner simpelthen siden og ser, hvordan den skal se ud. Hvis det er behandling, sender den en test-transaktion – og ser, at den transaktion nĂ„r frem. Hvis det handler om kommunikation med betalingssystemerne – sĂ„ sender vi en testanmodning, hvor vi kan, og ser, at alt fungerer som det skal.

    Hvilke mÄlinger er vigtige for overvÄgningen?

    Hvad overvÄger vi hovedsageligt? Hvilke mÄlinger er vigtige for os?

    HighLoad++, Evgeny Kuzovlev (EcommPay IT): hvad gÞr man, nÄr et minut med nedetid koster $100000

    • Respons tid / RPS pĂ„ front-end – en meget vigtig mĂ„ling. Det indikerer straks, at noget er galt.
    • Antallet af behandlede meddelelser i alle kĂžer.
    • Antallet af arbejdere.
    • Hovedmetrikker for korrekthed.

    Det sidste punkt er en "forretningsmĂŠssig" metrik. Hvis du Ăžnsker at overvĂ„ge det samme, skal du definere en eller to metrikker, der er dine vigtigste indikatorer. Vi har sĂ„dan en metrik – det er gennemstrĂžmning (forholdet mellem antallet af succesfulde transaktioner til den samlede strĂžm af transaktioner). Hvis der sker ĂŠndringer i denne over en periode pĂ„ 5-10-15 minutter – sĂ„ har vi problemer (hvis der sker en markant ĂŠndring).

    SĂ„dan ser det ud for os – et eksempel pĂ„ en af vores dashboards:

    HighLoad++, Evgeny Kuzovlev (EcommPay IT): hvad gÞr man, nÄr et minut med nedetid koster $100000

    Til venstre – 6 grafer, som viser antal medarbejdere og antal beskeder i kĂžen. Til hĂžjre – RPS, RTS. Nederst – den sĂ„kaldte "business"-metrik. Og pĂ„ "business"-metriken kan vi straks se, at der er noget galt pĂ„ de to mellemste grafer
 Det er netop et system, der er faldet ud, som stĂ„r bag os.

    Det andet, vi skulle gĂžre – var at overvĂ„ge nedbrud i eksterne betalingssystemer. Her tog vi OpenTracing – en mekanisme, standard, paradisk der muliggĂžr sporing af distribuerede systemer; og vi ĂŠndrede det lidt. Den standard OpenTracing-paradigme siger, at vi bygger en sporing for hver enkelt anmodning. Det havde vi ikke brug for, sĂ„ vi pakkede det ind i en samlet, aggregeret sporing. Vi lavede et vĂŠrktĂžj, som gĂžr det muligt for os at overvĂ„ge hastigheden hos de systemer, der stĂ„r bag os.

    HighLoad++, Evgeny Kuzovlev (EcommPay IT): hvad gÞr man, nÄr et minut med nedetid koster $100000

    Grafen viser os, at et af betalingssystemerne begynder at svare efter 3 sekunder – vi fĂ„r problemer. Samtidig reagerer dette system, nĂ„r problemerne opstĂ„r, inden for et interval pĂ„ 20-30 sekunder.

    Og den tredje klasse af overvĂ„gningsfejl, der findes – er logisk overvĂ„gning.

    Ærligt talt, vidste jeg ikke, hvad jeg skulle tegne pĂ„ dette slide, fordi vi lĂŠnge har sĂžgt pĂ„ markedet efter noget, der ville passe os. Vi fandt intet, sĂ„ vi mĂ„tte gĂžre det selv.

    HighLoad++, Evgeny Kuzovlev (EcommPay IT): hvad gÞr man, nÄr et minut med nedetid koster $100000

    Hvad mener jeg med logisk overvĂ„gning? TĂŠnk pĂ„ det sĂ„dan: du laver et system (for eksempel en klon af "Tinder"); du har oprettet det, lanceret det. Den succesfulde manager Vasja Pupkin har installeret det pĂ„ sin telefon, ser en pige, kan lide hende
 men 'liket' gĂ„r ikke til pigen – det gĂ„r til sikkerhedsvagten Mikhailych fra det samme kontorcentrum. Manageren gĂ„r ned, og sĂ„ undrer han sig: "Hvorfor smiler denne sikkerhedsvagt Mikhailych sĂ„ venligt til ham?"

    I sĂ„danne situationer... For os lyder denne situation lidt anderledes, fordi (jeg skrev) det er et sĂ„dan omdĂžmmetab, der indirekte fĂžrer til Ăžkonomiske tab. Vi har det modsatte problem: vi kan blive ramt af direkte Ăžkonomiske tab – for eksempel hvis vi gennemfĂžrer en transaktion som succesfuld, men den faktisk var mislykket (eller omvendt). Vi var nĂždt til at skrive et eget vĂŠrktĂžj, der holder Ăžje med antal succesfulde transaktioner i dynamik over tid. Vi fandt ikke noget pĂ„ markedet! Det var lige prĂŠcis den tanke, jeg ville fremhĂŠve. Til lĂžsning af denne slags opgaver findes der ikke noget pĂ„ markedet.

    Det var i forhold til spÞrgsmÄlet om, hvordan man hurtigt identificerer et problem.

    Hvordan fastslÄr man Ärsagerne til deployment

    Den tredje gruppe opgaver, vi lĂžser – er efter vi har identificeret problemet, og efter vi har lĂžst det, sĂ„ er det godt at forstĂ„ Ă„rsagen til udvikling, til testning og gĂžre noget ved det. Derfor skal vi undersĂžge, vi skal hente logs.

    HighLoad++, Evgeny Kuzovlev (EcommPay IT): hvad gÞr man, nÄr et minut med nedetid koster $100000

    Hvis vi taler om logs (hovedĂ„rsagen – logs), sĂ„ ligger hovedparten af vores logs i ELK Stack – nĂŠsten alle har det sĂ„dan. Nogen har mĂ„ske ikke ELK, men hvis du skriver logs i gigabyte, sĂ„ vil du fĂžr eller siden komme til ELK. Vi skriver dem i terabyte.

    HighLoad++, Evgeny Kuzovlev (EcommPay IT): hvad gÞr man, nÄr et minut med nedetid koster $100000

    Her er der et problem. Vi har rettet en fejl for brugeren, og begyndte at grave i, hvad der skete, dykker ind i 'Kibana', indtaster transaktionsid'et og fĂ„r sĂ„dan et statsligt udtrĂŠk (viser meget). Og i dette udtrĂŠk er der ikke noget forstĂ„eligt. Hvorfor? Fordi det ikke er klart, hvilken del der hĂžrer til hvilken worker, hvilken del der hĂžrer til hvilken komponent. Og i det Ăžjeblik indsĂ„ vi, at vi havde brug for tracing – det samme OpenTracing, som jeg talte om.

    Vi tĂŠnkte pĂ„ dette for et Ă„r siden, rettede blikket mod markedet, og der var to vĂŠrktĂžjer – Zipkin og Jaeger. Jaeger er i virkeligheden en ideologisk efterfĂžlger, en ideologisk fortsĂŠtter af Zipkin. Alt i Zipkin er godt, bortset fra at det ikke kan aggregere, det kan ikke inkludere logs i tracing, kun tids tracing. Og Jaeger stĂžttede dette.

    Vi kiggede pĂ„ 'Eger': man kan instrumentere applikationer, man kan skrive til API'et (API-standarden for PHP pĂ„ det tidspunkt var dog ikke godkendt – det var for et Ă„r siden, og nu er den allerede godkendt), og der var slet ingen klient. 'Okay', tĂŠnkte vi, og skrev vores egen klient. Hvordan ser det ud? SĂ„dan ser det cirka ud:

    HighLoad++, Evgeny Kuzovlev (EcommPay IT): hvad gÞr man, nÄr et minut med nedetid koster $100000

    I 'Eger' oprettes der span'er for hver besked. Det vil sige, nĂ„r brugeren Ă„bner systemet, ser han en eller to blokke for hver indkommende forespĂžrgsel (1-2-3 – sĂ„ mange indkommende forespĂžrgsler som brugeren har, sĂ„ mange blokke er der). For at gĂžre det lettere for brugerne har vi tilfĂžjet tags til loggene og tidsregistreringen. Derfor mĂŠrker vores applikation loggen med tagget Error i tilfĂŠlde af en fejl. Man kan filtrere ved hjĂŠlp af tagget Error, og kun de span'er, der indeholder den blok med fejlen, vil blive vist. SĂ„dan ser det ud, hvis vi folder span'en ud:

    HighLoad++, Evgeny Kuzovlev (EcommPay IT): hvad gÞr man, nÄr et minut med nedetid koster $100000

    Inde i span'en er der et sÊt traces. I dette tilfÊlde er der tre testtraces, og den tredje trace fortÊller os, at der opstod en fejl. Her ser vi ogsÄ tidsregistreringen: vi har en tidslinje Þverst, og vi kan se, hvilken tidsinterval loggen blev optaget.

    Derfor gik det virkelig godt. Vi skrev vores eget udvidelse, og vi har open-sourcet det. Hvis du vil arbejde med tracing, hvis du vil arbejde med 'Eger' i PHP – har vi vores udvidelse, welcome to use, som man siger:

    HighLoad++, Evgeny Kuzovlev (EcommPay IT): hvad gÞr man, nÄr et minut med nedetid koster $100000

    Vores udvidelse er en klient til at arbejde med OpenTracing API, lavet som en php-extention, det vil sige, du skal samle det og inkludere det i systemet. For et Är siden var der ikke noget andet. Nu er der ogsÄ andre klienter, der fungerer som komponenter. Det er op til dig: enten downloader du komponenterne med Composer, eller du bruger udvidelsen, op til dig.

    Virksomhedsstandarder

    Vi talte om de tre bud. Det fjerde bud – er at standardisere tilgange. Hvad handler det om? Det handler cirka om dette:

    HighLoad++, Evgeny Kuzovlev (EcommPay IT): hvad gÞr man, nÄr et minut med nedetid koster $100000

    Hvorfor er der ordet 'virksomheds'? Ikke fordi vi er en stor eller bureaukratisk virksomhed, nej! Ordet 'virksomheds' Þnskede jeg at bruge i den kontekst, at hver virksomhed, hvert produkt skal have sine egne standarder, og det skal I ogsÄ have. Hvilke standarder har vi?

    HighLoad++, Evgeny Kuzovlev (EcommPay IT): hvad gÞr man, nÄr et minut med nedetid koster $100000

    • Vi har en deploy-regulering. Uden den bevĂŠger vi os ikke, vi kan ikke. Vi deployer cirka 60 gange om ugen, sĂ„ vores deployer sker nĂŠsten konstant. Derudover har vi for eksempel et tabu mod deploys om fredagen – grundlĂŠggende, vi deployer ikke.
    • Vi har obligatorisk dokumentation. Ingen nye komponenter kommer i produktion uden dokumentation, selv hvis de er skabt af vores RnD-teams. Vi krĂŠver en udrulningsguide, et overvĂ„gningskort og en cirka beskrivelse (ja, som programmĂžrer kan skrive) af, hvordan denne komponent fungerer, og hvordan man fejlretter den.
    • Vi lĂžser ikke Ă„rsagen til problemet, men problemet – som jeg allerede har nĂŠvnt. Det er vigtigt for os at beskytte brugeren mod problemer.
    • Vi har tolerancer. For eksempel betragter vi ikke et downtime, hvis vi i to minutter har mistet 2 % af trafikken. Det kommer i princippet ikke ind i vores statistik. Hvis det er mere i procent eller tid, betragter vi det.
    • Og vi skriver altid post-mortems. Uanset hvad der sker, enhver situation, der opfĂžrer sig unormalt i produktionen, vil blive afspejlet i post-mortemet. Et post-mortem er et dokument, hvor du beskriver, hvad der skete, detaljeret tidslinje, hvad du gjorde for at rette det og (dette er et obligatorisk afsnit!) hvad du vil gĂžre for at forhindre, at det sker i fremtiden. Dette er obligatorisk og nĂždvendigt for efterfĂžlgende analyse.

    Hvad betragtes som downtime?

    HighLoad++, Evgeny Kuzovlev (EcommPay IT): hvad gÞr man, nÄr et minut med nedetid koster $100000

    Hvad fĂžrte det hele til?

    Det fÞrte til, at (vi havde visse problemer med stabilitet, som ikke tilfredsstillede hverken kunderne eller os) i lÞbet af de sidste 6 mÄneder har vores stabilitetsprocent vÊret 99,97. Man kan sige, at det ikke er sÊrlig meget. Ja, vi har noget at strÊbe efter. Ca. halvdelen af denne procentdel er stabilitet, som egentlig ikke er vores, men vores web application firewall, som stÄr foran os og bruges som en tjeneste, men kunderne har ikke meget at gÞre med det.

    Vi har lĂŠrt at sove om natten. Endelig! For seks mĂ„neder siden kunne vi ikke. Og pĂ„ denne note med resultaterne vil jeg gerne tilfĂžje en bemĂŠrkning. I gĂ„r aftes var der en fantastisk prĂŠsentation om styringssystemet til et atomreaktor. Hvis der er folk til stede, der skrev dette system – glem venligst det, jeg sagde om '2% – det er ikke downtime'. For jer er 2% downtime, selvom det kun er i to minutter!

    Det var alt! Dine spÞrgsmÄl.

    HighLoad++, Evgeny Kuzovlev (EcommPay IT): hvad gÞr man, nÄr et minut med nedetid koster $100000

    Om load balancere og database-migrationer

    SpĂžrgsmĂ„l fra publikum (herefter – S): – God aften. Mange tak for den informative prĂŠsentation! Et kort spĂžrgsmĂ„l vedrĂžrende jeres load balancere. I nĂŠvnte, at I har en WAF, sĂ„ vidt jeg forstĂ„r, bruger I en ekstern balancer...

    EK: – Nej, vi bruger vores egne tjenester som balancer. I dette tilfélde er WAF udelukkende et vérktþj til beskyttelse mod DDoS.

    Q: – Kan I sige et par ord om balancere?

    EK: – Som jeg har nĂŠvnt, er det en gruppe servere i openresty. Vi har i Ăžjeblikket 5 grupper af reserverede servere, der udelukkende hĂ„ndterer
 altsĂ„ serveren, der udelukkende kĂžrer openresty, den proxy’ere trafik. For at give en forstĂ„else, hvor meget trafik vi hĂ„ndterer: vores nuvĂŠrende faste trafikstrĂžm ligger pĂ„ flere hundrede megabit. De klarer det, og de har det godt, de knokler ikke engang.

    Q: – OgsĂ„ et enkelt spĂžrgsmĂ„l. Vi har Blue/Green deployment. Hvad gĂžr I for eksempel med database-migrationer?

    EK: – Godt spĂžrgsmĂ„l! Se, vi har i vores Blue/Green deployment separate kĂžer til hver linje. SĂ„ hvis vi taler om hĂŠndelseskĂžer, der gĂ„r fra arbejder til arbejder, sĂ„ er der separate kĂžer for blue-linjen og green-linjen. NĂ„r vi taler om selve databasen, har vi bevidst indsnĂŠvret den, sĂ„ meget vi kunne, og flyttet nĂŠsten alt til kĂžerne; databasen gemmer kun transaktionsstakken. Og transaktionsstakken er fĂŠlles for alle linjer. Med databasen i denne kontekst: vi deler ikke blue og green, fordi begge kodeversioner skal vide, hvad der sker med transaktionen.

    Venner, jeg har ogsĂ„ en lille prĂŠmie til at motivere jer – en bog. Jeg vil gerne give den til den, der stiller det bedste spĂžrgsmĂ„l.

    Q: – Hej. Tak for prĂŠsentationen. SpĂžrgsmĂ„l: I overvĂ„ger betalinger, I overvĂ„ger de tjenester, I kommunikerer med
 Men hvordan overvĂ„ger I, at en person pĂ„ en eller anden mĂ„de er kommet til jeres betalingsside, har gennemfĂžrt betalingen, og at projektet har tilfĂžjet penge til deres konto? Med andre ord, hvordan overvĂ„ger I, at merchant er tilgĂŠngelig og har accepteret jeres callback?

    EK: – 'Merchant' er for os i dette tilfĂŠlde en eksternt service som betalingssystemet. Vi overvĂ„ger svartiden fra 'merchant'.

    Om kryptering af databasen

    Q: – Hej. Jeg har lige et spĂžrgsmĂ„l. I har fĂžlsomme data i henhold til PCI DSS. Jeg vil gerne vide, hvordan I opbevarer PAN'er i kĂžer, som I skal videresende? Bruger I nogen form for kryptering? Og heraf det andet spĂžrgsmĂ„l: IfĂžlge PCI DSS er det nĂždvendigt at genkryptere databasen periodisk i tilfĂŠlde af ĂŠndringer (afskedigelse af administratorer osv.) – hvordan hĂ„ndteres tilgĂŠngeligheden i sĂ„danne tilfĂŠlde?

    HighLoad++, Evgeny Kuzovlev (EcommPay IT): hvad gÞr man, nÄr et minut med nedetid koster $100000

    EK: – Fantastisk spĂžrgsmĂ„l! For det fĂžrste opbevarer vi ikke PAN'er i kĂžer. Vi har ikke lov til at opbevare PAN i Ă„ben form, sĂ„ vi bruger en sĂŠrlig service (som vi kalder "Keydemon") – det er en service, der kun gĂžr Ă©n ting: den tager en besked ind og returnerer den krypteret. Og vi opbevarer alt i den krypterede besked. SĂ„ lĂŠngden af vores nĂžgle er under en kilobyte for at sikre, at det er meget solidt og pĂ„lideligt.

    Q: – Skal det nu vére 2 kilobyte?

    EK: – Var det ikke 256 i gĂ„r
 Hvor skal vi hen ellers?!

    SĂ„ det er det fĂžrste. Og for det andet, hvordan beslutningen er, understĂžtter det proceduren for genkryptering – der er to par "KEK'er" (nĂžgler), som giver "DEK'er", der krypterer (key – det er nĂžgler, dek – det er afledte fra nĂžglerne, der krypterer). Hvis proceduren initieres (den gennemfĂžres regelmĂŠssigt, fra 3 mĂ„neder til ± nogle), sĂ„ uploader vi et nyt par "KEK'er", og vi udfĂžrer genkryptering af dataene. Vi har separate tjenester, der trĂŠkker alle dataene ud og krypterer dem pĂ„ ny; til dataene opbevares en identifikator for den nĂžgle, som de er krypteret med. SĂ„ snart dataene er krypteret med de nye nĂžgler, sletter vi de gamle nĂžgler.

    Nogle gange skal betalinger foretages manuelt


    Q: – SĂ„ hvis der kommer en tilbagebetaling for en eller anden transaktion, sĂ„ dekrypterer I den med den gamle nĂžgle?

    EK: – Ja.

    Q: – SĂ„ har jeg et lille spĂžrgsmĂ„l mere. NĂ„r der opstĂ„r en fejl, et nedbrud, en hĂŠndelse, sĂ„ er det nĂždvendigt at skubbe transaktionen manuelt. SĂ„dan en situation kan opstĂ„.

    EK: – Ja, det sker.

    Q: – Hvor fĂ„r I disse data fra? GĂ„r I selv hĂ„ndgribeligt ind i det lager?

    EK: – Nej, det er klart – vi har et slags back-office-system, som indeholder en grĂŠnseflade for vores support. Hvis vi ikke ved, i hvilken status transaktionen er (for eksempel, indtil betalingssystemet timeoutede), sĂ„ ved vi grundlĂŠggende ikke, det vil sige, vi tildeler den endelige status kun ved fuld sikkerhed. I dette tilfĂŠlde placerer vi transaktionen i en sĂŠrlig status for manuel behandling. Om morgenen nĂŠste dag, sĂ„ snart supporten fĂ„r information om, at betalingssystemet har disse transaktioner tilbage, behandler de dem manuelt i denne grĂŠnseflade.

    HighLoad++, Evgeny Kuzovlev (EcommPay IT): hvad gÞr man, nÄr et minut med nedetid koster $100000

    Q: – Jeg har et par spĂžrgsmĂ„l. Et af dem er vedrĂžrende PCI DSS-zonen: hvordan hĂ„ndterer I loggene fra deres kontur? Jeg stiller spĂžrgsmĂ„let, fordi udvikleren kunne have lagt hvad som helst i loggene! Det andet spĂžrgsmĂ„l: hvordan implementerer I hotfixes? HĂ„ndtilgang i databasen – det er en mulighed, men der kan vĂŠre gratis hotfixes – hvad er proceduren der? Og det tredje spĂžrgsmĂ„l, som nok er relateret til RTO, RPO. I har haft tilgĂŠngelighed pĂ„ 99,97, nĂŠsten fire neuner, men jeg forstĂ„r det sĂ„dan, at I ogsĂ„ har det andet datacenter, det tredje datacenter og det femte datacenter
 Hvordan hĂ„ndterer I deres synkronisering, replikation, alt det andet?

    EK: – Lad os starte med det fĂžrste. Var det fĂžrste spĂžrgsmĂ„l om loggene? NĂ„r vi genererer loggene, er der et lag, der maskerer alle fĂžlsomme data. Det ser pĂ„ masken og pĂ„ de yderligere felter. Derfor kommer vores logs ud med allerede maskerede data og konturen for PCI DSS. Dette er en af de regelmĂŠssige opgaver, der er pĂ„lagt testafdelingen. De er forpligtede til at kontrollere hver opgave inklusiv de logs, de skriver, og dette er en af de regelmĂŠssige opgaver under kodegennemgang for at kontrollere, at udvikleren ikke har skrevet noget. Den efterfĂžlgende kontrol udfĂžres regelmĂŠssigt af informationssikkerhedsafdelingen cirka en gang om ugen: tilfĂŠldigt udtages logs fra den seneste dag, og de kĂžres gennem en speciel scanner-analysemaskine fra testserverne for at kontrollere det hele.
    Om hotfixes. Dette er inkluderet i vores deploy-regler. Vi har en separat sektion om hotfixes. Vi mener, at vi deployer hotfixes 24/7, nÄr vi har brug for det. SÄ snart versionen er samlet, sÄ snart den er testet, og nÄr vi har artefakten, sÄ bliver vores vagt-systemadministrator kaldt af support, og han deployer det i det Þjeblik, det er nÞdvendigt.

    Om "fire neger": Det tal, vi har nu, er faktisk opnÄet, og vi har strÊbt efter det i et andet datacenter. Nu har vi et andet datacenter, og vi begynder at rute imellem dem. SpÞrgsmÄlet om tvÊrdatacenter-replikation er virkelig en ikke triviel problemstilling. Vi har forsÞgt at lÞse det pÄ forskellige mÄder: vi prÞvede at bruge Taran, hvilket ikke fungerede for os, sÄ jeg siger det med det samme. Derfor besluttede vi at lave en manuel bestilling af "Senser". Hver applikation kÞrer i det faktiske asynkrone synkroniserings "change - done" mellem datacentrene.

    Q: – Hvis I har fĂ„et et andet, hvorfor er der sĂ„ ikke kommet et tredje? Fordi Split-brain


    EK: – Vi har ikke "Split-brain". Fordi hver applikation kĂžrer multimaster, er det ikke vigtigt, hvilket center anmodningen kommer til. Vi er forberedt pĂ„, at hvis Ă©t datacenter falder (det tager vi hĂžjde for), og brugerens anmodning skifter til det andet datacenter midt i anmodningen, er vi villige til at miste denne bruger; men det vil virkelig kun vĂŠre enkelte, absolutte enheder.

    Q: – God aften. Tak for din prĂŠsentation. Du talte om din debugger, som kĂžrer nogle testtransaktioner i produktion. Kan du fortĂŠlle mig om testtransaktionerne? Hvor dybt gĂ„r det?

    EK: – Det gennemgĂ„r hele cyklussen for komponenten. For komponenten er der ingen forskel mellem testtransaktionen og den faktiske. Set fra et logisk perspektiv er det blot et separat projekt i systemet, hvor kun testtransaktioner kĂžres.

    Q: – Hvor stopper du den? Core har sendt


    EK: – Vi fþlger "Core" i dette tilfélde for testtransaktioner
 Vi har et koncept, som hedder routing: "Core" ved, hvilken betalingssystem det skal sende til – vi sender til et falsk betalingssystem, som bare giver http-respons og det er det hele.

    Q: – Kan du venligst fortĂŠlle, om jeres applikation er skrevet som Ă©n stor monolit, eller har I opdelt den i nogle tjenester eller endda mikrotjenester?

    EK: – Vi har ikke en monolit, selvfþlgelig, vi har en serviceorienteret applikation. Vi har en sjov bemérkning om, at vi har service fra monolitter – de er faktisk ret store. Man kan slet ikke kalde det mikrotjenester, men det er bestemt tjenester, som har workere fra distribuerede maskiner.

    Hvis tjenesten pÄ serveren er kompromitteret


    Q: – SĂ„ har jeg det nĂŠste spĂžrgsmĂ„l. Selv hvis det var en monolit, sagde du stadig, at I har mange af disse instant-servere, og de behandler generelt data, sĂ„ spĂžrgsmĂ„let er: "I tilfĂŠlde af kompromittering af en af instant-serverne eller applikationen, et bestemt led, har de en eller anden form for adgangskontrol? Hvad kan de gĂžre? Hvem kan de kontakte for hvilke data?

    HighLoad++, Evgeny Kuzovlev (EcommPay IT): hvad gÞr man, nÄr et minut med nedetid koster $100000

    EK: – Ja, uden tvivl. Sikkerhedskravene er ganske strenge. For det fĂžrste har vi Ă„bne dataforflytninger, og porte er kun de, som vi pĂ„ forhĂ„nd forventer trafik til. Hvis en komponent kommunikerer med databasen (lad os sige, med 'MySQL') over 5-4-3-2, vil den kun have adgang til 5-4-3-2, og andre porte, andre trafikretninger vil ikke vĂŠre tilgĂŠngelige. Derudover skal man forstĂ„, at vi i produktion har omkring 10 forskellige sikkerhedskonturer. Og selv hvis applikationen pĂ„ en eller anden mĂ„de var kompromitteret, Gud forbyde, sĂ„ vil en angriber ikke kunne fĂ„ adgang til serverens administrationskonsol, fordi det er en anden sikkerhedszone.

    Q: – Jeg er mere interesseret i det punkt, at I har nogle kontrakter med tjenesterne – hvad de kan gĂžre, hvilke 'handlinger' de kan kontakte hinanden gennem
 I et normalt flow anmoder nogle bestemte tjenester om en rĂŠkke 'handlinger' fra den anden. I normaltilstanden henvender de sig ikke til andre, og de har andre ansvarsomrĂ„der. Hvis en af dem bliver kompromitteret, vil den sĂ„ kunne trigge 'handlingerne' fra den tjeneste
?

    EK: – Jeg forstĂ„r. Hvis kommunikationen med en anden server normalt er tilladt, sĂ„ ja. I henhold til SLAaftalen overvĂ„ger vi ikke, at du kun har tilladelse til de fĂžrste 3 "handlinger", og at 4. "handling" ikke er tilladt. Det ville nok vĂŠre overflĂždigt for os, fordi vi allerede har et 4-niveau beskyttelsessystem for konturer generelt. Vi foretrĂŠkker at beskytte os ved hjĂŠlp af konturer frem for at gĂžre det pĂ„ niveauet af de indre komponenter.

    Hvordan Visa, MasterCard og "Sberbank" fungerer

    Q: – Jeg vil gerne prĂŠcisere et punkt angĂ„ende skift af bruger fra et datacenter til et andet. SĂ„ vidt jeg ved, arbejder "Visa" og "MasterCard" efter den binĂŠre synkrone protokol 8583, der er mikser tilsluttet. Jeg ville gerne vide, om skiftet her henviser til "Visa" og "MasterCard" direkte, eller til betalingssystemerne, til processeringen?

    EK: – Det gélder mikserne. Mikserne er placeret i et datacenter.

    Q: – For at sige det groft, har I Ă©n tilslutningspunkt?

    EK: – Ja, til "Visa" og "MasterCard". Bare fordi "Visa" og "MasterCard" krĂŠver betydelige investeringer i infrastrukturen for at indgĂ„ separate kontrakter for at fĂ„ et ekstra sĂŠt mikser, for eksempel. De er reserveret inden for et datacenter, men hvis vores datacenter, Gud forbyde det, skulle falde ud, hvor mikserne til tilslutning til "Visa" og "MasterCard" er placeret, sĂ„ vil forbindelsen til "Visa" og "MasterCard" vĂŠre tabt...

    Q: – Hvordan kan de vĂŠre reserveret? Jeg ved, at "Visa" i princippet kun tillader Ă©n forbindelse!

    EK: – De leverer selv udstyret. I hvert fald har vi modtaget udstyr, der er internt reserveret.

    Q: – SĂ„ er det rack fra deres Connects Orange..?

    EK: – Ja.

    Q: – Hvad sĂ„ i dette tilfĂŠlde: hvis dit datacenter forsvinder, hvordan anvender man det derefter? Eller stopper trafikken bare?

    EK: – Nej. I dette tilfĂŠlde vil vi bare skifte trafikken til en anden kanal, som naturligvis vil vĂŠre dyrere for os, dyrere for kunderne. Men trafikken vil ikke gĂ„ gennem vores direkte tilslutning til "Visa", "MasterCard", men gennem en betinget "Sberbank" (meget forenklet).

    Jeg undskylder meget, hvis jeg har ramt ansatte hos "Sberbank". Men ifÞlge vores statistik falder "Sberbank" oftest blandt de russiske banker. Der gÄr ikke en mÄned uden, at "Sberbank" har noget, der falder ud.

    HighLoad++, Evgeny Kuzovlev (EcommPay IT): hvad gÞr man, nÄr et minut med nedetid koster $100000

    Afspil video

    Lidt reklame 🙂

    Tak fordi du bliver hos os. Kan du lide vores artikler? Ønsker du at se flere interessante materialer? StÞt os ved at bestille eller anbefale os til dine bekendte, cloud VPS til udviklere fra 4,99 $, en unik analog til entry-level servere, som vi har designet til dig: Alt om VPS (KVM) E5-2697 v3 (6 kerner) 10 GB DDR4 480 GB SSD 1 Gbps fra 19 $ eller hvordan man deler serveren korrekt? (tilgÊngelige muligheder med RAID1 og RAID10, op til 24 kerner og op til 40 GB DDR4).

    Dell R730xd til halv pris i datacenteret Equinix Tier IV i Amsterdam? Kun hos os 2 x Intel TetraDeca-Core Xeon 2x E5-2697v3 2.6GHz 14C 64GB DDR4 4x960GB SSD 1Gbps 100 TB fra 199 $ i Holland! Dell R420 - 2x E5-2430 2.2GHz 6C 128GB DDR3 2x960GB SSD 1Gbps 100TB - fra 99 $! LĂŠs om hvordan man bygger enterprise-infrastruktur ved hjĂŠlp af Dell R730xd E5-2650 v4 servere til 9000 euro for en brĂžkdel af prisen?

Kilde: habr.com

KĂžb pĂ„lidelig webhosting med DDoS-beskyttelse, VPS VDS-servere đŸ”„ KĂžb pĂ„lidelig webhosting med DDoS-beskyttelse, VPS VDS-servere | ProHoster