Ajaloolised teenused teie infrastruktuuris

Tere! Minu nimi on Pasha Chernyak, olen QIWI peaarendaja ja tÀna tahan rÀÀkida millestki vÀltimatust. Legacyst.

Alustame kĂŒsimusest: mis on Legacy-teenus? Legacy-teenus on teenus, mida arendaja pole puudutanud nĂ€dalat/kuid/ aastat? VĂ”i on see teenus, mille kirjutas vĂ€hem kogenud programmeerija, nĂ€iteks teie ise, kuid aasta tagasi? Ja nĂŒĂŒd olete palju oskuslikum. VĂ”i siis Legacy-teenus on see, mille otsustasite enam mitte komiteerida ja jĂ€rk-jĂ€rgult valmistate talle asendust? Igatahes, sellise teenuse jĂ€tmine jĂ€relevalveta ja mitte uuendamine on aeglane pomm, mis vĂ”ib hiljem plahvatada.

Ajaloolised teenused teie infrastruktuuris

Enne kui liigun edasi selle juurde, kuidas me QIWI-s oma Legacy-teenustega töötame, rÀÀgin, kuidas me korrastasime teenuseid Rahakotis. Olen juba kaks aastat vastutanud selle töökindluse eest. Kui tekib mingi probleem, siis helistatakse alati esimesena mulle. Mul tavaliselt ei jÀtku julgust kell 11 Ôhtul kellelegi teisele helistada, seega olen pidanud istuma ja uurima meie domeeni kÔiki teenuseid.

Aga nagu iga inimene, armastan ma öösel magada, seega pĂŒĂŒdsin aru saada, miks mulle helistatakse: "Kutt, miks te mulle helistate?". Mispeale sain ĂŒsna lakoonilise vastuse: "Kellele mujale?". Sest ma parandada teenuseid, ja veel ei tea kutid lihtsalt, kellele helistada.

Seega otsustasime ĂŒhe Rahakoti tagasivaate koosoleku jooksul, et tuleb koostada tabel, kus on kirjas meie teenuste, mikroteenuste ja monoliitide nimekiri ning nende eest vastutavad isikud. Tabelid on palju kasulikud, mĂ”istlike piiride piires.

Lisaks sellele, kelle eest vastutab, oli seal ka vastused kĂŒsimustele: kes on teenuse omanik, kes vastutab selle arengu, arhitektuuri ja elutsĂŒkli eest. Teenuse eest vastutavad isikud on need, kes saavad vajadusel teenust parandada. Teenuse omanikul on Ă”igus jĂ€tta +2 komiteerimisse, vastutavad peavad samuti kindlasti olema kohal ĂŒlevaatusel, enne kui teenus selle uue komiteerimise vastu vĂ”tab.

Aeg lĂ€ks, hakati kasutama uusi praktikaid, nagu nĂ€iteks migreerimine Kubernetesesse, erinevad checkstyle, spotbugs, ktlint, logide olemasolu Kibanas, teenuste autodetektsioon otse aadresside mÀÀramise asemel ja muid kasulikke funktsioone. Ning igal pool vĂ”imaldas meie tabel toetada meie teenuste ajakohasust. Meie jaoks on see teatud kontrollnimekiri, mis nĂ€itab, et see teenus oskab seda teha, aga seda ei oska veel. Kuid me lĂ€ksime edasi, mĂ”istes, et meil on puudu teave meie teenuste kohta, mille ĂŒle me jĂ€lgime, kus asuvad teenuse lĂ€htekoodid, kus kĂ€ivitatakse ĂŒlesandeid TeamCitys, kuidas need tĂ”stetakse ĂŒles, kus hoitakse end2end testide lĂ€htekoodid, arhitektuuri fotod, tehtud otsused. Ideaalis tahaks, et kogu see teave oleks kusagil olemas ja kĂ€epĂ€rane, kui seda on vaja. SeetĂ”ttu sai meie tabel punktiks, kust alustada teabe otsimist.

Kuid QIWI, kuigi sĂ€ilitab idufirma vaimu, on suur ettevĂ”te. Meil on juba 12 aastat, ja meeskonnad vahetuvad: inimesed lahkuvad, inimesed tulevad, moodustuvad uued meeskonnad. Ja me avastasime oma domeenil mitmeid teenuseid, mis on meile pĂ€randiks jÀÀnud. Midagi tuli arendajatelt teistest meeskondadest, midagi seostus lihtsalt Kottiga kaudselt, seega on see teenus nĂŒĂŒd meie bilansis. Miks vaevata end sellega, mida ja kuidas see töötab? Teenus töötab ju, ja meil on toote omadusi, mida on kindlasti vaja ellu viia.

Nagu ikka juhtub

Kuid mingil hetkel avastame, et teenus enam ei tĂ€ida oma funktsiooni, midagi on katki — kuidas sellises olukorras kĂ€ituda? Teenus on lihtsalt lakanud töötamast. TĂ€ielikult. Ja me said sellest teada, esiteks, juhuslikult ja teiseks, kuue kuu pĂ€rast. Nii juhtub. Ainus, mida me teadisime — millistel virtuaalmasinatel teenus töötab, kus asuvad tema lĂ€htekoodid, ja kĂ”ik. Me teeme git clone ja sukeldume selle inimese mĂ”tetesse, kes kirjutab seda paar aastat tagasi, aga mida me nĂ€eme? Mitte mingit tuttavat Spring Booti, kuigi oleme kĂ”ik selleks harjunud, meil on ju full stack ja kĂ”ik see. VĂ”ib-olla on seal Spring Framework? Aga ei ole.

Poiss, kes seda kĂ”ike kirjutas, oli karm ja kirjutas kĂ”ik puhtal Java keeles. Arendajale tuttavaid tööriistu pole ning tekib idee — vĂ”iksime selle kĂ”ik ĂŒmber kirjutada. Meil on ju mikroteenused olemas, ja igast rösterist kostab tuttav "Poisid, mikroteenused on see, mida vajate!". Kui midagi peaks valesti olema, saate rahulikult vĂ”tta mis tahes keele ja kĂ”ik lĂ€heb hĂ€sti.

Asi on selles, et meil ei ole praegu tellijat, kes vastutab selle teenuse eest. Millised olid tema Ă€rilised nĂ”udmised, mida see teenus peaks ĂŒldse tegema? Ja teenus on tihedalt integreeritud teie Ă€riprotsessidega.

Ja nĂŒĂŒd öelge, kui lihtne on teenust ĂŒmber kirjutada, teadmata selle Ă€ri nĂ”udeid? Teenuse logimine on segane, kas mÔÔdikud on olemas — teadmata. Millised need on, kui need on — seda veelgi vĂ€hem teame. Ja samal ajal on teenuses tohutult klasside segast Ă€ri loogikat. Midagi siseneb mingisse andmebaasi, millest me ka hetkel mitte midagi ei tea.

Kust alustada?

KĂ”ige loogilisemast — testide olemasolust. Seal on tavaliselt kirjutatud vĂ€hemalt mingisugune loogika ja saab teha jĂ€reldusi selle kohta, mis toimub. Praegu on moes TDD, kuid nĂ€eme, et samad 5 aastat tagasi oli kĂ”ik peaaegu sama nagu praegu: unit-testide arvu on peaaegu mitte ja need ei ĂŒtle meile ju pĂ€ris midagi. No vĂ€lja arvatud vĂ”ib-olla mingisugune kontroll, kuidas allkirjastatakse mingit xml-i mingiga custom sertifikaadiga.

Koodi pĂ”hjal ei saanud me midagi aru, ja me pidime vaatama, mis toimub virtuaalkeskkonnas. Avastasime teenuse logides http-klientide vea, milleks oli enesepĂ€dev sertifikaat, mis oli rakenduse ressurssidest sisse pandud ja oli juba aegunud. VĂ”tsime ĂŒhendust meie analĂŒĂŒtikutega, nad palusid uut sertifikaati, see anti meile ja teenus hakkas jĂ€lle tööle. Tundus, et sellega on kĂ”ik. VĂ”i siiski? Teenus töötab, ta tĂ€idab teatud funktsiooni, mis on meie Ă€ri jaoks vajalik. Meil on olemas teatud rakenduste arendusstandardid, mis on kindlasti ka teil. NĂ€iteks, et logisid ei hoita node'is kaustas, vaid hoitakse kuskil andmehoidlas, nĂ€iteks elasticas, ja lĂ€htestame neid Kibanas. VĂ”ime meenutada ka kuldseid meetmeid. St teenuse koormus, teenusele esitatud pĂ€ringute arv, kas ta on elus vĂ”i mitte, kuidas tal HealthCheck lĂ€heb. Igatahes aitavad need mÔÔdikud teada, millal on ta rahumeelselt kĂ€itamisest kĂ”rvale tĂ”sta ja unustada nagu halb unenĂ€gu.

Mida teha

SeetĂ”ttu lisame sellise vana teenuse tabelisse ja seejĂ€rel hakkame otsima vabatahtlikke arendajate hulgast, kes teenusega tegeleksid ja selle korda looksid: kirjutaksid teenuse kohta mingit teavet, lisaksid linke Grafanas olevatele armatuurlaudadele, ehitustöödele, mĂ”istaksid, kuidas rakendust ĂŒles seada, ei saa ju kĂ€tega FTP kaudu faile lisada.

Peamine on see — kui kaua kogu see kasulik vabatahtlik tegevus aega vĂ”tab? Üks sprind enam-vĂ€hem kogenud arendajale, nĂ€iteks 20%-lise tehnilise vĂ”lgade ajal. Ja kui palju aega kulus selleks, et mĂ”ista kĂ”iki keerukaid loogikaid suhtlemiseks mingi riikliku sĂŒsteemiga ja tuua see uuemate tehnoloogiate juurde? Ma ei saa selle eest kĂ€si anda, vĂ”ibolla kuu, vĂ”ibolla kahe meeskonna töö. RÀÀgin oma kogemusest, kui integreeritakse mĂ”ni uus teenus.

Samas ei ole Ă€rivÀÀrtust. Üldse mitte. Teenuse toetamiseks ja selle peale natuke aega kulutada — see on normaalne. Kuid pĂ€rast meie tavalisi tantsu teenuse ĂŒmber, lisasime selle tabelisse, lisasime teavet temast ja vĂ”ib-olla kunagi kirjutame selle uuesti. Kuid praegu vastab see meie teenuste töö standarditele.

KokkuvÔtteks sooviks tuua vÀlja plaani, mida teha Legacy-teenustega.

Legacy sĂŒsteemi nullist ĂŒmber kirjutamine — halb mĂ”te.
TĂ”siselt, selle ĂŒle ei saa isegi mĂ”elda. On selge, et soovitakse ja mingid plussid tunduvad, kuid tavaliselt ei ole selleks kellelgi vajadust, sh ka iseendale.

KĂ€siraamat
Kaevake vÀlja oma rakenduste lÀhtekoodid, tehke kÀsiraamat, kus on nÀidatud, mis ja kus asub ning kuidas see töötab. Kirjake sinna ka projekti kirjeldus (tinglik readme.md), et kiiresti aru saada, kus asuvad logid ja mÔÔdikud. Arendaja, kes pÀrast teid sellega tegelema hakkab, tÀnab teid.

MÔista domeeni
Kui teil on mĂ”ni domeen, pĂŒĂŒdke hoida kĂ€si pulsil. See kĂ”lab trivina, jah, kuid mitte kĂ”ik ei jĂ€lgi, et teenused oleksid ĂŒhesuguses vĂ”tmes. Ühes standardis töötamine on tegelikult oluliselt lihtsam.

Ainult registreeritud kasutajad saavad kĂŒsitluses osaleda. Logige sisse, palun.

Mida te oma pÀrandiga teete?

  • 31.5%Kirjutan nullist ĂŒmber, nii on Ă”igesti.

  • 52.6%Peaaegu sama, mis teie.

  • 10.5%Meil ei ole pĂ€randit, me oleme toredad.

  • 5.2%Kirjutan kommentaaridesse.

38 kasutajat hÀÀletasid. 20 kasutajat jÀid erapooletuks.

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