I roto i nga kaupapa e pa ana ki te whakawhanaketanga o te hoahoanga microservice, ka neke atu a CI/CD mai i te waahanga o te waahi pai ki te waahanga o te hiahia ohorere. Ko te whakamatautau aunoa he waahanga nui o te whakauru tonu, he huarahi mohio e taea ai e te roopu nga ahiahi pai ki te taha o te whanau me o hoa. Ki te kore, karekau e oti te kaupapa.
Ka taea te kapi katoa i te waehere microservice me nga whakamatautau wae me nga mea whakahianga, engari he waahanga noa tenei ka whakatau i te raru ka waiho he maha nga patai me nga uauatanga, ina koa ka whakamatautau i nga mahi me nga raraunga. Ka rite ki nga wa katoa, ko nga mea tino nui ko te whakamatautau i te riterite o nga raraunga i roto i te paataka hononga, te whakamatautau i nga mahi me nga ratonga kapua, me te hanga whakapae i te wa e tuhi ana i nga mea whakahi.
Ko enei mea katoa me etahi atu mea ka taea te whakatau ma te whakamatautau i te microservice katoa i roto i te ipu Docker. Ko tetahi painga kaore e taea te whakarite i te mana o nga whakamatautau ko nga whakaahua Docker e uru ana ki te mahi ka whakamatauhia.
Ko te whakaaunoatanga o tenei huarahi he maha nga raru, ko te otinga ka korerohia i raro nei:
- nga papā o nga mahi whakarara i roto i te kaihautu docker kotahi;
- nga taupatupatu kaitautuhi i roto i te papaaarangi i nga wa o nga whakamatautau;
- te tatari kia rite nga ratonga moroiti;
- te whakakotahi me te whakaputa i nga raarangi ki nga punaha o waho;
- te whakamatautau i nga tono HTTP puta;
- te whakamatautau turanga tukutuku (ma te whakamahi i te SignalR);
- te whakamatautau i te motuhēhēnga me te whakamanatanga OAuth.
Ko tenei tuhinga kei runga i SECR 2019. Na mo te hunga e mangere ki te panui, .

I roto i tenei tuhinga ka korero atu ahau ki a koe me pehea te whakamahi i te tuhinga tuhi hei whakahaere i te ratonga i raro i te whakamatautau, he papaa raraunga me nga ratonga Amazon AWS i Docker, katahi ka whakamatau ki a Postman, a, ka oti, ka mutu me te whakakore i nga ipu kua hangaia. Ka mahia nga whakamatautau i nga wa katoa ka huri te waehere. Ma tenei ara, ka whakarite maatau kei te mahi tika ia putanga me te paataka raraunga me nga ratonga AWS.
Ko te tuhinga kotahi anō e whakahaerehia ana e ngā kaiwhakawhanake i runga i ā rātou ake Windows-ngā papamahi, me te tūmau Gitlab CI i raro i Linux.
Kia tika, ko te whakauru i nga whakamatautau hou kaore e hiahiatia kia whakauruhia he taputapu taapiri i runga i te rorohiko a te kaiwhakawhanake, i runga ranei i te tūmau kei te whakahaerehia nga whakamatautau i runga i te mahi a Docker.
Me whakahaere te whakamatautau i runga i te tūmau rohe mo nga take e whai ake nei:
- Ko te whatunga kaore e tino pono. I roto i te mano tono, ka taka tetahi;
I tenei keehi, kaore e mahi te whakamatautau aunoa, ka mutu te mahi, me rapu koe mo te take i roto i nga raarangi; - Ko nga tono maha e kore e whakaaetia e etahi ratonga tuatoru.
I tua atu, kaore e pai ki te whakamahi i te turanga na te mea:
- Ka taea te pakaru te turanga ehara ma te waehere kino e rere ana ki runga, engari ma nga raraunga kaore e taea e te waehere tika te whakahaere;
- Ahakoa te kaha o taatau ki te whakahoki i nga huringa katoa i mahia e te whakamatautau i te wa o te whakamatautau, ka he tetahi mea (kaore, he aha te whakamatautau?).
Mo te kaupapa me te whakahaere tukanga
I whakawhanakehia e ta maatau kamupene tetahi tono paetukutuku microservice e rere ana i Docker i te kapua Amazon AWS. Kua whakamahia kētia nga whakamatautau wae i runga i te kaupapa, engari i te nuinga o nga wa ka puta he hapa kaore i kitea e nga whakamatautau wae. He mea tika ki te whakamatautau i tetahi ratonga moroiti katoa me te papaunga raraunga me nga ratonga Amazon.
Ka whakamahia e te kaupapa he tukanga whakauru tonu, kei roto ko te whakamatautau i te microservice me nga mahi katoa. Whai muri i te tautapa i tetahi mahi, ka huri te kaiwhakawhanake ki te microservice, ka whakamatau-a-ringa, ka whakahaere i nga whakamatautau aunoa katoa e waatea ana. Mena e tika ana, ka hurihia e te kaiwhakawhanake nga whakamatautau. Ki te kore e kitea he raru, ka whakatauhia ki te peka o tenei take. I muri i ia mahi, ka whakahaerehia aunoa nga whakamatautau i runga i te tūmau. Ka hanumi ki roto i te peka noa me te whakarewa i nga whakamatautau aunoa ki runga ka puta i muri i te arotake angitu. Mena ka paahi nga whakamatautau mo te manga tiritahi, ka whakahoutia aunoa te ratonga i roto i te taiao whakamatautau i runga i te Amazon Elastic Container Service (paepae). Ko te turanga e tika ana mo nga kaihanga me nga kaiwhakaatu katoa, a kaore i te pai kia pakaru. Ka tirohia e nga Kai-whakamatau i tenei taiao he whakatika, he waahanga hou ranei ma te mahi i nga whakamatautau a-ringa.
Te hoahoanga kaupapa

Neke atu i te tekau nga ratonga te tono. Ko etahi o ratou kua tuhia ki te .NET Core me etahi ki NodeJs. Ka rere ia ratonga i roto i te ipu Docker i te Amazon Elastic Container Service. Kei ia tangata ake tana putunga korero a Postgres, kei etahi ano he Redis. Kāore he pātengi raraunga noa. Mena he maha nga ratonga e hiahia ana kia rite nga raraunga, na enei raraunga, ina huri, ka tukuna ki ia o enei ratonga ma te SNS (Ratonga Whakamōhiotanga Maamaa) me te SQS (Amazon Simple Queue Service), ka tiakina e nga ratonga i roto i o raatau ake papaa raraunga.
SQS me SNS
Ka taea e SQS te tuku karere ki roto i te rarangi me te panui i nga karere mai i te rarangi ma te whakamahi i te kawa HTTPS.
Mena he maha nga ratonga ka panui i te rarangi kotahi, ka tae mai ia karere ki tetahi anake. Ka whai hua tenei ina whakahaere ana i nga wa maha o te ratonga kotahi hei tohatoha i te uta ki waenga i a raatau.
Mena kei te pirangi koe kia tukuna atu ia karere ki nga ratonga maha, me whai i ia kaiwhiwhi tana ake rarangi, me SNS te hiahia ki te taarua i nga karere ki nga rarangi maha.
I roto i te SNS ka hangaia e koe he kaupapa me te ohauru ki a ia, hei tauira, he rarangi SQS. Ka taea e koe te tuku karere ki te kaupapa. I tenei take, ka tukuna te karere ki ia rarangi kua ohauru ki tenei kaupapa. Karekau he tikanga a SNS mo te panui karere. Mena i te wa o te patuiro me te whakamatautau ka hiahia koe ki te rapu i nga mea ka tukuna ki te SNS, ka taea e koe te hanga i tetahi rarangi SQS, ohauru ki te kaupapa e hiahiatia ana me te panui i te rarangi.

API Gateway
Ko te nuinga o nga ratonga kaore e uru tika mai i te Ipurangi. Ko te urunga ma te API Gateway, e arowhai ana i nga motika uru. Ko ta matou ratonga ano tenei, he whakamatautau ano hoki.
Whakamōhiotanga wā-tūturu
Ka whakamahia e te tono ki te whakaatu i nga whakamohiotanga wa-tūturu ki te kaiwhakamahi. Ka whakatinanahia tenei i roto i te ratonga panui. Ka taea te uru tika mai i te Ipurangi me te mahi tahi me OAuth, na te mea karekau e taea te hanga tautoko mo nga turanga Tukutuku ki Gateway, ka whakaritea ki te whakauru i te OAuth me te ratonga panui.
Te Ara Whakamatau Mohiotia
Ko nga whakamatautau waeine ka whakakapi i nga mea penei i te paataka raraunga me nga mea whakahi. Mena ka ngana tetahi ratonga moroiti, hei tauira, ki te hanga rekoata ki tetahi ripanga me te taviri ke, a karekau te rekoata e tohuhia ana e taua ki, kare e taea te tono. Kaore e taea e nga whakamatautau waeine te kite i tenei.
В E whakaarotia ana kia whakamahia he putunga putunga mahara me te whakatinana i nga mea whakahianga.
Ko te pātengi raraunga i roto i te mahara ko tetahi o nga DBMS e tautokohia ana e te Anga Hinonga. I hangaia mo te whakamatautau. Ko nga raraunga kei roto i taua putunga raraunga ka rongoa kia mutu ra ano te mahi e whakamahi ana. Kaore e hiahiatia te hanga ripanga me te kore e tirohia te pono o nga raraunga.
Ko nga taonga tawai e whakatauira ana i te karaehe e whakakapihia ana e ratau ki te mohio te kaiwhakawhanake whakamatautau me pehea te mahi.
Me pehea e taea ai e Postgres te tiimata aunoa me te mahi i nga hekenga ina whakahaere koe i tetahi whakamatautau kaore i tohua i roto i te tuhinga Microsoft. Ko taku otinga tenei, a, hei taapiri, kaore e taapirihia he waehere mo nga whakamatautau ki te microservice ake.
Me haere tatou ki te otinga
I te wa o te whakawhanaketanga, i maarama ko nga whakamatautau waeine kaore i te rawaka ki te rapu i nga raru katoa i te waa, na reira i whakatauhia kia whakatata atu ki tenei take mai i tetahi koki rereke.
Te whakarite i tetahi taiao whakamatautau
Ko te mahi tuatahi ko te whakatakoto i tetahi taiao whakamatautau. Ko nga mahi e hiahiatia ana hei whakahaere i tetahi ratonga moroiti:
- Whakaritehia te ratonga i raro i te whakamatautau mo te taiao o te rohe, tohua nga korero mo te hono atu ki te papaarangi me te AWS i roto i nga taurangi taiao;
- Tīmatahia te Postgres ka mahi i te hekenga ma te whakahaere i te Liquibase.
I roto i nga DBMS hononga, i mua i te tuhi i nga raraunga ki roto i te papaarangi, me hanga e koe he mahere raraunga, ara, he ripanga. I te wa e whakahou ana i tetahi tono, me kawe mai nga ripanga ki te ahua e whakamahia ana e te putanga hou, me te pai, me te kore e ngaro nga raraunga. Ka kiia tenei ko te heke. Ko te hanga ripanga i roto i te putunga putunga tuatahi he take motuhake o te heke. Ka taea te hanga hekenga ki roto i te tono ake. Kei a .NET me NodeJS nga anga hekenga. I roto i to maatau take, mo nga take haumaru, ka whakakorehia e nga microservices te mana ki te whakarereke i te kaupapa raraunga, ka mahia te heke ma te whakamahi i te Liquibase. - Whakarewa Amazon LocalStack. He whakatinanatanga tenei o nga ratonga AWS hei whakahaere i te kainga. He whakaahua kua rite mo LocalStack i runga i te Docker Hub.
- Whakahaerehia te tuhinga hei hanga i nga hinonga e tika ana ki LocalStack. Ka whakamahi nga tuhinga anga i te AWS CLI.
Ka whakamahia mo te whakamatautau i te kaupapa . I mua, engari i whakarewahia ma te ringa ka whakamatauria he tono kua tukuna ki te tuunga. Ma tenei taputapu ka taea e koe te tuku tono HTTP(S) noa me te tirotiro mena ka rite nga whakautu ki nga tumanako. Ka whakakotahihia nga patai ki te kohinga, ka taea te whakahaere i te kohinga katoa.

Me pehea te mahi whakamatautau aunoa?
I te wa o te whakamatautau, ka mahi nga mea katoa i Docker: ko te ratonga i raro i te whakamatautau, Postgres, te taputapu hekenga, me te Kaitautoko, engari ko tana putanga papatohu - Newman.
He maha nga raru ka whakatauhia e Docker:
- Te motuhake mai i te whirihoranga o te ope;
- Te whakauru i nga whakawhirinaki: Ka tango a Docker i nga whakaahua mai i te Docker Hub;
- Te whakahoki i te punaha ki tona ahuatanga taketake: tango noa i nga ipu.
Docker-tito ka whakakotahi i nga ipu ki te whatunga mariko, ka wehea mai i te Ipurangi, ka kitea e nga ipu tetahi ki tetahi ma nga ingoa rohe.
Kei te whakahaerehia te whakamātautau e tētahi tuhinga anga. Hei whakahaere i te whakamātautau i raro i Windows Ka whakamahia e mātou te git-bash. Nō reira, kotahi te tuhinga e ranea ana mō Windows a mo LinuxKa tāutahia a Git me Docker e ngā kaiwhakawhanake katoa i runga i te kaupapa. Ina tāutahia a Git i raro i Windows Kua tāutahia te git-bash, nō reira kei te katoa anō hoki.
Ka mahia e te tuhinga nga mahi e whai ake nei:
- Te hanga whakaahua docker
docker-compose build - Te whakarewa i te pātengi raraunga me te LocalStack
docker-compose up -d <контейнер> - Te hekenga raraunga me te whakarite o LocalStack
docker-compose run <контейнер> - Te whakarewa i te ratonga i raro i te whakamatautau
docker-compose up -d <сервис> - Te whakahaere i te whakamatautau (Newman)
- Te whakamutu i nga ipu katoa
docker-compose down - Te tuku i nga hua ki Slack
He korerorero ta maatau kei te haere nga karere me te tohutaki kaakaariki, he ripeka whero ranei me te hono ki te pororakau.
Ko nga whakaahua Docker e whai ake nei kei roto i enei waahanga:
- Ko te ratonga e whakamatautauhia ana he rite tonu te ahua mo te hanga. Ko te whirihoranga mo te whakamatautau na roto i nga taurangi taiao.
- Mo Postgres, Redis me LocalStack, ka whakamahia nga whakaahua kua rite mai i Docker Hub. He whakaahua kua rite ano mo Liquibase me Newman. Ka hangahia to maatau ki runga i to ratau anga, ka taapiri i a maatau konae ki reira.
- Hei whakarite i te LocalStack, ka whakamahi koe i tetahi ahua AWS CLI kua oti te hanga me te hanga i tetahi ahua kei roto he tuhinga tuhi i runga.
Te whakamahi , kaore koe e hanga he ahua Docker hei taapiri i nga konae ki te ipu. Heoi, kaore e pai nga pukapuka mo to tatou taiao na te mea ko nga mahi a Gitlab CI kei roto i nga ipu. Ka taea e koe te whakahaere i a Docker mai i taua ipu, engari ko nga pukapuka ka mau noa i nga kōpaki mai i te punaha manaaki, kaua mai i tetahi atu ipu.
Nga raruraru ka pa ki a koe
E tatari ana mo te reri
I te wa e rere ana tetahi ipu whai ratonga, ehara tenei i te mea kua reri ki te whakaae hononga. Me tatari koe kia haere tonu te hononga.
I etahi wa ka whakatauhia tenei raruraru ma te whakamahi i te tuhinga , e tatari ana mo te waahi ki te whakatu hononga TCP. Heoi, ka maka e LocalStack he hapa 502 Bad Gateway. I tua atu, he maha nga ratonga, a, ki te rite tetahi o ratou, kaore tenei e korero mo etahi atu.
whakatau: LocalStack whakarato tuhinga e tatari ana mo te whakautu 200 mai i te SQS me te SNS.
Nga Papā Mahi Whakarara
He maha nga whakamatautau ka taea te whakahaere i te wa kotahi i runga i te kaihautu Docker kotahi, no reira me ahurei nga ingoa ipu me nga ingoa whatunga. I tua atu, ko nga whakamatautau mai i nga peka rereke o te ratonga kotahi ka taea te whakahaere i te wa kotahi, no reira kaore e ranea te tuhi i o raatau ingoa ki ia konae tito.
whakatau: Ka tautuhia e te tuhinga te taurangi COMPOSE_PROJECT_NAME ki tetahi uara ahurei.
Āhuatanga Windows
Ina whakamahia ana a Docker i roto i Windows He maha ngā mea e hiahia ana ahau kia aro atu koe ki ēnei, he mea nui hoki tēnei wheako hei mārama ki ngā pūtake o ngā hapa.
- Ko nga tuhinga anga kei roto i te ipu me whai mutunga raina Linux.
He hapa wetereo te tohu CR mō te anga. He uaua ki te kite mai i te karere hapa koinei te take. Ina whakatikahia aua tuhinga i roto i Windows Me whai ētita tuhinga tika koe. Hei tāpiri, me whirihora tika te pūnaha whakahaere putanga.
He penei te whirihora a git:
git config core.autocrlf input- Ka whakatauira a Git-bash i ngā kōpaki paerewa Linux ā, ina karangahia he kōnae exe (tae atu ki a docker.exe) ka whakakapia te absolute Linux-ngā ara ki Windows-ngā ara. Heoi, kāore tēnei e whai tikanga mō ngā ara kāore i te mīhini ā-rohe (ngā ara rānei i roto i te ipu). Kāore e taea te whakakore i tēnei whanonga.
whakatau: tāpirihia he tohu tāpiri ki te tīmatanga o te ara: //bin hei utu mō te /bin. Linux e mārama ana ki aua ara; mōna, he rite tonu ngā tapawhā maha ki te kotahi. Engari kāore a git-bash e mōhio ki aua ara, ā, kāore hoki e ngana ki te huri i aua ara.
Putanga rangitaki
I te wa e whakahaere ana i nga whakamatautau, ka pirangi au ki te kite i nga raarangi mai i a Newman me te ratonga e whakamatauria ana. I te mea he hononga hono nga huihuinga o enei raarangi, ko te whakakotahi ki tetahi papatohu he pai ake i te rua o nga konae wehe. Ka whakarewahia e Newman ma docker-tito rere, a ka mutu tana putanga ki te papatohu. Ko nga mea e toe ana ko te whakarite kia haere ano te putanga o te ratonga ki reira.
Ko te otinga taketake ko te mahi te toka-te whakatakoto kahore he haki -d, engari ma te whakamahi i nga kaha anga, tukuna tenei tukanga ki te papamuri:
docker-compose up <service> &I mahi tenei tae noa ki te wa e tika ana kia tukuna nga raarangi mai i Docker ki tetahi ratonga tuatoru. te toka-te whakatakoto ka mutu te whakaputa i nga raarangi ki te papatohu. Heoi, i mahi te kapa ka honohia te peke.
whakatau:
docker attach --no-stdin ${COMPOSE_PROJECT_NAME}_<сервис>_1 &Taupatupatu tohu i te wa o te whakamatautau
Ka whakahaerehia nga whakamatautau i roto i nga waahanga maha. Kaore i te whakawāteatia te pātengi raraunga. Ko nga rekoata kei roto i te papanga raraunga he ID ahurei. Mena ka tuhia e matou etahi ID motuhake i roto i nga tono, ka puta he raruraru i te waahanga tuarua.
Hei karo, me ahurei nga ID, me whakakore ranei nga mea katoa i hangaia e te whakamatautau. Ko etahi mea kaore e taea te muku na runga i nga whakaritenga.
whakatau: hangaia he GUID ma te whakamahi i nga tuhinga a te Kaituku.
var uuid = require('uuid');
var myid = uuid.v4();
pm.environment.set('myUUID', myid);Na ka whakamahi i te tohu i roto i te patai {{myUUID}}, ka whakakapia ki te uara o te taurangi.
Mahi tahi ma LocalStack
Mena ka panuihia, ka tuhi ranei te ratonga e whakamatauria ana ki tetahi rarangi SQS, hei manatoko i tenei, me mahi ano te whakamatautau me tenei rarangi.
whakatau: nga tono mai i te Poutapeta ki te LocalStack.
Ko te API ratonga AWS kua tuhia, e tuku ana i nga patai kaore he SDK.
Mena ka tuhi tetahi ratonga ki tetahi rarangi, ka panuihia ka tirohia nga korero o te karere.
Mena ka tukuna e te ratonga nga karere ki a SNS, i te wa whakarite ka hangaia ano e LocalStack he rarangi me te ohauru ki tenei kaupapa SNS. Na ka tae katoa ki nga korero i korerohia i runga ake nei.
Mena ka hiahia te ratonga ki te panui i tetahi karere mai i te rarangi, na i te waahanga whakamatautau o mua ka tuhia e matou tenei karere ki te rarangi.
Te whakamatautau i nga tono HTTP i ahu mai i te microservice i raro i te whakamatautau
Ko etahi o nga ratonga e mahi ana i runga i te HTTP me tetahi mea ke atu i te AWS, a ko etahi ahuatanga AWS kaore i te whakatinanahia i LocalStack.
whakatau: i roto i enei take ka taea te awhina , he ahua kua oti te hanga ki roto . Ko nga tono me nga whakautu e tumanakohia ana ka whirihorahia e te tono HTTP. Kua tuhia te API, na reira ka tono matou mai i te Kai-Poutauta.
Te Whakamatau OAuth Motuhēhēnga me te Whakamana
Ka whakamahi matou i te OAuth me te . Ko te whakamatautau me whai kaiwhakarato OAuth ka taea e matou te whakahaere i te rohe.
Ko nga taunekeneke katoa i waenga i te ratonga me te kaiwhakarato OAuth ka tae mai ki nga tono e rua: tuatahi, ka tonohia te whirihoranga /.well-known/openid-configuration, ka tonohia te kī tūmatanui (JWKS) ki te wāhitau mai i te whirihoranga. He ihirangi pateko enei katoa.
whakatau: Ko ta matou kaiwhakarato OAuth whakamatautau he tūmau ihirangi pateko me nga konae e rua kei runga. Ka mahia te tohu kotahi, ka piri ki a Git.
Nga waahanga o te whakamatautau SignalR
Karekau te Kaitiaki Poutapeta e mahi me nga turanga tukutuku. I hangaia he taputapu motuhake hei whakamatautau i a SignalR.
Ko te kiritaki SignalR ka nui ake i te kaitirotiro noa. He whare pukapuka kiritaki kei raro i te .NET Core. Ko te kiritaki, i tuhia ki te .NET Core, ka whakatuu hononga, ka whakamotuhēhēhia, ka tatari mo te raupapatanga o nga karere. Mena ka tae mai he karere ohorere, ka ngaro ranei te hononga, ka puta te kiritaki me te waehere 1. Mena ka tae mai te karere whakamutunga e tumanakohia ana, ka puta te kaihoko me te waehere 0.
Ka mahi tahi a Newman me te kiritaki. He maha nga kaihoko kua whakarewahia ki te tirotiro kei te tukuna nga karere ki nga tangata katoa e hiahia ana.

Hei whakahaere i nga kaihoko maha ka whakamahi i te whiringa --tauine i runga i te raina whakahau docker-compose.
I mua i te rere, ka tatari te tuhinga a te Kaiwaea mo nga kaihoko katoa ki te whakarite hononga.
Kua pa ki a matou te raruraru o te tatari mo te hononga. Engari i reira nga kaitoro, a koinei te kaihoko. He huarahi rereke e hiahiatia ana.
whakatau: ka whakamahia e te kiritaki i roto i te ipu te tikanga ki te whakamohio i te tuhinga ki te kaihautu mo tona mana. Ka waihangahia e te kiritaki he konae ki tetahi ara motuhake, me kii /healthcheck, i te wa ka tau te hononga. Ko te tuhinga a HealthCheck i roto i te konae docker he penei te ahua:
HEALTHCHECK --interval=3s CMD if [ ! -e /healthcheck ]; then false; firōpū ka tirotirohia e te kaipatu Ka whakaatu i te mana noa, te mana hauora me te waehere putanga mo te ipu.
Ka oti a Newman, ka tirohia e te tuhinga kua mutu nga ipu katoa me te kiritaki, me te waehere 0.
Kei te noho a Happinnes
Whai muri i a maatau i nga uauatanga i whakaahuatia i runga ake nei, he huinga o nga whakamatautau rere pumau. I roto i nga whakamatautau, ka mahi ia ratonga hei waahanga kotahi, te taunekeneke me te papaaarangi me te Amazon LocalStack.
Ko enei whakamatautau ka tiaki i te roopu o nga kaiwhakawhanake 30+ mai i nga hapa i roto i te tono me te taunekeneke uaua o te 10+ microservices me te tuku auau.
Source: will.com
