Microservices: Gwosè enpòtan, menm si ou gen Kubernetes

19 septanm nan Moskou pran plas premye reyinyon tematik HUG (Highload++ User Group), ki te dedye a microservices. Te gen yon prezantasyon "Operating Microservices: Size Matters, Even If You Have Kubernetes," kote nou te pataje anpil eksperyans Flant nan opere pwojè ak achitekti mikwosèvis. Premye a tout, li pral itil nan tout devlopè ki ap panse sou itilize apwòch sa a nan pwojè aktyèl yo oswa nan lavni.

Microservices: Gwosè enpòtan, menm si ou gen Kubernetes

Entwodwi videyo rapò a (50 minit, pi plis enfòmasyon pase atik la), osi byen ke ekstrè prensipal la nan fòm tèks.

NB: Videyo ak prezantasyon yo disponib tou nan fen post sa a.

Entwodiksyon

Anjeneral yon bon istwa gen yon kòmansman, yon konplo prensipal ak yon rezolisyon. Rapò sa a se plis tankou yon prelid, ak yon sèl trajik nan sa. Li enpòtan tou pou sonje ke li bay opinyon yon moun deyò sou mikwosèvis yo. eksplwatasyon.

Mwen pral kòmanse ak graf sa a, otè a ki (nan 2015) te vin Martin Fowler:

Microservices: Gwosè enpòtan, menm si ou gen Kubernetes

Li montre kouman, nan ka yon aplikasyon monolitik ki rive nan yon sèten valè, pwodiktivite kòmanse bese. Mikwosèvis yo diferan nan ke pwodiktivite inisyal la ak yo pi ba, men kòm konpleksite ogmante, degradasyon nan efikasite se pa tèlman aparan pou yo.

Mwen pral ajoute nan graf sa a pou ka itilize Kubernetes:

Microservices: Gwosè enpòtan, menm si ou gen Kubernetes

Poukisa yon aplikasyon ki gen mikwosèvis pi bon? Paske tankou yon achitekti mete pi devan kondisyon grav pou achitekti a, ki an vire yo parfe kouvri pa kapasite yo nan Kubernetes. Nan lòt men an, kèk nan fonksyonalite sa a pral itil pou yon monolit, espesyalman paske monolit tipik jodi a se pa egzakteman yon monolit (detay yo pral pita nan rapò a).

Kòm ou ka wè, graf final la (lè tou de aplikasyon monolitik ak mikwosèvis yo nan enfrastrikti ak Kubernetes) pa trè diferan de orijinal la. Apre sa, nou pral pale sou aplikasyon ki opere lè l sèvi avèk Kubernetes.

Mikwosèvis itil ak danjere

Ak isit la se lide prensipal la:

Microservices: Gwosè enpòtan, menm si ou gen Kubernetes

Kisa li ye nòmal achitekti mikwosèvis? Li ta dwe pote ou benefis reyèl, ogmante efikasite travay ou. Si nou tounen nan graf la, isit la li ye:

Microservices: Gwosè enpòtan, menm si ou gen Kubernetes

Si w rele l itil, Lè sa a, sou lòt bò a nan graf la pral genyen danjere microservices (entèfere ak travay):

Microservices: Gwosè enpòtan, menm si ou gen Kubernetes

Retounen nan "lide prensipal la": èske mwen ta dwe fè eksperyans mwen konfyans nan tout? Depi kòmansman ane sa a mwen te gade 85 pwojè. Se pa tout nan yo te mikwosèvis (apeprè yon tyè a mwatye nan yo te gen tankou yon achitekti), men sa a se toujou yon gwo kantite. Nou (Flant konpayi) kòm tretandans jere yo wè yon gran varyete aplikasyon devlope tou de nan ti konpayi (avèk 5 devlopè) ak nan gwo yo (~500 devlopè). Yon benefis adisyonèl se ke nou wè aplikasyon sa yo ap viv ak evolye sou ane yo.

Poukisa microservices?

Pou kesyon an sou benefis ki genyen nan mikwosèvis gen repons trè espesifik soti nan Martin Fowler deja mansyone:

  1. fwontyè klè nan modilarite;
  2. deplwaman endepandan;
  3. libète pou chwazi teknoloji.

Mwen te pale anpil ak achitèk lojisyèl ak devlopè epi mwen te mande poukisa yo bezwen mikwosèvis. Apre sa, mwen te fè lis mwen an nan atant yo. Men sa ki te pase:

Microservices: Gwosè enpòtan, menm si ou gen Kubernetes

Si nou dekri kèk nan pwen yo "nan sansasyon," lè sa a:

  • fwontyè klè nan modil: isit la nou gen yon monolit terib, e kounye a, tout bagay pral byen ranje nan depo Git, nan ki tout bagay se "sou etajè yo", cho a ak mou yo pa melanje;
  • Endepandans deplwaman: nou pral kapab woule sèvis poukont yo pou devlopman ale pi vit (pibliye nouvo karakteristik nan paralèl);
  • Endepandans devlopman: nou ka bay mikwosèvis sa a yon ekip/devlopè, epi youn nan lòt, grasa sa nou ka devlope pi vit;
  • боpi gwo fyab: si degradasyon pasyèl rive (yon mikwosèvis sou 20 tonbe), Lè sa a, yon sèl bouton ap sispann travay, epi sistèm nan an antye ap kontinye fonksyone.

Achitekti mikwosèvis tipik (danjere).

Pou eksplike poukisa reyalite se pa sa nou espere, mwen pral prezante kolektif yon imaj yon achitekti mikwosèvis ki baze sou eksperyans nan plizyè pwojè diferan.

Yon egzanp ta dwe yon magazen sou entènèt abstrè ki pral fè konpetisyon ak Amazon oswa omwen OZON. Achitekti mikwosèvis li yo sanble sa a:

Microservices: Gwosè enpòtan, menm si ou gen Kubernetes

Pou yon konbinezon de rezon, mikwosèvis sa yo ekri sou platfòm diferan:

Microservices: Gwosè enpòtan, menm si ou gen Kubernetes

Depi chak mikwosèvis dwe gen otonomi, anpil nan yo bezwen pwòp baz done ak kachèt yo. Achitekti final la se jan sa a:

Microservices: Gwosè enpòtan, menm si ou gen Kubernetes

Ki konsekans li genyen?

Fowler gen sa a tou gen yon atik — sou "peman" pou itilize mikwosèvis yo:

Microservices: Gwosè enpòtan, menm si ou gen Kubernetes

Epi nou pral wè si atant nou yo te satisfè.

Klè fwontyè modil yo...

Men, konbyen mikwosèvis nou aktyèlman bezwen ranje?dewoule chanjman an? Èske nou ka menm konnen ki jan tout bagay ap travay san yon trase distribiye (apre tout, nenpòt demann trete pa mwatye nan mikwosèvis yo)?

Gen yon modèl "gwo boul nan pousyè tè", ak isit la li te tounen soti yo dwe yon boul distribye nan pousyè tè. Pou konfime sa a, isit la se yon ilistrasyon apwoksimatif sou fason demann yo ale:

Microservices: Gwosè enpòtan, menm si ou gen Kubernetes

Deplwaman endepandans...

Teknikman, li te reyalize: nou ka woule chak mikwosèvis separeman. Men, nan pratik ou bezwen pran an kont ke li toujou woule soti anpil mikwosèvis, e nou bezwen pran an kont lòd dewoulman yo. Nan yon bon fason, nou jeneralman bezwen teste nan yon sikwi separe si nou ap woule soti lage a nan lòd ki kòrèk la.

Libète pou chwazi teknoloji...

Li se. Jis sonje ke libète souvan fwontyè sou anachi. Li trè enpòtan isit la pa chwazi teknoloji jis pou "jwe" avèk yo.

Endepandans devlopman...

Ki jan fè yon bouk tès pou tout aplikasyon an (ak anpil eleman)? Men, ou toujou bezwen kenbe li ajou. Tout bagay sa a mennen nan lefèt ke kantite aktyèl sikui tès yo, ki an prensip nou ka genyen, vire soti yo dwe minim.

Kouman sou deplwaye tout bagay sa yo lokalman? .. Li sanble ke souvan pwomotè a fè travay li poukont li, men "o aza", paske li se fòse yo rete tann jiskaske kous la gratis pou fè tès.

Echèl separe...

Wi, men li limite nan zòn nan nan DBMS yo itilize. Nan egzanp achitekti yo bay la, Cassandra pa pral gen pwoblèm, men MySQL ak PostgreSQL pral.

Боpi gwo fyab...

Non sèlman echèk nan yon sèl mikrosèvis an reyalite souvan kraze fonksyone kòrèk la nan tout sistèm nan, men gen tou yon nouvo pwoblèm: fè chak mikwosèvis toleran fay trè difisil. Paske mikwosèvis yo sèvi ak diferan teknoloji (memcache, Redis, elatriye), pou chak ou bezwen reflechi nan tout bagay epi aplike li, ki, nan kou, se posib, men mande pou resous gwo.

Chaj mezirab...

Sa vrèman bon.

"Lèjè" nan mikwosèvis...

Nou pa sèlman gen gwo rezo anlè (demann pou DNS ap miltipliye, elatriye), men tou akòz anpil subqueries nou te kòmanse replike done yo (kachèt magazen), ki te mennen nan yon kantite siyifikatif nan depo.

Ak isit la se rezilta a nan satisfè atant nou yo:

Microservices: Gwosè enpòtan, menm si ou gen Kubernetes

Men, se pa tout!

Paske:

  • Gen plis chans nou pral bezwen yon bis mesaj.
  • Ki jan fè yon backup ki konsistan nan moman an dwa nan tan? Yon sèl la sèlman reyèl opsyon se fèmen trafik pou sa. Men, ki jan fè sa nan pwodiksyon an?
  • Si nou ap pale de sipòte plizyè rejyon, Lè sa a, òganize dirab nan chak nan yo se yon travay ki gen anpil travay.
  • Pwoblèm nan fè chanjman santralize rive. Pou egzanp, si nou bezwen mete ajou vèsyon PHP a, nou pral bezwen komèt nan chak depo (e gen plizyè douzèn nan yo).
  • Kwasans nan konpleksite operasyonèl se, offhand, eksponansyèl.

Kisa pou fè ak tout bagay sa yo?

Kòmanse ak yon aplikasyon monolitik. Eksperyans Fowler di ke prèske tout aplikasyon mikwosèvis siksè te kòmanse kòm yon monolith ki te vin twò gwo epi li te kase. An menm tan an, prèske tout sistèm ki te konstwi kòm mikwosèvis depi nan konmansman an menm pi bonè oswa pita fè eksperyans pwoblèm grav.

Yon lòt panse ki gen anpil valè se ke pou yon pwojè ak yon achitekti mikwosèvis gen siksè, ou dwe konnen trè byen ak matyè, ak kijan pou fè mikwosèvis. Ak pi bon fason pou aprann yon sijè se fè yon monolith.

Men, e si nou deja nan sitiyasyon sa a?

Premye etap la pou rezoud nenpòt pwoblèm se dakò ak li epi konprann ke se yon pwoblèm, ke nou pa vle soufri ankò.

Si, nan ka a nan yon monolit anvayi (lè nou te kouri soti nan opòtinite pou achte resous adisyonèl pou li), nou koupe li, Lè sa a, nan ka sa a istwa opoze a vire soti: lè mikwosèvis twòp pa ede ankò, men anpeche - koupe depase ak elaji!

Pou egzanp, pou imaj kolektif ki te diskite pi wo a...

Debarase m de mikwosèvis yo ki pi dout:

Microservices: Gwosè enpòtan, menm si ou gen Kubernetes

Konbine tout mikwosèvis ki responsab pou jenerasyon entèfas:

Microservices: Gwosè enpòtan, menm si ou gen Kubernetes

... nan yon sèl mikwosèvis, ekri nan yon sèl lang/kad (modèn ak nòmal, jan ou menm ou panse):

Microservices: Gwosè enpòtan, menm si ou gen Kubernetes

Li pral gen yon sèl ORM (yon sèl DBMS) ak premye yon koup aplikasyon:

Microservices: Gwosè enpòtan, menm si ou gen Kubernetes

... men an jeneral ou ka transfere anpil plis la, jwenn rezilta sa a:

Microservices: Gwosè enpòtan, menm si ou gen Kubernetes

Anplis, nan Kubernetes nou kouri tout bagay sa yo nan ka separe, ki vle di ke nou ka toujou mezire chaj la ak echèl yo separeman.

Rezime

Gade pi gwo foto a. Trè souvan, tout pwoblèm sa yo ak mikwo-sèvis rive paske yon moun te pran travay yo, men li te vle "jwe ak mikwo-sèvis".

Nan mo "microservices" pati "micro" a redondants.. Yo se "mikwo" sèlman paske yo pi piti pase yon monolit gwo. Men, pa panse de yo tankou yon bagay piti.

Epi pou yon dènye panse, ann retounen nan tablo orijinal la:

Microservices: Gwosè enpòtan, menm si ou gen Kubernetes

Yon nòt ekri sou li (anlè adwat) klou desann nan lefèt ke konpetans yo nan ekip la ki fè pwojè ou yo toujou prensipal — yo pral jwe yon wòl kle nan chwa ou ant mikwosèvis ak yon monolit. Si ekip la pa gen ase konpetans, men li kòmanse fè mikwosèvis, istwa a pral definitivman fatal.

Videyo ak glisad

Videyo ki soti nan diskou a (~50 minit; malerezman, li pa transmèt anpil emosyon vizitè yo, ki lajman detèmine atitid la nan rapò a, men se konsa li ye):

Prezantasyon rapò a:

PS

Lòt rapò sou blog nou an:

Ou ka enterese tou nan piblikasyon sa yo:

Sous: www.habr.com

Add nouvo kòmantè