Ho tloha ho lingoliloeng ho ea sethaleng sa rona: kamoo re iketselitseng nts'etsopele ho CIAN

Ho tloha ho lingoliloeng ho ea sethaleng sa rona: kamoo re iketselitseng nts'etsopele ho CIAN

Ho RIT 2019, mosebetsi-'moho le rona Alexander Korotkov o entse tlaleha mabapi le ho iketsetsa nts'etsopele ho CIAN: ho nolofatsa bophelo le mosebetsi, re sebelisa sethala sa rona sa Integro. E latela potoloho ea bophelo ba mesebetsi, e imolla baetsi ba ts'ebetso e tloaelehileng mme e fokotsa haholo palo ea likokoana-hloko tlhahisong. Ka poso ena, re tla tlatsa tlaleho ea Alexander mme re u bolelle hore na re tlohile joang ho tloha ho lingoliloeng tse bonolo ho ea ho kopanya lihlahisoa tsa mohloli o bulehileng ka sethala sa rona le seo sehlopha sa rona se ikemetseng se se etsang.
 

Boemo ba Zero

"Ha ho na ntho e kang ea zero, ha ke tsebe ntho e joalo"
Master Shifu ho tsoa filiming "Kung Fu Panda"

Automation ho CIAN e qalile lilemo tse 14 kamora hore k'hamphani e thehoe. Ka nako eo ho ne ho e-na le batho ba 35 sehlopheng sa ntlafatso. Ho thata ho lumela, na? Ehlile, li-automation li ne li le teng ka mokhoa o itseng, empa tataiso e arohaneng bakeng sa kopanyo e tsoelang pele le phano ea khoutu e qalile ho hlaha ka 2015. 

Ka nako eo, re ne re e-na le monolith e kholo ea Python, C # le PHP, e sebelisoang ho li-server tsa Linux / Windows. Ho tsamaisa phoofolo ena ea tonanahali, re ne re e-na le sete ea lingoloa tseo re neng re li tsamaisa ka letsoho. Hape ho ne ho e-na le kopano ea monolith, e ileng ea tlisa bohloko le mahlomola ka lebaka la likhohlano ha ho kopanya makala, ho lokisa mefokolo, le ho haha ​​bocha “ka lihlopha tse fapaneng tsa mesebetsi mohahong.” Mokhoa o nolofalitsoeng o ne o shebahala tjena:

Ho tloha ho lingoliloeng ho ea sethaleng sa rona: kamoo re iketselitseng nts'etsopele ho CIAN

Ha rea ​​ka ra thabela sena, 'me re ne re batla ho haha ​​​​mohaho o phetoang, o ikemetseng le o laolehang le mokhoa oa ho tsamaisa. Bakeng sa sena, re ne re hloka tsamaiso ea CI / CD, 'me re ile ra khetha pakeng tsa mofuta oa mahala oa Teamcity le phetolelo ea mahala ea Jenkins, kaha re ne re sebetsa le bona' me ka bobeli ba ne ba re tšoanela ho latela sete sa mesebetsi. Re khethile Teamcity e le sehlahisoa sa morao-rao. Ka nako eo, re ne re e-so sebelise meralo ea microservice mme re ne re sa lebella palo e kholo ea mesebetsi le merero.

Re tla mohopolong oa sistimi ea rona

Ts'ebetsong ea Teamcity e tlositse karolo feela ea mosebetsi oa matsoho: se setseng ke ho thehoa ha Pull Requests, ho phahamisa litaba ka boemo ba Jira, le khetho ea litaba bakeng sa ho lokolloa. Sistimi ea Teamcity ha e sa khona ho sebetsana le sena. Ho ne ho hlokahala hore u khethe tsela ea othomathike e eketsehileng. Re nahanne ka likhetho tsa ho sebetsa ka mangolo ho Teamcity kapa ho fetohela ho litsamaiso tsa boiketsetso tsa motho oa boraro. Empa qetellong re ile ra etsa qeto ea hore re hloka ho tenyetseha ho hoholo, e leng tharollo ea rona feela e ka fanang ka eona. Ke kamoo mofuta oa pele oa sistimi e ikemetseng e bitsoang Integro e hlahileng.

Teamcity e sebetsana le boits'oaro boemong ba ho qala ts'ebetso ea ho aha le ho tsamaisa, ha Integro e tsepamisitse maikutlo ho othomathike ea boemo bo holimo ea lits'ebetso tsa nts'etsopele. Ho ne ho hlokahala ho kopanya mosebetsi le litaba tsa Jira le ts'ebetso ea khoutu ea mohloli o amanang le Bitbucket. Mothating ona, Integro e ile ea qala ho ba le mokhoa oa eona oa ho sebetsa ka mesebetsi ea mefuta e fapaneng. 

Ka lebaka la keketseho ea boiketsetso lits'ebetsong tsa khoebo, palo ea merero le ts'ebetso ho Teamcity e eketsehile. Kahoo ho ile ha tla bothata bo bocha: mohlala o le mong oa mahala oa Teamcity o ne o sa lekana (mahlahana a 3 le merero e 100), re kentse mohlala o mong (mahlahana a mang a 3 le merero e 100), ebe o mong. Ka lebaka leo, re ile ra qetella re e-na le tsamaiso ea lihlopha tse 'maloa, tseo ho neng ho le thata ho li laola:

Ho tloha ho lingoliloeng ho ea sethaleng sa rona: kamoo re iketselitseng nts'etsopele ho CIAN

Ha potso ea mohlala oa 4 e hlaha, re ile ra hlokomela hore re ke ke ra tsoela pele ho phela joalo, hobane litšenyehelo tsohle tsa ho tšehetsa liketsahalo tsa 4 li ne li se li le ka har'a meeli leha e le efe. Potso e ile ea hlaha mabapi le ho reka Teamcity e lefuoang kapa ho khetha Jenkins ea mahala. Re ile ra etsa lipalo ka maemo le merero ea boiketsetso mme ra etsa qeto ea hore re tla lula ho Jenkins. Ka mor'a libeke tse 'maloa, re ile ra fetohela ho Jenkins' me ra felisa tse ling tsa hlooho e amanang le ho boloka maemo a mangata a Teamcity. Ka hona, re khonne ho tsepamisa maikutlo ho nts'etsopele ea Integro le ho iketsetsa Jenkins bakeng sa rona.

Ka kholo ea ho iketsetsa lintho tsa motheo (ka mokhoa oa ho iketsetsa likopo tsa Pull, ho bokella le ho phatlalatsoa ha Code coverage le licheke tse ling), ho na le takatso e matla ea ho tlohela litokollo tsa matsoho ka hohle kamoo ho ka khonehang le ho fana ka mosebetsi ona ho liroboto. Ntle le moo, k'hamphani e ile ea qala ho fallela ho li-microservices ka har'a k'hamphani, tse neng li hloka ho lokolloa khafetsa, le ka thoko ho tse ling. Ke kamoo butle-butle re ileng ra tla ho hlahisa li-microservices tsa rona (hajoale re lokolla monolith ka letsoho ka lebaka la ho rarahana ha ts'ebetso). Empa, joalo ka ha ho tloaelehile, ho ile ha hlaha bothata bo bocha. 

Re etsa tlhahlobo ea boiketsetso

Ho tloha ho lingoliloeng ho ea sethaleng sa rona: kamoo re iketselitseng nts'etsopele ho CIAN

Ka lebaka la tokollo ea lisebelisoa, lits'ebetso tsa nts'etsopele li potlakile, ka lebaka la ho tlola mekhahlelo e meng ea liteko. 'Me sena se ile sa lebisa tahlehelong ea nakoana ea boleng. E utloahala e le ntho e sa reng letho, empa hammoho le ho potlakisa ha litokollo, ho ne ho hlokahala hore ho fetole mokhoa oa ho ntlafatsa sehlahisoa. Ho ne ho hlokahala ho nahana ka boiketsetso ba tlhahlobo, ho kenya boikarabello ba motho (mona re bua ka "ho amohela mohopolo ka hlooho", eseng likotlo tsa lichelete) tsa moqapi bakeng sa khoutu e lokollotsoeng le likokoana-hloko ho eona, hammoho le qeto ea ho ho lokolla/ho se lokolle mosebetsi ka ho itsamaisa. 

Ho felisa mathata a boleng, re ile ra fihlela liqeto tse peli tsa bohlokoa: re ile ra qala ho etsa tlhahlobo ea canary mme ra hlahisa tlhahlobo e ikemetseng ea semelo sa phoso ka karabelo ea othomathike ho feteletseng ha eona. Tharollo ea pele e entse hore ho khonehe ho fumana liphoso tse totobetseng pele khoutu e lokolloa ka ho feletseng tlhahiso, ea bobeli e ile ea fokotsa nako ea ho arabela mathateng a tlhahiso. Ha e le hantle, liphoso lia etsahala, empa boholo ba nako le matla a rona re qeta nako e ngata re sa li lokise, empa re li fokotsa. 

Sehlopha sa Automation

Hajoale re na le basebetsi ba 130 ba ntlafatsang, 'me re ntse re tsoela pele hola. Sehlopha se tsoelang pele sa ho kopanya le ho fana ka khoutu (eo hamorao e tla bitsoa Deploy and Integration kapa DI team) e na le batho ba 7 'me e sebetsa ka litsela tse 2: nts'etsopele ea Integro automation platform le DevOps. 

DevOps e ikarabella bakeng sa tikoloho ea Dev/Beta ea sebaka sa CIAN, tikoloho ea Integro, e thusa bahlahisi ho rarolla mathata le ho hlahisa mekhoa e mecha ea ho fokotsa maemo. Tataiso ea ntlafatso ea Integro e sebetsana le Integro ka boeona le lits'ebeletso tse amanang le tsona, mohlala, li-plugins tsa Jenkins, Jira, Confluence, hape e nts'etsapele lisebelisoa tse thusang le likopo tsa lihlopha tsa nts'etsopele. 

Sehlopha sa DI se sebetsa ka kopanelo le sehlopha sa Platform, se nts'etsang meralo ea kaho, lilaeborari, le mekhoa ea ntlafatso kahare ho naha. Ka nako e ts'oanang, moqapi ofe kapa ofe ka hare ho CIAN a ka kenya letsoho ho iketsetsa, mohlala, ho etsa micro-automation ho lumellana le litlhoko tsa sehlopha kapa ho arolelana maikutlo a pholileng a ho etsa hore othomathike le ho feta.

Layer cake of automation at CIAN

Ho tloha ho lingoliloeng ho ea sethaleng sa rona: kamoo re iketselitseng nts'etsopele ho CIAN

Litsamaiso tsohle tse amehang ho automation li ka aroloa ka mekhahlelo e mengata:

  1. Litsamaiso tsa kantle (Jira, Bitbucket, joalo-joalo). Lihlopha tsa ntlafatso li sebetsa le bona.
  2. Sethala sa Integro. Hangata, bahlahisi ha ba sebetse le eona ka kotloloho, empa ke eona e bolokang li-automation tsohle li sebetsa.
  3. Litšebeletso tsa thomello, 'mino oa liletsa le ho sibolla (mohlala, Jeknin, Consul, Nomad). Ka thuso ea bona, re kenya khoutu ho li-server le ho netefatsa hore litšebeletso li sebetsa hammoho.
  4. Lera la 'mele (li-server, OS, software e amanang le eona). Khoutu ea rona e sebetsa boemong bona. Sena e ka ba seva ea 'mele kapa ea sebele (LXC, KVM, Docker).

Ho ipapisitsoe le mohopolo ona, re arola likarolo tsa boikarabello ka har'a sehlopha sa DI. Maemo a mabeli a pele a sebakeng sa boikarabello ba tataiso ea nts'etsopele ea Integro, 'me maemo a mabeli a ho qetela a se a le sebakeng sa boikarabello ba DevOps. Karohano ena e re lumella ho tsepamisa maikutlo mesebetsing 'me ha e sitise ho sebelisana, kaha re atamelane' me re lula re fapanyetsana tsebo le phihlelo.

E tiile

Ha re tsepamise maikutlo ho Integro mme re qale ka stack ea theknoloji:

  • CentOS 7
  • Docker + Nomad + Consul + Vault
  • Java 11 (Integro monolith ea khale e tla sala ho Java 8)
  • Spring Boot 2.X + Spring Cloud Config
  • PostgreSql 11
  • MmutlaMQ 
  • Apache Ignite
  • Camunda (e kentsoeng)
  • Grafana + Graphite + Prometheus + Jaeger + ELK
  • Web UI: React (CSR) + MobX
  • SSO: Senotlolo

Re latela molao-motheo oa nts'etsopele ea microservice, leha re na le lefa ka mokhoa oa monolith oa mofuta oa pele oa Integro. Microservice e 'ngoe le e' ngoe e sebetsa ka sejaneng sa eona sa Docker, 'me lits'ebeletso li buisana ka likopo tsa HTTP le melaetsa ea RabbitMQ. Li-Microservices li fumanana ka Consul mme li etsa kopo ho eona, li fetisa tumello ka SSO (Keycloak, OAuth 2/OpenID Connect).

Ho tloha ho lingoliloeng ho ea sethaleng sa rona: kamoo re iketselitseng nts'etsopele ho CIAN

E le mohlala oa sebele oa bophelo, nahana ka ho sebelisana le Jenkins, e nang le mehato e latelang:

  1. Microservice ea taolo ea phallo ea mosebetsi (eo ka mor'a moo e bitsoang Flow microservice) e batla ho tsamaisa moaho Jenkins. Ho etsa sena, o sebelisa Consul ho fumana IP: PORT ea microservice bakeng sa ho kopanngoa le Jenkins (eo ka mor'a moo e bitsoang Jenkins microservice) 'me e romela kopo e sa tloaelehang ho eona ho qala ho haha ​​​​Jenkins.
  2. Ka mor'a ho fumana kopo, Jenkins microservice e hlahisa le ho arabela ka ID ea Jobo, e ka sebelisoang ho khetholla sephetho sa mosebetsi. Ka nako e ts'oanang, e etsa hore ho hahoe Jenkins ka mohala oa REST API.
  3. Jenkins o etsa moaho mme, kamora ho phethoa, o romella webhook e nang le liphetho tsa ts'ebetso ho Jenkins microservice.
  4. Jenkins microservice, ha e se e amohetse webhook, e hlahisa molaetsa mabapi le ho phethoa ha kopo ea kopo le ho hokela liphetho tsa ts'ebetso ho eona. Molaetsa o hlahisitsoeng o romelloa moleng oa RabbitMQ.
  5. Ka RabbitMQ, molaetsa o phatlalalitsoeng o fihla ho Flow microservice, e ithutang ka sephetho sa ho sebetsana le mosebetsi oa eona ka ho bapisa ID ea Jobo ho tsoa kopo le molaetsa o amoheloang.

Hona joale re na le li-microservices tse ka bang 30, tse ka aroloa ka lihlopha tse 'maloa:

  1. Tsamaiso ea tlhophiso.
  2. Tlhahisoleseding le tšebelisano le basebelisi (manqosa, mangolo).
  3. Ho sebetsa ka khoutu ea mohloli.
  4. Ho kopanya le lisebelisoa tsa ho tsamaisa (jenkins, nomad, consul, joalo-joalo).
  5. Tlhokomelo (litokollo, liphoso, joalo-joalo).
  6. Lisebelisoa tsa marang-rang (UI ea ho laola maemo a liteko, ho bokella lipalo-palo, joalo-joalo).
  7. Ho kopanya le li-trackers tsa mosebetsi le litsamaiso tse tšoanang.
  8. Tsamaiso ea tšebetso bakeng sa mesebetsi e fapaneng.

Mesebetsi ea morao-rao

Integro e iketsetsa mesebetsi e amanang le bophelo ba mosebetsi. Ka mantsoe a bonolo, potoloho ea bophelo ea mosebetsi e tla utloisisoa e le kemiso ea mosebetsi ho Jira. Mekhoa ea rona ea nts'etsopele e na le mefuta e mengata ea ho tsamaisa mosebetsi ho itšetlehile ka morero, mofuta oa mosebetsi le likhetho tse khethiloeng mosebetsing o itseng. 

Ha re shebeng mokhoa oa ho sebetsa oo re o sebelisang hangata:

Ho tloha ho lingoliloeng ho ea sethaleng sa rona: kamoo re iketselitseng nts'etsopele ho CIAN

Setšoantšong, gear e bontša hore phetoho e bitsoa ka ho iketsa ke Integro, ha palo ea motho e bontša hore phetoho e bitsoa ka letsoho ke motho. Ha re shebeng litsela tse 'maloa tseo mosebetsi o ka li nkang mosebetsing ona.

Teko e felletseng ea matsoho ho DEV+BETA ntle le liteko tsa canary (hangata ke ka tsela ena re lokollang monolith):

Ho tloha ho lingoliloeng ho ea sethaleng sa rona: kamoo re iketselitseng nts'etsopele ho CIAN

Ho ka 'na ha e-ba le metsoako e meng ea phetoho. Ka linako tse ling tsela eo bothata bo tla e nka e ka khethoa ka likhetho tsa Jira.

Motsamao wa mosebetsi

Ha re shebeng mehato ea mantlha e etsoang ha mosebetsi o feta "Teko ea DEV + Litlhahlobo tsa Canary":

1. Moqapi kapa PM o theha mosebetsi.

2. Moqapi o nka mosebetsi ho sebetsa. Kamora ho phethoa, e fetohela ho IN REVIEW boemo.

3. Jira o romela Webhook ho Jira microservice (e ikarabellang bakeng sa ho kopanngoa le Jira).

4. The Jira microservice e romela kopo ho tšebeletso ea Flow (e ikarabellang bakeng sa ts'ebetso ea ka hare eo mosebetsi o etsoang ho eona) ho qala mosebetsi.

5. Ka hare ho Tshebeletso ya Phallo:

  • Bahlahlobi ba abetsoe mosebetsi (Basebelisi ba microservice ba tsebang tsohle ka basebelisi + Jira microservice).
  • Ka Mohloli oa microservice (e tseba ka polokelo le makala, empa ha e sebetse le khoutu ka boeona), ho etsoa lipatlisiso bakeng sa polokelo e nang le lekala la taba ea rona (ho nolofatsa patlo, lebitso la lekala le tsamaisana le taba. nomoro ea Jira). Hangata, mosebetsi o na le lekala le le leng feela polokelong e le 'ngoe; sena se nolofatsa taolo ea mokoloko oa phepelo le ho fokotsa khokahano lipakeng tsa polokelo.
  • Bakeng sa lekala le leng le le leng le fumanoeng, tatellano e latelang ea liketso e etsoa:

    i) Ho nchafatsa lekala le leholo (Git microservice bakeng sa ho sebetsa ka khoutu).
    ii) Lekala le thibetsoe liphetohong tsa moqapi (Bitbucket microservice).
    iii) Ho entsoe Pull Request bakeng sa lekala lena (Bitbucket microservice).
    iv) Molaetsa o mabapi le Pull Request e ncha o romelloa lipuisanong tsa nts'etsopele (Tsebisa microservice bakeng sa ho sebetsa ka litsebiso).
    v) Ho aha, ho lekola le ho tsamaisa mesebetsi e qalisoa ho DEV (Jenkins microservice bakeng sa ho sebetsa le Jenkins).
    vi) Haeba mehato eohle e fetileng e phethiloe ka katleho, joale Integro e kenya tumello ea eona ho Pull Request (Bitbucket microservice).

  • Integro e emetse Approve in Pull Request ho tsoa ho bahlahlobi ba khethiloeng.
  • Hang ha litumello tsohle tse hlokahalang li se li amohetsoe (ho kenyeletsoa le liteko tse ikemetseng li fetile hantle), Integro e fetisetsa mosebetsi ho Test on Dev (Jira microservice) boemo.

6. Bahlahlobi ba leka mosebetsi. Haeba ho se na mathata, joale mosebetsi o fetisetsoa ho boemo ba Ready For Build.

7. Integro "e bona" ​​hore mosebetsi o se o loketse ho lokolloa 'me o qala ho romelloa ka mokhoa oa canary (Jenkins microservice). Ho itokisetsa ho lokolloa ho khethoa ke sehlopha sa melao. Mohlala, mosebetsi o maemong a hlokahalang, ha ho na linotlolo mesebetsing e meng, hajoale ha ho na li-uploads tse sebetsang tsa microservice ena, joalo-joalo.

8. Mosebetsi o fetisetsoa ho boemo ba Canary (Jira microservice).

9. Jenkins o qala mosebetsi oa ho romela ka Nomad ka mokhoa oa canary (hangata liketsahalo tsa 1-3) mme o tsebisa tšebeletso ea ho shebella tokollo (DeployWatch microservice) mabapi le ho romelloa.

10. DeployWatch microservice e bokella bokamorao ba phoso mme e arabela ho eona, ha ho hlokahala. Haeba bokamorao ba phoso bo fetisitsoe (tloaelo ea bokamorao e baloa ka bo eona), bahlahisi ba tsebisoa ka Notify microservice. Haeba ka mor'a metsotso e 5 moqapi a sa araba (o tobetse Revert kapa Stay), joale ho khutlisetsoa morao ka mokhoa o itekanetseng oa liketsahalo tsa canary. Haeba bokamorao bo sa fete, joale mohlahlami o tlameha ho qala phepelo ea mosebetsi ho Tlhahiso (ka ho tobetsa konopo ho UI). Haeba mohlahlami a so ka a tsebisa tlhahiso ho Tlhahiso nakong ea metsotso e 60, linyeoe tsa canary le tsona li tla khutlisetsoa morao ka mabaka a ts'ireletso.

11. Ka mor'a ho thakhola ho romelloa ho Tlhahiso:

  • Mosebetsi o fetisetsoa ho boemo ba Tlhahiso (Jira microservice).
  • Jenkins microservice e qala ts'ebetso ea thomello mme e tsebisa DeployWatch microservice mabapi le thomello.
  • DeployWatch microservice e lekola hore na lijana tsohle tse ho Tlhahiso li ntlafalitsoe (ho bile le linyeoe ha li sa ntlafatsoe kaofela).
  • Ka Notify microservice, tsebiso mabapi le liphetho tsa thomello e romelloa ho Tlhahiso.

12. Bahlahisi ba tla ba le metsotso e 30 ho qala ho khutlisa mosebetsi ho tsoa ho Tlhahiso haeba boitšoaro bo fosahetseng ba microservice bo bonoa. Kamora nako ena, mosebetsi o tla kopanngoa ka bohona ho master (Git microservice).

13. Ka mor'a ho kopana ka katleho ho master, boemo ba mosebetsi bo tla fetoloa ho Koetsoe (Jira microservice).

Setšoantšo ha se etse eka se na le lintlha tse qaqileng ka ho feletseng (ha e le hantle ho na le mehato e mengata), empa e u lumella ho hlahloba tekanyo ea ho kopanya mekhoa. Ha re nke hore morero ona o nepahetse ebile re ntlafatsa lits'ebetso tsa tokollo ea othomathiki le ts'ehetso ea phepelo.

Ke eng e tlang

Re na le merero e meholo ea nts'etsopele ea othomathike, mohlala, ho felisa ts'ebetso ea matsoho nakong ea tokollo ea monolith, ho ntlafatsa tlhahlobo nakong ea ho tsamaisoa ka boiketsetso, le ho ntlafatsa tšebelisano le bahlahisi.

Empa ha re emeng mona hajoale. Re buile ka lihlooho tse ngata tlhahlobisong ea li-automation ka holimo, tse ling ha lia ka tsa ameha ho hang, kahoo re tla thabela ho araba lipotso. Re emetse litlhahiso mabapi le seo re lokelang ho se koahela ka ho qaqileng, ngola ka litlhaloso.

Source: www.habr.com

Eketsa ka tlhaloso