Mai tusitusiga i la matou lava faʻavae: faʻafefea ona matou faʻaogaina le atinaʻe i le CIAN

Mai tusitusiga i la matou lava faʻavae: faʻafefea ona matou faʻaogaina le atinaʻe i le CIAN

I le RIT 2019, na faia e le matou paaga Alexander Korotkov lipoti e uiga i le otometi o atinaʻe i le CIAN: e faʻafaigofie le olaga ma galuega, matou te faʻaogaina la matou lava Integro platform. E siaki le taamilosaga o le olaga o galuega, faʻasaʻo ai le au atinaʻe o gaioiga masani ma faʻaititia tele le numera o bugs i le gaosiga. I lenei pou, o le a matou faʻamaeʻaina le lipoti a Alexander ma taʻu atu ia te oe le auala na matou o ese ai mai tusitusiga faigofie i le tuʻufaʻatasia o punaoa tatala e ala i la matou lava faʻavae ma mea e fai e le matou vaega faʻapitoa.
 

Ole maualuga

"E leai se mea e taʻu o le zero level, ou te le iloa se mea faapena"
Master Shifu mai le ata "Kung Fu Panda"

Otometi ile CIAN na amata ile 14 tausaga talu ona faʻavae le kamupani. I lena taimi e 35 tagata i le vaega o le atinaʻe. E faigata ona talitonuina, a ea? O le mea moni, o le masini na i ai i nisi tulaga, ae o se isi itu mo le faʻaauauina o le tuʻufaʻatasia ma le tuʻuina atu o tulafono na amata faʻaalia i le 2015. 

I lena taimi, sa i ai a matou monolith tele o Python, C # ma PHP, faʻapipiʻiina i luga o Linux / Windows servers. Ina ia faʻapipiʻi lenei sauʻai, sa i ai se seti o tusitusiga na matou tamomoe ma le lima. Sa i ai foi le faʻapotopotoga o le monolith, lea na aumaia ai le tiga ma le mafatia ona o feeseeseaiga pe a tuʻufaʻatasia lala, faʻasaʻo faaletonu, ma toe fausia "ma se seti o galuega i le fausiaina." O se faiga faigofie e pei o lenei:

Mai tusitusiga i la matou lava faʻavae: faʻafefea ona matou faʻaogaina le atinaʻe i le CIAN

Matou te le'i fiafia i lenei mea, ma sa matou manana'o e fau se faiga e toe fai, otometi ma mafai ona fa'aogaina ma fa'agaioiina. Mo lenei mea, matou te manaʻomia se CI / CD system, ma matou filifili i le va o le free version of Teamcity ma le free version of Jenkins, talu ai sa matou galulue faʻatasi ma i latou ma fetaui uma i matou i tulaga o le seti o galuega. Na matou filifilia Teamcity o se oloa sili ona lata mai. I lena taimi, matou te leʻi faʻaogaina le faʻataʻitaʻiga microservice ma e leʻi faʻamoemoeina se numera tele o galuega ma galuega faatino.

Matou te oʻo mai i le manatu o la matou lava faiga

O le faʻatinoga o Teamcity na aveese naʻo se vaega o le galuega tusi lesona: o le mea o loʻo totoe o le fatuina o Talosaga Toso, faʻalauiloaina o mataupu i tulaga i Jira, ma le filifilia o mataupu mo le faʻamalolo. Ua le toe mafai e le Teamcity system ona taulimaina lenei mea. Sa tatau ona filifili le ala o le otometi atili. Na matou mafaufau i filifiliga mo le galue i tusitusiga i Teamcity poʻo le fesuiaʻi i faiga faʻaautomatika isi vaega. Ae i le faaiuga na matou filifili matou te manaʻomia le maualuga o le fetuutuunai, lea e naʻo matou lava fofo e mafai ona maua. O le auala lea na faʻaalia ai le faʻaaliga muamua o le masini masini i totonu e taʻua o Integro.

Teamcity e feagai ma masini i le tulaga o le faʻalauiloaina o le fausiaina ma le faʻapipiʻiina o faʻagasologa, ae o le Integro na taulaʻi i luga o le tulaga otometi o faiga atinaʻe. Na mana'omia le tu'ufa'atasia o galuega ma fa'afitauli i Jira ma le fa'agaioiina o fa'ailoga fa'apogai i Bitbucket. I lenei laʻasaga, na amata ona i ai i le Integro ana lava galuega mo le galue i galuega o ituaiga eseese. 

Ona o le faʻateleina o masini i faiga faʻapisinisi, ua faʻateleina le numera o poloketi ma taʻavale i Teamcity. O lea na oo mai ai se faʻafitauli fou: e leʻi lava le tasi faʻataʻitaʻiga Teamcity (3 sui ma 100 poloketi), matou faʻaopoopoina le isi faʻataʻitaʻiga (3 isi sui ma 100 poloketi), ona sosoo ai lea ma le isi. O se taunuuga, na matou iʻu i se faiga o ni fuifui, lea sa faigata ona faʻatautaia:

Mai tusitusiga i la matou lava faʻavae: faʻafefea ona matou faʻaogaina le atinaʻe i le CIAN

Ina ua tulaʻi mai le fesili o se faʻataʻitaʻiga lona 4, na matou iloa ai e le mafai ona faʻaauau pea ona matou ola faʻapenei, ona o le aofaʻi o tau o le lagolagoina o faʻataʻitaʻiga 4 ua le o toe i totonu o soʻo se tapulaa. O le fesili na tulaʻi mai e uiga i le faʻatauina o le Teamcity totogi poʻo le filifilia o Jenkins e leai se totogi. Na matou faia fa'atusatusaga i taimi ma fuafuaga fa'aautomatika ma filifili ai o le a matou nonofo i Jenkins. Ina ua maeʻa ni nai vaiaso, na matou sui ia Jenkins ma faʻaumatia nisi o tiga o le ulu e fesoʻotaʻi ma le tausia o le tele o Teamcity taimi. O le mea lea, na mafai ai ona matou taulaʻi atu i le atinaʻeina o Integro ma faʻavasega Jenkins mo i matou lava.

Faatasi ai ma le tuputupu aʻe o masini faʻapitoa (i le tulaga o le fatuina otometi o Talosaga Toso, aoina ma le lolomiina o le Code coverage ma isi siaki), o loʻo i ai se manaʻoga malosi e lafoai faʻasalalauga tusi lesona i le tele e mafai ai ma tuʻuina atu lenei galuega i robots. E le gata i lea, na amata ona siitia atu le kamupani i microservices i totonu o le kamupani, lea e manaʻomia ai le faʻasaʻoloto soo, ma vavae ese mai le tasi ma le isi. O le auala lea na faasolosolo malie ai ona matou otometi le tatalaina o matou microservices (o loʻo matou tuʻuina atu nei le monolith ma le lima ona o le lavelave o le faagasologa). Ae, e pei ona masani ai, na tulaʻi mai se lavelave fou. 

Matou te otometi su'ega

Mai tusitusiga i la matou lava faʻavae: faʻafefea ona matou faʻaogaina le atinaʻe i le CIAN

Ona o le otometi o faʻasalalauga, ua faʻavavevave faiga atinaʻe, o se vaega ona o le faaseʻeina o nisi o suʻega. Ma o lenei mea na mafua ai le leiloa le tumau o le lelei. E foliga fa'atauva'a, ae fa'atasi ai ma le fa'avavevave o fa'asalalauga, sa tatau ai ona sui le faiga o le atina'eina o oloa. Sa tatau ona mafaufau e uiga i le otometi o suʻega, faʻatupuina o le matafaioi a le tagata lava ia (o loʻo tatou talanoa e uiga i le "taliaina o le manatu i le ulu", ae le o sala tupe) a le tagata atiaʻe mo le faʻasaʻoina o le code ma bugs i totonu, faʻapea foʻi ma le filifiliga e fai. fa'asa'oloto/le fa'amatu'u se galuega e ala i le fa'apipi'iina otometi. 

O le faʻaumatiaina o faʻafitauli lelei, na matou oʻo mai i ni filifiliga taua se lua: na amata ona matou faia suʻega canary ma faʻafeiloaʻi le mataʻituina otometi o le mea sese faʻatasi ma se tali otometi i lona sili atu. O le fofo muamua na mafai ai ona maua ni mea sese manino aʻo leʻi tuʻuina atoa le code i le gaosiga, o le lona lua na faʻaitiitia ai le taimi tali i faʻafitauli i le gaosiga. O mea sese, ioe, e tutupu, ae tatou te faaaluina le tele o o tatou taimi ma taumafaiga e le o le faasa’oina o na mea, ae i le faaitiitia o na mea. 

'Au'Autometi

O loʻo i ai nei a matou aufaigaluega e 130 atinaʻe, ma matou faʻaauau tupu. O le 'au mo le faʻaauauina o le tuʻufaʻatasia ma le tuʻuina atu o tulafono (lea e taʻua mulimuli ane o le Deploy and Integration poʻo le DI team) e aofia ai le 7 tagata ma galulue i le 2 itu: atinaʻe o le Integro automation platform ma DevOps. 

O le DevOps e nafa ma le Dev / Beta siosiomaga o le CIAN site, le Integro environment, fesoasoani i le au atinaʻe e foia faʻafitauli ma atinaʻe auala fou i le faʻalauteleina o siosiomaga. O le Integro development direction e fa'atatau i le Integro lava ia ma auaunaga fa'atatau, mo se fa'ata'ita'iga, plugins mo Jenkins, Jira, Confluence, ma fa'atupuina fo'i mea fa'aoga fesoasoani ma talosaga mo 'au atina'e. 

E galulue fa'atasi le 'au a le DI ma le 'au Platform, lea e atia'e le fausaga, faletusi, ma atina'e i totonu. I le taimi lava e tasi, soʻo se atinaʻe i totonu o le CIAN e mafai ona saofagā i le masini, mo se faʻataʻitaʻiga, fai micro-automation e fetaui ma manaʻoga o le 'au pe faʻasoa se manatu manaia ile auala e faʻaleleia atili ai le masini.

Layer keke o masini i CIAN

Mai tusitusiga i la matou lava faʻavae: faʻafefea ona matou faʻaogaina le atinaʻe i le CIAN

O faiga uma e aofia ai i le masini e mafai ona vaevaeina i ni vaega:

  1. Faiga mai fafo (Jira, Bitbucket, ma isi). E galulue fa'atasi 'au atina'e ma i latou.
  2. Tulaga tu'ufa'atasi. O le tele o taimi, e le galulue fa'atasi ai le au atina'e, ae o le mea lea e fa'atumauina uma ai le masini.
  3. Au'aunaga tu'uina atu, tu'ufa'atasiga ma su'esu'ega (fa'ata'ita'iga, Jeknins, Consul, Nomad). Faatasi ai ma la latou fesoasoani, matou te faʻapipiʻi code i luga o sapalai ma faʻamautinoa o loʻo galulue le tasi i le isi.
  4. Laega fa'aletino (servers, OS, software related). O lo'o fa'agaoioi le matou code i lea tulaga. E mafai ona avea lenei mea o se faʻaumau faʻapitoa poʻo se mea faʻapitoa (LXC, KVM, Docker).

Faʻavae i luga o lenei manatu, matou te vaevaeina vaega o tiute i totonu o le au DI. O laʻasaga muamua e lua o loʻo i totonu o le vaega o le matafaioi a le Integro development direction, ma o vaega mulimuli e lua o loʻo i ai i le vaega o le matafaioi a DevOps. O lenei teteʻa e mafai ai ona tatou taulaʻi atu i galuega ma e le faʻalavelave i fegalegaleaiga, talu ai tatou te vavalalata le tasi i le isi ma fefaʻasoaaʻi i taimi uma le poto ma le poto masani.

le atoatoa

Sei o tatou taulai atu i le Integro ma amata i le faaputuga tekinolosi:

  • CentOS 7
  • Docker + Nomad + Konesula + Vault
  • Java 11 (o le Integro monolith tuai o le a tumau i Java 8)
  • Spring Boot 2.X + Spring Cloud Config
  • PostgreSql 11
  • LapitiMQ 
  • Apache mumu
  • Camunda (fa'apipi'i)
  • Grafana + Graphite + Prometheus + Jaeger + ELK
  • Uepi UI: Tali (CSR) + MobX
  • SSO: Keycloak

Matou te tausisia le mataupu faavae o le atinaʻeina o microservice, e ui lava o loʻo i ai a matou talatuu i le tulaga o se monolith o se uluaʻi lomiga o Integro. O microservice taʻitasi e taʻavale i lana lava Docker container, ma o auaunaga e fesoʻotaʻi le tasi ma le isi e ala i talosaga HTTP ma RabbitMQ feʻau. E maua e Microservices le tasi ma le isi e ala i le Konesula ma fai se talosaga i ai, pasia le faatagaga ile SSO (Keycloak, OAuth 2/OpenID Connect).

Mai tusitusiga i la matou lava faʻavae: faʻafefea ona matou faʻaogaina le atinaʻe i le CIAN

O se faʻataʻitaʻiga moni o le olaga, mafaufau e fegalegaleai ma Jenkins, lea e aofia ai laasaga nei:

  1. Ole microservice ole pulega ole galuega (lea e ta'ua mulimuli ane ole Flow microservice) e mana'o e fai se fale i Jenkins. Ina ia faia lenei mea, na te faʻaaogaina le Konesula e suʻe ai le IP: PORT o le microservice mo le tuʻufaʻatasia ma Jenkins (lea e taʻua mulimuli ane o Jenkins microservice) ma tuʻuina atu se talosaga asynchronous i ai e amata le fausiaina i Jenkins.
  2. A maeʻa ona maua se talosaga, o le Jenkins microservice e gaosia ma tali atu i se ID Job, lea e mafai ona faʻaaoga e iloa ai le taunuuga o le galuega. I le taimi lava e tasi, e faʻaosoina ai le fausiaina i Jenkins e ala i le REST API valaau.
  3. Jenkins e fa'atino le fau ma, a mae'a, tu'uina atu se webhook fa'atasi ai ma fa'ai'uga fa'ataunu'u i le Jenkins microservice.
  4. O le Jenkins microservice, ina ua maua le webhook, faʻatupuina se feʻau e uiga i le faʻamaeʻaina o le faʻaogaina o talosaga ma faʻapipiʻi ai iʻuga o le faʻatinoga. O le fe'au fa'atupu e lafo i le laina RabbitMQ.
  5. E ala i le RabbitMQ, o le faʻasalalauga faʻasalalau e oʻo atu i le Flow microservice, lea e aʻoaʻo ai e uiga i le iʻuga o le faʻagaioiina o lana galuega e ala i le fetaui ma le Job ID mai le talosaga ma le feʻau na maua.

Ole taimi nei e tusa ma le 30 microservices, lea e mafai ona vaevaeina i ni vaega:

  1. Fa'atonuga fa'atonuga.
  2. Faʻamatalaga ma fegalegaleaiga ma tagata faʻaoga (avefeʻau, meli).
  3. Galulue fa'atasi ma fa'ailoga puna.
  4. Faʻatasi ma meafaigaluega faʻapipiʻi (jenkins, nomad, consul, ma isi).
  5. Mataʻituina (faʻasalalau, mea sese, ma isi).
  6. 'upega tafaʻilagi (UI mo le puleaina o siosiomaga suʻega, aoina o fuainumera, ma isi).
  7. Tu'ufa'atasi ma su'ega galuega ma faiga fa'apena.
  8. Puleaina o galuega mo galuega eseese.

Galuega fa'agasolo galuega

Integro fa'aautomate gaioiga e feso'ota'i ma le fa'asologa o galuega. I ni faaupuga faigofie, o le taamilosaga o le olaga o se galuega o le a malamalama o le faʻasologa o galuega i Jira. O a matou fa'agasologa fa'atupuina e iai le tele o fesuiaiga o galuega e fa'atatau i le poloketi, le ituaiga o galuega ma filifiliga filifilia i se galuega fa'apitoa. 

Se'i o tatou va'ai ile fa'asologa o galuega e masani ona tatou fa'aaogaina:

Mai tusitusiga i la matou lava faʻavae: faʻafefea ona matou faʻaogaina le atinaʻe i le CIAN

I le ata, o le mea e taʻu mai ai o le suiga e taʻua otometi e le Integro, aʻo faʻaalia e le tagata le suiga e taʻua ma le lima e se tagata. Se'i o tatou va'ava'ai i ni auala e mafai ona uia e se galuega i lenei fa'asologa o galuega.

Fa'ata'ita'iga fa'ata'ita'i atoa ile DEV+BETA e aunoa ma ni su'ega canary (e masani lava o le auala lea e fa'amatu'u ai se monolith):

Mai tusitusiga i la matou lava faʻavae: faʻafefea ona matou faʻaogaina le atinaʻe i le CIAN

Atonu e iai isi tu'ufa'atasiga o suiga. O nisi taimi o le ala o le a alu ai se mataupu e mafai ona filifilia e ala i filifiliga i Jira.

Gaioiina o galuega

Seʻi o tatou vaʻavaʻai i laʻasaga autu e faia pe a faʻagasolo se galuega i le "DEV Testing + Canary Tests" workflow:

1. O le fa'atupuina po'o le PM na te faia le galuega.

2. E ave e le tagata atiaʻe le galuega e galue ai. A mae'a, ona sui lea ile tulaga IN REVIEW.

3. Ua auina atu e Jira se Webhook i le Jira microservice (e nafa ma le tuufaatasia ma Jira).

4. O le Jira microservice e tuʻuina atu se talosaga i le Flow service (e nafa ma galuega i totonu o loʻo faʻatinoina ai galuega) e amata ai le galuega.

5. I totonu o le auaunaga Flow:

  • Ua tofia tagata su'esu'e i le galuega (Users microservice e iloa mea uma e uiga i tagata fa'aoga + Jira microservice).
  • E ala i le Source microservice (na te iloa e uiga i faleoloa ma lala, ae e le galue ma le code lava ia), e faia se suʻesuʻega mo faleoloa o loʻo i ai se lala o la matou mataupu (e faʻafaigofie le sailiga, o le igoa o le lala e fetaui ma le mataupu. numera i Jira). O le tele o taimi, o se galuega e na'o le tasi le lala i le tasi fale teu oloa; e faafaigofie ai le puleaina o le fa'atulagaina o laina ma fa'aitiitia le feso'ota'iga i le va o fale teu oloa.
  • Mo lala maua ta'itasi, o le fa'asologa o gaioiga o lo'o fa'atinoina:

    i) Faʻafouina le lala matua (Git microservice mo le galue ma code).
    ii) Ua poloka le lala mai suiga e le tagata e faia (Bitbucket microservice).
    iii) Ua faia se Talosaga Toso mo lenei lala (Bitbucket microservice).
    iv) O se fe'au e uiga i se Talosaga Toso fou e lafo atu i fa'atalanoaga a le au atia'e (Fa'ailoa microservice mo le galue ma fa'amatalaga).
    v) Fausiaina, su'ega ma fa'atino galuega e amata ile DEV (Jenkins microservice mo le galulue fa'atasi ma Jenkins).
    vi) Afai e maeʻa lelei laasaga uma muamua, ona tuʻu lea e Integro lana Approve i le Pull Request (Bitbucket microservice).

  • Integro o loʻo faʻatali le Faʻamaonia i le Toso Talosaga mai tagata suʻesuʻe filifilia.
  • O le taimi lava na maua ai faʻatagaga talafeagai uma (e aofia ai suʻega faʻaautomatika ua pasi lelei), faʻafeiloaʻi e Integro le galuega ile Suʻega i luga ole Dev (Jira microservice) tulaga.

6. Su'e su'ega le galuega. Afai e leai ni faʻafitauli, ona faʻafeiloaʻi lea o le galuega ile tulaga Sauni mo Faufale.

7. Integro "vaai" ua sauni le galuega mo le faʻamalolo ma amata lona faʻapipiʻiina i le canary mode (Jenkins microservice). O le sauni mo le tatalaina e fuafua i se seti o tulafono. Mo se faʻataʻitaʻiga, o le galuega o loʻo i le tulaga manaʻomia, e leai ni loka i isi galuega, o loʻo i ai i le taimi nei e leai ni faʻauluina o lenei microservice, ma isi.

8. O le galuega o loʻo tuʻuina atu ile tulaga Canary (Jira microservice).

9. Jenkins faʻalauiloa se galuega faʻapipiʻi e ala i Nomad i le canary mode (masani 1-3 faʻataʻitaʻiga) ma logoina le auaunaga mataʻituina faʻamalolo (DeployWatch microservice) e uiga i le faʻapipiʻiina.

10. O le DeployWatch microservice e aoina le faʻamatalaga sese ma tali atu i ai, pe a manaʻomia. Afai e sili atu le mea sese i tua (o le masani masani e fuafua otometi), e logoina le au atinaʻe e ala i le Notify microservice. Afai a mae'a le 5 minute e le'i tali mai le atia'e (kiliki Toe fo'i po'o Nofo), ona fa'alauiloa lea o le toe fa'afo'i otometi o fa'ata'ita'iga canary. Afai e le sili atu le talaaga, ona tatau lea i le tagata atiaʻe ona faʻalauiloa ma le lima le faʻatulagaina o galuega i le Gaosiga (e ala i le kilikiina o se ki i le UI). Afai i totonu ole 60 minute e leʻi faʻalauiloaina e le tagata faʻapipiʻi le faʻapipiʻiina i le Gaosiga, o le a toe faʻafoʻi foʻi faʻataʻitaʻiga canary mo mafuaaga saogalemu.

11. Ina ua uma ona faʻalauiloa le faʻapipiʻiina i le Gaosiga:

  • O le galuega o loʻo tuʻuina atu i le tulaga o Gaosiga (Jira microservice).
  • O le Jenkins microservice e amata le faʻaogaina o le faʻagasologa ma logoina le DeployWatch microservice e uiga i le faʻapipiʻiina.
  • E siaki e le DeployWatch microservice ua toe fa'afou uma koneteina i luga o le Gaosiga (sa i ai tulaga e le'i fa'afouina uma).
  • E ala i le Notify microservice, o se faʻamatalaga e uiga i taunuʻuga o le faʻapipiʻiina e lafo atu i le Gaosiga.

12. E iai le 30 minute a le au atia'e e amata ai ona toe fa'afo'i se galuega mai le Gaosiga pe a iloa le amio le'o le microservice. A maeʻa lenei taimi, o le a otometi lava ona tuʻufaʻatasia le galuega i le matai (Git microservice).

13. A maeʻa le manuia faʻatasi i le matai, o le a suia le tulaga o galuega ile Tapuni (Jira microservice).

O le ata e le faʻafoliga e faʻamalamalama atoatoa (o le mea moni o loʻo i ai le tele o laasaga), ae mafai ai e oe ona iloilo le maualuga o le tuʻufaʻatasia i faiga. Matou te le manatu o lenei polokalame e sili ona lelei ma o loʻo faʻaleleia le faʻagasologa o le faʻamalolo otometi ma le faʻapipiʻiina o le lagolago.

O le a le isi

E i ai a matou fuafuaga tetele mo le atinaʻeina o masini, mo se faʻataʻitaʻiga, faʻamutaina galuega faʻataʻitaʻi i le taimi o faʻasalalauga monolith, faʻaleleia le mataʻituina i le taimi o le faʻapipiʻiina otometi, ma faʻaleleia fegalegaleaiga ma tagata atiae.

Ae tatou tu’u iinei mo le taimi nei. Sa matou fa'atalanoaina le tele o mataupu i le iloiloga fa'autometi i se tulaga papa'u, o nisi e le'i pa'i i ai, o lea matou te fiafia e tali fesili. O loʻo matou faʻatali mo fautuaga i mea e faʻamatalaina auiliili, tusi i faʻamatalaga.

puna: www.habr.com

Faaopoopo i ai se faamatalaga