Container, microservices ary mesh serivisy

Amin'ny Internet bunch lahatsoratra ΠΎ harato serivisy (service mesh), ary ity misy iray hafa. Hooray! Fa nahoana? Avy eo, te-haneho ny hevitro aho fa ho tsara kokoa raha niseho 10 taona lasa izay ny serivisy serivisy, talohan'ny nahatongavan'ireo sehatra container toa an'i Docker sy Kubernetes. Tsy milaza aho hoe tsara kokoa na ratsy kokoa noho ny hafa ny fomba fijeriko, fa satria biby saro-takarina ny sarin'ny serivisy, ny fomba fijery maro dia hanampy amin'ny fahatakarana azy ireo bebe kokoa.

Hiresaka momba ny sehatra dotCloud aho, izay naorina tamin'ny microservices zato mahery ary nanohana fampiharana an'arivony voatahiry. Hazavaiko ny fanamby natrehanay tamin'ny famolavolana sy ny fandefasana azy, ary ny fomba ahafahan'ny serivisy (na tsy afaka) manampy.

Tantaran'ny dotCloud

Nanoratra momba ny tantaran'ny dotCloud sy ny safidin'ny maritrano ho an'ity sehatra ity aho, saingy tsy dia niresaka firy momba ny sarin'ny tambajotra aho. Raha tsy te hiroboka amin'ny famakiana ianao lahatsoratra farany momba ny dotCloud, ity ny hevi-dehibe amin'ny teny fohy: sehatra-as-a-service PaaS izy io izay ahafahan'ny mpanjifa mampiasa rindranasa marobe (Java, PHP, Python...), miaraka amin'ny fanohanana angon-drakitra marobe. serivisy (MongoDB, MySQL, Redis...) ary ny rindran-damina toa an'i Heroku: Mampiakatra ny kaody ao amin'ny lampihazo ianao, manangana sary fitoeran-javatra ary mametraka azy ireo.

Holazaiko aminao ny fomba nitarihan'ny fifamoivoizana mankany amin'ny sehatra dotCloud. Tsy hoe satria tena nangatsiaka ilay izy (na dia niasa tsara tamin'ny fotoanany aza ny rafitra!), fa indrindra satria miaraka amin'ny fitaovana maoderina, ny endrika toy izany dia azo ampiharina mora foana amin'ny fotoana fohy ataon'ny ekipa maotina raha toa ka mila fomba hampandehanana ny fifamoivoizana eo anelanelan'ny bunch izy ireo. amin'ny microservices na andiana fampiharana. Amin'izany fomba izany, azonao atao ny mampitaha ny safidy: inona no mitranga raha mamolavola ny zava-drehetra ianao na mampiasa mesh serivisy efa misy. Ny safidy mahazatra dia ny manao izany ho anao na mividy azy.

Fandalovan'ny fifamoivoizana ho an'ny fampiharana nampiantrano

Ny fampiharana amin'ny dotCloud dia afaka mampibaribary ny teboka faran'ny HTTP sy TCP.

HTTP endpoints ampidirina mavitrika amin'ny fandrindrana klusteron'ny mpandrindra entana Hipache. Izany dia mitovy amin'ny zavatra ataon'ny loharano ankehitriny Ingress ao amin'ny Kubernetes ary mpandrindra entana toy izany Traefik.

Mifandray amin'ny teboka faran'ny HTTP amin'ny alΓ lan'ny sehatra sahaza ny mpanjifa, raha toa ka manondro ireo mpandrindra entana dotCloud ny anaran'ny sehatra. Tsy dia misy ambara.

TCP endpoints mifandray amin'ny laharan'ny seranana, izay ampitaina amin'ny kaontenera rehetra ao amin'io stack io amin'ny alΓ lan'ny fari-piainan'ny tontolo iainana.

Afaka mifandray amin'ny teboka faran'ny TCP ny mpanjifa amin'ny fampiasana ny anaran'ny mpampiantrano mety (toy ny gateway-X.dotcloud.com) sy ny laharan'ny seranan-tsambo.

Ity anarana mpampiantrano ity dia manapa-kevitra amin'ny cluster server "nats" (tsy mifandray amin'ny NATS), izay hitarika ny fifandraisana TCP miditra mankany amin'ny kaontenera marina (na, raha ny serivisy voalanjalanja, mankany amin'ny kaontenera marina).

Raha zatra Kubernetes ianao dia mety hampahatsiahy anao ny Services izany NodePort.

Tsy nisy serivisy mitovy amin'ny sehatra dotCloud ClusterIP: Mba hanatsorana, dia nitovy ny nidirana tamin'ny serivisy na avy ao anatiny na ivelan'ny lampihazo.

Nalamina tsotra izao ny zava-drehetra: andalana an-jatony vitsivitsy monja amin'ny Python ny fampiharana voalohany ny HTTP sy TCP. Algorithm tsotra (milaza aho hoe naive) izay nodiovina rehefa nitombo ny sehatra ary nipoitra ny fepetra fanampiny.

Tsy nilaina ny famerenana indray ny kaody efa misy. Manokana, Fampiharana 12 factor afaka mampiasa mivantana ny adiresy azo amin'ny alΓ lan'ny fari-piainan'ny tontolo iainana.

Inona no maha samy hafa azy amin'ny harato serivisy maoderina?

voafetra fahitana. Tsy nanana mari-pamantarana ho an'ny harato fandalovana TCP mihitsy izahay. Raha ny momba ny fandalovana HTTP, ny dikan-teny taty aoriana dia nampiditra metrika HTTP amin'ny antsipiriany miaraka amin'ny kaody diso sy ny fotoana famaliana, fa ny serivisy maoderina dia lasa lavitra kokoa, manome fampidirana amin'ny rafitra fanangonana metrika toa an'i Prometheus, ohatra.

Ny fahitana dia zava-dehibe tsy avy amin'ny fomba fijery miasa (mba hanampiana amin'ny famahana olana), fa koa rehefa mamoaka endri-javatra vaovao. Momba ny azo antoka fametrahana manga-maitso ΠΈ fametrahana canary.

Fahombiazan'ny lalana voafetra ihany koa. Ao amin'ny dotCloud routing mesh, ny fifamoivoizana rehetra dia tsy maintsy nandeha tamin'ny vondron'ny node zotra voatokana. Midika izany fa mety hiampita sisintany AZ (faritra misy) maro ary mampitombo be ny fahatarana. Tsaroako ny kaody famahana olana izay nanao fangatahana SQL an-jatony isaky ny pejy ary nanokatra fifandraisana vaovao amin'ny mpizara SQL ho an'ny fangatahana tsirairay. Rehefa mandeha eo an-toerana dia midina avy hatrany ny pejy, fa ao amin'ny dotCloud dia mila segondra vitsy vao mipetaka satria isaky ny fifandraisana TCP (sy ny fangatahana SQL manaraka) dia mila milisegondra am-polony. Amin'ity tranga ity, ny fifandraisana maharitra dia namaha ny olana.

Ny serivisy serivisy maoderina dia tsara kokoa amin'ny fiatrehana olana toy izany. Voalohany indrindra, manamarina izy ireo fa mandeha ny fifandraisana amin'ny loharano. Mitovy ihany ny fandehan'ny lojika: ΠΊΠ»ΠΈΠ΅Π½Ρ‚ β†’ мСш β†’ сСрвис, fa ankehitriny ny harato dia miasa eo an-toerana fa tsy amin'ny nodes lavitra, ka ny fifandraisana ΠΊΠ»ΠΈΠ΅Π½Ρ‚ β†’ мСш dia eo an-toerana ary tena haingana (mikrosegondra fa tsy milliseconds).

Mampihatra algorithm fampifandanjana entana marani-tsaina kokoa koa ny mesh serivisy maoderina. Amin'ny fanaraha-maso ny fahasalaman'ny backend, dia afaka mandefa fifamoivoizana bebe kokoa amin'ny backend haingana kokoa izy ireo, ka miteraka fanatsarana amin'ny ankapobeny.

fiarovana tsara koa. Ny dotCloud routing mesh dia nihazakazaka tanteraka tamin'ny EC2 Classic ary tsy nanao encryption ny fifamoivoizana (mifototra amin'ny fiheverana fa raha misy olona nahavita nametraka sniffer tamin'ny fifamoivoizana tambajotra EC2 dia efa sahirana be ianao). Miaro amin'ny fomba mangarahara ny fifamoivoizana rehetra, ohatra, miaraka amin'ny fanamarinana TLS sy ny fanafenana manaraka.

Famoahana ny fifamoivoizana ho an'ny serivisy amin'ny sehatra

Eny ary, niresaka momba ny fifamoivoizan'ny fampiharana izahay, fa ahoana kosa ny momba ny sehatra dotCloud?

Ny sehatra mihitsy dia nahitana microservices zato teo ho eo izay tompon'andraikitra amin'ny asa isan-karazany. Ny sasany dia nanaiky ny fangatahana avy amin'ny hafa, ary ny sasany dia mpiasa an-dakilasy izay mifandray amin'ny serivisy hafa nefa tsy manaiky ny fifandraisana. Na izany na tsy izany, ny serivisy tsirairay dia tsy maintsy mahafantatra ny faran'ny adiresy tokony hifandraisany.

Serivisy avo lenta maro no mety mampiasa ny harato fandalovana voalaza etsy ambony. Raha ny marina, maro amin'ireo microservices maherin'ny zato an'ny dotCloud no napetraka ho fampiharana mahazatra amin'ny sehatra dotCloud. Saingy ny serivisy ambany dia vitsy (indrindra fa ireo izay manatanteraka an'io harato zotra io) mila zavatra tsotra kokoa, miaraka amin'ny fiankinan-doha vitsy kokoa (satria tsy afaka niankina tamin'ny tenany izy ireo - ny olan'ny akoho taloha sy ny atody).

Ireo sampan-draharaha ambany sy mitsikera iraka ireo dia napetraka tamin'ny alΓ lan'ny fampandehanana kaontenera mivantana amin'ny node fototra vitsivitsy. Amin'ity tranga ity, ny serivisy sehatra mahazatra dia tsy nampiasaina: mpampitohy, fandaharam-potoana ary mpihazakazaka. Raha te hampitaha amin'ireo sehatra kaontenera maoderina ianao dia toy ny mandeha fiaramanidina fanaraha-maso docker run mivantana eo amin'ny nodes, fa tsy manolotra ny asa ho an'ny Kubernetes. Tena mitovy amin'ny hevitra static modules (pods), izay ampiasainy kubeadm na bootkube rehefa manokatra cluster mitokana.

Ireo tolotra ireo dia naseho tamin'ny fomba tsotra sy tsy misy dikany: rakitra YAML nitanisa ny anarany sy ny adiresiny; ary ny mpanjifa tsirairay dia tsy maintsy naka dika mitovy amin'ity rakitra YAML ity mba hapetraka.

Amin'ny lafiny iray, tena azo ianteherana izy io satria tsy mila fanohanan'ny fivarotana key/value ivelany toy ny Zookeeper (tadidio, sns, na Consul tsy nisy tamin'izany fotoana izany). Tetsy ankilany, nanasarotra ny famindrana serivisy izany. Isaky ny misy hetsika natao, ny mpanjifa rehetra dia hahazo rakitra YAML nohavaozina (ary mety hiverina indray). Tsy dia mahazo aina!

Taorian'izay dia nanomboka nametraka rafitra vaovao izahay, izay ahafahan'ny mpanjifa tsirairay mifandray amin'ny mpizara proxy eo an-toerana. Raha tokony ho adiresy sy seranan-tsambo, dia mila mahafantatra ny seranan-tsambo ny serivisy, ary mifandray amin'ny alalan'ny localhost. Ny proxy eo an-toerana no mitantana io fifandraisana io ary mampita izany amin'ny mpizara tena izy. Ankehitriny, rehefa mamindra ny backend amin'ny milina hafa na scaling, raha tokony hanavao ny mpanjifa rehetra ianao, dia mila manavao ireo proxy eo an-toerana fotsiny ianao; ary tsy ilaina intsony ny reboot.

(Nokasaina ihany koa ny hamehezana ny fifamoivoizana amin'ny fifandraisana TLS ary hametraka mpizara proxy hafa eo amin'ny lafiny fandraisana, ary koa hanamarina ny mari-pankasitrahana TLS raha tsy misy ny fandraisana anjara amin'ny serivisy fandraisana, izay natao hanaiky ny fifandraisana ihany localhost. Bebe kokoa momba izany aoriana).

Tena mitovy amin'ny SmartStack avy amin'ny Airbnb, fa ny fahasamihafana lehibe dia ny SmartStack dia ampiharina sy apetraka amin'ny famokarana, raha toa kosa ny dotCloud ny rafi-pandehanana anatiny dia najanona rehefa lasa Docker i dotCloud.

Izaho manokana dia mihevitra ny SmartStack ho iray amin'ireo nialoha ny rafitra toa an'i Istio, Linkerd ary Consul Connect satria samy manaraka ny lamina mitovy izy ireo:

  • Manaova proxy amin'ny node tsirairay.
  • Mifandray amin'ny proxy ny mpanjifa.
  • Ny fiaramanidina fanaraha-maso dia manavao ny fanovana proxy rehefa miova ny backend.
  • ... Tombontsoa!

Fampiharana maoderina ny harato serivisy

Raha toa ka nila nampihatra grid mitovy amin'izany isika ankehitriny, dia afaka mampiasa fitsipika mitovy amin'izany isika. Ohatra, amboary ny faritra DNS anatiny amin'ny alΓ lan'ny fametahana ny anaran'ny serivisy amin'ny adiresy ao amin'ny habaka 127.0.0.0/8. Avy eo dia mandehana HAProxy amin'ny node tsirairay ao amin'ny cluster, manaiky ny fifandraisana amin'ny adiresy serivisy tsirairay (ao amin'io subnet 127.0.0.0/8) ary mamindra / mampifandanja ny entana mankany amin'ny lamosina mifanentana. Ny fanamafisana HAProxy dia azo fehezina confd, mamela anao hitahiry vaovao backend ao amin'ny etcd na Consul ary manosika ho azy ny fanavaozam-baovao amin'ny HAProxy rehefa ilaina izany.

Izany no fomba fiasan'i Istio! Saingy misy fahasamihafana sasany:

  • fampiasana Envoy Proxy fa tsy HAProxy.
  • Mitahiry ny fandrindrana backend amin'ny alΓ lan'ny Kubernetes API fa tsy snsd na Consul.
  • Ny tolotra dia adiresy ao amin'ny subnet anatiny (adiresy Kubernetes ClusterIP) fa tsy 127.0.0.0/8.
  • Manana singa fanampiny (Citadel) hanampiana ny fanamarinana TLS eo amin'ny mpanjifa sy ny mpizara.
  • Manohana ireo endri-javatra vaovao toy ny fanapahana ny faritra, ny tracing mizara, ny fametrahana ny canary, sns.

Andeha hojerentsika haingana ny sasany amin'ireo fahasamihafana.

Envoy Proxy

Ny Envoy Proxy dia nosoratan'i Lyft [Mifaninana amin'i Uber eo amin'ny tsenan'ny taxi - eo ho eo. lalana]. Mitovitovy amin'ny fomba maro amin'ny proxy hafa (ohatra HAProxy, Nginx, Traefik...), fa nanoratra ny azy i Lyft satria mila endri-javatra tsy ampy ny proxy hafa, ary toa marani-tsaina kokoa ny manao vaovao fa tsy manitatra ny efa misy.

Ny iraka dia azo ampiasaina irery. Raha manana serivisy manokana aho izay mila mifandray amin'ny serivisy hafa, dia azoko atao ny manitsy azy io mba hifandraisana amin'ny Envoy, ary avy eo manitsy sy manitsy ny Envoy miaraka amin'ny toerana misy serivisy hafa, ary mahazo fiasa fanampiny be dia be, toy ny fahitana. Raha tokony ho tranomboky mpanjifa mahazatra na manindrona soritra antso ao amin'ny kaody, mandefa fifamoivoizana any amin'ny Envoy izahay, ary manangona metrika ho anay izany.

Fa ny Envoy koa dia afaka miasa toy ny fiaramanidina data (fiaramanidina data) ho an'ny serivisy serivisy. Midika izany fa efa namboarina ho an'ity mesh serivisy ity ny Envoy fiaramanidina fanaraha-maso (fiaramanidina fanaraha-maso).

Fiaramanidina mifehy

Ho an'ny fiaramanidina fanaraha-maso, Istio dia miankina amin'ny Kubernetes API. Tsy mitovy amin'ny fampiasana confd izany, izay miankina amin'ny etcd na Consul mba hijerena ny fitambaran'ny fanalahidy ao amin'ny fivarotana data. Istio dia mampiasa ny Kubernetes API hijerena andiana loharanon-karena Kubernetes.

Eo anelanelan'ny sy izao: Izaho manokana dia hitako fa mahasoa ity Famaritana ny Kubernetes APIizay mivaky hoe:

Ny Server API Kubernetes dia "server moana" izay manolotra fitahirizana, famoahana, fanamarinana, fanavaozana ary semantika ho an'ny loharano API.

Istio dia natao hiara-miasa amin'i Kubernetes; ary raha te hampiasa azy ivelan'ny Kubernetes ianao dia mila manao ohatra iray amin'ny mpizara Kubernetes API (sy ny serivisy mpanampy snsd).

Adiresy serivisy

Istio dia miantehitra amin'ny adiresy ClusterIP izay atolotry ny Kubernetes, ka ny serivisy Istio dia mahazo adiresy anatiny (tsy ao anatin'ny sehatra 127.0.0.0/8).

Ny fifamoivoizana mankany amin'ny adiresy ClusterIP ho an'ny serivisy manokana ao amin'ny cluster Kubernetes tsy misy Istio dia voasakan'ny kube-proxy ary alefa any amin'ny backend an'io proxy io. Raha liana amin'ny antsipiriany ara-teknika ianao, ny kube-proxy dia mametraka fitsipika iptables (na mpifandanja entana IPVS, miankina amin'ny fomba fanamboarana azy) mba hanoratana indray ny adiresin'ny IP an'ny fifandraisana mankany amin'ny adiresy ClusterIP.

Raha vao tafapetraka amin'ny kluster Kubernetes i Istio, dia tsy misy fiovana raha tsy avelany mazava ho an'ny mpanjifa iray, na ny anaran'ny toerana manontolo mihitsy aza, amin'ny fampidirana fitoeran-javatra. sidecar amin'ny custom pods. Ity kaontenera ity dia hanodina ohatra iray amin'ny Envoy ary hanangana andiana fitsipika iptables hanakanana ny fifamoivoizana mankany amin'ny serivisy hafa ary hamindra izany fifamoivoizana izany mankany amin'ny Envoy.

Rehefa ampidirina amin'ny DNS Kubernetes, midika izany fa afaka mifandray amin'ny anaran'ny serivisy ny kaodinay ary "miasa fotsiny" ny zava-drehetra. Raha lazaina amin'ny teny hafa, ny kaodinay dia mametraka fanontaniana toy ny http://api/v1/users/4242avy eo api mamaha ny fangatahana 10.97.105.48, ny fitsipika iptables dia hanakana ny fifandraisana avy amin'ny 10.97.105.48 ary handefa azy ireo any amin'ny proxy Envoy eo an-toerana, ary io proxy eo an-toerana io dia handefa ny fangatahana any amin'ny API backend tena izy. Fih!

Fanampiny frills

Istio koa dia manome encryption sy authentication end-to-end amin'ny alΓ lan'ny mTLS ( mutual TLS). Singa iray antsoina hoe Citadel.

Misy singa iray ihany koa Mixer, izay azon'ny Iraka angatahina ny tsirairay mangataka ny handray fanapahan-kevitra manokana momba izany fangatahana izany miankina amin'ny anton-javatra isan-karazany toy ny lohapejy, backend entana, sns... (aza manahy: misy fomba maro ny Mixer mihazakazaka, ary na dia midonaka aza, Envoy dia hanohy ny asa tsara ho proxy).

Ary mazava ho azy, niresaka momba ny fahitana izahay: Manangona metrika be dia be ny Envoy raha manome tracing mizara. Ao amin'ny maritrano microservices, raha toa ka tsy maintsy mandalo amin'ny microservices A, B, C, ary D ny fangatahana API iray, dia rehefa miditra, ny tracing mizara dia hanampy famantarana tokana amin'ny fangatahana ary hitahiry io famantarana io amin'ny alΓ lan'ny subrequests amin'ireo microservices rehetra ireo. ireo antso mifandraika rehetra horaisina. fahatarana, sns.

Amboary na mividy

Istio dia malaza ho sarotra. Mifanohitra amin'izany kosa, ny fananganana ny harato zotra izay nolazaiko tany am-piandohan'ity lahatsoratra ity dia somary tsotra amin'ny fampiasana fitaovana efa misy. Noho izany, mitombina ve ny mamorona harato serivisy ho anao manokana?

Raha toa ka manana filana maotina isika (tsy mila fahitana, fiatoana fizaran-tany ary hafetsena hafa), dia tonga ny eritreritra hamolavola ny fitaovantsika manokana. Saingy raha mampiasa Kubernetes isika, dia mety tsy ilaina akory izany satria efa manome fitaovana fototra ho an'ny fitadiavana serivisy sy fampifandanjana entana ny Kubernetes.

Saingy raha manana fepetra avo lenta isika, dia toa safidy tsara kokoa ny "mividy" serivisy serivisy. (Tsy hoe "mividy" foana izany satria loharano misokatra i Istio, saingy mbola mila mampiasa fotoana ara-teknika isika mba hahatakarana sy hampiasana ary hitantana azy.)

Tokony hifidy Istio, Linkerd na Consul Connect ve aho?

Istio ihany no noresahinay hatreto, fa tsy io ihany no mesh service. Alternative malaza - Linkerd, ary mbola misy hafa koa Consul Connect.

Inona no safidy?

Raha ny marina, tsy fantatro. Amin'izao fotoana izao dia tsy mihevitra ny tenako ho ampy fahaizana hamaly io fanontaniana io aho. Misy vitsivitsy TENA lahatsoratra miaraka amin'ny fampitahana ireo fitaovana ireo ary aza benchmarks.

Ny fomba iray mampanantena dia ny fampiasana fitaovana toy izany SuperGloo. Mametraka sosona abstraction izy io mba hanatsorana sy hampiray ireo API nasehon'ny meshes serivisy. Raha tokony hianatra ny API manokana (ary, raha ny hevitro, somary saro-takarina) amin'ny mesh serivisy samihafa, dia afaka mampiasa ny fanamboarana tsotra kokoa an'ny SuperGloo isika - ary mifamadika mora foana amin'ny iray hafa, toy ny hoe manana endrika fanairana manelanelana mamaritra ny interface HTTP sy ny backends afaka. amin'ny famoronana ny tena fanovana ho an'ny Nginx, HAProxy, Traefik, Apache...

Niara-niasa kely tamin'i Istio sy SuperGloo aho, ary amin'ny lahatsoratra manaraka dia tiako ny hampiseho ny fomba hanampiana an'i Istio na Linkerd amin'ny cluster efa misy mampiasa SuperGloo, ary ny fomba anaovan'ity farany ny asa, izany hoe mamela anao hifindra avy serivisy iray mankany amin'ny iray hafa nefa tsy manodina ny tefy.

Source: www.habr.com

Add a comment