Microservices - ffrwydrad combinatorial o fersiynau

Helo, Habr! Cyflwynaf i'ch sylw cyfieithiad yr awdur o'r erthygl Microwasanaethau - Ffrwydrad Cyfunol o Fersiynau.
Microservices - ffrwydrad combinatorial o fersiynau
Ar adeg pan fo'r byd TG yn symud yn raddol tuag at ficrowasanaethau ac offer fel Kubernetes, dim ond un broblem sy'n dod yn fwyfwy amlwg. Mae'r broblem hon - ffrwydrad combinatorial fersiynau microwasanaeth. Eto i gyd, mae'r gymuned TG yn credu bod y sefyllfa bresennol yn llawer gwell na "Dibyniaeth uffern" genhedlaeth flaenorol o dechnoleg. Fodd bynnag, mae fersiynau microservices yn broblem gymhleth iawn. Gall un prawf o hyn fod yn erthyglau fel "Rhowch fy monolith yn ôl i mi".

Os nad ydych chi'n deall y broblem o hyd trwy ddarllen y testun hwn, gadewch i mi egluro. Gadewch i ni ddweud bod eich cynnyrch yn cynnwys 10 microwasanaeth. Nawr, gadewch i ni dybio bod 1 fersiwn newydd yn cael ei ryddhau ar gyfer pob un o'r microwasanaethau hyn. Dim ond 1 fersiwn - gobeithio y gallwn ni gyd gytuno bod hon yn ffaith ddibwys a di-nod iawn. Nawr, fodd bynnag, gadewch i ni edrych eto ar ein cynnyrch. Gyda dim ond un fersiwn newydd o bob cydran, mae gennym bellach 2^10 - neu 1024 o gyfnewidiadau o sut y gellir cyfansoddi ein cynnyrch.

Os oes unrhyw gamddealltwriaeth o hyd, gadewch imi dorri'r mathemateg i lawr. Felly mae gennym 10 microwasanaeth, pob un yn derbyn un diweddariad. Hynny yw, rydyn ni'n cael 2 fersiwn bosibl ar gyfer pob microwasanaeth (naill ai hen neu newydd). Nawr, ar gyfer pob un o gydrannau'r cynnyrch, gallwn ddefnyddio'r naill neu'r llall o'r ddwy fersiwn hyn. Yn fathemategol, mae'r un peth â phe bai gennym rif deuaidd o 10 digid. Er enghraifft, gadewch i ni ddweud mai 1 yw'r fersiwn newydd, a 0 yw'r hen fersiwn - yna gellir dynodi un permutation posibl fel 1001000000 - lle mae'r cydrannau 1af a 4ydd yn cael eu diweddaru, ac nid yw'r lleill i gyd. O fathemateg rydym yn gwybod y gall rhif deuaidd 10 digid fod â gwerthoedd 2^10 neu 1024. Hynny yw, rydym wedi cadarnhau maint y nifer yr ydym yn delio â nhw.

Gadewch i ni barhau â'n rhesymu ymhellach - beth fydd yn digwydd os bydd gennym 100 o ficrowasanaethau a bod gan bob un 10 fersiwn bosibl? Mae'r sefyllfa gyfan yn mynd yn eithaf annymunol - mae gennym ni 10^100 o drynewidiadau erbyn hyn - sy'n nifer enfawr. Fodd bynnag, mae’n well gen i labelu’r sefyllfa hon fel hyn, oherwydd yn awr nid ydym bellach yn cuddio y tu ôl i eiriau fel “kubernetes”, ond yn hytrach yn wynebu’r broblem fel y mae.

Pam ydw i wedi fy swyno cymaint gan y broblem hon? Yn rhannol oherwydd, ar ôl gweithio ym myd NLP ac AI o'r blaen, buom yn trafod problem ffrwydrad cyfunol gryn dipyn tua 5-6 mlynedd yn ôl. Dim ond yn lle fersiynau roedd gennym eiriau unigol, ac yn lle cynhyrchion roedd gennym frawddegau a pharagraffau. Ac er bod problemau NLP ac AI heb eu datrys i raddau helaeth, rhaid cyfaddef bod cynnydd sylweddol wedi'i wneud dros yr ychydig flynyddoedd diwethaf. (yn fy marn i, gellid gwneud cynnyddоByddai'n well pe bai pobl yn y diwydiant yn talu ychydig llai o sylw i ddysgu peiriannau ac ychydig mwy i dechnegau eraill - ond nid yw hyn eisoes yn destun).

Gadewch i ni ddychwelyd i fyd DevOps a microservices. Rydyn ni'n wynebu problem enfawr, yn ffugio fel eliffant yn y Kunstkamera - oherwydd yr hyn rydw i'n ei glywed yn aml yw "cymerwch kubernetes a helm, a bydd popeth yn iawn!" Ond na, ni fydd popeth yn iawn os caiff popeth ei adael fel y mae. At hynny, nid yw datrysiad dadansoddol i'r broblem hon yn ymddangos yn dderbyniol oherwydd ei gymhlethdod. Fel yn NLP, dylem fynd i'r afael â'r broblem hon yn gyntaf trwy gulhau'r cwmpas chwilio - yn yr achos hwn, trwy ddileu cyfnewidiadau hen ffasiwn.

Un o'r pethau a allai helpu yw rhywbeth ysgrifennais y llynedd am yr angen i gadw'r gwahaniaeth lleiaf rhwng fersiynau sy'n cael eu postio ar gyfer cleientiaid. Mae hefyd yn bwysig nodi bod proses CI/CD sydd wedi'i dylunio'n dda yn gymorth mawr i leihau amrywiadau. Fodd bynnag, nid yw'r sefyllfa bresennol gyda CI/CD yn ddigon da i ddatrys y broblem o gyfnewidiadau heb offer ychwanegol ar gyfer cyfrifo ac olrhain cydrannau.

Yr hyn sydd ei angen arnom yw system o arbrofi yn y cam integreiddio, lle gallwn bennu'r ffactor risg ar gyfer pob cydran, a hefyd cael proses awtomataidd ar gyfer diweddaru gwahanol gydrannau a phrofi heb ymyrraeth gweithredwr - i weld beth sy'n gweithio a beth nad yw'n gweithio.

Gallai system o arbrofion o'r fath edrych fel hyn:

  1. Mae datblygwyr yn ysgrifennu profion (mae hwn yn gam hollbwysig - oherwydd fel arall nid oes gennym unrhyw faen prawf gwerthuso - mae fel data labelu mewn dysgu peiriant).
  2. Mae pob cydran (prosiect) yn derbyn ei system CI ei hun - mae'r broses hon bellach wedi'i datblygu'n dda, ac mae'r mater o greu system CI ar gyfer un gydran wedi'i ddatrys i raddau helaeth.
  3. Mae'r “system integreiddio craff” yn casglu canlyniadau amrywiol systemau CI ac yn cydosod prosiectau cydrannol i'r cynnyrch terfynol, yn cynnal profion ac yn olaf yn cyfrifo'r llwybr byrraf i gael y swyddogaeth cynnyrch a ddymunir yn seiliedig ar gydrannau a ffactorau risg presennol. Os nad yw diweddariad yn bosibl, mae'r system hon yn hysbysu datblygwyr am y cydrannau presennol a pha rai ohonynt sy'n achosi'r gwall. Unwaith eto, mae'r system brawf yn hollbwysig yma - gan fod y system integreiddio yn defnyddio profion fel maen prawf gwerthuso.
  4. System CD, sydd wedyn yn derbyn data o'r System Integreiddio Clyfar ac yn perfformio'r diweddariad yn uniongyrchol. Mae'r cam hwn yn dod â'r cylch i ben.

I grynhoi, i mi un o'r problemau mwyaf nawr yw diffyg “System Integreiddio Clyfar” a fyddai'n cysylltu'r gwahanol gydrannau â chynnyrch ac felly'n caniatáu ichi olrhain sut mae'r cynnyrch cyfan yn cael ei roi at ei gilydd. Bydd gen i ddiddordeb ym meddyliau'r gymuned ar hyn (spoiler - rwy'n gweithio ar brosiect ar hyn o bryd Reliza, a all ddod yn system integreiddio mor smart).

Un peth olaf yr wyf am ei grybwyll yw, i mi, nid yw monolith yn dderbyniol ar gyfer unrhyw brosiect o faint canolig hyd yn oed. I mi, mae ymdrechion i gyflymu amser gweithredu ac ansawdd datblygiad trwy ddychwelyd i fonolith yn achosi amheuaeth fawr. Yn gyntaf, mae gan monolith broblem debyg o reoli cydrannau - ymhlith y gwahanol lyfrgelloedd y mae'n eu cynnwys, fodd bynnag, nid yw hyn i gyd mor amlwg ac mae'n amlygu ei hun yn bennaf yn yr amser a dreulir gan ddatblygwyr. Canlyniad y broblem monolith yw'r amhosibl rhithwir o wneud newidiadau i'r cod - a chyflymder datblygu hynod o araf.

Mae microservices yn gwella'r sefyllfa, ond yna mae'r bensaernïaeth microservice yn wynebu'r broblem o ffrwydrad combinatorial yn y cam integreiddio. Ydym, yn gyffredinol, rydym wedi symud yr un broblem o'r cam datblygu i'r cam integreiddio. Fodd bynnag, yn fy marn i, mae'r dull microservices yn dal i arwain at ganlyniadau gwell, ac mae timau'n cyflawni canlyniadau'n gyflymach (yn ôl pob tebyg yn bennaf oherwydd y gostyngiad ym maint yr uned ddatblygu - neu maint swp). Fodd bynnag, nid yw symud o monolith i ficrowasanaethau wedi gwella'r broses ddigon eto - mae'r ffrwydrad cyfunol o fersiynau microservice yn broblem enfawr, ac mae gennym lawer o botensial i wella'r sefyllfa wrth i ni ei datrys.

Ffynhonnell: hab.com

Ychwanegu sylw