Mga Microservice: Ang gidak-on hinungdanon, bisan kung ikaw adunay Kubernetes

Septiyembre 19 sa Moscow nahitabo ang unang thematic meeting HUG (Highload++ User Group), nga gipahinungod sa microservices. Adunay usa ka presentasyon nga "Operating Microservices: Size Matters, Even If You Have Kubernetes," diin among gipaambit ang halapad nga kasinatian ni Flant sa mga proyekto sa pag-opera nga adunay microservice architecture. Una sa tanan, mapuslanon kini sa tanan nga mga developer nga naghunahuna bahin sa paggamit niini nga pamaagi sa ilang karon o umaabot nga proyekto.

Mga Microservice: Ang gidak-on hinungdanon, bisan kung ikaw adunay Kubernetes

Pagpaila video sa report (50 minuto, labi ka labi ka kasayuran kaysa sa artikulo), ingon man ang panguna nga kinuha gikan niini sa porma sa teksto.

NB: Ang video ug presentasyon anaa usab sa katapusan niini nga post.

Pasiuna

Kasagaran ang usa ka maayo nga istorya adunay sinugdanan, usa ka punoan nga laraw ug usa ka resolusyon. Kini nga taho sama sa usa ka pasiuna, ug usa ka makapasubo nga usa niana. Mahinungdanon usab nga hinumdoman nga naghatag kini usa ka pagtan-aw sa gawas sa mga microservice. pagpahimulos.

Magsugod ko niini nga graph, ang tagsulat niini (sa 2015) nahimo Martin Fowler:

Mga Microservice: Ang gidak-on hinungdanon, bisan kung ikaw adunay Kubernetes

Gipakita niini kung giunsa, sa kaso sa usa ka monolithic nga aplikasyon nga nakaabot sa usa ka piho nga kantidad, ang pagka-produktibo nagsugod sa pagkunhod. Ang mga microservice lahi tungod kay ang inisyal nga produktibidad uban kanila mas ubos, apan samtang nagkadako ang pagkakomplikado, ang pagkadaut sa kahusayan dili kaayo mamatikdan alang kanila.

Idugang nako kini nga graph alang sa kaso sa paggamit sa Kubernetes:

Mga Microservice: Ang gidak-on hinungdanon, bisan kung ikaw adunay Kubernetes

Ngano nga mas maayo ang aplikasyon nga adunay mga microservice? Tungod kay ang ingon nga arkitektura nagbutang sa unahan sa seryoso nga mga kinahanglanon alang sa arkitektura, nga sa baylo hingpit nga nasakup sa mga kapabilidad sa Kubernetes. Sa laing bahin, ang pipila niini nga gamit mahimong mapuslanon alang sa usa ka monolith, ilabi na tungod kay ang tipikal nga monolith karon dili gayud usa ka monolith (ang mga detalye sa ulahi sa report).

Sama sa imong makita, ang katapusang graph (kung ang monolithic ug microservice nga aplikasyon naa sa imprastraktura sa Kubernetes) dili kaayo lahi sa orihinal. Sunod atong hisgutan ang mga aplikasyon nga gipadagan gamit ang Kubernetes.

Mapuslanon ug makadaot nga microservices

Ug ania ang panguna nga ideya:

Mga Microservice: Ang gidak-on hinungdanon, bisan kung ikaw adunay Kubernetes

Unsa man normal arkitektura sa microservice? Kinahanglan nga magdala kini kanimo og tinuod nga mga benepisyo, nga nagdugang sa imong kahusayan sa trabaho. Kung mobalik kita sa graph, ania kini:

Mga Microservice: Ang gidak-on hinungdanon, bisan kung ikaw adunay Kubernetes

Kung tawagan nimo siya nga mapuslanon, unya sa pikas bahin sa graph adunay makadaot microservices (makabalda sa trabaho):

Mga Microservice: Ang gidak-on hinungdanon, bisan kung ikaw adunay Kubernetes

Pagbalik sa "panguna nga ideya": kinahanglan ba nako nga saligan ang akong kasinatian? Sukad sa sinugdanan niining tuiga ako nangita 85 nga mga proyekto. Dili tanan kanila mga microservice (mga un-tersiya ngadto sa katunga kanila adunay ingon nga arkitektura), apan kini usa ka dako nga gidaghanon. Kami (Flant nga kompanya) isip mga outsourcer nagdumala sa pagtan-aw sa usa ka halapad nga lainlain nga mga aplikasyon nga naugmad sa gagmay nga mga kompanya (nga adunay 5 nga mga developer) ug sa mga dagko (~500 nga mga developer). Ang usa ka dugang nga benepisyo mao nga makita namon kini nga mga aplikasyon nga buhi ug milambo sa daghang mga tuig.

Nganong microservices?

Sa pangutana bahin sa mga benepisyo sa microservices adunay espesipiko kaayo nga tubag gikan sa nahisgutan na nga Martin Fowler:

  1. tin-aw nga mga utlanan sa modularity;
  2. independente nga pag-deploy;
  3. kagawasan sa pagpili sa mga teknolohiya.

Daghan kog naistorya sa mga software architect ug developers ug nangutana nganong nagkinahanglan sila ug microservices. Ug akong gihimo ang akong listahan sa ilang mga gilauman. Ania ang nahitabo:

Mga Microservice: Ang gidak-on hinungdanon, bisan kung ikaw adunay Kubernetes

Kung atong ihulagway ang pipila ka mga punto "sa mga pagbati," nan:

  • tin-aw nga mga utlanan sa mga modulo: dinhi kita adunay usa ka makalilisang nga monolith, ug karon ang tanan hapsay nga gihan-ay sa mga repositoryo sa Git, diin ang tanan "sa mga estante", ang mainit ug humok dili magkasagol;
  • independensya sa pag-deploy: mahimo namong i-roll out ang mga serbisyo nga independente aron mas paspas ang pag-uswag (pagmantala sa bag-ong mga bahin nga managsama);
  • independensya sa pag-uswag: mahimo natong ihatag kini nga microservice sa usa ka team/developer, ug kana sa usag usa, salamat nga mas paspas kita nga molambo;
  • Π±ΠΎlabaw nga kasaligan: kung mahitabo ang partial degradation (usa ka microservice gikan sa 20 mahulog), unya usa ra ka butones ang mohunong sa pagtrabaho, ug ang sistema sa kinatibuk-an magpadayon sa paglihok.

Kinaandan (makadaot) nga arkitektura sa microservice

Aron ipasabut kung ngano nga ang kamatuoran dili ang among gipaabut, akong ipresentar kolektibo usa ka hulagway sa usa ka microservice nga arkitektura base sa kasinatian gikan sa daghang lain-laing mga proyekto.

Ang usa ka pananglitan usa ka abstract nga online store nga makigkompetensya sa Amazon o labing menos OZON. Ang arkitektura sa microservice niini ingon niini:

Mga Microservice: Ang gidak-on hinungdanon, bisan kung ikaw adunay Kubernetes

Alang sa kombinasyon sa mga hinungdan, kini nga mga microservice gisulat sa lainlaing mga platform:

Mga Microservice: Ang gidak-on hinungdanon, bisan kung ikaw adunay Kubernetes

Tungod kay ang matag microservice kinahanglan adunay awtonomiya, kadaghanan kanila nanginahanglan sa ilang kaugalingon nga database ug cache. Ang katapusan nga arkitektura mao ang mosunod:

Mga Microservice: Ang gidak-on hinungdanon, bisan kung ikaw adunay Kubernetes

Unsa ang mga sangputanan niini?

Si Fowler aduna usab niini adunay usa ka artikulo β€” bahin sa "pagbayad" sa paggamit sa mga microservice:

Mga Microservice: Ang gidak-on hinungdanon, bisan kung ikaw adunay Kubernetes

Ug atong tan-awon kon ang atong mga gilauman natuman.

Tin-aw nga mga utlanan sa modules...

apan pila ka microservice ang kinahanglan gyud namong ayohon?aron ilunsad ang pagbag-o? Mahimo ba naton mahibal-an kung giunsa ang tanan molihok nga wala’y giapod-apod nga tracer (pagkahuman, bisan unsang hangyo giproseso sa katunga sa mga microservice)?

Adunay usa ka sumbanan "dako nga bukol sa hugaw", ug dinhi kini nahimo nga usa ka gipang-apod-apod nga bukol sa hugaw. Aron makumpirma kini, ania ang usa ka gibanabana nga paghulagway kung giunsa ang pag-adto sa mga hangyo:

Mga Microservice: Ang gidak-on hinungdanon, bisan kung ikaw adunay Kubernetes

Deployment independence...

Sa teknikal nga paagi, kini nakab-ot: mahimo namon nga i-roll out ang matag microservice nga gilain. Apan sa praktis kinahanglan nimo nga tagdon nga kini kanunay nga gilibot daghang microservices, ug kinahanglan natong tagdon ang han-ay sa ilang rollout. Sa usa ka maayo nga paagi, sa kasagaran kinahanglan naton nga sulayan sa usa ka bulag nga sirkito kung gilunsad ba naton ang pagpagawas sa husto nga pagkasunud.

Kagawasan sa pagpili sa teknolohiya...

Siya mao. Hinumdomi lang nga ang kagawasan kasagarang utlanan sa kalapasan. Importante kaayo dinhi nga dili mopili og mga teknolohiya aron lang β€œmagdula” niini.

Kagawasan sa kalamboan...

Giunsa paghimo ang usa ka pagsulay nga loop alang sa tibuuk nga aplikasyon (nga adunay daghang mga sangkap)? Apan kinahanglan nimo nga ipadayon kini hangtod karon. Kining tanan nagdala ngadto sa kamatuoran nga aktuwal nga gidaghanon sa mga test circuit, nga mahimo natong sa prinsipyo naglangkob, nahimo nga minimal.

Giunsa ang pag-deploy niining tanan sa lokal?.. Kini nahimo nga kasagaran ang developer naghimo sa iyang trabaho nga independente, apan "sa random", tungod kay siya napugos sa paghulat hangtud nga ang sirkito libre alang sa pagsulay.

Gilain ang pag-scale...

Oo, apan kini limitado sa lugar sa gigamit nga DBMS. Sa gihatag nga pananglitan sa arkitektura, si Cassandra walay mga problema, apan ang MySQL ug PostgreSQL.

Π‘ΠΎmas kasaligan...

Dili lamang ang kapakyasan sa usa ka microservice sa tinuud kanunay nga makaguba sa husto nga paglihok sa tibuuk nga sistema, apan adunay usa usab ka bag-ong problema: ang paghimo sa matag microservice fault-tolerant lisud kaayo. Tungod kay ang mga microservice naggamit sa lainlaing mga teknolohiya (memcache, Redis, ug uban pa), alang sa matag usa kinahanglan nimo nga hunahunaon ang tanan ug ipatuman kini, nga, siyempre, posible, apan nanginahanglan daghang mga kapanguhaan.

Pagsukod sa load...

Nindot gyud ni.

Ang "kagaan" sa microservices...

Dili lang kita adunay dako overhead sa network (Ang mga hangyo alang sa DNS nagkadaghan, ug uban pa), apan tungod usab sa daghang mga subquery nga among gisugdan replicate data (store caches), nga misangpot sa usa ka mahinungdanon nga kantidad sa pagtipig.

Ug ania ang resulta sa pagtagbo sa among mga gilauman:

Mga Microservice: Ang gidak-on hinungdanon, bisan kung ikaw adunay Kubernetes

Apan dili lang kana!

Tungod kay:

  • Lagmit magkinahanglan kita og message bus.
  • Giunsa paghimo ang usa ka makanunayon nga backup sa husto nga oras sa oras? Ang bugtong tinuud Ang kapilian mao ang pagpalong sa trapiko alang niini. Apan unsaon pagbuhat niini sa produksyon?
  • Kung naghisgot kami bahin sa pagsuporta sa daghang mga rehiyon, nan ang pag-organisar sa pagpadayon sa matag usa niini usa ka buluhaton nga labi ka kusog sa pagtrabaho.
  • Ang problema sa paghimo sa sentralisadong mga pagbag-o mitungha. Pananglitan, kung kinahanglan namon nga i-update ang bersyon sa PHP, kinahanglan namon nga mopasalig sa matag repository (ug adunay mga dosena niini).
  • Ang pag-uswag sa pagkakomplikado sa operasyon, sa tinuud, exponential.

Unsa ang buhaton niining tanan?

Pagsugod sa usa ka monolithic nga aplikasyon. Ang kasinatian ni Fowler miingon nga hapit tanan nga malampuson nga mga aplikasyon sa microservice nagsugod isip usa ka monolith nga nahimong dako kaayo ug unya nabuak. Sa parehas nga oras, hapit tanan nga mga sistema nga gitukod ingon mga microservice gikan sa sinugdanan sa madugay o sa ulahi nakasinati og grabe nga mga problema.

Ang usa pa ka hinungdanon nga hunahuna mao nga aron magmalampuson ang usa ka proyekto nga adunay arkitektura sa microservice, kinahanglan nimo mahibal-an pag-ayo ug subject area, ug unsaon paghimo og microservices. Ug ang labing kaayo nga paagi sa pagkat-on sa usa ka hilisgutan nga lugar mao ang paghimo sa usa ka monolith.

Apan komosta kon ania na kita niini nga sitwasyon?

Ang unang lakang sa pagsulbad sa bisan unsa nga problema mao ang pag-uyon niini ug pagsabot nga kini usa ka problema, nga dili na nato gusto nga mag-antos pa.

Kung, sa kaso sa usa ka overgrown monolith (kung nahutdan na kami sa oportunidad nga makapalit dugang nga mga kapanguhaan alang niini), among giputol kini, nan sa kini nga kaso ang kaatbang nga istorya nahimo: kung ang sobra nga mga microservice dili na makatabang, apan makapugong - putla ang sobra ug padak-on!

Pananglitan, alang sa kolektibong imahe nga gihisgutan sa ibabaw...

Isalikway ang labing kwestyonable nga microservices:

Mga Microservice: Ang gidak-on hinungdanon, bisan kung ikaw adunay Kubernetes

Paghiusa sa tanan nga mga microservice nga responsable sa henerasyon sa frontend:

Mga Microservice: Ang gidak-on hinungdanon, bisan kung ikaw adunay Kubernetes

... ngadto sa usa ka microservice, gisulat sa usa (moderno ug normal, sama sa imong gihunahuna sa imong kaugalingon) nga pinulongan/framework:

Mga Microservice: Ang gidak-on hinungdanon, bisan kung ikaw adunay Kubernetes

Kini adunay usa ka ORM (usa ka DBMS) ug una sa usa ka magtiayon nga mga aplikasyon:

Mga Microservice: Ang gidak-on hinungdanon, bisan kung ikaw adunay Kubernetes

... apan sa kinatibuk-an mahimo nimong ibalhin ang labi pa didto, makuha ang mosunud nga resulta:

Mga Microservice: Ang gidak-on hinungdanon, bisan kung ikaw adunay Kubernetes

Dugang pa, sa Kubernetes among gipadagan kining tanan sa managlahing mga higayon, nga nagpasabot nga mahimo gihapon namo nga sukdon ang load ug sukdon kini nga gilain.

Sa pagsumada

Tan-awa ang mas dako nga hulagway. Kasagaran, kining tanan nga mga problema sa mga microservice mitungha tungod kay adunay usa nga mikuha sa ilang buluhaton, apan gusto nga "magdula sa mga microservice".

Sa pulong nga "microservices" ang "micro" nga bahin kay redundant.. Sila "micro" lamang tungod kay sila mas gamay kay sa usa ka dako nga monolith. Apan ayaw sila isipa nga gamay ra.

Ug alang sa katapusang hunahuna, mobalik kita sa orihinal nga tsart:

Mga Microservice: Ang gidak-on hinungdanon, bisan kung ikaw adunay Kubernetes

Usa ka nota nga gisulat niini (ibabaw sa tuo) nagsukad sa kamatuoran nga ang mga kahanas sa team nga naghimo sa imong proyekto kanunay nga panguna β€” sila adunay hinungdanon nga papel sa imong pagpili tali sa mga microservice ug usa ka monolith. Kung ang team walay igong kahanas, apan nagsugod kini sa paghimo og mga microservice, ang istorya siguradong makamatay.

Mga video ug mga slide

Video gikan sa sinultihan (~50 minuto; sa kasubo, wala kini nagpahayag sa daghang mga emosyon sa mga bisita, nga labi nga nagtino sa kahimtang sa taho, apan ingon ana kini):

Presentasyon sa report:

PS

Ang ubang mga taho sa among blog:

Mahimong interesado ka usab sa mosunod nga mga publikasyon:

Source: www.habr.com

Idugang sa usa ka comment