Microwasanaethau: Mae maint yn bwysig, hyd yn oed os oes gennych Kubernetes

Medi 19 ym Moscow ddigwyddodd y cyfarfod thematig cyntaf HUG (Grŵp Defnyddwyr Highload++), a neilltuwyd i ficrowasanaethau. Cafwyd cyflwyniad “Operating Microservices: Size Matters, Even If You Have Kubernetes,” lle buom yn rhannu profiad helaeth Flant wrth weithredu prosiectau gyda phensaernïaeth microwasanaeth. Yn gyntaf oll, bydd yn ddefnyddiol i bob datblygwr sy'n ystyried defnyddio'r dull hwn yn eu prosiect presennol neu yn y dyfodol.

Microwasanaethau: Mae maint yn bwysig, hyd yn oed os oes gennych Kubernetes

Cyflwyno fideo o'r adroddiad (50 munud, llawer mwy addysgiadol na'r erthygl), yn ogystal â'r prif ddyfyniad ohoni ar ffurf testun.

DS: Mae fideo a chyflwyniad hefyd ar gael ar ddiwedd y post hwn.

Cyflwyniad

Fel arfer mae gan stori dda ddechrau, prif blot a phenderfyniad. Mae'r adroddiad hwn yn debycach i ragarweiniad, ac yn un trasig ar hynny. Mae hefyd yn bwysig nodi ei fod yn rhoi barn rhywun o'r tu allan am ficrowasanaethau. Gweithredu.

Dechreuaf gyda'r graff hwn, y mae ei awdur (yn 2015) Roedd Martin Fowler:

Microwasanaethau: Mae maint yn bwysig, hyd yn oed os oes gennych Kubernetes

Mae'n dangos sut, yn achos cais monolithig sy'n cyrraedd gwerth penodol, mae cynhyrchiant yn dechrau dirywio. Mae microwasanaethau yn wahanol gan fod y cynhyrchiant cychwynnol gyda nhw yn is, ond wrth i gymhlethdod gynyddu, nid yw'r dirywiad mewn effeithlonrwydd mor amlwg iddynt.

Byddaf yn ychwanegu at y graff hwn yn achos defnyddio Kubernetes:

Microwasanaethau: Mae maint yn bwysig, hyd yn oed os oes gennych Kubernetes

Pam mae cymhwysiad gyda microwasanaethau yn well? Oherwydd bod pensaernïaeth o'r fath yn cyflwyno gofynion difrifol ar gyfer y bensaernïaeth, sydd yn eu tro yn cael eu cwmpasu'n berffaith gan alluoedd Kubernetes. Ar y llaw arall, bydd rhywfaint o'r swyddogaeth hon yn ddefnyddiol ar gyfer monolith, yn enwedig oherwydd nad yw'r monolith nodweddiadol heddiw yn union monolith (bydd y manylion yn ddiweddarach yn yr adroddiad).

Fel y gwelwch, nid yw'r graff terfynol (pan fo cymwysiadau monolithig a microwasanaeth yn y seilwaith gyda Kubernetes) yn wahanol iawn i'r un gwreiddiol. Nesaf byddwn yn siarad am gymwysiadau a weithredir gan ddefnyddio Kubernetes.

Microwasanaethau defnyddiol a niweidiol

A dyma'r prif syniad:

Microwasanaethau: Mae maint yn bwysig, hyd yn oed os oes gennych Kubernetes

Beth yw arferol pensaernïaeth microwasanaeth? Dylai ddod â buddion gwirioneddol i chi, gan gynyddu eich effeithlonrwydd gwaith. Os awn yn ôl at y graff, dyma fe:

Microwasanaethau: Mae maint yn bwysig, hyd yn oed os oes gennych Kubernetes

Os ffoniwch hi defnyddiol, yna ar ochr arall y graff bydd niweidiol microwasanaethau (yn amharu ar waith):

Microwasanaethau: Mae maint yn bwysig, hyd yn oed os oes gennych Kubernetes

Dychwelyd at y “prif syniad”: a ddylwn ymddiried yn fy mhrofiad o gwbl? Ers dechrau'r flwyddyn hon rwyf wedi edrych 85 prosiect. Nid oedd pob un ohonynt yn ficrowasanaethau (roedd gan tua thraean i hanner ohonynt bensaernïaeth o'r fath), ond mae hyn yn dal i fod yn nifer fawr. Rydym ni (cwmni Flant) fel cwmnïau allanol yn llwyddo i weld amrywiaeth eang o gymwysiadau yn cael eu datblygu mewn cwmnïau bach (gyda 5 datblygwr) ac mewn rhai mawr (~500 o ddatblygwyr). Mantais ychwanegol yw ein bod yn gweld y cymwysiadau hyn yn fyw ac yn esblygu dros y blynyddoedd.

Pam microwasanaethau?

I'r cwestiwn am fanteision microwasanaethau mae yna ateb penodol iawn gan y Martin Fowler y soniwyd amdano eisoes:

  1. ffiniau modularity clir;
  2. lleoli annibynnol;
  3. rhyddid i ddewis technolegau.

Rwyf wedi siarad llawer â phenseiri meddalwedd a datblygwyr ac wedi gofyn pam fod angen microwasanaethau arnynt. Ac fe wnes i fy rhestr o'u disgwyliadau. Dyma beth ddigwyddodd:

Microwasanaethau: Mae maint yn bwysig, hyd yn oed os oes gennych Kubernetes

Os disgrifiwn rai o’r pwyntiau “mewn synhwyrau,” yna:

  • ffiniau clir modiwlau: yma mae gennym monolith ofnadwy, a nawr bydd popeth wedi'i drefnu'n daclus yn ystorfeydd Git, lle mae popeth “ar y silffoedd”, nid yw'r cynnes a'r meddal yn gymysg;
  • annibyniaeth lleoli: byddwn yn gallu cyflwyno gwasanaethau'n annibynnol fel bod datblygiad yn mynd yn gyflymach (cyhoeddi nodweddion newydd ochr yn ochr);
  • annibyniaeth datblygu: gallwn roi'r meicrowasanaeth hwn i un tîm/datblygwr, a'r gwasanaeth hwnnw i'r llall, y gallwn ei ddatblygu'n gyflymach oherwydd hynny;
  • боmwy o ddibynadwyedd: os bydd diraddiad rhannol yn digwydd (mae un microwasanaeth allan o 20 yn cwympo), yna dim ond un botwm fydd yn rhoi'r gorau i weithio, a bydd y system gyfan yn parhau i weithredu.

Pensaernïaeth microwasanaeth nodweddiadol (niweidiol).

I egluro pam nad realiti yw'r hyn yr ydym yn ei ddisgwyl, byddaf yn cyflwyno cyfunol delwedd o bensaernïaeth microwasanaeth yn seiliedig ar brofiad o lawer o brosiectau gwahanol.

Enghraifft fyddai siop ar-lein haniaethol sy'n mynd i gystadlu ag Amazon neu o leiaf OZON. Mae ei bensaernïaeth microwasanaeth yn edrych fel hyn:

Microwasanaethau: Mae maint yn bwysig, hyd yn oed os oes gennych Kubernetes

Am gyfuniad o resymau, mae'r microwasanaethau hyn yn cael eu hysgrifennu ar wahanol lwyfannau:

Microwasanaethau: Mae maint yn bwysig, hyd yn oed os oes gennych Kubernetes

Gan fod yn rhaid i bob microwasanaeth gael ymreolaeth, mae angen eu cronfa ddata a'u storfa eu hunain ar lawer ohonynt. Mae'r bensaernïaeth derfynol fel a ganlyn:

Microwasanaethau: Mae maint yn bwysig, hyd yn oed os oes gennych Kubernetes

Beth yw ei ganlyniadau?

Mae gan Fowler hwn hefyd mae yna erthygl — ynghylch y “taliad” am ddefnyddio microwasanaethau:

Microwasanaethau: Mae maint yn bwysig, hyd yn oed os oes gennych Kubernetes

A chawn weld a fodlonwyd ein disgwyliadau.

Ffiniau clir o fodiwlau...

Ond faint o ficrowasanaethau sydd angen i ni eu trwsio mewn gwirionedd?i gyflwyno'r newid? A allwn ni hyd yn oed ddarganfod sut mae popeth yn gweithio heb olrheiniwr dosbarthedig (wedi'r cyfan, mae unrhyw gais yn cael ei brosesu gan hanner y microwasanaethau)?

Mae yna batrwm"lwmp mawr o faw“, ac yma trodd allan i fod yn lwmp gwasgaredig o faw. I gadarnhau hyn, dyma fraslun o sut mae ceisiadau’n mynd:

Microwasanaethau: Mae maint yn bwysig, hyd yn oed os oes gennych Kubernetes

Annibyniaeth lleoli...

Yn dechnegol, mae wedi'i gyflawni: gallwn gyflwyno pob microwasanaeth ar wahân. Ond yn ymarferol mae angen i chi gymryd i ystyriaeth ei fod bob amser yn cael ei gyflwyno llawer o ficrowasanaethau, ac mae angen inni gymryd i ystyriaeth trefn eu cyflwyno. Mewn ffordd dda, yn gyffredinol mae angen i ni brofi mewn cylched ar wahân a ydym yn cyflwyno'r rhyddhau yn y drefn gywir.

Rhyddid i ddewis technoleg...

Mae hi yn. Cofiwch fod rhyddid yn aml yn ymylu ar anghyfraith. Mae'n bwysig iawn yma i beidio â dewis technolegau dim ond i "chwarae" gyda nhw.

Annibyniaeth datblygiad...

Sut i wneud dolen brawf ar gyfer y cais cyfan (gyda chymaint o gydrannau)? Ond mae dal angen i chi ei gadw'n gyfredol. Mae hyn i gyd yn arwain at y ffaith bod nifer gwirioneddol y cylchedau prawf, y gallwn mewn egwyddor ei gynnwys, troi allan i fod yn fach iawn.

Beth am ddefnyddio hyn i gyd yn lleol?.. Mae'n ymddangos bod y datblygwr yn aml yn gwneud ei waith yn annibynnol, ond "ar hap", oherwydd ei fod yn cael ei orfodi i aros nes bod y gylched yn rhydd i'w phrofi.

Graddio ar wahân...

Ydy, ond mae'n gyfyngedig yn ardal y DBMS a ddefnyddir. Yn yr enghraifft pensaernïaeth a roddir, ni fydd gan Cassandra broblemau, ond bydd MySQL a PostgreSQL.

Боmwy o ddibynadwyedd ...

Nid yn unig y mae methiant un microwasanaeth mewn gwirionedd yn aml yn torri gweithrediad cywir y system gyfan, ond mae problem newydd hefyd: mae'n anodd iawn gwneud pob microwasanaeth yn oddefgar o namau. Oherwydd bod microwasanaethau'n defnyddio gwahanol dechnolegau (memcache, Redis, ac ati), ar gyfer pob un mae angen i chi feddwl am bopeth a'i weithredu, sydd, wrth gwrs, yn bosibl, ond mae angen adnoddau enfawr.

Mesuradwyedd llwyth...

Mae hyn yn dda iawn.

"ysgafnder" microwasanaethau ...

Mae gennym nid yn unig enfawr rhwydwaith uwchben (mae ceisiadau am DNS yn lluosi, ac ati), ond hefyd oherwydd y nifer o subqueries a ddechreuwyd gennym atgynhyrchu data (storfa caches), a arweiniodd at lawer iawn o storio.

A dyma ganlyniad cyflawni ein disgwyliadau:

Microwasanaethau: Mae maint yn bwysig, hyd yn oed os oes gennych Kubernetes

Ond nid dyna'r cyfan!

Oherwydd:

  • Mae'n debyg y bydd angen bws neges arnom.
  • Sut i wneud copi wrth gefn cyson ar yr adeg gywir? Yr unig un go iawn opsiwn yw diffodd traffig ar gyfer hyn. Ond sut i wneud hyn wrth gynhyrchu?
  • Os ydym yn sôn am gefnogi sawl rhanbarth, yna mae trefnu cynaliadwyedd ym mhob un ohonynt yn dasg llafurddwys iawn.
  • Mae'r broblem o wneud newidiadau canolog yn codi. Er enghraifft, os oes angen i ni ddiweddaru'r fersiwn PHP, bydd angen i ni ymrwymo i bob ystorfa (ac mae yna ddwsinau ohonyn nhw).
  • Mae'r twf mewn cymhlethdod gweithredol yn ddiarffordd, yn esbonyddol.

Beth i'w wneud â hyn i gyd?

Dechreuwch gyda chymhwysiad monolithig. Profiad Fowler meddai bod bron pob cais microservice llwyddiannus wedi dechrau fel monolith a ddaeth yn rhy fawr ac yna'n cael ei dorri. Ar yr un pryd, roedd bron pob system a adeiladwyd fel microwasanaethau o'r cychwyn cyntaf yn hwyr neu'n hwyrach wedi profi problemau difrifol.

Syniad gwerthfawr arall yw, er mwyn i brosiect gyda phensaernïaeth microwasanaeth fod yn llwyddiannus, mae'n rhaid i chi wybod yn iawn a maes pwnc, a sut i wneud microwasanaethau. A'r ffordd orau o ddysgu maes pwnc yw gwneud monolith.

Ond beth os ydym eisoes yn y sefyllfa hon?

Y cam cyntaf i ddatrys unrhyw broblem yw cytuno ag ef a deall ei bod yn broblem, nad ydym am ddioddef mwyach.

Os, yn achos monolith sydd wedi gordyfu (pan fyddwn wedi rhedeg allan o'r cyfle i brynu adnoddau ychwanegol ar ei gyfer), rydym yn ei dorri, yna yn yr achos hwn mae'r stori gyferbyn yn troi allan: pan nad yw microwasanaethau gormodol bellach yn helpu, ond yn rhwystro - torri i ffwrdd gormodedd a helaethu!

Er enghraifft, ar gyfer y ddelwedd gyfunol a drafodwyd uchod...

Cael gwared ar y microwasanaethau mwyaf amheus:

Microwasanaethau: Mae maint yn bwysig, hyd yn oed os oes gennych Kubernetes

Cyfuno'r holl ficrowasanaethau sy'n gyfrifol am gynhyrchu pen blaen:

Microwasanaethau: Mae maint yn bwysig, hyd yn oed os oes gennych Kubernetes

... mewn un meicrowasanaeth, wedi'i ysgrifennu mewn un iaith/fframwaith (modern ac arferol, fel y credwch chi eich hun):

Microwasanaethau: Mae maint yn bwysig, hyd yn oed os oes gennych Kubernetes

Bydd ganddo un ORM (un DBMS) ac yn gyntaf cwpl o geisiadau:

Microwasanaethau: Mae maint yn bwysig, hyd yn oed os oes gennych Kubernetes

... ond yn gyffredinol gallwch drosglwyddo llawer mwy yno, gan gael y canlyniad canlynol:

Microwasanaethau: Mae maint yn bwysig, hyd yn oed os oes gennych Kubernetes

Ar ben hynny, yn Kubernetes rydym yn rhedeg hyn i gyd mewn achosion ar wahân, sy'n golygu y gallwn barhau i fesur y llwyth a'u graddio ar wahân.

I grynhoi

Edrychwch ar y llun mwy. Yn aml iawn, mae'r holl broblemau hyn gyda microwasanaethau yn codi oherwydd bod rhywun wedi cymryd ei dasg, ond eisiau "chwarae gyda microwasanaethau".

Yn y gair "microservices" mae'r rhan "micro" yn ddiangen.. Maent yn “micro” dim ond oherwydd eu bod yn llai na monolith enfawr. Ond peidiwch â meddwl amdanyn nhw fel rhywbeth bach.

Ac i feddwl yn derfynol, gadewch inni ddychwelyd at y siart wreiddiol:

Microwasanaethau: Mae maint yn bwysig, hyd yn oed os oes gennych Kubernetes

Nodyn wedi ei ysgrifennu arno (dde uchaf) yn berwi i lawr i'r ffaith bod mae sgiliau'r tîm sy'n gwneud eich prosiect bob amser yn gynradd — byddant yn chwarae rhan allweddol yn eich dewis rhwng microwasanaethau a monolith. Os nad oes gan y tîm ddigon o sgiliau, ond mae'n dechrau gwneud microwasanaethau, bydd y stori'n bendant yn angheuol.

Fideos a sleidiau

Fideo o'r araith (~50 munud; yn anffodus, nid yw'n cyfleu emosiynau niferus yr ymwelwyr, a oedd i raddau helaeth yn pennu naws yr adroddiad, ond dyna fel y mae):

Cyflwyniad yr adroddiad:

PS

Adroddiadau eraill ar ein blog:

Efallai y bydd gennych ddiddordeb hefyd yn y cyhoeddiadau canlynol:

Ffynhonnell: hab.com

Ychwanegu sylw