Microservices: Awọn ọrọ iwọn, paapaa ti o ba ni Kubernetes

Oṣu Kẹsan 19 ni Moscow waye akọkọ thematic ipade HUG (Highload ++ User Group), eyi ti a ti igbẹhin si microservices. Igbejade kan wa “Awọn iṣẹ Microservices ti nṣiṣẹ: Awọn ọrọ iwọn, Paapaa Ti o ba Ni Kubernetes,” ninu eyiti a pin iriri nla ti Flant ni awọn iṣẹ akanṣe pẹlu faaji microservice. Ni akọkọ, yoo wulo fun gbogbo awọn olupilẹṣẹ ti o ronu nipa lilo ọna yii ni lọwọlọwọ tabi iṣẹ akanṣe ọjọ iwaju.

Microservices: Awọn ọrọ iwọn, paapaa ti o ba ni Kubernetes

Iṣafihan fidio iroyin (Awọn iṣẹju 50, alaye pupọ diẹ sii ju nkan naa lọ), bakanna bi abajade akọkọ lati inu rẹ ni fọọmu ọrọ.

NB: Fidio ati igbejade tun wa ni ipari ifiweranṣẹ yii.

Ifihan

Nigbagbogbo itan ti o dara ni ibẹrẹ, idite akọkọ ati ipinnu kan. Ijabọ yii dabi iṣaaju, ati pe o buruju ni iyẹn. O tun ṣe pataki lati ṣe akiyesi pe o pese wiwo ti ita ti awọn iṣẹ microservices. ilokulo.

Emi yoo bẹrẹ pẹlu iwọn yii, onkọwe eyiti (ni ọdun 2015) di Martin Fowler:

Microservices: Awọn ọrọ iwọn, paapaa ti o ba ni Kubernetes

O fihan bi, ninu ọran ti ohun elo monolithic kan ti o de iye kan, iṣelọpọ bẹrẹ lati kọ. Awọn iṣẹ microservices yatọ si ni pe iṣelọpọ akọkọ pẹlu wọn dinku, ṣugbọn bi idiju ṣe pọ si, ibajẹ ni ṣiṣe kii ṣe akiyesi pupọ fun wọn.

Emi yoo ṣafikun si aworan yii fun ọran lilo Kubernetes:

Microservices: Awọn ọrọ iwọn, paapaa ti o ba ni Kubernetes

Kini idi ti ohun elo pẹlu awọn iṣẹ microservice dara julọ? Nitoripe iru faaji n gbe awọn ibeere pataki siwaju siwaju fun faaji, eyiti o jẹ bo ni pipe nipasẹ awọn agbara ti Kubernetes. Ni apa keji, diẹ ninu awọn iṣẹ ṣiṣe yii yoo wulo fun monolith kan, paapaa nitori pe monolith aṣoju loni kii ṣe monolith gangan (awọn alaye yoo jẹ igbamiiran ninu ijabọ naa).

Bii o ti le rii, ayaworan ti o kẹhin (nigbati mejeeji monolithic ati awọn ohun elo microservice wa ninu awọn amayederun pẹlu Kubernetes) ko yatọ pupọ si atilẹba. Nigbamii a yoo sọrọ nipa awọn ohun elo ti a ṣiṣẹ nipa lilo Kubernetes.

Wulo ati ipalara microservices

Ati pe eyi ni imọran akọkọ:

Microservices: Awọn ọrọ iwọn, paapaa ti o ba ni Kubernetes

Kini o jẹ deede microservice faaji? O yẹ ki o mu awọn anfani gidi wa, jijẹ iṣẹ ṣiṣe rẹ pọ si. Ti a ba pada si aworan atọka, eyi ni:

Microservices: Awọn ọrọ iwọn, paapaa ti o ba ni Kubernetes

Ti o ba pe e wulo, lẹhinna ni apa keji ti aworan naa yoo wa ipalara awọn iṣẹ microservices (ṣe idiwọ iṣẹ):

Microservices: Awọn ọrọ iwọn, paapaa ti o ba ni Kubernetes

Pada si "ero akọkọ": Ṣe Mo gbẹkẹle iriri mi rara? Lati ibere odun yi ni mo ti wò 85 ise agbese. Kii ṣe gbogbo wọn jẹ awọn iṣẹ microservices (nipa idamẹta si idaji ninu wọn ni iru faaji), ṣugbọn eyi tun jẹ nọmba nla. A (ile-iṣẹ Flant) bi awọn olutaja n ṣakoso lati rii ọpọlọpọ awọn ohun elo ti o ni idagbasoke mejeeji ni awọn ile-iṣẹ kekere (pẹlu awọn olupilẹṣẹ 5) ati ni awọn nla (~ awọn olupilẹṣẹ 500). Anfaani afikun ni pe a rii awọn ohun elo wọnyi laaye ati dagbasoke ni awọn ọdun.

Kí nìdí microservices?

Si ibeere nipa awọn anfani ti awọn microservices wa gan pato idahun lati Martin Fowler ti a ti sọ tẹlẹ:

  1. ko awọn aala ti modularity;
  2. ominira imuṣiṣẹ;
  3. ominira lati yan awọn imọ-ẹrọ.

Mo ti sọrọ pupọ si awọn ayaworan sọfitiwia ati awọn olupilẹṣẹ ati beere idi ti wọn nilo awọn iṣẹ microservices. Ati pe Mo ṣe atokọ mi ti awọn ireti wọn. Eyi ni ohun ti o ṣẹlẹ:

Microservices: Awọn ọrọ iwọn, paapaa ti o ba ni Kubernetes

Ti a ba ṣe apejuwe diẹ ninu awọn aaye “ninu awọn imọlara,” lẹhinna:

  • ko awọn aala ti awọn modulu: nibi a ni monolith ẹru, ati ni bayi ohun gbogbo yoo wa ni idayatọ daradara ni awọn ibi ipamọ Git, ninu eyiti ohun gbogbo wa “lori awọn selifu”, gbona ati rirọ ko ni idapọ;
  • ominira imuṣiṣẹ: a yoo ni anfani lati yi awọn iṣẹ jade ni ominira ki idagbasoke le yarayara (jade awọn ẹya tuntun ni afiwe);
  • ominira idagbasoke: a le fun yi microservice si ọkan egbe / Olùgbéejáde, ati awọn ti o ọkan si miiran, ọpẹ si eyi ti a le se agbekale yiyara;
  • боigbẹkẹle ti o ga julọ: ti ibajẹ apakan ba waye (microservice kan ninu 20 ṣubu), lẹhinna bọtini kan nikan yoo da iṣẹ duro, ati pe eto naa lapapọ yoo tẹsiwaju lati ṣiṣẹ.

Aṣoju (ipalara) microservice faaji

Lati ṣe alaye idi ti otitọ kii ṣe ohun ti a nireti, Emi yoo ṣafihan apapọ aworan ti faaji microservice ti o da lori iriri lati ọpọlọpọ awọn iṣẹ akanṣe.

Apeere kan yoo jẹ ile itaja ori ayelujara ti o jẹ abẹrẹ ti yoo dije pẹlu Amazon tabi o kere ju OZON. Itumọ ile-iṣẹ microservice rẹ dabi eyi:

Microservices: Awọn ọrọ iwọn, paapaa ti o ba ni Kubernetes

Fun apapọ awọn idi, awọn iṣẹ microservices wọnyi ni a kọ sori awọn iru ẹrọ oriṣiriṣi:

Microservices: Awọn ọrọ iwọn, paapaa ti o ba ni Kubernetes

Niwọn bi microservice kọọkan gbọdọ ni ominira, ọpọlọpọ ninu wọn nilo aaye data tiwọn ati kaṣe. Ipari faaji jẹ bi atẹle:

Microservices: Awọn ọrọ iwọn, paapaa ti o ba ni Kubernetes

Kí ni àbájáde rẹ̀?

Fowler ni eyi paapaa nkan kan wa - nipa “owo sisan” fun lilo awọn iṣẹ microservice:

Microservices: Awọn ọrọ iwọn, paapaa ti o ba ni Kubernetes

Ati pe a yoo rii boya awọn ireti wa ba pade.

Ko awọn aala ti awọn modulu kuro...

ṣugbọn Bawo ni ọpọlọpọ awọn microservices ni a kosi nilo a fix?lati yi iyipada pada? Njẹ a le paapaa mọ bi ohun gbogbo ṣe n ṣiṣẹ laisi olutọpa pinpin (lẹhinna, eyikeyi ibeere ti wa ni ilọsiwaju nipasẹ idaji awọn iṣẹ microservices)?

Ilana kan wa"odidi nla ti idoti“, ati nihin o yipada lati jẹ odidi ti a pin kaakiri. Lati jẹrisi eyi, eyi ni apejuwe isunmọ ti bii awọn ibeere ṣe lọ:

Microservices: Awọn ọrọ iwọn, paapaa ti o ba ni Kubernetes

Ominira imuṣiṣẹ...

Ni imọ-ẹrọ, o ti ṣaṣeyọri: a le yipo microservice kọọkan lọtọ. Ṣugbọn ni iṣe o nilo lati ṣe akiyesi pe o yipo nigbagbogbo ọpọlọpọ awọn microservices, ati pe a nilo lati ṣe akiyesi aṣẹ ti wọn rollout. Ni ọna ti o dara, gbogbo wa nilo lati ṣe idanwo ni iyika lọtọ boya a n yi itusilẹ jade ni ilana to pe.

Ominira lati yan imọ-ẹrọ ...

O n ni. O kan ranti pe ominira nigbagbogbo ni opin lori iwa-ailofin. O ṣe pataki pupọ nibi lati ma yan awọn imọ-ẹrọ nikan lati “ṣere” pẹlu wọn.

Ominira ti idagbasoke ...

Bii o ṣe le ṣe loop idanwo fun gbogbo ohun elo (pẹlu ọpọlọpọ awọn paati)? Ṣugbọn o tun nilo lati tọju rẹ titi di oni. Gbogbo eyi nyorisi si otitọ pe gangan nọmba ti igbeyewo iyika, eyiti a le ni ipilẹ ninu, wa ni jade lati wa ni iwonba.

Bawo ni nipa gbigbe gbogbo eyi ni agbegbe? .. O wa ni pe nigbagbogbo olupilẹṣẹ ṣe iṣẹ rẹ ni ominira, ṣugbọn "ni ID", nitori pe o fi agbara mu lati duro titi ti Circuit yoo fi jẹ ọfẹ fun idanwo.

Irẹjẹ lọtọ...

Bẹẹni, ṣugbọn o ni opin ni agbegbe ti DBMS ti a lo. Ninu apẹẹrẹ faaji ti a fun, Cassandra kii yoo ni awọn iṣoro, ṣugbọn MySQL ati PostgreSQL yoo.

Боigbẹkẹle ti o ga julọ ...

Kii ṣe nikan ikuna ti microservice kan ni otitọ nigbagbogbo fọ iṣẹ ṣiṣe deede ti gbogbo eto, ṣugbọn iṣoro tuntun tun wa: ṣiṣe gbogbo microservice ẹbi-ọlọdun jẹ gidigidi soro. Nitori awọn microservices lo awọn imọ-ẹrọ oriṣiriṣi (memcache, Redis, bbl), fun ọkọọkan o nilo lati ronu nipasẹ ohun gbogbo ki o ṣe imuse rẹ, eyiti, dajudaju, ṣee ṣe, ṣugbọn nilo awọn orisun nla.

Iṣawọn fifuye...

Eyi dara gaan.

“Imọlẹ” ti awọn iṣẹ microservices…

A ko ni tobi nikan oke nẹtiwọki (ibeere fun DNS ti wa ni isodipupo, ati be be lo), sugbon tun nitori awọn ọpọlọpọ awọn subqueries ti a bere tun data (awọn ile itaja itaja), eyiti o yori si iye pataki ti ipamọ.

Ati pe eyi ni abajade ti ipade awọn ireti wa:

Microservices: Awọn ọrọ iwọn, paapaa ti o ba ni Kubernetes

Sugbon ti o ni ko gbogbo!

Nitoripe:

  • O ṣeese julọ a yoo nilo ọkọ akero ifiranṣẹ kan.
  • Bii o ṣe le ṣe afẹyinti deede ni aaye ti o fẹ ni akoko? Nikan kan gidi aṣayan ni lati pa ijabọ fun eyi. Ṣugbọn bi o ṣe le ṣe eyi ni iṣelọpọ?
  • Ti a ba n sọrọ nipa atilẹyin awọn agbegbe pupọ, lẹhinna siseto iduroṣinṣin ni ọkọọkan wọn jẹ iṣẹ-ṣiṣe ti o lagbara pupọ.
  • Iṣoro ti ṣiṣe awọn ayipada aarin dide. Fun apẹẹrẹ, ti a ba nilo lati ṣe imudojuiwọn ẹya PHP, a yoo nilo lati ṣe si ibi ipamọ kọọkan (ati pe ọpọlọpọ wọn wa).
  • Idagba ninu idiju iṣiṣẹ jẹ, aiṣedeede, alapin.

Kini lati ṣe pẹlu gbogbo eyi?

Bẹrẹ pẹlu ohun elo monolithic kan. Fowler ká iriri wí pé pe gbogbo awọn ohun elo microservice aṣeyọri bẹrẹ bi monolith ti o tobi ju ati lẹhinna fọ. Ni akoko kanna, o fẹrẹ jẹ gbogbo awọn eto ti a ṣe bi awọn iṣẹ microservices lati ibẹrẹ ibẹrẹ laipẹ tabi ya ni iriri awọn iṣoro to ṣe pataki.

Ero ti o niyelori miiran ni pe fun iṣẹ akanṣe kan pẹlu faaji microservice lati ṣaṣeyọri, o gbọdọ mọ daradara daradara ati agbegbe koko, ati bi o ṣe le ṣe awọn iṣẹ microservices. Ati pe ọna ti o dara julọ lati kọ ẹkọ agbegbe koko-ọrọ ni lati ṣe monolith kan.

Ṣugbọn kini ti a ba wa tẹlẹ ninu ipo yii?

Igbesẹ akọkọ lati yanju iṣoro eyikeyi ni lati gba pẹlu rẹ ati loye pe o jẹ iṣoro kan, pe a ko fẹ lati jiya mọ.

Ti o ba jẹ pe, ninu ọran monolith ti o dagba (nigbati a ba ti pari ni aye lati ra awọn orisun afikun fun rẹ), a ge, lẹhinna ninu ọran yii itan-idakeji wa: nigbati awọn microservices ti o pọ julọ ko ṣe iranlọwọ mọ, ṣugbọn ṣe idiwọ - ge si pa excess ati ki o tobi!

Fun apẹẹrẹ, fun aworan apapọ ti a sọrọ loke…

Mu awọn iṣẹ microservice ti o ni ibeere julọ kuro:

Microservices: Awọn ọrọ iwọn, paapaa ti o ba ni Kubernetes

Darapọ gbogbo awọn iṣẹ microservices fun iran iwaju:

Microservices: Awọn ọrọ iwọn, paapaa ti o ba ni Kubernetes

... sinu ọkan microservice, ti a kọ sinu ọkan (igbalode ati deede, bi iwọ tikararẹ ṣe ro) ede / ilana:

Microservices: Awọn ọrọ iwọn, paapaa ti o ba ni Kubernetes

Yoo ni ORM kan (DBMS kan) ati akọkọ awọn ohun elo meji:

Microservices: Awọn ọrọ iwọn, paapaa ti o ba ni Kubernetes

Ṣugbọn ni gbogbogbo o le gbe pupọ diẹ sii sibẹ, gbigba abajade atẹle:

Microservices: Awọn ọrọ iwọn, paapaa ti o ba ni Kubernetes

Pẹlupẹlu, ni Kubernetes a nṣiṣẹ gbogbo eyi ni awọn iṣẹlẹ ọtọtọ, eyi ti o tumọ si pe a tun le ṣe iwọn fifuye ati iwọn wọn lọtọ.

Akopọ

Wo aworan ti o tobi julọ. Ni ọpọlọpọ igba, gbogbo awọn iṣoro wọnyi pẹlu awọn iṣẹ microservices dide nitori ẹnikan mu iṣẹ wọn, ṣugbọn o fẹ lati “mu ṣiṣẹ pẹlu awọn microservices”.

Ninu ọrọ naa "awọn iṣẹ microservices" apakan "micro" jẹ laiṣe.. Wọn jẹ “micro” nikan nitori wọn kere ju monolith nla kan. Ṣugbọn maṣe ronu wọn bi nkan kekere.

Ati fun ero ikẹhin, jẹ ki a pada si apẹrẹ atilẹba:

Microservices: Awọn ọrọ iwọn, paapaa ti o ba ni Kubernetes

Akọsilẹ ti a kọ sori rẹ (oke apa otun) õwo si isalẹ lati ni otitọ wipe awọn ọgbọn ti ẹgbẹ ti o jẹ ki iṣẹ akanṣe rẹ jẹ akọkọ nigbagbogbo - wọn yoo ṣe ipa pataki ninu yiyan rẹ laarin awọn iṣẹ microservices ati monolith kan. Ti ẹgbẹ ko ba ni awọn ọgbọn ti o to, ṣugbọn o bẹrẹ ṣiṣe awọn iṣẹ microservices, dajudaju itan naa yoo jẹ apaniyan.

Awọn fidio ati awọn kikọja

Fidio lati ọrọ naa (~ awọn iṣẹju 50; laanu, ko ṣe afihan ọpọlọpọ awọn ẹdun ti awọn alejo, eyiti o pinnu pataki iṣesi ijabọ naa, ṣugbọn iyẹn ni):

Igbejade ijabọ naa:

PS

Awọn ijabọ miiran lori bulọọgi wa:

O tun le nifẹ ninu awọn atẹjade wọnyi:

orisun: www.habr.com

Fi ọrọìwòye kun