Ntim, microservices thiab kev pabcuam meshes

Hauv Internet ib pawg cov ntawv ΠΎ kev pabcuam mesh (kev pabcuam mesh), thiab ntawm no yog lwm qhov. Hooray! Tab sis vim li cas? Tom qab ntawd, kuv xav qhia kuv lub tswv yim tias nws yuav zoo dua yog tias cov kev pabcuam meshes tau tshwm sim 10 xyoo dhau los, ua ntej qhov tshwm sim ntawm cov thawv ntim khoom xws li Docker thiab Kubernetes. Kuv tsis tau hais tias kuv qhov kev xav zoo dua lossis phem dua li lwm tus, tab sis vim tias kev pabcuam meshes yog cov tsiaj txhu nyuaj, ntau lub ntsiab lus ntawm kev pom yuav pab kom nkag siab zoo dua.

Kuv mam li tham txog dotCloud platform, uas tau tsim los ntawm ntau tshaj li ib puas microservices thiab txhawb ntau txhiab daim ntawv thov ntim. Kuv yuav piav qhia txog cov teeb meem uas peb tau ntsib hauv kev tsim thiab tsim nws, thiab qhov kev pabcuam meshes tuaj yeem pab tau li cas (lossis tsis tuaj yeem) pab.

Keeb kwm ntawm dotCloud

Kuv tau sau txog keeb kwm ntawm dotCloud thiab cov kev xaiv architecture rau lub platform no, tab sis kuv tsis tau tham ntau txog txheej txheej network. Yog koj tsis xav dhia mus nyeem ntawv tsab xov xwm kawg hais txog dotCloud, ntawm no yog lub ntsiab lus tseem ceeb: nws yog PaaS platform-as-a-kev pabcuam uas tso cai rau cov neeg siv khoom siv ntau yam kev siv (Java, PHP, Python ...), nrog kev txhawb nqa rau ntau yam ntaub ntawv. cov kev pabcuam (MongoDB, MySQL, Redis ...) thiab kev ua haujlwm zoo li Heroku: Koj xa koj cov lej rau lub platform, nws tsim cov duab ntim thiab xa lawv.

Kuv yuav qhia koj li cas kev khiav tsheb mus rau dotCloud platform. Tsis yog vim nws yog qhov txias tshwj xeeb (txawm hais tias lub kaw lus ua haujlwm zoo rau nws lub sijhawm!), tab sis feem ntau vim tias nrog cov cuab yeej niaj hnub xws li kev tsim qauv tuaj yeem siv tau yooj yim hauv lub sijhawm luv luv los ntawm pab pawg me me yog tias lawv xav tau txoj hauv kev los khiav tsheb ntawm pawg. ntawm microservices lossis ib pawg ntawm kev siv. Txoj kev no, koj tuaj yeem sib piv cov kev xaiv: yuav ua li cas yog tias koj tsim txhua yam koj tus kheej lossis siv cov kev pabcuam uas twb muaj lawm. Tus qauv xaiv yog ua rau koj tus kheej los yog yuav nws.

Traffic routing rau cov ntawv thov tuav

Cov ntawv thov ntawm dotCloud tuaj yeem nthuav tawm HTTP thiab TCP qhov kawg.

HTTP endpoints dynamically ntxiv rau lub load balancer pawg configuration Hipache. Qhov no zoo ib yam li cov peev txheej niaj hnub no Ingress hauv Kubernetes thiab load balancer nyiam Traefik.

Cov neeg siv khoom txuas mus rau HTTP qhov kawg ntawm cov chaw tsim nyog, muab cov npe sau npe rau dotCloud load balancers. Tsis muaj dab tsi tshwj xeeb.

TCP endpoints txuam nrog tus lej chaw nres nkoj, uas tom qab ntawd kis mus rau tag nrho cov ntim hauv pawg ntawd ntawm ib puag ncig hloov pauv.

Cov neeg siv khoom tuaj yeem txuas rau TCP cov ntsiab lus kawg siv lub npe tsim nyog (ib yam dab tsi zoo li rooj vag-X.dotcloud.com) thiab tus lej chaw nres nkoj.

Lub hostname no daws rau "nats" server pawg (tsis cuam tshuam rau Neej), uas yuav xa cov kev sib txuas TCP nkag mus rau lub thawv kom raug (lossis, nyob rau hauv cov ntaub ntawv ntawm cov kev pabcuam thauj khoom sib npaug, mus rau cov thawv kom raug).

Yog tias koj paub Kubernetes, qhov no tej zaum yuav ceeb toom koj txog Kev Pabcuam NodePort.

Tsis muaj kev pabcuam sib npaug ntawm dotCloud platform ClusterIP: Rau kev yooj yim, cov kev pabcuam tau nkag mus rau tib txoj kev ntawm sab hauv thiab sab nraud lub platform.

Txhua yam tau teeb tsa yooj yim heev: thawj qhov kev siv ntawm HTTP thiab TCP routing tes hauj lwm tej zaum tsuas yog ob peb puas kab ntawm Python txhua. Yooj yim (Kuv xav hais tias tsis muaj tseeb) algorithms uas tau ua kom zoo raws li lub platform loj hlob thiab cov kev xav tau ntxiv tshwm sim.

Nws tsis tas yuav tsum tau refactoring code uas twb muaj lawm. Tshwj xeeb, 12 yam apps tuaj yeem siv ncaj qha rau qhov chaw nyob tau los ntawm kev hloov pauv ib puag ncig.

Qhov no txawv ntawm qhov kev pabcuam niaj hnub no li cas?

Txwv tsis pub pom kev. Peb tsis muaj ib qho kev ntsuas rau TCP routing mesh kiag li. Thaum nws los txog rau HTTP routing, tom qab versions qhia cov ncauj lus kom ntxaws HTTP metrics nrog cov lej yuam kev thiab lub sij hawm teb, tab sis cov kev pabcuam niaj hnub no mus ntxiv, muab kev koom ua ke nrog cov ntsuas kev sau cov tshuab xws li Prometheus, piv txwv.

Kev pom tau yog qhov tseem ceeb tsis yog los ntawm kev pom kev ua haujlwm (los pab daws teeb meem), tab sis kuj thaum tso tawm cov yam ntxwv tshiab. Nws yog hais txog kev nyab xeeb xiav-ntsuab deployment ΠΈ kev xa tawm canary.

Routing efficiency kuj txwv. Hauv dotCloud routing mesh, tag nrho cov tsheb khiav yuav tsum mus los ntawm ib pawg ntawm cov routing nodes. Qhov no txhais tau tias muaj peev xwm hla ntau yam AZ (Availability Zone) ciam teb thiab nce latency. Kuv nco qab kev daws teeb meem code uas tau ua ntau tshaj li ib puas SQL queries ib nplooj ntawv thiab qhib kev sib txuas tshiab rau SQL neeg rau zaub mov rau txhua cov lus nug. Thaum khiav hauv zos, nplooj ntawv thauj khoom tam sim ntawd, tab sis hauv dotCloud nws yuav siv sijhawm li ob peb feeb los thauj khoom vim tias txhua qhov kev sib txuas TCP (thiab cov lus nug SQL tom ntej) siv kaum tawm milliseconds. Hauv qhov tshwj xeeb no, kev sib txuas tsis tu ncua daws qhov teeb meem.

Kev pabcuam niaj hnub meshes zoo dua los daws cov teeb meem zoo li no. Ua ntej tshaj plaws, lawv xyuas tias cov kev sib txuas tau raug xa mus hauv qhov chaw. Logical flow yog tib yam: ΠΊΠ»ΠΈΠ΅Π½Ρ‚ β†’ мСш β†’ сСрвис, tab sis tam sim no cov mesh ua haujlwm hauv zos thiab tsis nyob ntawm cov chaw taws teeb, yog li kev sib txuas ΠΊΠ»ΠΈΠ΅Π½Ρ‚ β†’ мСш yog hauv zos thiab ceev heev (microseconds es tsis txhob milliseconds).

Cov kev pabcuam niaj hnub no tseem siv cov khoom sib npaug ntawm cov khoom siv ntse dua. Los ntawm kev saib xyuas kev noj qab haus huv ntawm cov backends, lawv tuaj yeem xa cov tsheb khiav mus rau cov backends sai dua, uas ua rau muaj kev txhim kho tag nrho.

Kev ruaj ntseg zoo dua thiab. Lub dotCloud routing mesh khiav tag nrho ntawm EC2 Classic thiab tsis tau encrypt tsheb (raws li qhov kev xav tias yog tias ib tug neeg tau tswj kom muab tus sniffer rau EC2 network tsheb, koj twb muaj teeb meem loj). Kev pabcuam niaj hnub meshes pob tshab tiv thaiv tag nrho peb cov tsheb, piv txwv li, nrog kev sib tw TLS authentication thiab tom ntej encryption.

Routing tsheb rau kev pabcuam platform

Okay, peb tau tham txog kev khiav tsheb ntawm cov ntawv thov, tab sis dab tsi txog dotCloud platform nws tus kheej?

Lub platform nws tus kheej muaj txog li ib puas microservices lub luag haujlwm rau ntau yam haujlwm. Qee qhov tau txais kev thov los ntawm lwm tus, thiab qee tus yog cov neeg ua haujlwm tom qab uas txuas nrog lwm cov kev pabcuam tab sis tsis lees txais kev sib txuas lawv tus kheej. Txawm li cas los xij, txhua qhov kev pabcuam yuav tsum paub qhov kawg ntawm qhov chaw nyob uas nws xav tau los txuas rau.

Ntau cov kev pabcuam qib siab tuaj yeem siv cov routing mesh tau piav qhia saum toj no. Qhov tseeb, ntau ntawm dotCloud ntau tshaj li ib puas microservices tau raug xa mus ua cov ntawv thov tsis tu ncua ntawm dotCloud platform nws tus kheej. Tab sis qee qhov kev pabcuam qis qis (tshwj xeeb yog cov uas siv qhov kev sib txuas lus no) xav tau qee yam yooj yim dua, nrog tsawg dua kev vam khom (vim lawv tsis tuaj yeem nyob ntawm lawv tus kheej ua haujlwm - qhov zoo qub qaib thiab qe teeb meem).

Cov kev pabcuam qis, lub hom phiaj tseem ceeb no tau siv los ntawm cov thawv ntim ncaj qha rau ntawm ob peb lub ntsiab lus tseem ceeb. Hauv qhov no, cov kev pabcuam txheem platform tsis tau siv: linker, teem sijhawm thiab khiav. Yog tias koj xav piv rau cov thawv ntim niaj hnub, nws zoo li khiav lub dav hlau tswj nrog docker run ncaj qha ntawm cov nodes, es tsis txhob delegating txoj hauj lwm rau Kubernetes. Nws zoo nkaus li zoo sib xws hauv lub tswv yim static modules (pods), uas nws siv kub em los yog boot kub thaum booting ib pawg standalone.

Cov kev pabcuam no tau nthuav tawm hauv qhov yooj yim thiab tsis zoo: cov ntaub ntawv YAML tau teev lawv cov npe thiab chaw nyob; thiab txhua tus neeg siv khoom yuav tsum tau luam ib daim qauv ntawm YAML cov ntaub ntawv no rau kev xa tawm.

Ntawm ib sab, nws yog qhov kev ntseeg siab heev vim nws tsis xav tau kev txhawb nqa ntawm lub khw muag khoom tseem ceeb / tus nqi xws li Zookeeper (nco, thiab lwm yam lossis Consul tsis muaj nyob rau lub sijhawm ntawd). Ntawm qhov tod tes, nws ua rau nws nyuaj rau txav cov kev pabcuam. Txhua lub sijhawm ua haujlwm, txhua tus neeg siv yuav tau txais cov ntaub ntawv YAML tshiab (thiab muaj peev xwm rov pib dua). Tsis xis nyob heev!

Tom qab ntawd, peb pib siv lub tswv yim tshiab, qhov twg txhua tus neeg siv txuas nrog lub npe neeg rau zaub mov hauv zos. Hloov chaw nyob thiab chaw nres nkoj, nws tsuas yog xav paub qhov chaw nres nkoj ntawm qhov kev pabcuam, thiab txuas ntawm localhost. Tus neeg sawv cev hauv zos tswj qhov kev sib txuas no thiab xa mus rau lub server tiag tiag. Tam sim no, thaum tsiv lub backend mus rau lwm lub tshuab lossis scaling, es tsis txhob hloov kho tag nrho cov neeg siv khoom, koj tsuas yog yuav tsum hloov kho tag nrho cov npe hauv zos no; thiab reboot tsis tas yuav tsum tau.

(Nws kuj tau npaj los encapsulate cov tsheb khiav hauv TLS kev sib txuas thiab muab tso rau lwm tus neeg rau zaub mov nyob rau sab tau txais, nrog rau kev txheeb xyuas TLS daim ntawv pov thawj yam tsis muaj kev koom tes ntawm cov kev pabcuam tau txais, uas tau teeb tsa los lees txais kev sib txuas nkaus xwb. localhost. Ntxiv rau qhov no tom qab).

Qhov no zoo ib yam li SmartStack los ntawm Airbnb, tab sis qhov sib txawv tseem ceeb yog tias SmartStack tau siv thiab xa mus rau kev tsim khoom, thaum dotCloud's internal routing system raug kaw thaum dotCloud los ua Docker.

Kuv tus kheej xav txog SmartStack ua ib qho ntawm cov thawj coj ntawm cov tshuab xws li Istio, Linkerd thiab Consul Txuas vim tias lawv txhua tus ua raws li tus qauv:

  • Khiav ib lub npe rau ntawm txhua qhov node.
  • Cov neeg siv khoom txuas mus rau lub npe.
  • Lub dav hlau tswj tau hloov kho lub npe kev teeb tsa thaum rov qab hloov pauv.
  • ... Nyiaj!

Kev siv niaj hnub ntawm kev pabcuam mesh

Yog tias peb xav siv txoj kab sib xws niaj hnub no, peb tuaj yeem siv cov ntsiab lus zoo sib xws. Piv txwv li, teeb tsa ib cheeb tsam DNS sab hauv los ntawm kev kos npe cov kev pabcuam rau cov chaw nyob hauv qhov chaw 127.0.0.0/8. Tom qab ntawd khiav HAProxy ntawm txhua qhov hauv pawg, lees txais kev sib txuas ntawm txhua qhov chaw nyob (hauv lub subnet ntawd 127.0.0.0/8) thiab redirecting / ntsuas qhov load rau qhov tsim nyog backends. HAProxy configuration tuaj yeem tswj tau confd, tso cai rau koj khaws cov ntaub ntawv rov qab hauv lwm yam lossis Consul thiab cia li thawb hloov kho tshiab rau HAProxy thaum xav tau.

Qhov no zoo nkauj npaum li cas Istio ua haujlwm! Tab sis nrog qee qhov sib txawv:

  • Siv Envoy Proxy tsis yog HAProxy.
  • Khw muag khoom backend configuration ntawm Kubernetes API es tsis txhob lwm yam los yog Consul.
  • Cov kev pabcuam raug faib cov chaw nyob ntawm lub subnet sab hauv (Kubernetes ClusterIP chaw nyob) es tsis yog 127.0.0.0/8.
  • Muaj ib qho kev tivthaiv ntxiv (Citadel) txhawm rau ntxiv kev sib tw TLS authentication ntawm tus neeg siv khoom thiab cov servers.
  • Txhawb cov yam ntxwv tshiab xws li kev rhuav tshem Circuit Court, faib tracing, canary deployment, thiab lwm yam.

Cia peb saib sai ntawm qee qhov sib txawv.

Envoy Proxy

Envoy Proxy tau sau los ntawm Lyft [Uber tus neeg sib tw hauv kev lag luam tsheb tavxij - kwv yees li. txoj kab]. Nws yog qhov zoo sib xws hauv ntau txoj hauv kev rau lwm tus neeg sawv cev (xws li HAProxy, Nginx, Traefik ...), tab sis Lyft tau sau lawv vim lawv xav tau cov yam ntxwv uas lwm tus neeg tsis muaj, thiab nws zoo li ntse dua los ua ib qho tshiab dua li txuas ntxiv qhov uas twb muaj lawm.

Envoy tuaj yeem siv nws tus kheej. Yog tias kuv muaj ib qho kev pabcuam tshwj xeeb uas yuav tsum tau txuas mus rau lwm cov kev pabcuam, kuv tuaj yeem teeb tsa nws los txuas rau Envoy, thiab tom qab ntawd dynamically configure thiab reconfigure Envoy nrog rau qhov chaw ntawm lwm cov kev pab cuam, thaum tau txais ntau yam zoo ntxiv functionality, xws li visibility. Tsis yog lub tsev qiv ntawv cov neeg siv khoom siv lossis txhaj cov cim hu rau hauv cov lej, peb xa cov tsheb mus rau Envoy, thiab nws sau cov ntsuas rau peb.

Tab sis Envoy kuj muaj peev xwm ua haujlwm li cov ntaub ntawv dav hlau (cov ntaub ntawv dav hlau) rau kev pabcuam mesh. Qhov no txhais tau tias tam sim no Envoy tau teeb tsa rau qhov kev pabcuam mesh tswj lub dav hlau (tswj dav hlau).

Tswj lub dav hlau

Rau lub dav hlau tswj, Istio tso siab rau Kubernetes API. Qhov no tsis txawv heev los ntawm kev siv confd, uas tso siab rau lwm yam lossis Consul los saib cov txheej txheem ntawm cov yuam sij hauv cov ntaub ntawv khaws cia. Istio siv Kubernetes API los saib cov txheej txheem Kubernetes.

Nruab nrab ntawm qhov no thiab tom qab ntawd: Kuv tus kheej pom qhov no pab tau Kubernetes API piav qhiauas nyeem:

Kubernetes API Server yog "neeg rau zaub mov ruam" uas muaj kev khaws cia, hloov kho, siv tau, hloov kho, thiab cov ntsiab lus rau API cov peev txheej.

Istio yog tsim los ua haujlwm nrog Kubernetes; thiab yog tias koj xav siv nws sab nraum Kubernetes, ces koj yuav tsum tau khiav ib qho piv txwv ntawm Kubernetes API server (thiab lwm yam kev pab cuam).

Chaw nyob

Istio tso siab rau ClusterIP chaw nyob uas Kubernetes faib, yog li cov kev pabcuam Istio tau txais qhov chaw nyob sab hauv (tsis nyob hauv ntau yam 127.0.0.0/8).

Kev khiav mus rau ClusterIP chaw nyob rau ib qho kev pabcuam tshwj xeeb hauv Kubernetes pawg yam tsis muaj Istio cuam tshuam los ntawm kube-proxy thiab xa mus rau tus neeg sawv cev ntawd. Yog tias koj txaus siab rau cov lus qhia, kube-proxy teeb tsa iptables cov cai (lossis IPVS load balancers, nyob ntawm seb nws tau teeb tsa li cas) rov sau dua qhov chaw IP chaw nyob ntawm kev sib txuas mus rau ClusterIP chaw nyob.

Thaum Istio tau teeb tsa ntawm Kubernetes pawg, tsis muaj dab tsi hloov mus txog thaum nws tau qhib meej meej rau cov neeg siv khoom, lossis txawm tias tag nrho cov npe chaw, los ntawm kev qhia lub thawv sidecar nyob rau hauv kev cai pods. Lub thawv no yuav tig ib qho piv txwv ntawm Envoy thiab teeb tsa cov cai iptables los cuam tshuam cov tsheb khiav mus rau lwm qhov kev pabcuam thiab hloov tsheb mus rau Envoy.

Thaum koom nrog Kubernetes DNS, qhov no txhais tau tias peb cov cai tuaj yeem txuas tau los ntawm kev pabcuam lub npe thiab txhua yam "tsuas yog ua haujlwm." Hauv lwm lo lus, peb cov cai teeb meem queries nyiam http://api/v1/users/4242ntawd api daws kev thov rau 10.97.105.48, cov cai iptables yuav cuam tshuam kev sib txuas los ntawm 10.97.105.48 thiab xa mus rau Envoy proxy hauv zos, thiab tus neeg sawv cev hauv zos yuav xa daim ntawv thov mus rau qhov tseeb backend API. Pheej!

Ntxiv frills

Istio tseem muab qhov kawg-rau-kawg encryption thiab authentication ntawm mTLS (mutual TLS). Ib feem hu ua Citadel.

Kuj tseem muaj ib feem Tov khoom, uas Envoy tuaj yeem thov rau ntawm txhua tus thov kom txiav txim siab tshwj xeeb txog qhov kev thov ntawd nyob ntawm ntau yam xws li headers, backend load, thiab lwm yam ... (tsis txhob txhawj: muaj ntau txoj hauv kev kom Mixer khiav, thiab txawm tias nws poob, Envoy tseem yuav ua haujlwm ntxiv. zoo li tus neeg sawv cev).

Thiab, ntawm chav kawm, peb tau hais txog qhov pom tau: Envoy sau ntau qhov kev ntsuas thaum muab faib tracing. Hauv microservices architecture, yog tias ib qho kev thov API yuav tsum dhau los ntawm microservices A, B, C, thiab D, tom qab nkag mus, qhov kev faib tawm yuav ntxiv tus cim tshwj xeeb rau qhov kev thov thiab khaws tus cim no los ntawm kev thov rau tag nrho cov microservices, tso cai. tag nrho cov hais txog yuav raug ntes. qeeb, thiab lwm yam.

Tsim los yog yuav

Istio muaj lub koob npe nrov rau kev ua haujlwm. Nyob rau hauv sib piv, tsim lub routing mesh uas kuv tau piav nyob rau hauv thaum pib ntawm no ncej yog kuj yooj yim siv cov cuab yeej uas twb muaj lawm. Yog li, nws puas tsim nyog los tsim koj tus kheej cov kev pabcuam mesh hloov?

Yog tias peb muaj kev xav tau me me (peb tsis xav tau kev pom, lub voj voog hluav taws xob thiab lwm yam kev xav), ces kev xav los tsim peb tus kheej cov cuab yeej. Tab sis yog tias peb siv Kubernetes, tej zaum nws yuav tsis xav tau vim Kubernetes twb muab cov cuab yeej yooj yim rau kev nrhiav kev pab cuam thiab thauj khoom sib npaug.

Tab sis yog tias peb muaj cov kev xav tau siab tshaj, ces "muas" cov kev pabcuam mesh zoo li yog qhov kev xaiv zoo dua. (Qhov no tsis yog ib txwm "yuav" vim tias Istio yog qhov qhib, tab sis peb tseem yuav tsum tau nqis peev sijhawm engineering kom nkag siab, siv, thiab tswj nws.)

Kuv puas yuav tsum xaiv Istio, Linkerd lossis Consul Txuas?

Txog tam sim no peb tsuas yog tham txog Istio, tab sis qhov no tsis yog qhov kev pabcuam nkaus xwb. Nrov lwm txoj kev - Linkerd, thiab muaj ntau Consul Connect.

Yuav ua li cas xaiv?

Honestly, kuv tsis paub. Lub sijhawm no kuv tsis xav tias kuv tus kheej muaj peev xwm txaus los teb cov lus nug no. Muaj ob peb tug nthuav cov ntawv nrog rau kev sib piv ntawm cov cuab yeej no thiab txawm cov qhab nia.

Ib txoj hauv kev pheej hmoo yog siv cov cuab yeej zoo li SuperGloo. Nws siv cov txheej txheem abstraction kom yooj yim thiab sib koom ua ke APIs nthuav tawm los ntawm kev pabcuam meshes. Hloov chaw ntawm kev kawm qhov tshwj xeeb (thiab, hauv kuv lub tswv yim, kuj nyuaj) APIs ntawm cov kev pabcuam sib txawv meshes, peb tuaj yeem siv SuperGloo cov qauv yooj yim - thiab hloov tau yooj yim ntawm ib qho mus rau lwm qhov, zoo li peb muaj cov qauv nruab nrab uas piav txog HTTP interfaces thiab backends muaj peev xwm. ntawm generating qhov tseeb configuration rau Nginx, HAProxy, Traefik, Apache ...

Kuv twb dabbled me ntsis nrog Istio thiab SuperGloo, thiab nyob rau hauv tsab xov xwm tom ntej no kuv xav qhia yuav ua li cas ntxiv Istio los yog Linkerd rau ib pawg uas twb muaj lawm siv SuperGloo, thiab yuav ua li cas tom kawg tau ua tiav txoj hauj lwm, uas yog, tso cai rau koj hloov los ntawm ib qho kev pabcuam mesh mus rau lwm qhov yam tsis tau sau cov txheej txheem.

Tau qhov twg los: www.hab.com

Ntxiv ib saib