HighLoad++, Jevgeni Kuzovlev (EcommPay IT): mida teha, kui minut seadistamata maksab $100000

KĂ”ik rÀÀgivad arendus- ja testimisprotsessidest, töötajate koolitusest, motivatsiooni tĂ”stmisest, kuid neid protsesse on vĂ€he, kui teenuse seiskamine maksab kosmilisi summasid. Mida teha, kui teete rahanduslikke tehinguid range SLA raames? Kuidas suurendada teie sĂŒsteemide usaldusvÀÀrsust ja tĂ”rkekindlust, kui arendust ja testimist kĂ”rvale jĂ€tta?

HighLoad++, Jevgeni Kuzovlev (EcommPay IT): mida teha, kui minut seadistamata maksab $100000

JĂ€rgmine konverents HighLoad++ toimub 6. ja 7. aprillil 2020 Peterburis. Üksikasjad ja piletid: lingil. 9. novembril, kell 18:00. HighLoad++ Moskva 2018, saal "Deli + Kolkata". Teesid ja esitlus.

Evgeny Kuzovlev (edaspidi – EK): – Tere, sĂ”brad! Minu nimi on Kuzovlev Evgeny. Olen EcommPay'ist, tĂ€psemalt EcommPay IT-st, ettevĂ”tte IT-osakonnast. Ja tĂ€na rÀÀgime koos teiega seisakutest – kuidas neid vĂ€ltida ja kuidas minimeerida nende tagajĂ€rgi, kui vĂ€ltida ei Ă”nnestu. Teema on kĂ”nealune: "Mida teha, kui minute seisak maksab 100 000 dollarit"? Meil, kiirelt öeldes, on numbrid sarnased.

Millega tegeleb EcommPay IT?

Kes me oleme? Miks ma siin teie ees seisan? Miks ma olen Ôigustatud teile midagi rÀÀkima? Millest rÀÀgime siin lÀhemalt?

HighLoad++, Jevgeni Kuzovlev (EcommPay IT): mida teha, kui minut seadistamata maksab $100000

EcommPay grupp on rahvusvaheline aktsiaselts. Me töötleme makseid ĂŒle kogu maailma – Venemaal, Euroopas, Kagu-Aasias (All Around the World). Meil on 9 kontorit, 500 töötajat kokku ja umbes natuke vĂ€hem kui pooled neist on IT-eksperdid. KĂ”ik, mida me teeme, kĂ”ik, mille pealt me raha teenime, on meie oma loodud.

Meie kĂ”ik tooted (mida on meil piisavalt palju – meie suurte IT-toodete rivi koosneb umbes 16 erinevast komponendist) on meie ise kirjutatud; me kirjutame ise, me arendame ise. Ja hetkel teeme me umbes miljon tehingut pĂ€evas (miljonid – arvatavasti on nii Ă”igem öelda). Me oleme piisavalt noor ettevĂ”te – meie vanus on umbes kuus aastat.

6 aastat tagasi oli see selline idufirma, kui meeskond tuli koos Ă€riideega. Nad olid ideest ĂŒhendatud (mitte midagi muud ei olnud, peale idee) ja me alustasime. Nii nagu iga idufirma, jooksime me kiiremini... Meie jaoks oli olulisem kiirus, mitte kvaliteet.

MÔnel hetkel peatusime: taipasime, et me ei saa enam sama kiirusel ja kvaliteediga elada ning peame tegema esmalt kvaliteedi nimel. Sel hetkel otsustasime kirjutada uue platvormi, mis oleks Ôige, skaleeritav ja usaldusvÀÀrne. Selle platvormi kirjutamine algas (alustasime investeeringute tegemist, arendamist, testimist), kuid mÔnes kohas taipasime, et arendamine ja testimine ei vÔimalda meil jÔuda uuele teenuse kvaliteeditasemele.

Teete uue toote, viite selle tootmisse, kuid ikka midagi ei lĂ€he nii. Ja tĂ€na rÀÀgime sellest, kuidas jĂ”uda uuele kvaliteeditasandile (kuidas see meil Ă”nnestus, meie kogemus), jĂ€ttes kĂ”rvale arendamise ja testimise; rÀÀgime, mis on ekspluateerimise kĂ€tte saadav – mida ekspluateerimine saab ise teha, mida see saab testimisele pakkuda, et mĂ”jutada kvaliteeti.

Seisakud. Ekspluateerimise kÀsud.

Alati on pĂ”hialuseks see, millest me tĂ€na rÀÀgime – seisakud. Õudne sĂ”na. Kui meil on seisak, siis on meil kĂ”ik halvasti. Me jookseme seda ĂŒles tĂ”stma, administraatorid hoiavad serverit – olgu jumal, et see ei kukuks, nagu laulus öeldakse. Just sellest me tĂ€na rÀÀgime.

HighLoad++, Jevgeni Kuzovlev (EcommPay IT): mida teha, kui minut seadistamata maksab $100000

Kui alustasime oma lÀhenemiste muutmisega, kujundasime neli kÀsku. Need on mul esitatud slaididel:

Need kÀsud on piisavalt lihtsad:

HighLoad++, Jevgeni Kuzovlev (EcommPay IT): mida teha, kui minut seadistamata maksab $100000

  • Probleemi kiiresti tuvastada.
  • KĂŒstida veel kiiremini lahti.
  • Aidata mĂ”ista pĂ”hjust (hiljem, arendajatele).
  • Ja standardiseerida lĂ€henemised.

Pööran tĂ€helepanu punktile nr 2. Me vabastame probleemist, mitte ei lahenda seda. Lahendada on teisejĂ€rguline. Meie jaoks on esmatĂ€htis see, et kasutaja oleks selle probleemi eest kaitstud. See probleem eksisteerib mingis isoleeritud keskkonnas, kuid see keskkond ei suhtle temaga. Tegelikult kĂ€ime nende nelja probleemi grupi kaudu (mĂ”ned ĂŒksikasjalikumalt, mĂ”ned vĂ€hem), rÀÀgin, mida me kasutame, milline on meie vastav kogemus lahendustes.

Probleemide kÔrvaldamine: kui need juhtuvad ja mida nendega teha?

Kuid alustame me mitte jĂ€rjekorras, vaid punktist № 2 – kuidas kiiresti probleemist lahti saada? Probleem on olemas – me peame selle lahendama. „Mida me sellega teeme?” – see on peamine kĂŒsimus. Ja kui me hakkasime mĂ”tlema, kuidas probleemi lahendada, töötasime vĂ€lja teatud nĂ”uded, millele probleemide lahendamine peaks vastama.

HighLoad++, Jevgeni Kuzovlev (EcommPay IT): mida teha, kui minut seadistamata maksab $100000

Et neid nĂ”udeid sĂ”nastada, otsustasime endalt kĂŒsida: „Millal meil probleemid esinevad?” Ja probleemid, nagu selgus, tekivad neljas olukorras:

HighLoad++, Jevgeni Kuzovlev (EcommPay IT): mida teha, kui minut seadistamata maksab $100000

  • Riistvaravead.
  • VĂ€liste teenuste tĂ”rked.
  • Tarkvara versioonimuudatus (see sama deploy).
  • Äkiline koormuse kasv.

Esimese kahe kohta me rÀÀgime. Riistvaravead lahendatakse piisavalt lihtsalt: teil peab olema kĂ”ik kopeeritud. Kui need on kettad – kettad peavad olema RAID-kogumis, kui see on server – server peab olema kopeeritud, kui teil on vĂ”rgu infrastruktuur – peate paigaldama teise koopia vĂ”rgu infrastruktuurist, st te vĂ”tate ja kopeerite. Ja kui midagi ebaĂ”nnestub, lĂŒlitate varuressurssidele. Siin on rohkem öelda keeruline.

Teiseks – vĂ€liste teenuste tĂ”rked. Enamiku sĂŒsteemide jaoks pole see probleem, aga mitte meie jaoks. Kuna me töötleme makseid, oleme me agregeerija, kes seisab kasutaja (kes sisestab oma kaardandmed) ja pankade, maksesĂŒsteemide („Visa”, „MasterCard”, „Maestro” jne) vahel. Meie vĂ€listele teenustele (maksesĂŒsteemidele, pankadele) on iseloomulikud tĂ”rked. Me ei saa selle peale mitte mĂ”jutada ei meie ega teie (kui teil on sellised teenused).

Kuidas siis edasi toimida? Siin on kaks varianti. Esiteks, kui saate, peaksite te need teenused mingil moel kopeerima. NĂ€iteks, kui me saame, suuname liikluse ĂŒhelt teenuselt teisele: töötlesime nĂ€iteks kaarte lĂ€bi „Sberbank”, kui „Sberbankil” on probleemid – suuname liikluse [tinglikult] „Rayffaisenile”. Teiseks, mida me saame teha – on vĂ€ga kiiresti mĂ€rgata vĂ€liste teenuste tĂ”rkeid, seetĂ”ttu rÀÀgime me jĂ€rgmises osa ettekandest reageerimise kiirusest.

Nende nelja tĂ”e kohaselt saame me konkreetselt mĂ”juda tarkvara versioonide vahetusele – teha tegevusi, mis viivad olukorra paranemiseni deploy’de ja koormuse plahvatusliku kasvu kontekstis. Tegelikult, me tegimeki seda. Siin on jĂ€lle vĂ€ike mĂ€rkus


Nendest neljast probleemist lahendatakse mÔni kohe, kui teil on pilv. Kui olete "Microsoft Azure", "Ozon"'is, kasutate meie pilvi, "Yandexilt" vÔi "Maililt", siis vÀhemalt riistvara rike muutub nende probleemiks ja teil lÀheb kohe hÀsti riistvara rikke kontekstis.

Me oleme pisut ebatavaline ettevĂ”te. Siin rÀÀgitakse "Kubernetesest", pilvedest – meil ei ole ei "Kubernetes't" ega pilvi. KĂŒll aga on meil riiulid rauaga mitmes andmekeskuses, ja sellel raual peame me elama, me peame vastutama selle eest. SeetĂ”ttu rÀÀgime sellest kontekstist. Nii et, probleemidest. Esimesed kaks jĂ€tsime kĂ”rvale.

Tarkvara versiooni vahetus. Alused

Meie arendajatel ei ole ligipÀÀsu tootmiselle. Miks nii? Ainsalt pĂ”hjusel, et oleme sertifitseeritud PCI DSS jĂ€rgi, ja meie arendajatel lihtsalt pole Ă”igust "prod"'isse sekkuda. Punkt. TĂ€iesti. SeetĂ”ttu lĂ”peb arenduse vastutus tĂ€pselt hetkel, kui arendus on ĂŒle andnud versiooni vĂ€ljalaskmiseks.

HighLoad++, Jevgeni Kuzovlev (EcommPay IT): mida teha, kui minut seadistamata maksab $100000

Meie teine alus, mis meil on ja mis meid samuti tugevalt aitab – puuduvad unikaalsed dokumenteerimata teadmised. Loodan, et teil on samuti nii. Sest kui ei ole – teil tekivad probleemid. Probleemid tekivad siis, kui neid unikaalseid dokumenteerimata teadmisi ei ole Ă”igeaegselt Ă”iges kohas. Oletame, et teil on ĂŒks inimene, kes teab, kuidas konkreetset komponenti deploy’ida – kui seda inimest ei ole, on ta puhkusel vĂ”i haige – kĂ”ik, teil on probleemid.

Ja kolmas alus, mille me saavutasime. Me jĂ”udsime sinna lĂ€bi valu, vere, pisarate – me jĂ”udsime selleni, et iga meie versioon sisaldab vigu, isegi kui see on vabama vigadeta. Me otsustasime, et kui me midagi deploy’ime, kui me midagi tootmisse viime – on me versioon vigadega. Oleme mÀÀratlenud nĂ”uded, millele meie sĂŒsteem peab vastama.

NÔuded tarkvara versiooni vahetusele

Nende nÔuete arv on kolm:

HighLoad++, Jevgeni Kuzovlev (EcommPay IT): mida teha, kui minut seadistamata maksab $100000

  • Me peame kiiresti tagasi tĂ”mbama deploy.
  • Me peame vĂ€hendama ebaĂ”nnestunud deploy mĂ”ju.
  • Ja peame suutma kiiresti paralleelselt juurutada.
    Just sellises jĂ€rjekorras! Miks? Sest peamine eesmĂ€rk uue versiooni juurutamisel ei ole kiirus, vaid kui midagi lĂ€heb valesti, on oluline kiiresti tagasi pöörduda ja mĂ”ju minimeerida. Kuid kui teil on tootmises versioonide kogum, millel on viga (nĂ€iteks olukord, kus juurutust ei toimunud, kuid viga eksisteerib) – siis on teile oluline jĂ€rgmise juurutuse kiirus. Mida me tegime, et need nĂ”udmised tĂ€ita? Kasutasime sellist metoodikat:

    HighLoad++, Jevgeni Kuzovlev (EcommPay IT): mida teha, kui minut seadistamata maksab $100000

    See on piisavalt tuntud, me ei ole seda kunagi leiutanud – see on Blue/Green juurutamine. Mis see on? Iga serverigruppi, kuhu teie rakendused on paigaldatud, peaks olema koopia. Koopia on 'soe': seal ei ole liiklust, kuid igal hetkel saab sellele liikluse suunata. See koopia sisaldab eelmist versiooni. Ja juurutamise ajal te viite koodi passiivsele koopiale. Siis suunate osa liiklusest (vĂ”i kogu) uuele versioonile. Seega, et liiklus vanalt versioonilt uuele suunata, peate tegema ainult ĂŒhe toimingu: peate upstreamis muutma koormustasakaidjat, muutma suunda – ĂŒhest upstreamist teise. See on vĂ€ga mugav ja lahendab kiire ĂŒlemineku, kiire tagasipöördumise probleemi.

    Siin on lahenduse teine kĂŒsimus – minimiseerimine: te saate suunata uuele liinile, uue koodiga liinile vaid osa teie liiklusest (nĂ€iteks 2%). Ja need 2% – need ei ole 100%! Kui te kaotate 100% liiklusest ebaĂ”nnestunud juurutamise tĂ”ttu – see on hirmutav, kui teil kaob 2% liiklusest – see on ebameeldiv, kuid see ei ole hirmutav. Veelgi enam, kasutajad tĂ”enĂ€oliselt ei mĂ€rka seda, sest mĂ”nel juhul (mitte alati) sama kasutaja vajutades F5 satub ta teise, töötavasse versiooni.

    Blue/Green juurutamine. Suunamine

    Samas ei ole kÔik nii lihtne, kui 'Blue/Green' juurutamine... KÔik meie komponendid saab jagada kolme gruppi:

    • see on frontend (makse lehed, mida meie kliendid nĂ€evad);
    • tuumprotsess;
    • adapter maksesĂŒsteemide (pangad, 'MasterCard', 'Visa' jne) jaoks.

    Siin on nĂŒanss – see seisneb marsruutimises ridade vahel. Kui te lihtsalt suunate 100% liiklusest, siis selliseid probleeme ei teki. Kuid kui soovite suunata 2%, siis tekivad kĂŒsimused: "Kuidas seda teha?" KĂ”ige lihtsam lahendus on see, et saate seadistada juhusliku valiku, Round Robin nginx'is, ja teil on 2% – vasakule, 98% – paremale. Kuid see ei sobi alati.

    Meil on nĂ€iteks kasutaja, kes interakteerub sĂŒsteemiga mitte ĂŒhe, vaid mitme pĂ€ringuga. See on normaalne: 2, 3, 4, 5 pĂ€ringut – teie sĂŒsteemid vĂ”ivad olla samasugused. Ja kui te soovite, et kĂ”ik kasutaja pĂ€ringud jĂ”uaksid samale real, kuhu esimene pĂ€ring tuli, vĂ”i (teine asi) et kĂ”ik kasutaja pĂ€ringud jĂ”uaksid uuele reale pĂ€rast ĂŒleminekut (ta on vĂ”inud sĂŒsteemiga enne ĂŒleminekut juba töötada), – siis juhuslik jaotamine ei sobi. Sel juhul on jĂ€rgmised vĂ”imalused:

    HighLoad++, Jevgeni Kuzovlev (EcommPay IT): mida teha, kui minut seadistamata maksab $100000

    Esimene variant, kĂ”ige lihtsam – pĂ”hikliendi parameetrite pĂ”hjal (IP Hash). Teil on IP, ja te jagate liiklust paremale-vasakule vastavalt IP aadressile. Sel juhul kehtib teine minu kirjeldatud juhtum, kus toimus vĂ€ljalaskmine, kasutaja on juba saanud teie sĂŒsteemiga töötada, ja alates vĂ€ljalaskmisest suunatakse kĂ”ik pĂ€ringud uuele reale (sama reale, ĂŒtleme).

    Kui see mingil pÔhjusel ei sobi ja peate tingimata saadma pÀringud sellele reale, kuhu tuli algne, initsialiseeriv pÀring, siis on teil kaks vÔimalust...
    Esimene vĂ”imalus: vĂ”ite vĂ”tta tasulise nginx+. Seal on mehhanism Sticky sessions, mis algse pĂ€ringu korral mÀÀrab kasutajale sessiooni ja seondab selle teatud ĂŒlesse. KĂ”ik edasised kasutaja pĂ€ringud sessiooni eluea jooksul saadetakse sellele samale ĂŒlesse, kuhu sessioon mÀÀrati.

    See ei sobinud meile, sest meil oli juba tavaline nginx. Üleminek nginx+ – see ei ole just kallis, kuid see oli meie jaoks natuke valus ja mitte just Ă”ige. "Sticky sessions" ei töötanud meie jaoks nĂ€iteks selle tĂ”ttu, et "Sticky sessions" ei vĂ”imalda marsruutimist tingimuse "Kas-kas" alusel. Seal on vĂ”imalik mÀÀrata, et me teeme "Sticky sessions" nĂ€iteks IP aadressi vĂ”i IP aadressi ja kĂŒpsiste vĂ”i POST parameetri alusel, kuid "Kas-kas" – seal on juba keerulisem.

    Seega jĂ”udsime neljanda variandi juurde. VĂ”tsime nginx'i "steroididega" (see on openresty) – see on sama nginx, mis toetab lisaks ka last-skripte. Saate kirjutada last-skripti, esitada selle “opernestile”, ja see last-skript kĂ€ivitatakse, kui tuleb kasutaja pĂ€ring.

    Ja me kirjutasime sellise skripti, paigaldasime “opernesti” ja selle skripti kaudu lĂ€bitame 6 erinevat parameetrit konkateneerimise „VĂ”i“. SĂ”ltuvalt teatud parameetri olemasolust teame, et kasutaja tuli ĂŒhele lehele vĂ”i teisele, ĂŒhele liinile vĂ”i teisele.

    Blue/Green deploy. Eelised ja puudused.

    Muidugi oleks saanud seda ehk veidi lihtsamalt teha (kasutada samu „Sticky sessions“), kuid meil on veel selline nĂŒanss, et meiega ei suhtle ainult kasutaja ĂŒhe tehingu töötlemise kĂ€igus... Asetame tööle ka maksesĂŒsteemid: pĂ€rast tehingu töötlemist (saates pĂ€ringu maksesĂŒsteemile) saame tagasiside.
    Ja oletame, et kui meie ringis saame edastada kasutaja IP-aadressi kĂ”igis pĂ€ringutes ja IP-aadressi pĂ”hjal eristada, siis me ei tohi sama „Visa’le“ öelda: „Kutid, me oleme selline retroettevĂ”te, me nĂ€iliselt rahvusvaheline (veebisaidil ja Venemaal)... Palun edastage meile, lisaks, kasutaja IP-aadress tĂ€iendavasse vĂ€ljadese, teie standardiseeritud protokoll“! Loogiliselt nad ei nĂ”ustu.

    HighLoad++, Jevgeni Kuzovlev (EcommPay IT): mida teha, kui minut seadistamata maksab $100000

    Seega ei sobinud meile see lahendus – tegime openresty. Seega, meie marsruutimine nĂ€eb vĂ€lja jĂ€rgmiselt:

    Blue/Green deploy'l on vastavad eelised, millest olen rÀÀkinud, ja puudused.

    Puudusi on kaks:

    • peate muretsema marsruutimise pĂ€rast;
    • teine peamine puudus – see on kulud.

    Teil on vaja kaks korda rohkem servereid, kaks korda rohkem operatiivressursse, peate kulutama kaks korda rohkem jÔude kogu selle loomaaia hooldamiseks.

    Muide, eeliste seas on veel ĂŒks asi, millest ma varem ei rÀÀkinud: teil on varu, kui koormus tĂ”useb. Kui teie koormus kasvab plahvatuslikult ja teid ĂŒritab palju kasutajaid, saate lihtsalt lisada teise liini ja jagada koormust 50-50 – ja teil on kohe kaks korda rohkem servereid teie klastris, kuni te lahendate serverite puudumise probleemi.

    Kuidas teha kiiret deploy'd?

    Me rÀÀkisime sellest, kuidas lahendada probleemi minimeerimise ja kiire tagasipöördumisega, kuid kĂŒsimus jÀÀb: "Kuidas kiirelt deploy'ida"?

    HighLoad++, Jevgeni Kuzovlev (EcommPay IT): mida teha, kui minut seadistamata maksab $100000

    Siin on lĂŒhidalt ja kĂ”ik on lihtne.

    • Teil peab olema pideva kohaletoimetamise sĂŒsteem (Continuous Delivery) – ilma selleta ei toimi. Kui teil on ĂŒks server, saate kasutada kĂ€sitsi deploy'd. Meil on umbes tuhat viissada serverit ja kui me kĂ€sitsi deploy'ime, on selge – me vĂ”iksime palgata osakonna, mis on sama suur kui see saal, lihtsalt selleks, et deploy'ida.
    • Deploy peab olema paralleelne. Kui teie deploy on jĂ€rjestikune, siis on kĂ”ik halvasti. Ühe serveri puhul on see normaalne, aga tuhat viissada serverit deploy'id terve pĂ€eva.
    • JĂ€llegi, selle kiirendamiseks pole see vĂ”ib-olla enam vajalik. Deploy kĂ€igus tehakse tavaliselt projekti koostamine. Teil on veebi projekt, on frontend osa (teete seal web pack'i, npm koostate – midagi sellist) ja see protsess on pĂ”himĂ”tteliselt kiire – umbes 5 minutit, kuid need 5 minutit vĂ”ivad olla kriitilised. SeetĂ”ttu me nĂ€iteks nii ei tee: me oleme need 5 minutit eemaldanud, me deploy'ime artefakte.

      Mis on artefakt? Artefakt on kokku kogutud build, kus on juba kĂ”ik koostamisprotsessid teostatud. Me hoiame seda artefakti artefaktide hoidlas. Selliseid hoidu oleme oma ajal kasutanud kahte – see oli Nexus ja nĂŒĂŒd jFrog Artifactory. "Nexus" kasutasime algselt, sest hakkasime seda lĂ€henemist rakendama Java rakendustes (see sobis selleks hĂ€sti). Siis lisasime sinna ka osa rakendusi, mis on kirjutatud PHP's; ja "Nexus" ei sobinud enam ning seetĂ”ttu valisime jFrog Artifactory, mis suudab artefaktida praktiliselt kĂ”ike. Oleme isegi jĂ”udnud selleni, et hoiame selles artefaktide hoidlas oma binaarpakette, mida me serveritele koostame.

    Plahvatuslik koormuse kasv

    RÀÀkisime tarkvara versiooni vahetamisest. JĂ€rgmine, mis meil on – plahvatuslik koormuse kasv. Siin ma ilmselt mĂ”istan plahvatuslikku koormuse kasvu mitte tĂ€iesti Ă”ige asja tĂ€hendusena


    Meie uus sĂŒsteem on teenuste orienteeritud, moodne ja ilus. Igal pool on töötajad, jĂ€rjekorrad ja asĂŒnkroonsus. Sellistes sĂŒsteemides vĂ”ivad andmed liikuda erinevates voogudes. Esimese tehingu jaoks vĂ”ivad osaleda 1., 3. ja 10. töötaja, teise tehingu jaoks aga 2., 4. ja 5. töötaja. Ja tĂ€na, oletame, hommikul toimub andmevoog, mis kaasab esimesed kolm töötajat, aga Ă”htul muutub kĂ”ik ning kaasatakse teised kolm töötajat.

    Ja siin tuleb vÀlja, et peate kuidagi töötajaid skaleerima, peavad teie teenused olema skaleeritavad, kuid samal ajal ei tohi ressursse liialdada.

    HighLoad++, Jevgeni Kuzovlev (EcommPay IT): mida teha, kui minut seadistamata maksab $100000

    Olema oleme mÀÀratlenud enda nĂ”udmised. Need nĂ”udmised on piisavalt lihtsad: seal peab olema teenuse avastamine, parameetriseerimine – kĂ”ik on standardne, et ehitada selliseid skaleeritavaid sĂŒsteeme, vĂ€lja arvatud ĂŒks punkt – see on ressursside amortiseerimine. Ütlesime, et me ei ole valmis ressursse amortiseerima, et serverid lihtsalt Ă”hku soojendaks. VĂ”tsime 'Consul'i ja 'Nomad'i, mis haldab meie töötajaid.

    Miks on see meie jaoks probleem? Las ma tagasi astun. Meie taga on hetkel umbes 70 maksesĂŒsteemi. Hommikul liigub liiklus lĂ€bi 'Sberbanki', siis vĂ”ib 'Sberbank' nĂ€iteks kokku kukkuda ja me lĂŒlitame selle teise maksesĂŒsteemi. Meil töötas 100 töötajat 'Sberbanki' jaoks ja pĂ€rast seda peame Ă€kitselt tĂ”stma 100 töötajat teise maksesĂŒsteemi jaoks. Ja see kĂ”ik peaks toimuma soovitatavalt ilma inimsekkumiseta. Sest kui on inimsekkumine – peab 24/7 olema insener, kes peaks ainult sellega tegelema, kuna selliseid katkestusi, kui 70 sĂŒsteemi on teie taga, juhtub regulaarselt.

    SeetĂ”ttu vaatasime 'Nomad'i, millel on avatud IP ja koostasime oma lahenduse Scale-Nomad – ScaleNo, mis teeb umbes jĂ€rgmist: see jĂ€lgib jĂ€rjekorra kasvu ning vĂ€hendab vĂ”i suurendab töötajate arvu vastavalt jĂ€rjekorra muutumise dĂŒnaamikale. Kui olime selle valmis teinud, mĂ”tlesime: 'Kas vĂ”ib selle avatud lĂ€htekoodiga muuta?' Siis vaatasime seda – see on lihtne, nagu kaks senti.

    Me pole seda seni avatud lĂ€htekoodiga muutnud, kuid kui teie jaoks on pĂ€rast ettekannet, pĂ€rast arusaama, et vajate sellist lahendust, vajadus tekkimas, siis viimasel slaidil on minu kontaktid – palun kirjutage mulle. Kui koguneb vĂ€hemalt 3-5 inimest – avame selle.

    HighLoad++, Jevgeni Kuzovlev (EcommPay IT): mida teha, kui minut seadistamata maksab $100000

    Kuidas see töötab? Vaadakem! Ütleme kohe: vasakul pool on osa meie jĂ€lgimisest: see on ĂŒks joon, ĂŒleval – sĂŒndmuste töötlemise aeg, keskel – tehingute arv, all – töötajate arv.

    Kui vaadata, siis sellel pildil on tĂ”rge. Ülemisel graafikul on ĂŒks joon 45 sekundi jooksul kadunud – ĂŒks maksesĂŒsteem kukkus kokku. Seal oli kohe toodud liiklus kahe minuti jooksul ja kasvas jĂ€rjekord teise maksesĂŒsteemi juures, kus töötajaid polnud (me ei kasutanud ressursse – vastupidi, kasutasime ressursse Ă”igesti). Me ei soovinud soojendada – seal oli minimaalne hulk, umbes 5-10 töötajat, kuid nad ei saanud hakkama.

    Viimasel graafikul on nĂ€ha "kĂŒhm", mis nĂ€itab, et "Skaleeritud" tĂ”stis seda arvu kaks korda. Ja siis, kui graafik natuke langes, vĂ€hendas ta seda veidi – töötajate arvu muudetakse automaatselt. Nii see sĂŒsteem töötab. RÀÀkisime punktist nr 2 – "Kuidas kiiresti vabaneda pĂ”hjustest".

    JĂ€lgimine. Kuidas kiiresti probleemi tuvastada?

    NĂŒĂŒd on esimene punkt – "Kuidas kiiresti probleemi tuvastada?" JĂ€lgimine! Me peame kiiresti mĂ”istma teatud asju. Milliseid asju peame me kiiresti mĂ”istma?

    HighLoad++, Jevgeni Kuzovlev (EcommPay IT): mida teha, kui minut seadistamata maksab $100000

    Kolm asja!

    • Peame kiiresti mĂ”istma ja kiiresti mĂ”istma meie enda ressursside töökindlust.
    • Peame kiiresti mĂ”istma, kui midagi ebaĂ”nnestub, jĂ€lgima sĂŒsteemide töökindlust, mis on meie jaoks vĂ€lised.
    • Kolmas punkt – loogiliste vigade tuvastamine. See on siis, kui sĂŒsteem töötab teie jaoks, kĂ”ik nĂ€itajad on normaalsed, kuid miski ei toimi Ă”igesti.

    Siin ma ilmselt ei rÀÀgi midagi tÔeliselt lahe. Olen kapten Ilmselgus. Otsisime, mis turul on. Meil on tekkinud "naljakas loomaaias". Selline loomaed meil hetkel olemas on:

    HighLoad++, Jevgeni Kuzovlev (EcommPay IT): mida teha, kui minut seadistamata maksab $100000

    Me kasutame "Zabbixi" raua jĂ€lgimiseks, serverite pĂ”hinĂ€itajate jĂ€lgimiseks. "Okmeter" kasutame andmebaaside jaoks. "Grafana" ja "Prometheus" kasutame kĂ”ikide teiste nĂ€itajate jaoks, mis ei sobinud esimeste kahe alla, osa – "Grafana" koos "Prometheus'e", osa – "Grafana" koos "Influx" ja Telegrafiga.

    Aasta tagasi soovisime kasutada New Relici. VĂ€ga lahe asi, ta oskab kĂ”ike. Kuid niipalju kui ta kĂ”ike oskab, on ta ka kallis. Kui meie serverite arv tĂ”usis 1500-ni, tuli meile mĂŒĂŒja ja ĂŒtles: „Teeme jĂ€rgmiseks aastaks lepingu.“ Vaatasime hinda ja otsustasime, et ei, me nii ei tee. Praegu loobume me New Relicust, meil on umbes 15 serverit, mis on veel New Relicu jĂ€lgimisel. Hind osutus tĂ€iesti pööraseks.

    Ja meil on ĂŒks tööriist, mille me ise vĂ€lja töötasime – Debugger. Algul kutsusime seda „Baggeriks“, kuid hiljem tuli meie inglise keele Ă”petaja, naeris kĂ”vasti ja muutsime nime „Debuggeriks“. Mis see on? See on tööriist, mis tegelikult 15-30 sekundi jooksul iga komponendi kohta, nagu sĂŒsteemi „must kast“, kĂ€ivitab testid komponendi ĂŒldise töövĂ”ime kohta.

    NĂ€iteks, kui vĂ€line leht (makseleht) – avab ta selle lihtsalt ja vaatab, kuidas see vĂ€lja peaks nĂ€gema. Kui see on töötlemine, laseb ta teste „transaktsiooni“ – kontrollib, et see „transaktsioon“ ĂŒldse jĂ”uaks kohale. Kui see on ĂŒhendus maksesĂŒsteemidega – siis laseme testpĂ€ringu seal, kus saame, ja vaatame, et meil on kĂ”ik korras.

    Millised nÀitajad on jÀlgimiseks olulised?

    Mida me peamiselt jÀlgime? Millised nÀitajad on meile olulised?

    HighLoad++, Jevgeni Kuzovlev (EcommPay IT): mida teha, kui minut seadistamata maksab $100000

    • Response time / RPS frontides – vĂ€ga oluline nĂ€itaja. See nĂ€itab kohe, et teil on midagi valesti.
    • Töödeldud sĂ”numite arv kĂ”igis jĂ€rjekordades.
    • Tööliste arv.
    • PĂ”hinĂ€itajad korrektsuse kohta.

    Viimane punkt – „Àrieluline“, „Àritegevuse“ nĂ€itaja. Kui soovite sama jĂ€lgida, peate mÀÀratlema ĂŒhe-kaks nĂ€itajat, mis on teie jaoks pĂ”hinĂ€itajad. Meie puhul on see nĂ€itaja – lĂ€bilaskevĂ”ime (see on eduka transaktsiooni arvu suhe kogu transaktsioonivoogu). Kui selle vÀÀrtus muutub 5-10-15 minuti jooksul – tĂ€hendab, et meil on probleemid (kui see kardinaalselt muutub).

    Kuidas see meil vĂ€lja nĂ€eb – nĂ€ide meie ĂŒhelt dashboardilt:

    HighLoad++, Jevgeni Kuzovlev (EcommPay IT): mida teha, kui minut seadistamata maksab $100000

    Vasakul on 6 diagrammi, mis nĂ€itavad vastavalt realine - töötajate arvu ja sĂ”numite arvu jĂ€rjekordades. Paremal on RPS, RTS. All on see Ă€riline mÔÔdik. Ja selle Ă€ritootega nĂ€eme kohe, et keskmistel diagraamidel on midagi valesti ... See on just see, et jĂ€rjekorrad on jĂ€rjekordse sĂŒsteemi tĂ”ttu langenud, mis seisab meie taga.

    Teiseks, mida me pidime tegema, oli jĂ€lgida vĂ€liste maksesĂŒsteemide katkestusi. Siin kasutasime OpenTracingut - mehhanism, standard, paradigma, mis vĂ”imaldab jĂ€lgida jaotatud sĂŒsteeme; ja muutsime seda veidi. Tavaline OpenTracingu paradigma ĂŒtleb, et ehitame iga eraldi pĂ€ringu jĂ€lgimise. Meile seda ei olnud vaja, ja me pakkisime selle kokku akumuleerivasse jĂ€lgimisse. Loodud tööriist vĂ”imaldab meil jĂ€lgida meie taha jÀÀvate sĂŒsteemide kiirus.

    HighLoad++, Jevgeni Kuzovlev (EcommPay IT): mida teha, kui minut seadistamata maksab $100000

    Diagramm nĂ€itab meile, et ĂŒks maksesĂŒsteem hakkas vastama 3 sekundi pĂ€rast - meil ilmusid probleemid. Samas reageerib see asi, kui probleemid hakkavad, 20–30 sekundi intervalis.

    Ja kolmas klass jÀlgimise vigu, mis eksisteerib - see on loogiline jÀlgimine.

    Ausalt öeldes ei teadnud ma, mida sellel slaidil joonistada, kuna me otsisime turult kaua, mis meile sobiks. Mitte midagi ei leidnud, seega tuli teha ise.

    HighLoad++, Jevgeni Kuzovlev (EcommPay IT): mida teha, kui minut seadistamata maksab $100000

    Mida ma mĂ”istan loogilise jĂ€lgimise all? Kujutage ette: teete endale sĂŒsteemi (nĂ€iteks 'Tinder' klooni); olete selle valmistanud ja tööle pannud. Edukas juht Vasja Pupkin pani selle oma telefonisse, nĂ€eb seal tĂŒdrukut, meeldib talle... aga meeldimine ei lĂ€he tĂŒdrukule - see lĂ€heb selle sama Ă€rikeskuse turvamees Mihhaile. Juht lĂ€heb alla ja siis imestab: "Miks see turvamees Mihhail nii lahkelt naeratab?"

    Sellistes olukordades
 Meie jaoks kĂ”lab see olukord veidi teisiti, kuna (nagu ma kirjutasin) on see reputatsioonikahju, mis kaudselt toob kaasa rahalised kaotused. Meie olukord on vastupidine: me vĂ”ime otse rahalisi kahjusid kannatada – nĂ€iteks, kui me peame tehingut edukaiks, aga see ei olnud edukas (vĂ”i vastupidi). Olime sunnitud kirjutama enda tööriista, mis jĂ€lgib Ă€rinĂ€itajate pĂ”hjal edukate tehingute arvu dĂŒnaamikat ajaintervallis. Turult ei leitud midagi! Just selle mĂ”tte tahtsin ma edastada. Taoliste ĂŒlesannete lahendamiseks pole turul midagi.

    See kÀis selle kohta, kuidas kiiresti probleemi tuvastada.

    Kuidas mÀÀrata tÔrgete pÔhjuseid

    Kolmas ĂŒlesannete rĂŒhm, mida me lahendame – pĂ€rast seda, kui oleme probleemi tuvastanud, pĂ€rast seda, kui oleme sellest vabanenud, oleks hea mĂ”ista pĂ”hjust, et arendada, testida ja midagi sellega ette vĂ”tta. Seega peame uurima, tĂ”stma esile logid.

    HighLoad++, Jevgeni Kuzovlev (EcommPay IT): mida teha, kui minut seadistamata maksab $100000

    Kui me rÀÀgime logidest (peamine pĂ”hjus – logid), on meie logide peamine osa ELK Stakis – praktiliselt kĂ”igil on nii. MĂ”nel vĂ”ibolla ei ole ELK-d, aga kui kirjutate logisid gigabaidiga, siis jĂ”uate varem vĂ”i hiljem ELK-nimelise lahenduseni. Meie kirjutame neid terabaidiga.

    HighLoad++, Jevgeni Kuzovlev (EcommPay IT): mida teha, kui minut seadistamata maksab $100000

    Siin on probleem. Me parandasime, lahendasime kasutaja jaoks vea, hakkasime uurima, mis see tĂ€pselt oli, lĂ€ksime «Kibanas» logisid vaatama, sisestasime seal tehingu ID ja saime sellise portaali (nĂ€itab palju). Ja selles portaalis ei ole midagi selgelt arusaadav. Miks? Sest ei ole selge, milline osa kuulub millisele töötlejale, milline osa kuulub millisele komponendile. Ja sel hetkel mĂ”istsime, et meil on vaja jĂ€lgimist – just seda OpenTracing, millest ma rÀÀkisin.

    MĂ”tlesime sellele aasta tagasi, suunates oma pilgu turule, ja seal selgus kaks tööriista – «Zipkin» ja «Jaeger». «Jaeger» on tegelikult ideoloogiline jĂ€reltulija, ideoloogiline jĂ€tk «Zipkinile». «Zipkinis» on kĂ”ik hea, vĂ€lja arvatud see, et ta ei oska aggregeerida, ei oska logisid jĂ€lgimisse lisada, vaid ainult ajajĂ€lgimist. «Jaeger» toetas seda.

    Vaatasime „Egeri“ – rakendusi saab instrumenteerida, saab kirjutada API (selle aja jaoks PHP standard API, muidugi, ei olnud veel kinnitatud – see oli aasta tagasi, aga nĂŒĂŒd on juba kinnitatud), kuid klienti ei olnud absoluutselt. „Selge,“ mĂ”tlesime ja kirjutasime oma kliendi. Mis meil vĂ€lja tuli? Umbes nii see vĂ€lja nĂ€eb:

    HighLoad++, Jevgeni Kuzovlev (EcommPay IT): mida teha, kui minut seadistamata maksab $100000

    „Egeris“ luuakse iga sĂ”numi jaoks span’id. See tĂ€hendab, et kui kasutaja avab sĂŒsteemi, nĂ€eb ta iga sissetuleva pĂ€ringu kohta ĂŒhte vĂ”i kahte plokki (1-2-3 – nii palju sissetulevaid pĂ€ringuid kasutajalt oli, nii palju on blokke). Selleks, et kasutajatel oleks lihtsam, lisasime logide ja ajajĂ€lgimise juurde sildid. Seega, kui juhtub viga, mĂ€rgib meie rakendus logi vastava Error sildiga. Saame filtreerida Error sildi jĂ€rgi ja kuvatakse ainult need span’id, mis sisaldavad seda veaga plokki. Nii see vĂ€lja nĂ€eb, kui me span’i avame:

    HighLoad++, Jevgeni Kuzovlev (EcommPay IT): mida teha, kui minut seadistamata maksab $100000

    Span’i sees on rida jĂ€lgimisandmeid. Antud juhul on need kolm testjĂ€lgimist ja kolmas jĂ€lgimine ĂŒtleb meile, et tekkis viga. Samuti nĂ€eme siin ajajĂ€lgimist: meil on ĂŒleval – ajaskaalal ja me nĂ€eme, millisel ajavahemikul see vĂ”i teine logi on salvestatud.

    Seega lĂ€ks meil suurepĂ€raselt. Kirjutasime oma laienduse ja avasime selle avatud lĂ€htekoodiga. Kui soovite töötada jĂ€lgimisega, kui soovite kasutada „Egerit“ PHP keeles – meie laiendus on olemas, nagu öeldakse, welcome to use:

    HighLoad++, Jevgeni Kuzovlev (EcommPay IT): mida teha, kui minut seadistamata maksab $100000

    Meie laiendus on klient OpenTracing API jaoks, see on tehtud php-extention’ina, mis tĂ€hendab, et peate selle koguma ja sĂŒsteemi seadistama. Aasta tagasi ei olnud midagi muud. Praegu on ilmunud veel teisi kliente, mis on komponendid. Siin on teie valida: kas tĂ”state komponendid composeriga ĂŒles vĂ”i kasutate laiendust, see on teie valik.

    EttevÔtte standardid

    RÀÀkisime kolmest kĂ€sust. Neljas kĂ€sk – standardiseerida lĂ€henemisi. Mis see on? See on umbes see:

    HighLoad++, Jevgeni Kuzovlev (EcommPay IT): mida teha, kui minut seadistamata maksab $100000

    Miks on siin sĂ”na „ettevĂ”tte“? Mitte sellepĂ€rast, et me oleme suur vĂ”i bĂŒrokraatlik ettevĂ”te, ei! SĂ”na „ettevĂ”tte“ kasutasin ma siinkohal selle kontekstis, et igal ettevĂ”ttel, igal tuotteel peavad olema omad standardid, ja teil samuti. Millised standardid meil siis on?

    HighLoad++, Jevgeni Kuzovlev (EcommPay IT): mida teha, kui minut seadistamata maksab $100000

    • Meil on deploiendirektiiv. Ilma selleta me ei liigu kuhugi, ei suuda. Me deploime umbes 60 korda nĂ€dalas, seega meie deploiendid toimuvad praktiliselt pidevalt. Samas on meil nĂ€iteks direktiivis tabu deploiendi tegemiseks reede Ă”htul – pĂ”himĂ”tteliselt me ei deploime.
    • Meil on dokumentatsioon kohustuslik. Ükski uus komponent ei jĂ”ua meie tootmisse, kui selle kohta pole dokumentatsiooni, isegi kui see on loodud meie RnD spetsialistide poolt. NĂ”uame neilt deploiendi juhendit, seirekaart ja umbkaudu kirjelduse (noh, nagu programmerijad suudavad kirjutada) selle kohta, kuidas see komponent töötab, kuidas seda probleemide korral lahendada.
    • Me lahendame mitte probleemi pĂ”hjust, vaid probleemi – nagu ma juba rÀÀkisin. Meie jaoks on oluline kaitsta kasutajat probleemide eest.
    • Meil on lubadused. NĂ€iteks me ei arva, et olukord on allakĂ€ik, kui me kahe minuti jooksul kaotasime 2% liiklusest. See ei kuulu meie statistikas arvesse. Kui protsent vĂ”i aeg on suurem, siis me juba arvestame.
    • Ja me kirjutame alati postmortem'e. Mida iganes meiega ka ei juhtuks, iga olukord, kus tootmises kĂ€itus midagi anomaalselt, kajastub postmortem'is. Postmortem on dokument, kus sa kirjutad, mis juhtus, detailsed ajakavad, mida sa tegid parandamiseks ja (see on kohustuslik osa!) mida sa teed, et midagi sellist tulevikus vĂ€ltida. See on hĂ€davajalik edasiseks analĂŒĂŒsiks.

    Kuidas arvestada allakÀiku?

    HighLoad++, Jevgeni Kuzovlev (EcommPay IT): mida teha, kui minut seadistamata maksab $100000

    Kuhu see kÔik viis?

    See viis selleni, et (meil olid teatud stabiilsusprobleemid, mis ei rahuldanud ei kliente ega meid) meie stabiilsusindikaator viimase 6 kuu jooksul oli 99,97. VĂ”ib öelda, et see ei ole vĂ€ga palju. Jah, meil on veel eesmĂ€rke. Sellest nĂ€itajast ligikaudu pooled on stabiilsus, mis ei ole iseenesest meie, vaid meie veebirakenduse tulemĂŒĂŒr, mis meie ees seisab ja teenusena kasutatakse, kuid klientidele ei ole see oluline.

    Oleme Ă”ppinud öösel rahulikult magama. LĂ” finally! Pool aastat tagasi ei osanud me seda. Ja selle mĂ€rkuse juures tahaksin teha ĂŒhe tĂ€ienduse. Eile Ă”htul oli suurepĂ€rane ettekande teemal tuumareaktori juhtimissĂŒsteem. Kui mind kuulevad inimesed, kes seda sĂŒsteemi kirjutasid – palun unustage, mida ma ĂŒtlesin "2% – see ei ole allakĂ€ik". Teie jaoks on 2% allakĂ€ik, isegi kui see kestab kaks minutit!

    See sellele! Teie kĂŒsimused.

    HighLoad++, Jevgeni Kuzovlev (EcommPay IT): mida teha, kui minut seadistamata maksab $100000

    Tasakaalustajatest ja andmebaasi migreerimisest

    KĂŒsimus publikust (edaspidi - K): – Tere Ă”htust. Suur aitĂ€h sellise haldustöö esitamise eest! KĂŒsimus on lĂŒhike, teie tasakaalustajate teemal. Te mainisite, et teil on WAF, nii et nagu ma aru saan, kasutate tasakaalustajana mingit vĂ€list


    EK: – Ei, tasakaalustajana kasutame oma teenuseid. Antud juhul on WAF meile lihtsalt DDoS-i kaitse tööriist.

    K: – Kas vĂ”iks paar sĂ”na tasakaalustajate kohta?

    EK: – Nagu ma juba ĂŒtlesin, on see grupo servereid openresty-s. Meil on praegu 5 varutud grupi, mis tegelevad ainult
 ehk server, millel on ainult openresty, suunab vaid liiklust. Vastavalt arusaamale, kui palju me hoidame: praegu on meie tavavoog – see on mitu sada megabitti. Nad saavad sellega hakkama, neil on hĂ€sti, isegi ei pinguta.

    K: – Samuti lihtne kĂŒsimus. On olemas Blue/Green deployment. Mis teete, nĂ€iteks, andmebaasi migreerimisega?

    EK: – Hea kĂŒsimus! Vaadake, meil on Blue/Green deployment'is iga rea jaoks eraldi jĂ€rjekorrad. Ehk, kui rÀÀgime sĂŒndmuste jĂ€rjekordadest, mis edastatakse töötajalt töötajale, siis seal on eraldi jĂ€rjekorrad sinise ja rohelise rea jaoks. Kui rÀÀgime ise andmebaasist, siis oleme seda tahtlikult kitsendanud, peaaegu kĂ”ik edastamine on jĂ€rjekordades, andmebaasis hoiame vaid tehingute steki. Ja tehingute stek on meil ĂŒhiselt kĂ”igi ridade jaoks. Andmebaasi puhul: me ei eralda seda siniseks ja roheliseks, sest mĂ”lemad koodiversioonid peavad teadma, mis toimub tehinguga.

    SĂ”brad, mul on veel ĂŒks vĂ€ike auhind, et teid motiveerida – raamat. Ja ma pean selle andma parima kĂŒsimuse eest.

    K: – Tere. AitĂ€h esituse eest. KĂŒsimus on jĂ€rgmine. Te jĂ€lgite makseid, jĂ€lgite teenuseid, millega suhtlete
 Kuidas te jĂ€lgite seda, et inimene mingil viisil jĂ”uab teie makselehele, teeb makse, ja projekt kannab talle raha? Ehk kuidas te jĂ€lgite, et kaupmees on saadaval ja on teie callback'i vastu vĂ”tnud?

    EK: – „Kaupmees“ on meie jaoks antud juhul tĂ€pselt sama vĂ€line teenus, mis maksesĂŒsteem. Me jĂ€lgime kaupmehe vastuse kiirus.

    Andmebaasi krĂŒpteerimisest

    K: – Tere. Mul on ĂŒks vĂ€ike kĂŒsimus. Kas teil on PCI DSS-i alusel tundlikke andmeid? Tahtsin teada, kuidas te jĂ€rjekordades PAN-e salvestate, mida peate edastama? Kas kasutate mingit krĂŒpteerimist? Ja sealt tulenev teine kĂŒsimus: PCI DSS-i kohaselt tuleb andmebaasi perioodiliselt uuesti krĂŒpteerida, kui toimub muudatusi (nt administraatorite lahkumine) – kuidas sel juhul kĂ€ib ligipÀÀsetavus?

    HighLoad++, Jevgeni Kuzovlev (EcommPay IT): mida teha, kui minut seadistamata maksab $100000

    EK: – SuurepĂ€rane kĂŒsimus! Esiteks, me ei salvesta PAN-e jĂ€rjekordades. Meil ei ole Ă”igust salvestada PAN-e avatud kujul, seega kasutame spetsiaalset teenust (me nimetame seda 'Keydemon') – see teenus teeb ainult ĂŒhte asja: see vĂ”tab sisendiks sĂ”numi ja tagastab krĂŒpteeritud sĂ”numi. Ja me salvestame kĂ”ik sellega krĂŒpteeritud sĂ”numid. Vastavalt on meie vĂ”tme pikkus alla kilobaidi, et see oleks tĂ”eliselt tĂ”hus ja usaldusvÀÀrne.

    K: – Kas nĂŒĂŒd on tĂ”esti juba 2 kilobaiti vaja?

    EK: – Tundub, et veel eile oli 256... Kuhu veel?!

    SeetĂ”ttu on see esiteks. Ja teiseks toetab olemasolev lahendus uuesti krĂŒpteerimise protseduuri – seal on kaks paari 'kekke' (vĂ”tmeid), mis annavad 'dekke', mis krĂŒpteerivad (kek on vĂ”tmed, dek on vĂ”tmete derivaat, mis krĂŒpteerivad). Ja kui algatatakse protsess (see toimub regulaarselt, 3 kuu kuni ± millegi vahel), laeme uue paari 'kekke' ning meil toimub andmete uuesti krĂŒpteerimine. Meil on eraldi teenused, mis vĂ”tavad kĂ”ik andmed vĂ€lja, krĂŒpteerivad need uuesti; andmete kĂ”rval on vĂ”tme identifikaator, millega need on krĂŒpteeritud. Seega, kui andmed on uute vĂ”tmetega krĂŒpteeritud, eemaldame vanad vĂ”tmed.

    MÔnikord tuleb makseid kÀsitsi teostada...

    K: – Seega, kui toimub tagasimakse mĂ”ne tehingu puhul, kas krĂŒpteerite seni vana vĂ”tmega?

    EK: – Jah.

    K: – Siis veel ĂŒks vĂ€ike kĂŒsimus. Kui toimub mingi tĂ”rge, kukkumine, intsident, siis tuleb tehingut kĂ€sitsi edasi juhatada. Selline olukord vĂ”ib ette tulla.

    EK: – Jah, see juhtub.

    K: – Kust te need andmed vĂ”tate? Kas te ise kĂ€ite kĂ€sitsi selles salvestuses?

    EK: – Ei, no muidugi – meil on olemas mingi tagalasĂŒsteem, mis sisaldab meie toe jaoks liidest. Kui me ei tea, mis staatuses tehing on (nĂ€iteks kuniks maksesĂŒsteem ei vasta ajapiiril) – siis me pĂ”himĂ”tteliselt ei tea, st me mÀÀrame lĂ”pliku staatuse ainult tĂ€ieliku kindluse korral. Sel juhul suuname tehingu eraldi staatusesse kĂ€sitsi töötlemiseks. Hommikul, jĂ€rgmisel pĂ€eval, niipea kui tugi saab info, et maksesĂŒsteemis on sĂ€ilinud sellised tehingud, töötlevad nad need hĂ€dasti kĂ€sitsi sellel liidesel.

    HighLoad++, Jevgeni Kuzovlev (EcommPay IT): mida teha, kui minut seadistamata maksab $100000

    K: – Mul on paar kĂŒsimust. Üks neist on PCI DSS tsooni jĂ€tkamine: kuidas te viite logid nende kontuurist vĂ€lja? Selline kĂŒsimus, sest arendaja vĂ”is logidesse panna absoluutset kĂ”ike! Teine kĂŒsimus: kuidas te vĂ€ljastate hotfix'e? KĂ€sitsi andmebaasis – see on ĂŒks variant, aga vĂ”ivad olla ka tasuta hotfix'id – mis seal protseduur on? Ja kolmas kĂŒsimus, ilmselt seondub see RTO ja RPO-ga. Teie kĂ€ttesaadavus oli 99,97, peaaegu neli ĂŒheksat, aga ma saan aru, et teil on teine andmekeskus, kolmas andmekeskus ja viies andmekeskus
 Kuidas te tegelete nende sĂŒnkroniseerimise, replikatsiooni ja muu sellisega?

    EK: – Alustame esimesest. Kas esimene kĂŒsimus oli logide kohta? Meie puhul, kui logisid kirjutatakse, on seal vahekiht, mis maskib kĂ”ik tundlikud andmed. See vaatab maski ja lisavĂ€ljade jĂ€rgi. SeetĂ”ttu on meie logid juba maskitud andmete ja PCI DSS kontuuriga. See on ĂŒks rutiinseid ĂŒlesandeid, mis on mÀÀratud testimise osakonnale. Nad peavad kontrollima iga ĂŒlesannet sealhulgas ka logide jĂ€rgi, mida nad kirjutavad, ja see on ĂŒks rutiinseid ĂŒlesandeid koodikontrolli raames, et jĂ€lgida, et arendaja ei oleks midagi salvestanud. Edasine kontroll toimub regulaarselt infosĂŒsteemide turbe osakonna poolt umbes kord nĂ€dalas: valitakse vĂ€lja logid viimase pĂ€eva jooksul ja need analĂŒĂŒsitakse spetsiaalse skanner-analyzeriga testserveritest, et kĂ”ike kontrollida.
    Hot-fix'idest. See on meil deploide reglemendi osa. Oleme eraldi vĂ€lja toonud punkt hot-fix'ide kohta. Me arvame, et me deploime hot-fix'e ööpĂ€evaringselt siis, kui me seda vajame. Nii kui versioon on kokku pandud, nii kui see on testitud, nii kui meil on artefakt – tĂ”useb hĂ€daabi sĂŒsteemiadministraator, kes on toetuse kĂ”nes, ja ta deploib selle just siis, kui see on vajalik.

    Neljast ĂŒheksast. See number, mis meil praegu on, on tĂ”eliselt saavutatud, ja me pĂŒĂŒdsime seda ka teises andmekeskuses. Praegu on meil teine andmekeskus ja hakkame nende vahel suunama, ja andmekeskuste replikatsiooni probleem on tĂ”eliselt keeruline. Oleme pĂŒĂŒdnud seda oma ajal erinevate meetoditega lahendada: proovisime kasutada sama 'Tarantulit' – see ei lĂ€inud meil lĂ€bi, ĂŒtlen kohe. SeetĂ”ttu oleme jĂ”udnud jĂ€reldusele, et teeme 'sensat' kĂ€sitsi. Iga rakendus synchroniseerib tegelikult asĂŒnkroonselt vajaliku 'change – done' andmekeskuste vahel.

    K: – Kui teil on teine, siis miks ei ole kolmandat? Sest Split-brain'i pole veel keegi


    EK: – Meil ei ole 'Split-brain'i. Kuna iga rakendus kĂ€itab multi-masterit, ei ole meile oluline, millisesse keskusesse pĂ€ring tuli. Oleme valmis, et juhul, kui ĂŒks andmekeskus kukub (me arvestame sellega) ja kasutaja pĂ€ringu keskpunkti vahetame teise andmekeskusesse, siis oleme valmis selle kasutaja kaotamiseks, tĂ”eliselt; kuid neid on tĂ”eliselt vĂ€he, absoluutne harv.

    K: – Tere Ă”htust. AitĂ€h ettekande eest. Te rÀÀkisite oma debuggersist, mis production'is kĂ€itavad mingisuguseid testtransaktsioone. Aga rÀÀgi testtransaktsioonidest! Kui sĂŒgavale see ulatub?

    EK: – See lĂ€bib kogu komponendi tĂ€ieliku tsĂŒkli. Komponendi jaoks ei ole vahet testtransaktsiooni ja tootmistransaktsiooni vahel. Ja loogika seisukohalt on see lihtsalt mingi eraldi projekt sĂŒsteemis, kus tehakse ainult testtransaktsioone.

    K: – Kuidas te selle vĂ€lja filtreerite? Siin on Core saatnud


    EK: – Me jĂ€lgime 'Cori' antud juhul testtransaktsioonide jaoks
 Meil on selline mĂ”isted nagu suunamine: 'Core' teab, millisesse maksesĂŒsteemi tuleb saata – saadame vale maksesĂŒsteemi, mis lihtsalt annab http-vastuse ja kĂ”ik.

    K: – Palun öelge, kas teie rakendus on kirjutatud ĂŒhe suure monoliidina vĂ”i olete selle jaganud teenusteks vĂ”i isegi mikroteenusteks?

    EK: – Meil ei ole monoliiti, meie rakendus on teenustepĂ”hine. Meil on nalja, et meil on teenused monoliitide seest – need on tĂ”eliselt piisavalt suured. Mikroteenusteks seda pĂ€ris nimetada ei saa, aga need on tĂ”eliselt teenused, mille sees töötavad jaotatud masinate töölauad.

    Kui teenus serveris on kompromiteeritud


    K: – Siis on mul jĂ€rgmine kĂŒsimus. Isegi kui see oleks monoliit, ĂŒtlesite siiski, et teil on palju neid instant-servereid, kĂ”ik nad pĂ”himĂ”tteliselt töötlevad andmeid, ja kĂŒsimus on selline: "Kuidas on juurdepÀÀsul ĂŒhe instant-serveri vĂ”i rakenduse, mĂ”ne konkreetse elemendi puhul? Milliseid Ă”iguseid neil on? Kes vĂ”ib mida teha? Kelle poole pöörduda, milliste andmete jaoks?"

    HighLoad++, Jevgeni Kuzovlev (EcommPay IT): mida teha, kui minut seadistamata maksab $100000

    EK: – Jah, kindlasti. TurvanĂ”uded on piisavalt ranged. Esiteks, meil on avatud andmevood ja sadamad ainult need, mille kohta me eelnevalt eeldame andmevoo liikumist. Kui komponent suhtleb andmebaasiga (ĂŒtleme, et MySQL) portidel 5-4-3-2, siis avatakse talle ainult port 5-4-3-2 ja teised sadamad, teised liikuvusliinid ei ole kergesti ligipÀÀsetavad. Lisaks tuleb aru saada, et meil on tootmisĂŒksustes umbes 10 erinevat turvaseadet. Ja isegi kui rakendus on kuidagi kompromiteeritud, jumal hoidku, ei saa rĂŒndaja ligipÀÀsu serveri halduskeskkonda, sest see on teine turvaala.

    K: – Mind huvitab antud kontekstis rohkem see, et teil on mingid lepingud teenustega – mida nad saavad teha, milliste "tegevuste" kaudu nad saavad ĂŒksteisega suhelda... Ja tavaliselt kĂŒsivad mingid spetsiifilised teenused ĂŒksteiselt teatud tegevuste loendit. Teised nad tavalistes olukordades ei pöördu ja neil on teised vastutusalad. Kui aga ĂŒks neist on kompromiteeritud, kas ta saab siis tĂ”mmata "tegevusi" selle teenuse kohta...?

    EK: – Ma saan aru. Kui tavatingimustes on teise serveriga suhtlemine lubatud, siis – jah. SLA-lepinguga me ei jĂ€lgi, et sulle on lubatud ainult esimesed 3 „tegevust”, aga 4. „tegevus” on keelatud. See on tĂ”enĂ€oliselt meile ĂŒlearune, sest meil on nii vĂ”i teisiti neljatasandiline kaitsesĂŒsteem kontuuride jaoks. Me eelistame kaitsta kontuuride kaudu, mitte sĂŒvalehte tasandil.

    Kuidas toimivad Visa, MasterCard ja „Sberbank”

    K: – Soovin tĂ€psustada hetke kasutaja ĂŒleminekust ĂŒhest andmekeskusest teise. Nagu ma tean, toimivad „Visa” ja „MasterCard” binaarsel sĂŒnkroonprotokollil 8583, seal on mikserid. Ja tahaksin teada, kas jutt kĂ€ib ĂŒleminekust – kas see on otse „Visa” ja „MasterCardi” vĂ”i maksesĂŒsteemide, töötlemiskeskuste kohta?

    EK: – See on mikserite juurde. Mikserid on meil ĂŒhes andmekeskuses.

    K: – Ühuldudes öeldes, kas teil on ĂŒks ĂŒhenduspunkt?

    EK: – „Visale” ja „MasterCardile” – jah. Lihtsalt selle tĂ”ttu, et „Visa” ja „MasterCard” nĂ”uavad mĂ€rkimisvÀÀrseid investeeringuid infrastruktuuri, et sĂ”lmida eraldi lepingud teise mikseripaariga, nĂ€iteks. Need on reserveeritud ĂŒhes andmekeskuses, kuid kui meil juhtub, jumal hoidku, andmekeskus, kus mikserid „Visa” ja „MasterCard” ĂŒhendamiseks asuvad, laguneb, siis side „Visa” ja „MasterCardiga” kaob...

    K: – Kuidas nad saavad olla reserveeritud? Tean, et „Visa” lubab pidada pĂ”himĂ”tteliselt vaid ĂŒhte ĂŒhendust!

    EK: – Nad toovad ise varustuse. Igal juhul on meil jĂ”udnud varustus, mis on sisemiselt kindlalt reserveeritud.

    K: – Kas see tĂ€hendab, et riiul on pĂ€rit nende Connects Orange’ilt?

    EK: – Jah.

    K: – Ent mis siis juhtub, kui teie andmekeskus lakkab eksisteerimast? Kuidas edasi liikuda? Kas liiklus lihtsalt peatub?

    EK: – Ei. Me sel juhul lihtsalt suuname liikluse teisele kanalile, mis loomulikult maksab meile ja klientidele rohkem. Kuid liiklus ei lĂ€he lĂ€bi meie otsese ĂŒhenduse „Visa”, „MasterCardi”, vaid lĂ€bi tinglikku „Sberbanki” (vĂ€ga ĂŒlekohtuselt).

    Vabandan, kui ma puutin „Sberbanki” töötajaid. Kuid meie statistika kohaselt langeb „Sberbank” vene pankade seas kĂ”ige sagedamini. Kuu aega ei möödu, et „Sberbankil” midagi ei katke.

    HighLoad++, Jevgeni Kuzovlev (EcommPay IT): mida teha, kui minut seadistamata maksab $100000

    MĂ€ngi videot

    Veidi reklaami 🙂

    AitÀh, et olete meiega. Kas teile meeldivad meie artiklid? Kas soovite nÀha rohkem huvitavat sisu? Toetage meid, tellides teenuse vÔi soovitades meid tuttavatele. Pilve VPS arendajatele alates $4.99, ainulaadne entry-level serverite analoog, mille oleme teie jaoks vÀlja mÔelnud: Kogu tÔde VPS (KVM) E5-2697 v3 (6 Cores) 10GB DDR4 480GB SSD 1Gbps alates $19 vÔi kuidas jagada serverit Ôigesti? (saadaval RAID1 ja RAID10 variandid, kuni 24 tuuma ja kuni 40GB DDR4).

    Dell R730xd on Equinixi Tier IV andmekeskuses Amsterdamis kaks korda odavam? Ainult meie juures 2 x Intel TetraDeca-Core Xeon 2x E5-2697v3 2.6GHz 14C 64GB DDR4 4x960GB SSD 1Gbps 100 TB alates $199 Hollandis! Dell R420 — 2x E5-2430 2.2Ghz 6C 128GB DDR3 2x960GB SSD 1Gbps 100TB — alates $99! Lugege sellest Kuidas luua ettevĂ”tte tasemel infrastruktuuri, kasutades Dell R730xd E5-2650 v4 servereid, mille hind on 9000 eurot, taskukohase hinna eest?

Allikas: habr.com

Osta usaldusvÀÀrne hostimine veebilehtede jaoks DDoS-i kaitsega, VPS VDS serverid đŸ”„ Osta usaldusvÀÀrne hostimine veebilehtede jaoks DDoS-i kaitsega, VPS VDS serverid | ProHoster