Legacy-teenused teie infrastruktuuris

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

Alustame kĂŒsimusega: mis on Legacy-teenus? Kas see on teenus, millega arendaja ei ole viimase nĂ€dala/kuu/aasta jooksul kokku puutunud? VĂ”i on see teenus, mille kirjutas vĂ€hem kogenud programmeerija, nĂ€iteks teie, kuid aasta tagasi? Ja nĂŒĂŒd olete te juba osavam ja kogenum. VĂ”i on Legacy-teenus hoopis see teenus, mida olete otsustanud enam mitte uuendama ja mille jaoks valmistate tasapisi asendust? Igatahes, sellise teenuse tĂ€helepanuta jĂ€tmine ja mitte uuendamine on nagu aeglaselt tikkuv pomm, mis vĂ”ib hiljem plahvatada.

Legacy-teenused teie infrastruktuuris

Enne kui rÀÀgin, kuidas me QIWI-s oma Legacy-teenustega töötlust teeme, jagan, kuidas me korda saime teenustele Rahakotis. Olen juba kaks aastat vastutanud selle töökindluse eest. Kui tekib probleem, kutsutakse mind alati esimesena. Mul on tavaliselt puudu julgust helistada kellelegi muule kell 11 Ôhtul, nii et olen pidanud istuma ja uurima kÔiki meie domeeni teenuseid.

Aga mina, nagu iga inimene, armastan öösiti magada, seetĂ”ttu pĂŒĂŒdsin aru saada, kuidas asjad kĂ€ivad: «Kutse, miks te mulle helistate?». Millele sain ĂŒsna lakoonilise vastuse: «Aga kellele veel?». Sest ma parandasin teenuseid, ja poisid lihtsalt ei tea, kellele helistada.

SeetĂ”ttu otsustasime ĂŒhel meie Koti tagasiside koosolekul, et peame koostama tabeli, kus on loetletud meie teenused, mikroteenused ja Koti monoliidid ning vastutavad isikud. Tabelid on tegelikult kasulikud, mĂ”istlike piirideni.

Lisaks teabele selle kohta, kes mille eest vastutab, olid seal vastused ka kĂŒsimustele: kes on teenuse omanik, kes vastutab selle arendamise, arhitektuuri ja eluiga. Inimesed, kes on selle teenuse eest vastutavad — need on inimesed, kes saavad seda vajaduse korral parandada. Teenuse omanikul on Ă”igus jĂ€tta +2 commitidesse, vastutavad peavad samuti kindlasti olema kohal ĂŒlevaatusel, enne kui see teenus uue commit'i vastu vĂ”tab.

Aeg kulges, uutest praktikadest hakkasid sisse tulema nĂ€iteks migratsioon Kubernetesesse, erinevad checkstyle, spotbugs, ktlint, logide olemasolu Kibanas, teenuste autodiscovery asemel otse aadresside mÀÀramine ja muud kasulikud asjad. Ja igal pool vĂ”imaldas meie tabel hoida meie teenuste aktuaalsust. Meie jaoks on see nagu kontrollnimekiri, mis ĂŒtleb, et see teenus oskab seda teha, aga seda veel ei oska. Kuid me liikusime edasi, mĂ”istes, et meil on puudulik teave meie teenuste kohta, mida me jĂ€lgime, kus asuvad teenuse lĂ€htekoodid, kus kĂ€ivitatakse ĂŒlesanded ehituses TeamCitys, kuidas neid juurutatakse, kus sĂ€ilitatakse end2end testide lĂ€htekoodid, fotod arhitektuuriga seonduvatest grooming'utest ja tehtud otsustest. Ideaalis sooviksime, et kogu see teave oleks kuskil olemas ja kergesti kĂ€eulatuses, kui seda vajame. SeetĂ”ttu sai meie tabelist teabeotsingu lĂ€htekoht.

Kuid QIWI, kuigi sĂ€ilitab start-up'i vaimu, on suur ettevĂ”te. Meie oleme juba 12 aastat tegutsenud ja meeskonnad vahetuvad: inimesed lahkuvad, inimesed tulevad, moodustuvad uued meeskonnad. Oleme avastanud oma domeenis mitu teenust, mis on meile pĂ€randiks jÀÀnud. MĂ”ned tulid teiste meeskondade arendajatelt, mĂ”ned olid lihtsalt kuidagi seotud Koti teenusega, seetĂ”ttu on teenus nĂŒĂŒd meie bilansis. Miks uurida, mis ja kuidas töötab? Teenus ju töötab ning meil on toote funktsioonid, mida peab kindlasti vĂ€ljatöötama.

Nagu ikka

Aga mingil hetkel avastame, et teenus lĂ”petab oma funktsiooni, midagi on katki — kuidas sellises olukorras kĂ€ituda? Teenus lihtsalt ei tööta. Üldse. Ja me saime sellest teada, esiteks juhuslikult ja teiseks, poole aasta pĂ€rast. Nii juhtub. Ainus, mida me teadsime, oli see, millistel virtuaalmasinatel teenus töötab, kus on selle lĂ€htekood ja kĂ”ik. Teeme git clone'i ja sukeldume inimese mĂ”tetesse, kes kirjutas seda paar aastat tagasi, aga mida me nĂ€eme? Ühtegi tuttavat Spring Boot'i, kuigi oleme kĂ”igega harjunud, meil on ju full stack ja kĂ”ik selline. VĂ”ib-olla seal on Spring Framework? Aga ei ole.

Poiss, kes kĂ”ike seda kirjutas, oli karm ja kirjutas kĂ”ik puhtas Java's. Arendaja tuttavaid tööriistu ei ole ja viskub mĂ”te — peaksime selle kĂ”ik ĂŒmber kirjutama. Meil on ju mikroteenused ja igaelt röstsaiast kostab tuttav „Poisid, mikroteenused on see, mida te vajate!”. Kui midagi lĂ€heb valesti, vĂ”ite rahulikult vĂ”tta mis tahes keele ja kĂ”ik lĂ€heb suurepĂ€raselt.

KĂŒsimus on selles, et praegu pole meil tellijat, kes vastutab selle teenuse eest. Millised olid tema Ă€ri nĂ”uded, mida see teenus peaks ĂŒldse tegema? Ja teenus on tihedalt integreeritud teie Ă€ri protsessidesse.

Ja nĂŒĂŒd ĂŒtlege, kui lihtne oleks teenust ĂŒmber kirjutada, teadmata selle Ă€ri nĂ”udeid? Teenuse logimine on arusaamatu, kas mÔÔdikud on olemas — pole teada. Millised need on, kui olemas — veelgi vĂ€hem on teada. Ja samas on teenuses tohutu hulk arusaamatut Ă€ri loogikat. Midagi siseneb andmebaasi, millest me samuti praegu midagi ei tea.

Kust alustada?

KĂ”ige loogilisemast — testide olemasolust. Seal on tavaliselt kirjas vĂ€hemalt mingi loogika ja saab teha jĂ€reldusi selle kohta, mis toimub. Praegu on moes TDD, kuid me nĂ€eme, et viis aastat tagasi oli kĂ”ik peaaegu sama, mis nĂŒĂŒd: ĂŒksuste teste on peaaegu mitte ja need ei ĂŒtle meile tegelikult midagi. No, vĂ€lja arvatud ehk mĂ”ne kontrolli kohta, kuidas mingi xml millegagi kinnitatud sertifikaadiga allkirjastatakse.

Koodi pĂ”hjal ei olnud midagi aru saada, ja me pidime minema vaatama, mis seal virtuaalkeskkonnas toimub. Avastasime teenuse logidest http-klienti puudutava vea, ise allkirjastatud sertifikaadi, mis oli rakenduse ressurssidesse sisse kodeeritud, oli hĂ€bi pĂ€rast aegunud. VĂ”tsime ĂŒhendust meie analĂŒĂŒtikutega, nad palusid uut sertifikaati, mis vĂ€ljastati ja teenus töötab jĂ€lle. Tundub, et sellega on kĂ”ik. VĂ”i siiski? Teenus töötab, tĂ€idab mingit funktsiooni, mis on meie Ă€ri jaoks vajalik. Meil on teatud rakenduste arendamise standardid, mis tĂ”enĂ€oliselt on ka teil. NĂ€iteks ei tohiks logisid node’is kaustas hoida, vaid mingis ladustamises, nagu nĂ€iteks Elasticsearchis, ja vaadata neid Kibana kaudu. Saame meenutada ka kuldsete mÔÔdikute olemust. See tĂ€hendab teenusele avaldatud koormust, teenusele tehtud pĂ€ringute arvu, kas see on elujĂ”uline, ja kuidas tervisekontrollid lĂ€bivad. Igatahes aitavad need mÔÔdikud teada saada, millal saab selle rahulikult kasutusest vĂ€lja vĂ”tta ja unustada kui halva une.

Mida teha

SeetĂ”ttu lisame sellise vana teenuse tabelisse ja seejĂ€rel otsime arendajate seast vabatahtlikke, kes teenuse korda teevad: kirjutavad teenuse kohta vĂ€hemalt mingid andmed, lisavad lingid Grafana armatuurlaudadele, ehitusĂŒlesannetele, selgitavad, kuidas rakendust kĂ€ivitada, ei ole ju mĂ”tet FTP kaudu faile kĂ€sitsi ĂŒles laadida.

Oluline on, kui palju aega see kogu kasulik vabatahtlik tegevus vĂ”tab? Üks sprind kogenud arendajale, nĂ€iteks 20% tehnilise vĂ”laga. Aga kui palju aega kulus kogu sĂŒgava loogika mĂ”istmiseks, et suhelda mingi riikliku sĂŒsteemiga ja tuua see uuemate tehnoloogiate juurde? Ma ei garanteeri, vĂ”ib-olla lĂ€heb kuu, vĂ”ib-olla isegi kaks meeskonna tööd. Seda rÀÀgin ma praeguse aja integratsiooni kogemuse pĂ”hjal mĂ”ne uue teenusega.

Kuid ÀrivÀÀrtuse vÀljund on null. Absoluutselt. Teenuse toetamine ja sellele natuke aega kulutamine on normaalne. Kuid pÀrast meie tavalisi teenuseprotseduure lisasime selle tabelisse, tÀiendasime teavet selle kohta ja vÔib-olla kirjutame kunagi uuesti. Praegu vastab see meie teenuse tööstandarditele.

KokkuvÔtteks tahaksin vÀlja tuua plaani, mida teha pÀrandteenustega.

PĂ€randi nullist ĂŒmberkirjutamine on halb idee.
TÔsiselt, sellele ei tasu isegi mÔelda. On selge, et seda tahaks ja mÔned plussid paistavad silma, kuid tavaliselt ei ole see kellelegi vajalik, sealhulgas teile endale.

KĂ€sitegevus
Kaevake vĂ€lja oma rakenduste lĂ€htekoodid, koostage kĂ€siraamat, milles on kirjas, mis ja kus asub ning kuidas see töötab; sinna kirjutage ka projekti kirjeldus (tingimuslik readme.md), et kiiresti aru saada, kus on logid ja mÔÔdikud. Arendaja, kes teiega pĂ€rast seda tegelema hakkab, ĂŒtleb aitĂ€h.

MÔistke domeeni
Kui teil on mĂ”ni domeen, siis pĂŒĂŒdke hoida end kursis. See kĂ”lab banaalselt, kuid mitte kĂ”ik ei jĂ€lgi, et teenused oleksid ĂŒhte moodi. Olles ĂŒhes standardis, on tĂ”epoolest palju lihtsam töötada.

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

Mida te teete oma legacy'ga?

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

  • 52.6%Peaaegu sama, mis teie20

  • 10.5%Meil pole legacy't, me oleme tublid4

  • 5.2%Kirjutan kommentaaridesse2

HÀÀletas 38 kasutajat. Olid erapooletud 20 kasutajat.

Allikas: habr.com

Osta usaldusvÀÀrne veebihosting DDoS kaitsega, VPS VDS serverid đŸ”„ Osta usaldusvÀÀrne veebihosting DDoS kaitsega, VPS VDS serverid | ProHoster