Mumapurojekiti ane chekuita nekuvandudzwa kweiyo microservice architecture, CI/CD inofamba kubva muchikamu chemukana unofadza ichienda kuchikamu chezvinoda kukurumidza. Kuedza otomatiki chikamu chakakosha chekuenderera kusanganisa, nzira ine hunyanzvi iyo inogona kupa timu manheru akawanda anofadza nemhuri uye neshamwari. Zvikasadaro, njodzi yeprojekiti haina kuzopedzwa.
Zvinokwanisika kuvhara iyo microservice kodhi yese neyuniti bvunzo nezvinhu zvinoseka, asi izvi zvinongogadzirisa zvishoma dambudziko uye zvinosiya mibvunzo yakawanda nematambudziko, kunyanya kana yekuyedza basa nedata. Senguva dzose, vanonyanya kudzvanya kuyedza kuenderana kwedata mudhatabhesi rehukama, basa rekuyedza nemasevhisi emakore, uye kuita fungidziro dzisiridzo kana uchinyora zvinhu zvinoseka.
Zvese izvi uye zvimwe zvishoma zvinogona kugadziriswa nekuyedza iyo microservice yese mumudziyo weDocker. Mukana usina mubvunzo wekuve nechokwadi chechokwadi chebvunzo ndechekuti iwo akafanana Docker mifananidzo inoenda mukugadzirwa inoedzwa.
Automation yeiyi nzira inopa akati wandei matambudziko, iyo mhinduro ichatsanangurwa pazasi:
- kukakavara kwemabasa akafanana mune imwechete docker host;
- identifier inopokana mudhatabhesi panguva yekudzokororwa kwebvunzo;
- kumirira kuti microservices igadzirire;
- kubatanidza uye kuburitsa matanda kune ekunze masisitimu;
- kuyedza zvikumbiro zveHTTP zvinobuda;
- web socket test (uchishandisa SignalR);
- kuyedza OAuth kutendeseka uye mvumo.
Ichi chinyorwa chakavakirwa pa
Muchikamu chino ini ndichakuudza nzira yekushandisa script kumhanyisa sevhisi pasi pekuyedzwa, dhatabhesi uye Amazon AWS masevhisi muDocker, wozoedza paPostman uye, kana vapedza, mira uye udzime midziyo yakagadzirwa. Miedzo inoitwa pese panochinja kodhi. Nenzira iyi, tinova nechokwadi chekuti vhezheni yega yega inoshanda nemazvo neAWS dhatabhesi nemasevhisi.
Iyo script yakafanana inomhanyiswa vese nevagadziri pachavo paWindows desktops uye neGitlab CI server pasi peLinux.
Kuti tive nechikonzero, kuunza miedzo mitsva hakufanire kuisirwa mamwe maturusi pacomputer yemugadziri kana paseva panoitwa bvunzo nekuzvipira. Docker inogadzirisa dambudziko iri.
Muedzo unofanirwa kumhanya pane server yemunharaunda nekuda kwezvikonzero zvinotevera:
- Iyo network haina kumbovimbika zvachose. Pachikumbiro chine churu, chimwe chingakundikana;
Muchiitiko ichi, muedzo otomatiki hauzoshandi, basa richamira, uye iwe uchafanirwa kutarisa chikonzero mumatanda; - Zvikumbiro zvakawandisa hazvitenderwi nemamwe masevhisi ebato rechitatu.
Mukuwedzera, hazvidiwi kushandisa chimiro nekuti:
- Chigadziko chinogona kuputswa kwete chete nekodhi yakaipa inoshanda pairi, asiwo nedata iyo iyo kodhi chaiyo haigone kuita;
- Hazvina mhosva kuti tinoedza zvakaoma sei kudzorera shure shanduko dzose dzakaitwa nemuedzo panguva yekuedzwa pachayo, chimwe chinhu chinogona kukanganisa (zvikasadaro, sei kuedza?).
Nezve purojekiti uye sangano rekugadzirisa
Kambani yedu yakagadzira microservice web application inoshanda muDocker muAmazon AWS gore. Mayedzo eyuniti akange atoshandiswa papurojekiti, asi zvikanganiso zvinowanzoitika izvo bvunzo dzeyuniti hadzina kuona. Zvaive zvakakodzera kuyedza iyo microservice yese pamwe chete nedhatabhesi uye Amazon masevhisi.
Iyo purojekiti inoshandisa yakajairwa inoenderera yekubatanidza maitiro, ayo anosanganisira kuyedza iyo microservice nechero kuzvipira. Mushure mekupa basa, mugadziri anoita shanduko kune microservice, anoiedza nemaoko uye anomhanyisa ese anowanikwa otomatiki bvunzo. Kana zvichidikanwa, mugadziri anoshandura bvunzo. Kana pasina matambudziko anowanikwa, kuzvipira kunoitwa kune bazi renyaya iyi. Mushure mekuita kwega kwega, bvunzo dzinoitwa otomatiki pane server. Kubatanidza mubazi rakajairika uye kuvhura otomatiki bvunzo pairi kunoitika mushure mekuongorora kwakabudirira. Kana iyo bvunzo pabazi rakagovaniswa ikapfuura, sevhisi inogadziridzwa otomatiki munzvimbo yekuyedza paAmazon Elastic Container Service (bhenji). Iyo inomira inodiwa kune vese vanogadzira uye vanoedza, uye hazvikurudzirwe kuipwanya. Vanoedza munzvimbo ino vanotarisa kugadzirisa kana chinhu chitsva nekuita bvunzo dzemanyorero.
Mavakirwo eprojekiti
Chikumbiro chine masevhisi anopfuura gumi. Zvimwe zvacho zvakanyorwa muNET Core uye zvimwe muNodeJs. Sevhisi yega yega inomhanya mumudziyo weDocker muAmazon Elastic Container Service. Imwe neimwe ine yayo Postgres dhatabhesi, uye vamwe zvakare vane Redis. Iko hakuna dhatabhesi dzakajairika. Kana masevhisi akati wandei achida data rakafanana, saka iyi data, kana yachinja, inotumirwa kune imwe neimwe yeaya masevhisi kuburikidza neSNS (Simple Notification Service) uye SQS (Amazon Simple Queue Service), uye masevhisi anoichengeta mune yavo yega dhatabhesi.
SQS uye SNS
SQS inokutendera kuti uise mameseji mumutsetse uye uverenge mameseji kubva pamutsetse uchishandisa HTTPS protocol.
Kana masevhisi akati wandei achiverenga mutsetse mumwe chete, meseji yega yega inosvika kune mumwe wayo. Izvi zvinobatsira kana uchimhanyisa akati wandei ebasa rimwechete kugovera mutoro pakati pavo.
Kana iwe uchida kuti meseji yega yega iunzwe kumasevhisi akawanda, anogamuchira mumwe nemumwe anofanira kunge aine mutsara wake, uye SNS inodiwa kudzokorora mameseji mumitsetse yakawanda.
MuSNS iwe unogadzira chinyorwa uye kunyorera kwairi, semuenzaniso, iyo SQS mutsara. Unogona kutumira mameseji kune musoro. Muchiitiko ichi, meseji inotumirwa kune yega yega mutsara yakanyoreswa kune iyi musoro. SNS haina nzira yekuverenga mameseji. Kana panguva yedebugging kana kuyedza iwe unofanirwa kuziva izvo zvinotumirwa kuSNS, unogona kugadzira iyo SQS mutsara, nyoresa kune yaunoda musoro uye uverenge mutsara.
API Gateway
Masevhisi mazhinji haawanikwe zvakananga kubva paInternet. Kupinda kuburikidza neAPI Gateway, iyo inotarisa kodzero dzekuwana. Iri ibasa redu zvakare, uye kune bvunzo dzaro zvakare.
Real-time zviziviso
Iyo application inoshandisa
Nzira Yokuedzwa Inonyanyozivikanwa
Mayunitsi bvunzo anotsiva zvinhu zvakaita sedhatabhesi nezvinhu zvinoseka. Kana microservice, semuenzaniso, ichiedza kugadzira rekodhi mutafura ine kiyi yekune imwe nyika, uye rekodhi inotaridzwa nekiyi iyoyo haipo, saka chikumbiro hachigone kuitwa. Mayunitsi bvunzo haakwanise kuona izvi.
Π
In-memory database ndeimwe yeDBMSs inotsigirwa neEntity Framework. Yakagadzirwa zvakananga kuedzwa. Dhata mudhatabhesi yakadaro inochengetwa chete kusvikira maitiro ekuishandisa apera. Izvo hazvidi kugadzira matafura uye hazvitarise kuvimbika kwedata.
Mock zvinhu zvinoenzanisira kirasi yavari kutsiva chete kusvika pamwero wekuti mugadziri webvunzo anonzwisisa kuti inoshanda sei.
Maitiro ekuita kuti Postgres itange otomatiki uye kuita kutama kana iwe uchimhanyisa bvunzo haina kutaurwa muchinyorwa cheMicrosoft. Mhinduro yangu inoita izvi uye, nekuwedzera, haiwedzere chero kodhi yakanangana nemiedzo kune microservice pachayo.
Ngatienderere mberi kune mhinduro
Munguva yekuvandudza maitiro, zvakava pachena kuti bvunzo dzeyuniti dzakanga dzisina kukwana kuwana matambudziko ese panguva yakakodzera, saka zvakasarudzwa kutarisana nenyaya iyi kubva kune imwe kona.
Kugadzira nzvimbo yekuedza
Basa rekutanga ndere kuendesa nzvimbo yekuyedza. Matanho anodiwa kuita microservice:
- Gadzirisa sevhisi iri pasi pekuyedzwa nharaunda yenzvimbo, tsanangura iyo nhoroondo yekubatanidza kune dhatabhesi uye AWS mune zvakatipoteredza zvinosiyana;
- Tanga Postgres uye ita kutama nekumhanya Liquibase.
Mune hukama hweDBMS, usati wanyora data mudhatabhesi, unofanirwa kugadzira data schema, nemamwe mazwi, matafura. Paunenge uchigadziridza application, matafura anofanirwa kuunzwa kufomu rinoshandiswa neshanduro nyowani, uye, zviri nani, pasina kurasikirwa nedata. Uku kunonzi kutama. Kugadzira matafura mune yekutanga isina dhatabhesi inyaya yakakosha yekutama. Kutama kunogona kuvakwa mune application pachayo. Ose .NET uye NodeJS ane migration framework. Muchiitiko chedu, nekuda kwezvikonzero zvekuchengetedza, microservices inonyimwa kodzero yekushandura data schema, uye kutama kunoitwa uchishandisa Liquibase. - Tanga Amazon LocalStack. Uku kuita kwemasevhisi eAWS kumhanya kumba. Iko kune yakagadzirira-yakagadzirwa mufananidzo weLocalStack paDocker Hub.
- Mhanya script kuti ugadzire zvinodikanwa muLocalStack. Shell zvinyorwa zvinoshandisa iyo AWS CLI.
Inoshandiswa pakuyedza purojekiti
Otomatiki bvunzo inoshanda sei?
Munguva yekuyedzwa, zvese zvinoshanda muDocker: sevhisi iri pasi pekuyedzwa, Postgres, chishandiso chekufambisa, uye Postman, kana kuti shanduro yayo yekoni - Newman.
Docker inogadzirisa akati wandei matambudziko:
- Kusununguka kubva pakugadziriswa kwemuenzi;
- Kuisa zvinotsamira: Docker inodhawunirodha mifananidzo kubva kuDocker Hub;
- Kudzosera sisitimu kune yayo yekutanga: kungobvisa midziyo.
Docker-compose inobatanidza midziyo kuita network chaiyo, yakaparadzaniswa neInternet, umo midziyo inowanana nemazita emadomasi.
Muedzo unodzorwa negoko script. Kumhanyisa bvunzo paWindows tinoshandisa git-bash. Saka, imwe script inokwana kune ese Windows neLinux. Git uye Docker yakaiswa nevagadziri vese papurojekiti. Pakuisa Git paWindows, git-bash inoiswa, saka munhu wese ane izvozvo futi.
Iyo script inoita nhanho dzinotevera:
- Kugadzira docker mifananidzo
docker-compose build
- Kutanga dhatabhesi uye LocalStack
docker-compose up -d <ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅Ρ>
- Database kutama uye kugadzirira LocalStack
docker-compose run <ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅Ρ>
- Kutangisa sevhisi pasi pekuyedzwa
docker-compose up -d <ΡΠ΅ΡΠ²ΠΈΡ>
- Kumhanya bvunzo (Newman)
- Kumisa midziyo yose
docker-compose down
- Kutumira mhinduro muSlack
Isu tine chat uko mameseji ane green cheki kana muchinjiko mutsvuku uye chinongedzo chegi chinoenda.
Iyi inotevera Docker mifananidzo inobatanidzwa mumatanho aya:
- Sevhisi iri kuedzwa mufananidzo wakafanana neyekugadzirwa. Kugadziriswa kwebvunzo kuri kuburikidza nemamiriro ekunze akasiyana.
- Kune Postgres, Redis uye LocalStack, yakagadzirira-yakagadzirwa mifananidzo kubva kuDocker Hub inoshandiswa. Kune zvakare akagadzirira-akagadzirwa mifananidzo yeLiquibase neNewman. Isu tinovaka yedu pane yavo skeleton, tichiwedzera mafaera edu ipapo.
- Kugadzirira LocalStack, iwe unoshandisa yakagadzirira-yakagadzirwa AWS CLI mufananidzo uye kugadzira mufananidzo une script yakavakirwa pairi.
Uchishandisa
Matambudziko aungasangana nawo
Kumirira kugadzirira
Kana mudziyo une sevhisi uchishanda, izvi hazvireve kuti wagadzirira kugamuchira zvinongedzo. Unofanira kumirira kuti kubatana kuenderere mberi.
Dambudziko iri dzimwe nguva rinogadziriswa uchishandisa script
chisarudzo: LocalStack kupa zvinyorwa zvinomirira mhinduro mazana maviri kubva kune zvese SQS neSNS.
Parallel Task Conflicts
Miedzo yakawanda inogona kumhanya panguva imwe chete paDocker host, saka mudziyo nemazita etiweki anofanira kunge akasiyana. Uyezve, miedzo kubva kumapazi akasiyana ebasa rimwe chete inogonawo kumhanya panguva imwe chete, saka hazvina kukwana kunyora mazita avo mune imwe neimwe yekunyora faira.
chisarudzo: Manyorero anoisa COMPOSE_PROJECT_NAME musiyano kune yakakosha kukosha.
Windows Features
Pane zvinhu zvakati wandei zvandinoda kunongedzera kana uchishandisa Docker paWindows, sezvo zviitiko izvi zvakakosha kuti unzwisise kuti sei kukanganisa kuchiitika.
- Shell zvinyorwa mumudziyo zvinofanira kuva neLinux mutsara magumo.
Iyo shell CR chiratidzo chikanganiso che syntax. Zvakaoma kutaura kubva mumhosho meseji kuti ndizvo zvazviri. Paunenge uchigadzirisa zvinyorwa zvakadaro paWindows, unoda yakakodzera mavara edhita. Mukuwedzera, iyo vhezheni yekutonga system inofanirwa kugadzirwa nemazvo.
Aya ndiwo magadzirirwo egit:
git config core.autocrlf input
- Git-bash inotevedzera yakajairwa Linux maforodha uye, kana ichidaidza exe faira (kusanganisira docker.exe), inotsiva yakakwana Linux nzira neWindows nzira. Nekudaro, izvi hazvina musoro kune nzira dzisiri pamushini wemuno (kana nzira dziri mumudziyo). Maitiro aya haagone kudzimwa.
chisarudzo: wedzera imwe slash pakutanga kwenzira: //bin pachinzvimbo che /bin. Linux inonzwisisa nzira dzakadai; nokuda kwayo, akati wandei akacheka akafanana neayo. Asi git-bash haizive nzira dzakadai uye haiedzi kudzishandura.
Log yakabuda
Paunenge uchimhanya bvunzo, ndinoda kuona matanda kubva kuNewman uye sevhisi ichiedzwa. Sezvo zviitiko zveaya matanda akabatana, kusanganisa iwo mune imwe koni kuri nyore kupfuura mafaera maviri akasiyana. Newman inotanga kuburikidza docker-compose run, uye saka kuburitsa kwayo kunopera mukoni. Chasara kuita chokwadi chekuti kuburitsa kwesevhisi kunoendawo ikoko.
Mhinduro yekutanga yaive yekuita docker-kunyora hapana mureza -d, asi uchishandisa iyo shell kugona, tumira maitiro aya kumashure:
docker-compose up <service> &
Izvi zvakashanda kusvika zvave zvakakodzera kutumira matanda kubva kuDocker kuenda kune yechitatu-bato sevhisi. docker-kunyora yakamira kubudisa matanda kune console. Zvisinei, boka racho rakashanda docker inosungirirwa.
chisarudzo:
docker attach --no-stdin ${COMPOSE_PROJECT_NAME}_<ΡΠ΅ΡΠ²ΠΈΡ>_1 &
Identifier kunetsana panguva yekudzokororwa kwebvunzo
Miedzo inoitwa mukudzokorora kwakati. Database haina kucheneswa. Zvinyorwa mudhatabhesi zvine maID akasiyana. Kana tikanyora maID chaiwo muzvikumbiro, tinowana kupokana pakudzokorora kechipiri.
Kuti uzvidzivirire, angave maID anofanira kunge akasiyana, kana zvinhu zvese zvakagadzirwa nebvunzo zvinofanirwa kubviswa. Zvimwe zvinhu hazvigone kudzimwa nekuda kwezvinodiwa.
chisarudzo: gadzira maGUID uchishandisa Postman zvinyorwa.
var uuid = require('uuid');
var myid = uuid.v4();
pm.environment.set('myUUID', myid);
Zvadaro shandisa chiratidzo mumubvunzo {{myUUID}}, iyo ichatsiviwa nekukosha kwekusiyana.
Kudyidzana kuburikidza neLocalStack
Kana sevhisi iri kuedzwa ichiverenga kana kunyorera kumutsara weSQS, zvino kuratidza izvi, bvunzo pachayo inofanirawo kushanda nemutsara uyu.
chisarudzo: zvikumbiro kubva kuPostman kuenda kuLocalStack.
Iyo AWS masevhisi API yakanyorwa, ichibvumira kuti mibvunzo iitwe pasina SDK.
Kana sevhisi inonyorera kumutsara, saka tinoiverenga uye tarisa zviri mukati memeseji.
Kana iyo sevhisi ikatumira mameseji kuSNS, padanho rekugadzirira LocalStack inogadzirawo mutsara uye inonyoresa kune iyi SNS musoro. Zvadaro zvose zvinouya kune zvakatsanangurwa pamusoro apa.
Kana sevhisi ichida kuverenga meseji kubva pamutsetse, saka mune yapfuura bvunzo nhanho tinonyora iyi meseji kumutsara.
Kuedza zvikumbiro zveHTTP zvinobva kune microservice iri pasi pekuyedzwa
Mamwe masevhisi anoshanda pamusoro peHTTP nechimwe chinhu chisiri cheAWS, uye mamwe maAWS maficha haaitwe muLocalStack.
chisarudzo: muzviitiko izvi zvinogona kubatsira
Kuedza OAuth Kutendesa uye Mvumo
Isu tinoshandisa OAuth uye
Kudyidzana kwese pakati pesevhisi nemupi weOAuth kunouya kune zvikumbiro zviviri: chekutanga, kurongeka kunokumbirwa. /.well-known/openid-configuration, uye ipapo kiyi yeruzhinji (JWKS) inokumbirwa kukero kubva pakugadzirisa. Zvese izvi zvine static content.
chisarudzo: Yedu yekuyedza OAuth mupi is static content server uye mafaera maviri pairi. Chiratidzo chinogadzirwa kamwe chete uye chakazvipira kuGit.
Zvimiro zveSignalR bvunzo
Postman haashande nemawebsockets. Chishandiso chakakosha chakagadzirwa kuyedza SignalR.
Mutengi weSignalR anogona kunge anopfuura kungoita browser. Pane raibhurari yemutengi yayo pasi pe.NET Core. Mutengi, akanyorwa mu.NET Core, anomisikidza chinongedzo, anotenderwa, uye anomirira kutevedzana kwemeseji. Kana meseji isingatarisirwi yakagamuchirwa kana kubatana kwakarasika, mutengi anobuda nekodhi ye1. Kana iyo yekupedzisira inotarisirwa meseji yakagamuchirwa, mutengi anobuda nekodhi ye0.
Newman anoshanda panguva imwe chete nemutengi. Vatengi vakati wandei vanotangwa kuti vatarise kuti mameseji anounzwa kune wese anoada.
Kumhanyisa vatengi vakawanda shandisa sarudzo --scale pane docker-compose command line.
Asati amhanya, script yePostman inomirira vatengi vese kuti vatange kubatanidza.
Tatosangana nedambudziko rekumirira kubatana. Asi pakanga paine maseva, uye heino mutengi. Nzira yakasiyana inodiwa.
chisarudzo: mutengi ari mumudziyo anoshandisa michina
HEALTHCHECK --interval=3s CMD if [ ! -e /healthcheck ]; then false; fi
chikwata docker kuongorora Inoratidza iyo yakajairika mamiriro, hutano mamiriro uye yekubuda kodhi yemudziyo.
Mushure mekunge Newman apedza, script inotarisa kuti midziyo yese ine mutengi yapera, nekodhi 0.
Happinnes aripo
Mushure mekunge takunda matambudziko atsanangurwa pamusoro, takava neseti yebvunzo dzakatsiga. Mukuedzwa, sevhisi yega yega inoshanda sechinhu chimwe chete, ichidyidzana nedhatabhesi uye Amazon LocalStack.
Iyi bvunzo inodzivirira timu ye30+ vanogadzira kubva mukukanganisa mukushandisa nekubatana kwakaoma kwegumi + microservices ine kazhinji deployments.
Source: www.habr.com