Zotengera, ma microservices ndi ma meshes othandizira

Pa intaneti gulu zolemba ΠΎ utumiki mauna (utumiki wa mauna), ndipo nayi ina. Uwu! Koma chifukwa chiyani? Ndiye, ndikufuna kufotokoza maganizo anga kuti zikanakhala bwino ngati utumiki meshes anaonekera zaka 10 zapitazo, pamaso pa kubwera kwa nsanja chidebe monga Docker ndi Kubernetes. Sindikunena kuti malingaliro anga ndiabwino kapena oyipa kuposa ena, koma popeza ma meshes ndi nyama zovuta, malingaliro angapo adzakuthandizani kumvetsetsa bwino.

Ndilankhula za nsanja ya dotCloud, yomwe idamangidwa pa ma microservices opitilira zana ndikuthandizira masauzande ambiri azinthu. Ndifotokoza zovuta zomwe tidakumana nazo poyambitsa ndikuyiyambitsa, komanso momwe ma meshes amathandizira (kapena sangathe) kuthandizira.

Mbiri ya dotCloud

Ndalemba za mbiri ya dotCloud ndi zosankha zamamangidwe a nsanja iyi, koma sindinalankhule zambiri za kusanja kwa netiweki. Ngati simukufuna kulowa mu kuwerenga nkhani yapitayi za dotCloud, nayi mfundo yake mwachidule: ndi nsanja ya PaaS yomwe imalola makasitomala kugwiritsa ntchito mapulogalamu osiyanasiyana (Java, PHP, Python ...), mothandizidwa ndi data yambiri. ntchito (MongoDB, MySQL, Redis ...) ndi kayendedwe ka ntchito monga Heroku: Mumayika code yanu papulatifomu, imapanga zithunzi za chidebe ndikuziyika.

Ndikuuzani momwe magalimoto adalunjikidwira ku nsanja ya dotCloud. Osati chifukwa chinali chozizira kwambiri (ngakhale kuti dongosololi linagwira ntchito bwino pa nthawi yake!), Koma makamaka chifukwa ndi zipangizo zamakono mapangidwe oterewa amatha kukhazikitsidwa mosavuta ndi gulu lodzichepetsa ngati akufuna njira yoyendetsera magalimoto pakati pa gulu. ya microservices kapena gulu la ntchito. Mwanjira iyi, mutha kufananiza zosankhazo: zomwe zimachitika ngati mupanga chilichonse nokha kapena kugwiritsa ntchito mauna omwe alipo. Chosankha chokhazikika ndikudzipangira nokha kapena kugula.

Mayendedwe amayendedwe pamapulogalamu omwe akuchititsidwa

Mapulogalamu pa dotCloud amatha kuwulula mathero a HTTP ndi TCP.

Mapeto a HTTP dynamically anawonjezera pa katundu balancer tsango kasinthidwe Hipache. Izi n’zofanana ndi zimene chuma chimachita masiku ano Ingress ku Kubernetes ndi cholemetsa cholemetsa ngati Traefik.

Makasitomala amalumikizana ndi ma endpoints a HTTP kudzera m'magawo oyenera, malinga ngati dzina la domain lilozera ku dotCloud load balancers. Palibe chapadera.

Zotsatira za TCP yolumikizidwa ndi nambala ya doko, yomwe imaperekedwa kuzinthu zonse zomwe zili mumtengowo kudzera pazosintha zachilengedwe.

Makasitomala amatha kulumikizana ndi ma endpoints a TCP pogwiritsa ntchito dzina loyenera la alendo (chinthu ngati gateway-X.dotcloud.com) ndi nambala yadoko.

Dzina la alendowa limatsikira ku gulu la "nats" seva (losagwirizana ndi Zotsatira za NATS), yomwe idzayendetsa maulumikizidwe a TCP omwe akubwera ku chidebe choyenera (kapena, ngati pali ntchito zolemetsa, zotengera zolondola).

Ngati mumadziwa Kubernetes, izi zitha kukukumbutsani za Services NodePort.

Panalibe ntchito zofanana pa nsanja ya dotCloud ClusterIP: Kuti zikhale zosavuta, mautumiki adafikiridwa mofanana kuchokera mkati ndi kunja kwa nsanja.

Chilichonse chidakonzedwa mophweka: kukhazikitsa koyambirira kwa maukonde a HTTP ndi TCP mwina kunali mizere mazana angapo ya Python iliyonse. Ma algorithms osavuta (ndinganene) omwe adakonzedwa pomwe nsanja idakula ndipo zofunikira zina zidawonekera.

Kukonzanso kwakukulu kwa code yomwe ilipo sikunali kofunikira. Makamaka, 12 factor mapulogalamu angagwiritse ntchito mwachindunji adiresi yopezedwa kudzera muzosintha zachilengedwe.

Kodi izi zikusiyana bwanji ndi mauna amakono?

Zochepa kuwonekera. Tidalibe zoyezetsa za ma mesh a TCP nkomwe. Zikafika pamayendedwe a HTTP, matembenuzidwe am'tsogolo adatulutsa ma metric atsatanetsatane a HTTP okhala ndi ma code olakwika ndi nthawi zoyankhira, koma ma meshes amakono amapita patsogolo, ndikupereka kuphatikiza ndi machitidwe osonkhanitsira ma metrics monga Prometheus, mwachitsanzo.

Kuwoneka ndikofunikira osati kokha pamawonekedwe ogwirira ntchito (kuthandiza kuthetsa mavuto), komanso potulutsa zatsopano. Ndi za chitetezo kutumizidwa kwa blue-green ΠΈ kutumizidwa kwa canary.

Kuchita bwino kwa njira ilinso ndi malire. Mu ma mesh a dotCloud, magalimoto onse amayenera kudutsa m'magulu odzipatulira. Izi zikutanthauza kuti mutha kuwoloka malire angapo a AZ (Availability Zone) ndikuwonjezera kwambiri latency. Ndikukumbukira khodi yothetsa mavuto yomwe ikupanga mafunso opitilira zana a SQL patsamba ndikutsegula kulumikizana kwatsopano ku seva ya SQL pafunso lililonse. Mukathamanga kwanuko, tsambalo limanyamula nthawi yomweyo, koma mu dotCloud zimatenga masekondi angapo kuti liyike chifukwa kulumikizana kulikonse kwa TCP (ndi funso lotsatira la SQL) kumatenga makumi a ma milliseconds. Pankhani imeneyi, kulumikizana kosalekeza kunathetsa vutoli.

Ma meshes amasiku ano amatha kuthana ndi mavuto otere. Choyamba, amaonetsetsa kuti maulumikizidwe akuyenda mu gwero. Mayendedwe omveka ndi omwewo: ΠΊΠ»ΠΈΠ΅Π½Ρ‚ β†’ мСш β†’ сСрвис, koma tsopano mauna amagwira ntchito kwanuko osati pa node zakutali, kotero kugwirizana ΠΊΠ»ΠΈΠ΅Π½Ρ‚ β†’ мСш ndi zam'deralo komanso zachangu kwambiri (microseconds m'malo mwa milliseconds).

Ma meshes amasiku ano amagwiritsanso ntchito ma algorithms anzeru. Poyang'anira thanzi la ma backends, amatha kutumiza magalimoto ambiri kumayendedwe othamanga, zomwe zimapangitsa kuti pakhale ntchito yabwino.

Chitetezo bwinonso. Ma mesh a dotCloud adathamanga kwathunthu pa EC2 Classic ndipo sanabisire kuchuluka kwa magalimoto (kutengera lingaliro lakuti ngati wina atha kuyika chowombera pa EC2 network traffic, muli kale m'mavuto akulu). Ma meshes amakono amateteza mowonekera magalimoto athu onse, mwachitsanzo, ndi kutsimikizika kwa TLS ndi kubisa kotsatira.

Kuwongolera magalimoto pamapulatifomu

Chabwino, takambirana za kuchuluka kwa magalimoto pakati pa mapulogalamu, koma nanga bwanji nsanja ya dotCloud yokha?

Pulatifomu yokhayo inali ndi ma microservices pafupifupi zana omwe amagwira ntchito zosiyanasiyana. Ena adavomera zopempha kuchokera kwa ena, ndipo ena anali ogwira ntchito zakale omwe adalumikizana ndi mautumiki ena koma sanavomereze kulumikizana nawo. Mulimonsemo, msonkhano uliwonse uyenera kudziwa mapeto a maadiresi omwe ukufunikira kuti ugwirizane nawo.

Ntchito zambiri zapamwamba zitha kugwiritsa ntchito mauna ofotokozera omwe afotokozedwa pamwambapa. M'malo mwake, ma microservices ambiri a dotCloud opitilira zana atumizidwa ngati ntchito pafupipafupi papulatifomu ya dotCloud yokha. Koma ntchito zocheperako (makamaka zomwe zimayendetsa mauna) zimafunikira chinthu chosavuta, chodalira pang'ono (popeza sakanatha kudzidalira kuti agwire ntchito - vuto la nkhuku ndi dzira).

Ntchito zotsika, zofunikira kwambiri zautumwizi zidatumizidwa ndikuyendetsa zotengera molunjika pamakina ochepa. Pachifukwa ichi, ntchito zokhazikika papulatifomu sizinagwiritsidwe ntchito: cholumikizira, chowongolera ndi chothamanga. Ngati mukufuna kufananiza ndi nsanja zamakono chidebe, zili ngati kuthamanga ndege ulamuliro ndi docker run molunjika pamanode, m'malo mopereka ntchitoyi kwa Kubernetes. Ndizofanana kwambiri mu lingaliro static modules (pods), zomwe zimagwiritsa ntchito kubeadm kapena bootkube poyambitsa gulu loyima.

Ntchitozi zidawululidwa m'njira yosavuta komanso yamwano: fayilo ya YAML idalemba mayina ndi ma adilesi awo; ndipo kasitomala aliyense amayenera kutenga fayilo ya YAML iyi kuti atumizidwe.

Kumbali imodzi, ndiyodalirika kwambiri chifukwa sichifuna kuthandizidwa ndi kiyi yakunja / sitolo yamtengo wapatali monga Zookeeper (kumbukirani, etcd kapena Consul kunalibe panthawiyo). Kumbali ina, zinali zovuta kusuntha mautumiki. Nthawi iliyonse kusamuka kukachitika, makasitomala onse amalandila fayilo ya YAML yosinthidwa (ndikutha kuyiyambitsanso). Osamasuka kwambiri!

Pambuyo pake, tinayamba kukhazikitsa chiwembu chatsopano, pomwe kasitomala aliyense amalumikizana ndi seva ya proxy yakomweko. M'malo mwa adilesi ndi doko, zimangofunika kudziwa nambala ya doko la ntchitoyo, ndikulumikiza kudzera localhost. Woyimira m'deralo amayang'anira kulumikizana uku ndikutumiza ku seva yeniyeni. Tsopano, posunthira kumbuyo kumakina ena kapena kukulitsa, m'malo mongosintha makasitomala onse, muyenera kungosintha ma proxies am'deralo; ndipo kuyambiranso sikufunikanso.

(Zidakonzedwanso kuti ziphatikize kuchuluka kwa magalimoto pamalumikizidwe a TLS ndikuyika seva ya proxy ina kumbali yolandila, komanso kutsimikizira ziphaso za TLS popanda kutenga nawo gawo pa ntchito yolandila, yomwe imakonzedwa kuti ivomereze kulumikizana kokha localhost. Zambiri pa izi pambuyo pake).

Izi ndizofanana kwambiri ndi Anzeru kuchokera ku Airbnb, koma kusiyana kwakukulu ndikuti SmartStack imayendetsedwa ndikuyikidwa kuti ipangidwe, pomwe njira yolowera mkati ya dotCloud idasungidwa pomwe dotCloud idakhala Docker.

Ine ndekha ndimawona SmartStack kukhala m'modzi mwa omwe adatsogolera machitidwe monga Istio, Linkerd ndi Consul Connect chifukwa onse amatsata njira yofanana:

  • Pangani proxy pa node iliyonse.
  • Makasitomala amalumikizana ndi projekiti.
  • Ndege yowongolera imasintha kasinthidwe ka proxy pamene ma backends asintha.
  • ... Phindu!

Kukhazikitsa kwamakono kwa mesh ya service

Ngati titafunikira kugwiritsa ntchito gridi yofananayo lerolino, tingagwiritse ntchito mfundo zofananazo. Mwachitsanzo, konzani zone ya mkati mwa DNS pojambula mayina a mautumiki kumaadiresi omwe ali mumlengalenga 127.0.0.0/8. Kenako thamangani HAProxy pa node iliyonse pagulu, kuvomereza zolumikizira pa adilesi iliyonse yautumiki (mu subnet). 127.0.0.0/8) ndikuwongoleranso / kusanja katundu kumalo oyenera kumbuyo. Kusintha kwa HAProxy kumatha kuwongoleredwa confd, kukulolani kuti musunge zidziwitso zakumbuyo mu etcd kapena Consul ndikukankhira zosinthidwa ku HAProxy pakafunika.

Umu ndi momwe Istio imagwirira ntchito! Koma ndi zosiyana zina:

  • Ntchito Woyimira nthumwi m'malo mwa HAProxy.
  • Kusunga masinthidwe a backend kudzera Kubernetes API m'malo mwa etcd kapena Consul.
  • Ntchito zimapatsidwa ma adilesi pa subnet yamkati (maadiresi a Kubernetes ClusterIP) m'malo mwa 127.0.0.0/8.
  • Ili ndi chigawo china (Citadel) chowonjezera kutsimikizika kwa TLS pakati pa kasitomala ndi maseva.
  • Imathandizira zatsopano monga kuthyola dera, kutsata kugawa, kutumizidwa kwa canary, ndi zina.

Tiyeni tione mwachidule kusiyana kwake.

Woyimira nthumwi

Envoy Proxy idalembedwa ndi Lyft [mpikisano wa Uber pamsika wama taxi - pafupifupi. njira]. Ndizofanana m'njira zambiri ndi ma proxies ena (monga HAProxy, Nginx, Traefik ...), koma Lyft adalemba zawo chifukwa amafunikira zida zomwe ma proxies ena analibe, ndipo zidawoneka ngati zanzeru kupanga yatsopano m'malo mokulitsa yomwe ilipo.

Evoy ikhoza kugwiritsidwa ntchito yokha. Ngati ndili ndi ntchito yapadera yomwe ikufunika kugwirizanitsa ndi mautumiki ena, ndingathe kuikonza kuti igwirizane ndi Mtumiki, ndiyeno sinthani ndikusinthanso Mtumiki ndi malo a mautumiki ena, ndikupeza ntchito zambiri zowonjezera, monga kuwonekera. M'malo mwa laibulale yamakasitomala kapena kuyimba foni mu code, timatumiza traffic kwa Envoy, ndipo imatitengera ma metric.

Koma Envoy nayenso amatha kugwira ntchito ngati ndege ya data (ndege ya data) ya mesh ya service. Izi zikutanthauza kuti Envoy tsopano yakonzedwera mauna amtunduwu ndege yowongolera (ndege yowongolera).

Kuwongolera ndege

Kwa ndege yolamulira, Istio imadalira Kubernetes API. Izi sizosiyana kwambiri ndi kugwiritsa ntchito confd, yomwe imadalira etcd kapena Consul kuti muwone makiyi omwe ali mu sitolo ya data. Istio imagwiritsa ntchito Kubernetes API kuti muwone mndandanda wazinthu za Kubernetes.

Pakati pa izi ndi apo: Izi zandithandiza Kubernetes API Descriptionyomwe imati:

Kubernetes API Server ndi "seva yosayankhula" yomwe imapereka kusungirako, kumasulira, kutsimikizira, kukonzanso, ndi semantics yazinthu za API.

Istio idapangidwa kuti igwire ntchito ndi Kubernetes; ndipo ngati mukufuna kugwiritsa ntchito kunja kwa Kubernetes, ndiye kuti muyenera kuyendetsa seva ya Kubernetes API (ndi ntchito yothandizira etcd).

Maadiresi a utumiki

Istio imadalira ma adilesi a ClusterIP omwe Kubernetes amagawira, kotero mautumiki a Istio amalandila ma adilesi amkati (osati mgululi. 127.0.0.0/8).

Magalimoto opita ku adilesi ya ClusterIP ya ntchito inayake mu gulu la Kubernetes popanda Istio amalandidwa ndi kube-proxy ndikutumizidwa kumbuyo kwa proxy. Ngati mukufuna kudziwa zambiri zaukadaulo, kube-proxy imakhazikitsa malamulo a iptables (kapena zolemetsa zolemetsa za IPVS, kutengera momwe zimasankhidwira) kuti alembenso ma adilesi a IP olumikizirana kupita ku adilesi ya ClusterIP.

Istio ikangoyikidwa pagulu la Kubernetes, palibe chomwe chimasintha mpaka itathandizidwa momveka bwino kwa wogula, kapena malo onse a dzina, poyambitsa chidebe. sidecar mu makonda okhazikika. Chidebechi chidzasintha chitsanzo cha Envoy ndikukhazikitsa malamulo a iptables kuti athetse magalimoto opita kuzinthu zina ndikutumizanso magalimoto ku Envoy.

Mukaphatikizidwa ndi Kubernetes DNS, izi zikutanthauza kuti nambala yathu imatha kulumikizana ndi dzina lautumiki ndipo chilichonse "chimagwira ntchito." Mwanjira ina, ma code athu amafunsa ngati http://api/v1/users/4242ndiye api funsani funso 10.97.105.48, malamulo a iptables adzasokoneza maulumikizidwe kuchokera ku 10.97.105.48 ndikuwatumiza kwa Woyimira Woimira wa m'deralo, ndipo wothandizira wambayo adzatumiza pempho ku API yeniyeni ya backend. Phew!

Zowonjezera frills

Istio imaperekanso kutsekera komaliza ndi kutsimikizika kudzera mTLS (mutual TLS). Chigawo chinayitana Citadel.

Palinso gawo Wosakaniza, zomwe Nthumwi angapemphe aliyense pempho kuti mupange chisankho chapadera pa pempho limenelo malingana ndi zinthu zosiyanasiyana monga mitu, backend load, etc ... (osadandaula: pali njira zambiri zosungira Mixer ikuyenda, ndipo ngakhale itasweka, Envoy idzapitiriza kugwira ntchito. chabwino ngati proxy).

Ndipo, zowonadi, tidatchulapo mawonekedwe: Envoy imasonkhanitsa kuchuluka kwa ma metric pomwe ikupereka zotsatiridwa. Muzomangamanga za ma microservices, ngati pempho limodzi la API liyenera kudutsa ma microservices A, B, C, ndi D, ndiye mukalowa, kutsatiridwa komwe kumagawidwa kumawonjezera chizindikiritso chapadera pa pempho ndikusunga chizindikiritso ichi kudzera m'ma subrequest ku ma microservices onsewa, kulola. mafoni onse ogwirizana ayenera kujambulidwa. kuchedwa, ndi zina.

Pangani kapena gulani

Istio ili ndi mbiri yovuta. Mosiyana ndi izi, kupanga mauna omwe ndidawafotokozera koyambirira kwa positiyi ndikosavuta kugwiritsa ntchito zida zomwe zilipo kale. Ndiye, kodi ndizomveka kupanga ma mesh anuanu m'malo mwake?

Ngati tili ndi zosowa zochepa (sitifuna kuwoneka, woyendetsa dera ndi zina zobisika), ndiye kuti malingaliro amabwera kupanga chida chathu. Koma ngati tigwiritsa ntchito Kubernetes, sizingakhale zofunikira chifukwa Kubernetes imapereka kale zida zoyambira zopezera ntchito ndikuwongolera katundu.

Koma ngati tili ndi zofunikira zapamwamba, ndiye kuti "kugula" mauna a ntchito kumawoneka ngati njira yabwinoko. (Izi sizikhala "zogula" nthawi zonse chifukwa Istio ndi gwero lotseguka, komabe tifunika kuyika nthawi yaukadaulo kuti timvetsetse, kuyika, ndikuwongolera.)

Kodi ndisankhe Istio, Linkerd kapena Consul Connect?

Pakalipano tangoyankhula za Istio, koma iyi si mauna okhawo. Njira ina yotchuka - Linkerd, ndipo pali zinanso Consul Connect.

Kodi mungasankhe chiyani?

Kunena zoona, sindikudziwa. Pakali pano sindimadziona kuti ndine wokhoza kuyankha funsoli. Pali ochepa chidwi zolemba poyerekeza zida izi komanso ngakhale zizindikiro.

Njira imodzi yodalirika ndiyo kugwiritsa ntchito chida ngati SuperGloo. Imayika gawo lochepetsera kuti muchepetse ndikugwirizanitsa ma API omwe amawululidwa ndi ma meshes. M'malo mophunzira ma API enieni (ndipo, m'malingaliro mwanga, ovuta) a ma meshes osiyanasiyana, titha kugwiritsa ntchito zomangira zosavuta za SuperGloo - ndikusintha mosavuta kuchokera kumodzi kupita ku imzake, ngati kuti tili ndi mawonekedwe apakatikati omwe amafotokoza mawonekedwe a HTTP ndi ma backends okhoza. kupanga masinthidwe enieni a Nginx, HAProxy, Traefik, Apache...

Ndakhala ndikuchita pang'ono ndi Istio ndi SuperGloo, ndipo m'nkhani yotsatira ndikufuna kusonyeza momwe ndingawonjezere Istio kapena Linkerd kumagulu omwe alipo pogwiritsa ntchito SuperGloo, ndi momwe womalizayo amachitira ntchitoyo, ndiko kuti, amakulolani kuchoka mauna amtundu wina kupita kwina popanda kusintha masinthidwe.

Source: www.habr.com

Kuwonjezera ndemanga