Mai i nga tuhinga tuhi ki ta maatau ake papaaho: me pehea ta maatau whanaketanga i CIAN

Mai i nga tuhinga tuhi ki ta maatau ake papaaho: me pehea ta maatau whanaketanga i CIAN

I te RIT 2019, i hanga e to maatau hoa mahi a Alexander Korotkov te purongo e pa ana ki te automation o te whanaketanga i CIAN: ki te whakangwari i te oranga me te mahi, ka whakamahi matou i ta matou ake papaa Integro. Ka whai i te huringa ora o nga mahi, ka whakaahuru i nga kaiwhakawhanake i nga mahi o ia ra, me te tino whakaiti i te maha o nga pepeke i roto i te mahi. I roto i tenei pou, ka whakakiia e matou te purongo a Alexander me te korero ki a koe me pehea te haere mai i nga tuhinga ngawari ki te whakakotahi i nga hua puna tuwhera mai i ta maatau ake papaaho me nga mahi a to taatau roopu automation motuhake.
 

Kore taumata

"Karekau he mea penei i te taumata kore, kaore au e mohio ki taua mea"
Ko te Kaiwhakaako Shifu mai i te kiriata "Kung Fu Panda"

I timata te miihini i CIAN i nga tau 14 i muri i te whakaturanga o te kamupene. I taua wa e 35 nga tangata o te roopu whanaketanga. He uaua ki te whakapono, tika? Ae ra, i noho tonu te automation i etahi ahuatanga, engari he huarahi motuhake mo te whakauru tonu me te tuku waehere i timata te hanga i te tau 2015. 

I taua wa, he nui ta matou monolith o Python, C# me PHP, i tukuna ki runga i nga tūmau Linux/Windows. Hei tuku i tenei taniwha, he huinga tuhinga tuhi i whakahaerehia e matou ma te ringa. I reira ano te huihuinga o te monolith, i puta mai te mamae me te mamae na roto i nga tautohetohe i te whakakotahitanga o nga manga, te whakatika i nga hapa, me te hanga "me nga momo mahi rereke i roto i te hanga." He penei te ahua o te tukanga ngawari:

Mai i nga tuhinga tuhi ki ta maatau ake papaaho: me pehea ta maatau whanaketanga i CIAN

Kare matou i harikoa ki tenei, a, i pirangi matou ki te hanga i tetahi mahi tukurua, mahi aunoa me te whakahaere me te tuku. Mo tenei, i hiahiatia e matou he punaha CI / CD, a i whiriwhiria e matou i waenga i te putanga kore utu o Teamcity me te putanga kore utu o Jenkins, na te mea i mahi tahi matou me a raatau e pai ana ki a maatau mo te huinga o nga mahi. I kowhiria e matou a Teamcity hei hua hou ake nei. I tera wa, kaore ano matou i whakamahi i te hoahoanga microservice me te kore e whakaaro he maha nga mahi me nga kaupapa.

Ka tae mai ki te whakaaro o ta tatou ake punaha

Ko te whakatinanatanga o Teamcity i tango i tetahi waahanga noa o nga mahi a-ringa: ko te mea e toe ana ko te hanga i nga Tono Pull, te whakatairanga i nga take ma te mana i Jira, me te kowhiringa o nga take hei tuku. Kaore i taea e te punaha Teamcity te whakatutuki i tenei. He mea tika ki te whiriwhiri i te ara o etahi atu automation. I whakaarohia e matou nga whiringa mo te mahi me nga tuhinga i roto i te Teamcity, te huri ranei ki nga punaha aunoatanga tuatoru. Engari i te mutunga ka whakatau matou me tino ngawari, ka taea e taatau ake otinga te whakarato. Koinei te ahua o te putanga tuatahi o te punaha aunoa o roto e kiia nei ko Integro.

Ko te Teamcity e mahi ana i nga mahi aunoatanga i te taumata o te whakarewatanga o nga mahi hanga me te tuku, i te wa e aro ana a Integro ki runga i nga mahi aunoatanga o runga o nga mahi whanaketanga. He mea tika ki te whakakotahi i nga mahi me nga take i Jira me te tukatuka o nga waehere puna hono i Bitbucket. I tenei wa, i timata a Integro ki te whai i ona ake rerenga mahi mo te mahi me nga momo momo mahi. 

Na te piki haere o te mahi aunoatanga i roto i nga mahi pakihi, kua piki ake te maha o nga kaupapa me te rere i roto i Teamcity. Na ka puta mai he raru hou: kotahi tauira Teamcity kore utu kaore i ranea (e toru nga kaihoko me nga kaupapa 3), ka taapirihia e matou tetahi atu tauira (e toru ano nga kaihoko me nga kaupapa 100), katahi ano tetahi. Ko te mutunga mai, ka mutu he punaha maha nga tautau, he uaua ki te whakahaere:

Mai i nga tuhinga tuhi ki ta maatau ake papaaho: me pehea ta maatau whanaketanga i CIAN

I te wa i ara ake ai te patai mo te tuunga tuawha, ka mohio matou kaore e taea e matou te noho penei tonu, na te mea ko nga utu katoa mo te tautoko i nga keehi e 4 kua kore i roto i tetahi rohe. I puta te patai mo te hoko mai i te Teamcity utu, te whiriwhiri ranei i a Jenkins kore utu. I mahi tatau matou mo nga tauira me nga mahere aunoatanga me te whakatau ka noho matou ki Jenkins. I muri i nga wiki e rua, ka huri matou ki a Jenkins me te whakakore i etahi o nga mate pukupuku e pa ana ki te pupuri i nga waahanga Teamcity maha. Na reira, i taea e matou te arotahi ki te whakawhanake i te Integro me te whakarite i a Jenkins mo matou ake.

Na te tipu o te aunoatanga taketake (i te ahua o te hanga aunoa i nga Tono Pull, te kohinga me te whakaputanga o te kapinga Waehere me etahi atu arowhai), ka kaha te hiahia ki te whakarere i nga tuku a-ringa ka taea me te tuku i tenei mahi ki nga karetao. I tua atu, i timata te kamupene ki te neke ki nga microservices i roto i te kamupene, e hiahia ana ki te tuku i nga wa maha, me te wehe i a raatau. Koinei te ahua o to maatau haere ki te whakaputa aunoa o a maatau ratonga moroiti (kei te tukuna e matou te monolith i tenei wa na te uaua o te mahi). Engari, i te nuinga o te waa, ka ara ake he uauatanga hou. 

Ka mahi aunoa matou i nga whakamatautau

Mai i nga tuhinga tuhi ki ta maatau ake papaaho: me pehea ta maatau whanaketanga i CIAN

Na te mahi aunoatanga o nga whakaputanga, kua tere haere nga tikanga whanaketanga, ko tetahi waahanga na te mokowhiti o etahi waahanga whakamatautau. Na tenei i mate te kounga mo te wa poto. He iti noa te ahua, engari me te tere o te whakaputanga, me whakarereke te tikanga whanaketanga hua. He mea tika ki te whakaaro mo te miihini o te whakamatautau, te whakauru i te kawenga whaiaro (i konei e korero ana matou mo te "whakaae i te whakaaro i roto i te upoko", ehara i te utu moni) o te kaiwhakawhanake mo te waehere kua tukuna me nga pepeke kei roto, me te whakatau ki te tuku/kaore e tuku i tetahi mahi ma te tuku aunoa. 

Ko te whakakore i nga raruraru o te kounga, ka tae mai matou ki nga whakataunga nui e rua: i timata matou ki te whakahaere i nga whakamatautau canary me te whakauru i te aroturuki aunoa o te papamuri hapa me te whakautu aunoa ki tona nui. Ko te otinga tuatahi i taea ai te kimi i nga hapa kitea i mua i te tukunga katoa o te waehere ki roto i te whakaputanga, ko te tuarua i whakaiti i te wa whakautu ki nga raru o te whakaputa. Ko nga hapa, he pono, ka tupu, engari ka whakapauhia e tatou te nuinga o o tatou wa me o tatou kaha ki te kore e whakatika, engari ki te whakaiti i a raatau. 

Rōpū Aunoa

I tenei wa he kaimahi 130 nga kaihanga, a kei te haere tonu kia tupu. Ko te roopu mo te whakauru tonu me te tuku waehere (i muri nei ka kiia ko te Deploy and Integration or DI team) e 7 nga tangata me te mahi i nga huarahi e 2: te whakawhanaketanga o te papaaho aunoatanga Integro me nga DevOps. 

Ko DevOps te kawenga mo te taiao Dev/Beta o te pae CIAN, te taiao Integro, ka awhina i nga kaiwhakawhanake ki te whakaoti rapanga me te whakawhanake i nga huarahi hou ki te whakatikatika i nga taiao. Ko te ahunga whanaketanga Integro e pa ana ki a Integro ake me nga ratonga e pa ana, hei tauira, mono mo Jenkins, Jira, Confluence, me te whakawhanake i nga taputapu awhina me nga tono mo nga roopu whanaketanga. 

Ka mahi tahi te roopu DI me te roopu Platform, e whakawhanake ana i te hoahoanga, whare pukapuka, me nga huarahi whanaketanga o roto. I te wa ano, ka taea e tetahi kaiwhakawhanake i roto i te CIAN te whai waahi ki te mahi aunoatanga, hei tauira, te hanga miihini-moroiti kia rite ki nga hiahia o te roopu, ki te whakaputa whakaaro pai ranei me pehea te whakapai ake i te aunoatanga.

Keke apa o te aunoatanga i CIAN

Mai i nga tuhinga tuhi ki ta maatau ake papaaho: me pehea ta maatau whanaketanga i CIAN

Ko nga punaha katoa e uru ana ki te automation ka taea te wehewehe ki etahi paparanga:

  1. Nga punaha o waho (Jira, Bitbucket, etc.). Ka mahi tahi nga roopu whanaketanga me ratou.
  2. Tuāpapa whakauru. Ko te nuinga o nga wa, kaore nga kaiwhakawhanake e mahi tika, engari ko te mea e mau tonu ana te mahi aunoatanga.
  3. Ko nga ratonga tuku, mahi toi me te rapu (hei tauira, Jeknins, Consul, Nomad). Ma ta raatau awhina, ka tukuna e matou he waehere ki runga i nga kaitoro me te whakarite kia mahi tahi nga ratonga.
  4. Paparanga tinana (tūmau, OS, pūmanawa e pā ana). Ka mahi to maatau waehere i tenei taumata. Ka taea pea tenei he tūmau tinana, he mariko ranei (LXC, KVM, Docker).

I runga i tenei ariā, ka wehewehea e matou nga waahanga kawenga i roto i te roopu DI. Ko nga taumata tuatahi e rua kei roto i te waahi kawenga o te ahunga whanaketanga Integro, a ko nga taumata e rua whakamutunga kei te waahi o te kawenga a DevOps. Ko tenei wehenga ka taea e tatou te arotahi ki nga mahi me te kore e pokanoa ki te taunekeneke, i te mea e tata ana tatou ki a ratau me te whakawhiti i nga matauranga me nga wheako.

Ki tonu

Kia arotahi tatou ki te Integro ka timata me te puranga hangarau:

  • CentOS 7
  • Docker + Nomad + Consul + Vault
  • Java 11 (ka noho tonu te Integro monolith tawhito ki Java 8)
  • Spring Boot 2.X + Spring Cloud Config
  • PostgreSql 11
  • RabbitMQ 
  • Apache Whakawera
  • Camunda (whakamaua)
  • Grafana + Graphite + Prometheus + Jaeger + ELK
  • UI Tukutuku: Tauhohe (CSR) + MobX
  • SSO: Kīpoki

E u ana matou ki te kaupapa o te whanaketanga microservice, ahakoa he taonga tuku iho i te ahua o te monolith o te putanga tuatahi o Integro. Ka rere ia microservice i roto i tana ake ipu Docker, ka korero nga ratonga ki a raatau ano ma nga tono HTTP me nga karere RabbitMQ. Ka kitea e nga Microservices tetahi ki tetahi na roto i te Consul me te tono ki a ia, ka tukuna he whakamanatanga ma SSO (Keycloak, OAuth 2/OpenID Connect).

Mai i nga tuhinga tuhi ki ta maatau ake papaaho: me pehea ta maatau whanaketanga i CIAN

Hei tauira mo te ora tonu, whakaarohia te taunekeneke ki a Jenkins, kei roto nga waahanga e whai ake nei:

  1. Ko te ratonga moroiti whakahaere rerengamahi (i muri nei ka kiia ko te Flow microservice) e hiahia ana ki te whakahaere i tetahi hanga ki Jenkins. Ki te mahi i tenei, ka whakamahia e ia te Consul ki te rapu i te IP: PORT o te microservice mo te whakauru ki a Jenkins (i muri nei ka kiia ko Jenkins microservice) ka tukuna he tono tukutahi ki a ia kia timata te hanga ki Jenkins.
  2. I muri i te whiwhi tono, ka whakaputa me te whakautu a Jenkins microservice me te ID Job, ka taea te whakamahi ki te tautuhi i te hua o te mahi. I te wa ano, ka tiimata te hanga ki Jenkins ma te waea REST API.
  3. Ka mahia e Jenkins te hanga, a, ka oti ana, ka tukuna he maau tukutuku me nga hua mahi ki te ratonga miihini Jenkins.
  4. Ko te Jenkins microservice, kua whiwhi i te webhook, ka whakaputa i te panui mo te otinga o te tukatuka tono me te taapiri i nga hua mahi ki a ia. Ka tukuna te karere i hangaia ki te rarangi RabbitMQ.
  5. Na roto i te RabbitMQ, ka tae te karere whakaputa ki te Flow microservice, e ako ana mo te hua o te tukatuka i tana mahi ma te whakaorite i te Job ID mai i te tono me te karere kua tae mai.

Inaianei kei te 30 nga miihini miihini, ka taea te wehewehe ki etahi roopu:

  1. Whakahaerenga whirihoranga.
  2. Nga korero me te taunekeneke ki nga kaiwhakamahi (karere, mēra).
  3. Te mahi me te waehere puna.
  4. Te whakauru ki nga taputapu tuku (jenkins, nomad, consul, etc.).
  5. Te aroturuki (tuku, hapa, me etahi atu).
  6. Nga taputapu Tukutuku (UI mo te whakahaere i nga taiao whakamatautau, te kohi tatauranga, me etahi atu).
  7. Te tuitui me nga kaitirotiro mahi me nga punaha rite.
  8. Te whakahaere rerengamahi mo nga mahi rereke.

Nga mahi rerengamahi

Ka mahi aunoa a Integro i nga mahi e pa ana ki te huringa ora mahi. I roto i nga kupu ngawari, ko te huringa ora o tetahi mahi ka mohio ko te rerenga mahi o tetahi mahi i Jira. He maha nga rereketanga rerengamahi i runga i te kaupapa, te momo mahi me nga whiringa kua tohua i roto i tetahi mahi. 

Kia titiro tatou ki te rerengamahi e whakamahia ana e tatou i te nuinga o te waa:

Mai i nga tuhinga tuhi ki ta maatau ake papaaho: me pehea ta maatau whanaketanga i CIAN

I roto i te hoahoa, ko te taputapu e tohu ana ko te whakawhiti ka karanga aunoatia e Integro, ko te ahua o te tangata e tohu ana ko te whakawhiti ka karangahia e te tangata. Me titiro ki etahi huarahi ka taea e tetahi mahi i roto i tenei rerengamahi.

Te whakamatautau a-ringa i runga i te DEV+BETA kaore he whakamatautau canary (te nuinga o te waa ka tukuna e matou he monolith):

Mai i nga tuhinga tuhi ki ta maatau ake papaaho: me pehea ta maatau whanaketanga i CIAN

Tera pea etahi atu huinga whakawhiti. I etahi wa ka taea te kowhiri i te huarahi ka puta i tetahi take ma nga whiringa i Jira.

Te neke mahi

Me titiro ki nga mahi matua ka mahia i te wa e neke ana tetahi mahi i roto i te rerengamahi "Whakamatau DEV + Whakamatau Canary":

1. Ka hangaia e te kaiwhakawhanake, PM ranei te mahi.

2. Ka mau te kaiwhakawhanake ki te mahi. Ka mutu, ka huri ki te mana IN REVIEW.

3. Ka tukuna e Jira he Webhook ki te Jira microservice (he kawenga mo te whakauru ki a Jira).

4. Ka tukuna e te Jira microservice he tono ki te ratonga Flow (he kawenga mo nga rerengamahi o roto e mahia ai te mahi) hei timata i te rerenga mahi.

5. Kei roto i te ratonga Rere:

  • Ka tohua nga kai-arotake ki te mahi (Nga Kaiwhakamahi microservice e mohio ana ki nga mea katoa mo nga kaiwhakamahi + Jira microservice).
  • Na roto i te Pūtake microservice (e mohio ana mo nga whare pupuri me nga manga, engari kaore e mahi me te waehere ake), ka mahia he rapunga mo nga whare pupuri kei roto he peka o to maatau take (hei whakamaarama i te rapunga, ko te ingoa o te peka e rite ana ki te take. tau i Jira). I te nuinga o te wa, kotahi noa te peka o te mahi i roto i te putunga kotahi; ka ngawari te whakahaere o te rarangi tohatoha me te whakaiti i te hononga i waenga i nga putunga.
  • Mo ia peka kua kitea, ka mahia te raupapa o nga mahi e whai ake nei:

    i) Te whakahou i te peka matua (Git microservice mo te mahi me te waehere).
    ii) Ka aukatihia te peka mai i nga huringa e te kaiwhakawhanake (Bitbucket microservice).
    iii) Ka hangaia he Tono Toia mo tenei peka (Bitbucket microservice).
    iv) Ka tukuna he karere mo tetahi Tono Toia hou ki nga korerorero a te kaiwhakawhanake (Whakamōhiotia te microservice mo te mahi me nga whakamohiotanga).
    v) Ka timatahia nga mahi hanga, whakamatautau me te tohatoha i runga i te DEV (Jenkins microservice mo te mahi tahi me Jenkins).
    vi) Mena kua tutuki pai nga mahi o mua, katahi ka tukuna e Integro tana Whakaaetanga ki te Tono Toia (Bitbucket microservice).

  • Kei te tatari a Integro ki te Whakaaetanga i roto i te Tono Tono mai i nga kaiarotake kua tohua.
  • I te wa kua tae mai nga whakaaetanga e tika ana (tae atu ki nga whakamatautau aunoa kua paahi pai), ka tukuna e Integro te mahi ki te Whakamatau i runga i te Dev (Jira microservice) mana.

6. Ka whakamatau nga Kai-whakamatau i te mahi. Mena karekau he raruraru, ka whakawhitia te mahi ki te mana Riri Mo te Hanga.

7. "Ka kite" a Integro kua rite te mahi mo te tuku me te timata i tana tukunga ki te aratau canary (Jenkins microservice). Ko te reri mo te tuku ka whakatauhia e te huinga ture. Hei tauira, ko te mahi kei roto i te mana e hiahiatia ana, karekau he raka ki etahi atu mahi, karekau he tukunga kaha o tenei ratonga miihini, aha atu.

8. Ka whakawhitia te mahi ki te mana Canary (Jira microservice).

9. Ka whakarewahia e Jenkins he mahi tuku ma Nomad i roto i te aratau canary (te nuinga o nga wa 1-3) me te whakamohio i te ratonga aroturuki tuku (DeployWatch microservice) mo te tukunga.

10. Ka kohia e te DeployWatch microservice te papamuri hapa me te urupare ki a ia, ki te tika. Mena ka nui ake te papamuri hapa (ka tatau aunoa te tikanga papamuri), ka whakamohiotia nga kaiwhakawhanake ma te Notify microservice. Mena i muri i te 5 meneti karekau te kaiwhakawhanake i whakahoki mai (paatohia te Whakahoki, Noho ranei), katahi ka whakarewahia he whakamuri aunoa o nga tauira canary. Ki te kore e nui ake te papamuri, katahi ka whakarewahia e te kaiwhakawhanake te tuku mahi ki te Whakangao (ma te paatene i te paatene i te UI). Mena i roto i te 60 meneti karekau te kaiwhakawhanake i whakarewahia te tuku ki te Whakangao, katahi ka hoki whakamuri nga tauira canary mo nga take haumaru.

11. I muri i te whakarewatanga o te tukunga ki te Production:

  • Ka whakawhitia te mahi ki te mana Whakaputa (Jira microservice).
  • Ka timata te ratonga moroiti Jenkins i te tukanga tuku me te whakamohio ki te ratonga miihini DeployWatch mo te tukunga.
  • Ka tirohia e te DeployWatch microservice kua whakahoutia nga ipu katoa i runga i te Whakangao (he keehi karekau katoa i whakahou).
  • Na roto i te Notify microservice, ka tukuna he whakamohiotanga mo nga hua o te tukunga ki Production.

12. Ka 30 meneti te roa o nga Kaihanga ki te whakahoki mai i tetahi mahi mai i te Whakangao mena ka kitea he mahi microservice. Whai muri i tenei wa, ka hanumi aunoatia te mahi ki te matua (Git microservice).

13. Whai muri i te hanumi angitu ki te rangatira, ka huri te mana mahi ki Katia (Jira microservice).

Ko te hoahoa kaore e kii he tino taipitopito (i te mea pono he maha atu nga waahanga), engari ka taea e koe te aromatawai i te tohu o te whakauru ki nga tukanga. Kaore matou e whakaaro he pai tenei kaupapa, kei te whakapai ake i nga tikanga tuku aunoa me te tautoko tuku.

He aha te muri

He mahere nui a maatau mo te whakawhanaketanga o te automation, hei tauira, te whakakore i nga mahi a-ringa i te wa o te tukunga o te monolith, te whakapai ake i te aro turuki i te waa tuku aunoa, me te whakapai ake i te taunekeneke me nga kaihanga.

Engari ka mutu i konei mo tenei wa. He maha nga kaupapa i hipokina e matou i roto i te arotake aunoatanga, ko etahi kaore i pa atu, na reira ka koa matou ki te whakautu patai. Kei te tatari matou mo nga whakaaro mo nga mea hei hipoki i nga korero, tuhia ki nga korero.

Source: will.com

Tāpiri i te kōrero