Tere! Minu nimi on Vadim Madison, juhin Avito System Platformi arendust. Oleme korduvalt rÀÀkinud, kuidas meie ettevĂ”te liigub monoliitsest arhitektuurist mikroteenuste arhitektuuri. On aeg jagada, kuidas me oma infrastruktuuri ĂŒmber olen muutnud, et mikroteenustest maksimaalset kasu saada ja end neisse Ă€ra ei kaotada. Kuidas aitab meil siin PaaS, kuidas me oleme juurutamise lihtsamaks muutnud ja vĂ€hendanud mikroteenuse loomise ĂŒhe klikiga â loe edasi. Mitte kĂ”ik, millest ma allpool kirjutan, ei ole Avitos tĂ€ies mahus teostatud; osa on see, kuidas me oma platvormi arendame.
(Ja veel, artikli lÔpus rÀÀgin ma vÔimalusest osaleda kolme pÀeva seminaril mikroteenuste arhitektuuri eksperdi Chris Richardsona poolt).

Kuidas me mikroteenustele jÔudsime
Avito on ĂŒks maailma suurimaid klassifitseeritud kuulutuste portaale, kus avaldatakse ĂŒle 15 miljoni uue kuulutuse pĂ€evas. Meie taga on rohkem kui 20 000 pĂ€ringut sekundis. Praegu on meil mitusada mikroteenust.
Mikroteenuste arhitektuuri oleme vĂ€lja arendanud juba mitu aastat. Kuidas tĂ€pselt â meie kolleegid rÀÀgivad detailselt meie sessioonil RIT++ 2017. CodeFest 2017-l (vt. ), selgitasid Sergei Orlov ja Mihhail Prokopchuk pĂ”hjalikult, miks me ĂŒldse vajame ĂŒleminekut mikroteenustele ja millist rolli siin mĂ€ngis Kubernetes. NĂŒĂŒd teeme kĂ”ik, et minimeerida neid skaleerimise kulusid, mis sellisele arhitektuurile on iseloomulikud.
Alguses ei loonud me ökosĂŒsteemi, mis aitaks meid laiapindsetes mikroteenuste arenduses ja juurutamises. Kogusime lihtsalt kokku head avatud lĂ€htekoodiga lahendused, kĂ€ivitasime need ja pakkusime arendajatele, et nad nendega tutvuksid. LĂ”ppkokkuvĂ”ttes kĂ€is arendaja kĂŒmnes kohas (juhtpaneelid, siseteenused) ja kindlustas end sooviga kirjutada koodi vanamoodsalt, monoliidis. Allpool olevatel skeemidel on rohelise vĂ€rviga tĂ€histatud see, mida arendaja mingil viisil oma kĂ€tega teeb, kollase vĂ€rviga â automatiseerimise.

Praegu PaaSi CLI-utilitys piisab ĂŒhe kĂ€su kirjutamisest, et luua uus teenus, ja kahe kĂ€suga lisatakse uus andmebaas ja juurutatakse Stage'isse.

Kuidas ĂŒletada "mikroteenuste killustatuse" ajastu
Monoliitsetehnikas, tootmisprotsessi muutuste ĂŒhtsuse nimel olid arendajad sunnitud aru saama, mis naabrite juures toimub. Uue arhitektuuri kasutamisel ei sĂ”ltu teenuste kontekstid enam ĂŒksteisest.
Lisaks on mikroteenuste arhitektuuri tÔhusaks toimimiseks vajalik luua palju protsesse, nimelt:
âą logimine;
⹠pÀringute jÀlgimine (Jaeger);
âą vigade agregaator (Sentry);
âą olekud, sĂ”numid, sĂŒndmused Kubernetesest (Event Stream Processing);
âą race limit / circuit breaker (saab kasutada Hystrix);
âą teenuste seotuse kontroll (kasutame Netramesh'i);
âą monitooring (Grafana);
âą kogumine (TeamCity);
âą suhtlemine ja teavitamine (Slack, e-post);
âą ĂŒlesannete jĂ€lgimine (Jira);
âą dokumentatsiooni koostamine.
Kuna skaleerimise kĂ€igus ei tohi sĂŒsteem kaotada oma terviklikkust ega lakkata olemast tĂ”hus, oleme ĂŒmber mĂ”elnud mikroteenuste korralduse Avitos.
Kuidas me mikroteenustega toime tuleme
Ăhtset âparteipoliitikatâ mitmete Avito mikroteenuste vahel hoiavad:
- infrastruktuuri kihistamine;
- Platform as a Service (PaaS) kontseptsioon;
- kogu, mis mikroteenustega juhtub, jÀlgimine.
Infrastruktuuri abstraktsioonitasemed hĂ”lmavad kolme kihti. Liigume ĂŒlespoole madalamale.
A. Ălemine â service mesh. Alguses ĂŒritasime Istio't, kuid see kasutas liiga palju ressursse, mis meie mastaabiga osutus liiga kalliks. SeetĂ”ttu töötas arhitektuuri meeskonna vaneminsener Aleksandr LukjanÄenko vĂ€lja oma lahenduse â (saadaval avatud koodina), mida me praegu tootmises kasutame ja mis tarbib mitmeid kordi vĂ€hem ressursse kui Istio (aga ei tee kĂ”ike, millega Istio uhkeldada saab).
B. Keskmine â Kubernetes. Sel korraldame ja kasutame mikroteenuseid.
C. Alumine â bare metal. Me ei kasuta pilvi ega OpenStacki, vaid toimime tĂ€ielikult bare metal'il.
KĂ”iki kihte ĂŒhendab PaaS. Ja see platvorm koosneb omakorda kolmest osast.
I. Generaatorid,mida hallatakse CLI-utility kaudu. Just see aitab arendajal luua mikroteenuse Ôigesti ja minimaalse vaevaga.
II. Kogumiskollektor, mille kaudu kontrollitakse kĂ”iki tööriistu ĂŒhiselt juhtpaneelist.
III. Ladustamine.. Integratsioon on vĂ”imalik planeerijatega, mis automaatselt seadistavad kĂ€ivitajaid oluliste tegevuste jaoks. Selle sĂŒsteemi abil ei jÀÀ ĂŒkski ĂŒlesanne tĂ€helepanuta lihtsalt seetĂ”ttu, et keegi unustas endale Jira'sse ĂŒlesande seada. Selleks kasutame sisemist tööriista nimega Atlas.

Mikroteenuste rakendamine Avitos toimub samuti ĂŒhtse skeemi jĂ€rgi, mis lihtsustab nende ĂŒle kontrolli teostamist igas arenduse ja vĂ€ljalaske etapis.
Kuidas on struktureeritud mikroteenuse arenduse tavaline voog.
Ăldiselt nĂ€eb mikroteenuse loomise ahel vĂ€lja jĂ€rgmiselt:
CLI-push â JĂ€tkuv Integratsioon â KĂŒpsetamine â Rakendamine â Kunstlikud testid â Canary-testid â Squeeze Testimine â Tootmine â Ăksikasjalik hooldus.
Liigume selle lÀbi tÀpselt sellises jÀrjestuses.
CLI-push
âą Mikroteenuse loomine.
Me oleme kaua vaeva nĂ€inud selle nimel, et Ă”petada iga arendajat mikroteenuseid looma. Sealhulgas oleme kirjutanud Confluence'is ĂŒksikasjalikke juhiseid. Kuid skeemid muutusid ja tĂ€iendusid. Tulemuseks â pudelikael tekkis teekonna alguses: mikroteenuste kĂ€ivitamiseks kulus oluliselt rohkem aega, kui oleks tohtinud, ja nende loomisel tekkis sageli probleeme.
LÔpuks ehitasime vÀlja lihtsa CLI-utility, mis automatiseerib peamised sammud mikroteenuse loomisel. Tegelikult asendab see esimest git push'i. Siin on, mida see tÀpselt teeb.
â Loob teenuse mallide alusel â samm-sammult, 'vĂ”luri' reĆŸiimis. Meil on mallid peamiste programmeerimiskeelte jaoks Avito tagaplaanis: PHP, Golang ja Python.
â Ăhe kĂ€suga seadistab kohaliku arenduse keskkonna konkreetsel masinal â Minikube tĂ”useb, Helm-graafikud genereeritakse ja kĂ€ivitatakse automaatselt kohalikus k8s.
â Ăhendab vajaliku andmebaasi. Arendajatel ei ole vaja teada IP-aadressi, kasutajanime ja parooli, et pÀÀseda vajalikku andmebaasi â sĂ”ltumata sellest, kas see on kohalik, lavaline vĂ”i tootmises. Lisaks seotakse andmebaas kohe talitlushĂ€irete kindel ja koormuse jaotamisega.
â TĂ€idab ise live-kogumise. Oletame, et arendaja korrigeeris midagi mikroteenuses oma IDE's. Tööriist tuvastab muudatused failisĂŒsteemis ja nende alusel koostab rakenduse uuesti (Golang jaoks) ja kĂ€ivitab selle. PHP puhul edastame lihtsalt kausta kubisse ja seal toimub live-reload âautomaatseltâ.
â Genereerib automaatse testimise. Kuigi need on vaid mallid, on need siiski kasutamiseks tĂ€iesti sobivad.
âą Mikroteenuse juurutamine.
Mikroteenuse juurutamine oli varem veidi piinav. Selleks, et see toimiks, nÔudis see kohustuslikult:
I. Dockerfile.
II. Konfiguratsioon.
III. Helm-chart, mis on iseenesest mahukas ja sisaldab:
â chart'id;
â mallid;
â spetsiifilised vÀÀrtused erinevate keskkondade jaoks.
Oleme vabanenud Kubernetes'e manifesteerimise vaevast ja need genereeritakse nĂŒĂŒd automaatselt. Kuid kĂ”ige tĂ€htsam on, et oleme juurutamist oluliselt lihtsustanud. NĂŒĂŒd on meil Dockerfile ja kogu konfiguratsioon, mida arendaja peab kirjutama, on ĂŒhes lĂŒhikeses failis app.toml.

Ja isegi app.toml-is on nĂŒĂŒd tegemist minutiga. Kirjutame, kui palju teenuse koopiaid tĂ”sta (dev-serveris, stagingus, tootmises) ja mÀÀrame selle sĂ”ltuvused. Pange tĂ€hele rida size = "small" plokis [engine]. See on piirang, mis antakse teenusele Kubernetes'e kaudu.
SeejĂ€rel, lĂ€htudes konfiguratsioonist, genereeritakse automaatselt kĂ”ik vajalikud Helm-charti ja luuakse ĂŒhendused andmebaasidega.
⹠PÔhi valideerimine. Sellised kontrollimised on samuti automatiseeritud.
On vaja jÀlgida:
â kas Dockerfile on olemas;
â kas app.toml on olemas;
â kas dokumentatsioon on olemas;
â kas sĂ”ltuvused on korras;
â kas alert-reeglid on seatud.
Viimase punkti kohta: teenuse omanik mÀÀrab, milliseid toote mÔÔdikuid jÀlgida.
âą Dokumentatsiooni ettevalmistamine.
See on endiselt probleemne koht. Tundub, et see on kÔige ilmsem, kuid samas ka rekordiliselt 'tihti unustatav', mis tÀhendab, et see on nÔrk link ahelas.
Oluline on, et dokumentatsioon oleks iga mikroteenuse jaoks. See sisaldab jÀrgmisi osasid.
I. Teenuse lĂŒhikirjeldus. Ăksnes paar lauset selle kohta, mida see teeb ja milleks see vajalik on.
II. Link arhitektuuri diagrammile. Oluline on, et pilgu heites oleks lihtne mĂ”ista, kas kasutate Redis't vahetuks vĂ”i peamiseks andmehoidmiseks pĂŒsivas reĆŸiimis. Avitos on see endiselt link Confluence'i.
III. Runbook. LĂŒhike juhend teenuse kĂ€ivitamise ja selle kĂ€sitsemise nĂŒansside kohta.
IV. KKK, kus on hea ennetada probleeme, millega teie kolleegid teenusega töötades silmitsi vÔivad seista.
V. API lÔpp-punktide kirjeldus. Kui te ei ole sihtkohti mÀÀranud, peavad selle eest peaaegu kindlasti maksma kolleegid, kelle mikroteenused on teie omadega seotud. Praegu kasutame selleks Swaggerit ja meie lahendust nimega brief.
VI. Silte. VĂ”i mĂ€rgid, mis nĂ€itavad, millise toote, funktsionaalsuse vĂ”i ettevĂ”tte struktuuriĂŒksusega teenus on seotud. Need aitavad kiiresti aru saada, nĂ€iteks, kas te ei tööta vĂ€lja funktsionaalsust, mille teie kolleegid nĂ€dal tagasi samale Ă€riĂŒksusele toimetasid.
VII. Teenuse omanik vÔi omanikud. Enamikul juhtudel on PaaS-i abil seda vÔimalik automaatselt mÀÀrata, kuid igaks juhuks nÔuame arendajalt nende kÀsitsi mÀÀramist.
LĂ”puks on hea praktika lĂ€bi viia dokumentatsiooni ĂŒlevaatus, sarnaselt koodi ĂŒlevaatusele.
Continuous Integration
- Repo valmistamine.
- Pipeline'i loomine TeamCity-s.
- Ăiguste mÀÀramine.
- Teenuse omanike leidmine. Siin on hĂŒbriidskeem - kĂ€sitsi mĂ€rgistamine ja minimaalne automatiseerimine PaaS-ilt. TĂ€iesti automaatne skeem ebaĂ”nnestub teenuste ĂŒlemisel toe andmisele teisele arendustiimile vĂ”i kui nĂ€iteks teenuse arendaja lahkub.
- Teenuse registreerimine Atlas'is (vt eespool). KÔigi selle omanike ja sÔltuvustega.
- Migratsioonide kontrollimine. Kontrollime, kas nende seas on potentsiaalselt ohtlikke. NĂ€iteks, kui ĂŒhes neist ilmneb alter table vĂ”i midagi muud, mis vĂ”ib rikkuda andmeskeemide ĂŒhilduvust eri teenuse versioonide vahel. Sel juhul migratsiooni ei tehta, vaid see pannakse tellimisse - PaaS peab signaalima teenuse omanikule, kui on ohutu see rakendada.
Bake
JĂ€rgmine etapp on teenuste pakkimine enne juurutamist.
- Rakenduse koostamine. Klassikaliselt - Docker-imagiks.
- Helm-chartide genereerimine teenuse ja sellega seotud ressursside jaoks. Sealhulgas andmebaaside ja vahemÀlu jaoks. Need genereeritakse automaatselt vastavalt sellele konfigureerimisele app.toml, mis moodustati CLI-push'i etapis.
- Pileti loomineadministraatoritele portide avamiseks (kui see on vajalik).
- Ăksustestide lĂ€biviimine ja koodi katvuse arvestamine. Kui koodi katvus jÀÀb alla mÀÀratud lĂ€vevÀÀrtuse, ei pruugi teenus tĂ”enĂ€oliselt edaspidi deploy'i lĂ€bida. Kui see on lubatud piiril, antakse teenusele «pessimistlik» koefitsiend, mis tĂ€hendab, et aja jooksul, kui nĂ€itaja ei parane, saab arendaja teate, et testimise osas pole edusamme (ja midagi tuleks sellega teha).
- MĂ€lu ja CPU piirangute arvestamine. Peamiselt kirjutame mikroteenuseid Golangi keeles ja kĂ€ivitame neid Kuberneteses. Sealt tuleneb ĂŒks nĂŒanss, mis on seotud Golangi keele omadustega: vaikimisi kasutatakse masina kĂ”ik tuumad, kui muutujat GOMAXPROCS selgelt ei seadistata, ja kui ĂŒhel masinal kĂ€ivitatakse mitu sellist teenust, hakkavad nad omavahel ressursse konkureerima, takistades ĂŒksteist. Allolevates graafikutes on nĂ€idatud, kuidas tĂ€itmisaja muutumine sĂ”ltub rakenduse kĂ€ivitamisest ilma konkurentsita ja ressursside vĂ”istlusreĆŸiimis. (Graafikute allikakoodid asuvad ).
TÀitmisaeg, vÀhem on parem. Maksimum: 643ms, miinimum: 42ms. Foto on klikitav.
Tegevuse aeg, vÀhem on parem. Maksimum: 14091 ns, miinimum: 151 ns. Foto on klikitav.
Kogumise ettevalmistamise etapis saab seda muutujat selgelt seada vÔi kasutada raamatukogu Uberi meeskonnalt.
KĂ€ivitamine
⹠Konventsioonide kontrollimine. Enne, kui alustame teenuse koguste kohaletoimetamist planeeritud keskkondadesse, tuleb kontrollida jÀrgmist:
â API lĂ”pp-punktid.
â API lĂ”pp-punktide vastuste vastavus skeemile.
â Logide formaat.
â Pealkirjade seadmine teenusele esitatavates pĂ€ringutes (hetkel teostab seda netramesh)
â Omaniku mĂ€rgi seadmine sĂ”numite saatmisel bussile (event bus). See on vajalik teenuste seotuse jĂ€lgimiseks bussi kaudu. Bussile saab saata nii idempotentseid andmeid, mis ei suurenda teenuste seotust (mis on hea), kui ka Ă€rilisi andmeid, mis seotust suurendavad (mis on vĂ€ga halb!). Ja hetkel, kui see seotus muutub probleemiks, aitab arusaam sellest, kes kirjutab ja loeb bussi, teenuseid Ă”igesti jagada.
Praegu ei ole Avitos konventsioone eriti palju, kuid nende hulk suureneb. Mida rohkem selliseid kokkuleppeid on tiimi arusaadavas ja mugavas vormis, seda lihtsam on sÀilitada laste teenuste vahel.
SĂŒnteetilised testid
⹠Testimine suletud kontuuris. Selle jaoks kasutame praegu avatud lÀhtekoodiga Esiteks salvestab ta teenuse reaalse koormuse, seejÀrel simulatsioonib seda suletud ringis.
âą Koormustestimine. PĂŒĂŒame kĂ”ik teenused viia optimaalsele jĂ”udlusele. Ja kĂ”ikide teenuse versioonide peavad lĂ€bima koormustestimise â nii saame aru teenuse hetkejĂ”udlusest ja erinevusest selle eelnevate versioonidega. Kui teenuse jĂ”udlus pĂ€rast uuendust kukub poole vĂ”rra, on see selge signaal selle omanikele: tuleb sĂŒveneda koodi ja olukorraga tegeleda.
Kogutud andmete pĂ”hjal nĂ€iteks lĂ€htume, et korralikult ellu viia auto skaleerimine ja lĂ”puks ĂŒldiselt mĂ”ista, kui hĂ€sti teenus skaleerub.
Koormustestimise kÀigus kontrollime, kas ressursikasutuse tase vastab seatud piirangutele. Keskendume eelkÔige ÀÀrmuslikele olukordadele.
a) Vaatame ĂŒldist koormust.
â Kui koormus on liiga madal, ei toimi tĂ”enĂ€oliselt miski, kui koormus ĂŒhtĂ€kki langeb mitu korda.
â Kui koormus on liiga suur, on vajalik optimeerimine.
b) Vaatame RPSi piiri.
Siin vaatame nii praeguse versiooni ja eelneva vahet ning ĂŒldist arvu. NĂ€iteks, kui teenus annab 100 rps â siis on see kas halvasti kirjutatud vĂ”i on see tema eripĂ€ra, aga igal juhul on see pĂ”hjus, miks teenusele vĂ€ga tĂ€helepanelikult lĂ€heneda.
Kui RPS on aga liiga kÔrge, siis vÔib-olla on mingi viga ja mÔni lÔpp-punkt on lÔpetanud kasuliku koormuse tÀitmise ja kÀivitub lihtsalt mingil kujul. return true;
Canary-testid
PĂ€rast sĂŒnteetiliste testide lĂ€bimist katsetame mikroteenuse tööd vĂ€ikese kasutajate arvuga. Alustame ettevaatlikult, vĂ€ga vĂ€ikese osaga teenuse eeldatavast publikust â vĂ€hem kui 0,1%. Sel etapil on vĂ€ga oluline, et jĂ€lgimises oleksid Ă”iged tehnilised ja toote-mÔÔdikud, et need vĂ”imalikult kiiresti nĂ€itaksid teenuse probleemi. Minimene canary-testi aeg on 5 minutit, peamine â 2 tundi. Tasakaalustatud teenuste puhul seame aja kĂ€sitsi.
AnalĂŒĂŒtime:
â keeletehnilised mÔÔdikud, eelkĂ”ige php-fpm töötajad;
â vead Sentrys;
â vastuste olekud;
â vastuste aeg (response time), tĂ€pne ja keskmine;
â latentsus;
â töödeldud ja töötlemata erandid;
â tootemÔÔdikud.
Squeeze Testing
Squeeze-teste nimetatakse ka "vĂ€ljatĂ”uketestimiseks". Meetodi nimetus ilmus Netflixis. Selle olemus on see, et esmalt tĂ€idame reaalse liiklusega ĂŒhe instantsi kuni rikkeolukorrani ja sel viisil kindlaks mÀÀrame selle piiri. SeejĂ€rel lisame veel ĂŒhe instantsi ja koormame neid koos - uuesti maksimaalselt; nĂ€eme nende lae ja erinevust esimese "squeeze'i" vahel. Nii liidame ĂŒhe instantsi korraga ja arvutame muutuste seaduspĂ€rasuse.
Andmed "vĂ€ljatĂ”uketestimise" kohta kogunevad samuti ĂŒldisesse meetrikate baasi, kus me rikastame nendega neid kunstlikke koormusi, vĂ”i asendame nendega "sĂŒnteetika" tĂ€ielikult.
Tootmine
⹠Skaalautumine. Teenuse tootmisse viies jÀlgime, kuidas see skaleerub. Ainult CPU nÀitajaid jÀlgida ei ole meie kogemuste pÔhjal efektiivne. Auto scaling koos RPS benchmark'iga puhtal kujul töötab, kuid ainult eriteenuste jaoks, nÀiteks veebivoo teenuse jaoks. SeetÔttu vaatame esmalt rakendusele iseloomulikke tootenÀitajaid.
KokkuvĂ”ttes analĂŒĂŒsime skaleerimise kĂ€igus:
â CPU ja RAM nĂ€itajaid,
â jĂ€rjekorras olevate pĂ€ringute arvu,
â reageerimisaega,
â prognoosi, mis pĂ”hineb akumuleeritud ajaloolistel andmetel.
Teenuse skaleerimise ajal on samuti oluline jĂ€lgida selle sĂ”ltuvusi, et mitte juhtuda nii, et skaleerime esimest teenust ahelas, samal ajal kui need, millele see tugineb, kukuvad koormuse all. VastuvĂ”etava koormuse mÀÀramiseks kogu teenuste grupile vaatame ajaloolisi andmeid "lĂ€hedasest" sĂ”ltuvast teenusest (kombineeritud CPU ja RAM nĂ€itajate ning rakenduse spetsiifiliste nĂ€itajate jĂ€rgi) ja seome need algse teenuse ajalooliste andmete, ja nii edasi kogu "sĂ”ltuvuste ahelas", ĂŒlevalt alla.
Hooldus
PÀrast mikroteenuse kasutusele vÔtmist saame sellele siduda kÀivitajaid.
Siin on tĂŒĂŒpilised olukorrad, kus kĂ€ivitajad aktiveeruvad.
â Tuletati potentsiaalselt ohtlikud migratsioonid.
â Turvauuendusi on vĂ€lja lastud.
â Teenust pole pikka aega uuendatud.
â Teenuse koormus on oluliselt vĂ€henenud vĂ”i mĂ”ni tema tootenĂ€itajatest ĂŒletab normi.
â Teenus ei vasta enam platvormi uutele nĂ”uetele.
MĂ”ned trigerid vastutavad sĂŒsteemi stabiilsuse eest, teised - nagu sĂŒsteemi hooldusfunktsioon - nĂ€iteks kui mĂ”ni teenus pole pikka aega vĂ€lja lastud ja selle baaspilt enam turvaskanke ei lĂ€bi.
Armatuurlaud
LĂŒhidalt öeldes on juhtpaneel meie PaaSi juhtimiskeskus.
- Ăksnes teave teenuse kohta, sealhulgas testimise katvuse, selle piltide arvu, tootmiseksemplaride arvu, versioonide jne andmed.
- Andmete filtreerimise tööriist teenuste ja labels (Ă€rikĂŒsimuste, toote funktsionaalsuse jne) jĂ€rgi.
- Integreerimise tööriist infrastruktuuri tööriistadega jÀlgimise, logimise ja monitooringu jaoks.
- Ăksnes teenuste dokumentatsiooni koht.
- Ăksnes teenuste sĂŒndmuste ĂŒlevaate koht.




KokkuvÔttes
PĂ€rast PaaSi rakendamist vĂ”is uus arendaja kulutada mitu nĂ€dalat, et mĂ”ista kĂ”iki tööriistu, mis olid vajalikud mikroteenuse tootmisse toomiseks: Kubernetes, Helm - meie sisemiste omaduste, TeamCity, andmebaaside ja vahemĂ€lude usaldusvÀÀrse ĂŒhenduse konfigureerimine jne. NĂŒĂŒd kulub selleks paar tundi - lugeda kiire alguse juhend ja luua ise teenus.
Ma tegin sellest teemast ettekande HighLoad++ 2018, seda saab vaadata. ja .
Boonusloend neile, kes on lÔpuni lugenud.
Meie Avitos korraldame arendajatele kolme pÀeva jooksul toimuva sisekoolituse. , mikroteenuste arhitektuuri eksperdilt. Soovime pakkuda kellegile sellest postitusest osalemisvÔimalust. Koolituse programmi on vÀlja pandud.
Koolitus toimub 5.-7. august Moskvas. Need on tööpÀevad, mis on tÀielikult hÔivatud. LÔuna ja koolitus toimuvad meie kontoris, kuid valitud osaleja maksab enda transpordi ja majutuse ise.
Osalemiseks saate taotluse esitada . Teilt oodatakse vastust kĂŒsimusele, miks just teile on vaja koolitusele tulla, ja teavet, kuidas teiega ĂŒhendust vĂ”tta. Vastake inglise keeles, sest valitud osalejat valib Kris ise.
Teatame koolituse osaleja nime selle postituse uuendusega ja Avito arendajatele mÔeldud sotsiaalmeedias (AvitoTech Facebookis , , ) hiljemalt 19. juuliks.
Allikas: habr.com
