VisaptveroÅ”s ceļvedis Python mikropakalpojumu un pakalpojumu tÄ«kla (Service Mesh) ievieÅ”anÄ. Ieskats Istio, Linkerd, droŔībÄ, novÄrojamÄ«bÄ, trafika pÄrvaldÄ«bÄ.
Python mikropakalpojumi: PadziļinÄta ieskats pakalpojumu tÄ«kla (Service Mesh) ievieÅ”anÄ
ProgrammatÅ«ras izstrÄdes ainava ir bÅ«tiski mainÄ«jusies virzienÄ uz mikropakalpojumu arhitektÅ«ru. MonolÄ«tu lietojumprogrammu sadalīŔana mazÄkos, neatkarÄ«gi izvietojamos pakalpojumos piedÄvÄ nepÄrspÄjamu veiklÄ«bu, mÄrogojamÄ«bu un noturÄ«bu. Python, ar savu tÄ«ro sintaksi un jaudÄ«giem ietvariem, piemÄram, FastAPI un Flask, ir kļuvusi par galveno izvÄli Å”o pakalpojumu izveidei. TomÄr Ŕī sadalÄ«tÄ pasaule nav bez izaicinÄjumiem. Pieaugot pakalpojumu skaitam, pieaug arÄ« to mijiedarbÄ«bas pÄrvaldÄ«bas sarežģītÄ«ba. TieÅ”i Å”eit noder pakalpojumu tÄ«kls (service mesh).
Å is visaptveroÅ”ais ceļvedis ir paredzÄts globÄlai programmatÅ«ras inženieru, DevOps profesionÄļu un arhitektu auditorijai, kas strÄdÄ ar Python. MÄs izpÄtÄ«sim, kÄpÄc pakalpojumu tÄ«kls nav tikai 'jauka lieta', bet gan bÅ«tiska sastÄvdaļa mikropakalpojumu darbinÄÅ”anai lielÄ mÄrogÄ. MÄs atklÄsim, kas ir pakalpojumu tÄ«kls, kÄ tas risina kritiskas operatÄ«vÄs problÄmas un sniegsim praktisku ieskatu tÄ ievieÅ”anÄ uz Python balstÄ«tÄ mikropakalpojumu vidÄ.
Kas ir Python mikropakalpojumi? Ätrs atsvaidzinÄjums
Pirms iedziļinÄmies tÄ«klÄ, definÄsim kopÄ«gu pamatu. Mikropakalpojumu arhitektÅ«ra ir pieeja, kurÄ viena lietojumprogramma sastÄv no daudziem vaļīgi savienotiem un neatkarÄ«gi izvietojamiem mazÄkiem pakalpojumiem. Katrs pakalpojums ir paÅ”pietiekams, atbild par noteiktu biznesa funkcionalitÄti un sazinÄs ar citiem pakalpojumiem tÄ«klÄ, parasti izmantojot API (piemÄram, REST vai gRPC).
Python ir Ä«paÅ”i piemÄrots Å”ai paradigmai Å”Ädu iemeslu dÄļ:
- VienkÄrŔība un izstrÄdes Ätrums: Python lasÄmais sintakse ļauj komandÄm Ätri veidot un pilnveidot pakalpojumus.
- BagÄtÄ«ga ekosistÄma: PlaÅ”a bibliotÄku un ietvaru kolekcija visam, sÄkot no tÄ«mekļa serveriem (FastAPI, Flask) lÄ«dz datu zinÄtnei (Pandas, Scikit-learn).
- VeiktspÄja: Moderni asinhroni ietvari, piemÄram, FastAPI, kas balstÄ«ti uz Starlette un Pydantic, nodroÅ”ina veiktspÄju, kas ir salÄ«dzinÄma ar NodeJS un Go I/O-ierobežotiem uzdevumiem, kas ir bieži sastopami mikropakalpojumos.
IedomÄjieties globÄlu e-komercijas platformu. TÄ vietÄ, lai bÅ«tu viena masÄ«va lietojumprogramma, tÄ varÄtu sastÄvÄt no mikropakalpojumiem, piemÄram:
- LietotÄju pakalpojums: PÄrvalda lietotÄju kontus un autentifikÄciju.
- Produktu pakalpojums: ApstrÄdÄ produktu katalogu un krÄjumus.
- PasÅ«tÄ«jumu pakalpojums: ApstrÄdÄ jaunus pasÅ«tÄ«jumus un maksÄjumus.
- PiegÄdes pakalpojums: AprÄÄ·ina piegÄdes izmaksas un organizÄ piegÄdi.
PasÅ«tÄ«jumu pakalpojumam, kas rakstÄ«ts Python, jÄsazinÄs ar LietotÄju pakalpojumu, lai validÄtu klientu, un ar Produktu pakalpojumu, lai pÄrbaudÄ«tu krÄjumus. Å Ä« komunikÄcija notiek tÄ«klÄ. Tagad reiziniet to ar desmitiem vai simtiem pakalpojumu, un parÄdÄ«sies sarežģītÄ«ba.
SadalÄ«tÄs arhitektÅ«ras raksturÄ«gie izaicinÄjumi
Kad jÅ«su lietojumprogrammas komponenti sazinÄs tÄ«klÄ, jÅ«s mantojat visu tÄ«kla raksturÄ«go neuzticamÄ«bu. VienkÄrÅ”s monolÄ«ta funkcijas izsaukums kļūst par sarežģītu tÄ«kla pieprasÄ«jumu, kas pilns ar potenciÄlÄm problÄmÄm. TÄs bieži sauc par "2. dienas" operatÄ«vajÄm problÄmÄm, jo tÄs kļūst acÄ«mredzamas pÄc sÄkotnÄjÄs izvietoÅ”anas.
Tīkla neuzticamība
Kas notiek, ja Produkta pakalpojums lÄni atbild vai ir Ä«slaicÄ«gi nepieejams, kad PasÅ«tÄ«jumu pakalpojums to izsauc? PieprasÄ«jums var neizdoties. Lietojumprogrammas kodam tagad ir jÄapstrÄdÄ Å”Ä« situÄcija. Vai tas jÄatkÄrto? Cik reizes? Ar kÄdu aizkavi (eksponenciÄlais atsvÄlums)? Ko darÄ«t, ja Produkta pakalpojums ir pilnÄ«bÄ nestrÄdÄjoÅ”s? Vai mums jÄpÄrtrauc pieprasÄ«jumu sÅ«tīŔana uz laiku, lai tas atjaunotos? Å Ä« loÄ£ika, tostarp atkÄrtoti mÄÄ£inÄjumi, taimauti un Ä·Ädes pÄrtraucÄji, ir jÄievieÅ” katrÄ pakalpojumÄ, katram tÄ«kla izsaukumam. Tas ir lieki, pakļauts kļūdÄm un apgrÅ«tina jÅ«su Python biznesa loÄ£iku.
NovÄrojamÄ«bas trÅ«kums
MonolÄ«tÄ veiktspÄjas izpratne ir salÄ«dzinoÅ”i vienkÄrÅ”a. Mikropakalpojumu vidÄ viens lietotÄja pieprasÄ«jums var ŔķÄrsot piecus, desmit vai pat vairÄk pakalpojumus. Ja Å”is pieprasÄ«jums ir lÄns, kur ir vÄjÄ vieta? Atbildei uz Å”o jautÄjumu nepiecieÅ”ama vienota pieeja:
- Metrikas: Konsekventa metriku (piemÄram, pieprasÄ«jumu latentums, kļūdu lÄ«menis un trafika apjoms ("Zelta signÄli")) vÄkÅ”ana no katra pakalpojuma.
- ŽurnÄlÄÅ”ana: ŽurnÄlu apkopoÅ”ana no simtiem pakalpojumu instancÄm un to korelÄcija ar konkrÄtu pieprasÄ«jumu.
- SadalÄ«tÄ izsekoÅ”ana: Viena pieprasÄ«juma ceļa sekoÅ”ana cauri visiem pakalpojumiem, ko tas skar, lai vizualizÄtu visu izsaukumu grafiku un precizÄtu kavÄjumus.
ManuÄla Ŕī procesa ievieÅ”ana nozÄ«mÄ plaÅ”u instrumentÄÅ”anas un uzraudzÄ«bas bibliotÄku pievienoÅ”anu katram Python pakalpojumam, kas var atŔķirties konsekvencÄ un palielinÄt uzturÄÅ”anas izmaksas.
DroŔības labirints
KÄ nodroÅ”inÄt, ka komunikÄcija starp jÅ«su PasÅ«tÄ«jumu pakalpojumu un LietotÄju pakalpojumu ir droÅ”a un Å”ifrÄta? KÄ garantÄt, ka tikai PasÅ«tÄ«jumu pakalpojumam ir atļauts piekļūt sensitÄ«viem krÄjumu galapunktiem Produkta pakalpojumÄ? TradicionÄlÄ iestatÄ«jumÄ jÅ«s varÄtu paļauties uz tÄ«kla lÄ«meÅa noteikumiem (ugunsmÅ«riem) vai iegult noslÄpumus un autentifikÄcijas loÄ£iku katrÄ lietojumprogrammÄ. To kļūst neticami grÅ«ti pÄrvaldÄ«t lielÄ mÄrogÄ. Jums ir nepiecieÅ”ams nulles uzticÄ«bas tÄ«kls, kurÄ katrs pakalpojums autentificÄ un autorizÄ katru izsaukumu, kas pazÄ«stams kÄ SavstarpÄjais TLS (mTLS) un detalizÄta piekļuves kontrole.
Sarežģīta izvietoÅ”ana un trafika pÄrvaldÄ«ba
KÄ izlaist jaunu jÅ«su Python bÄzÄtÄ Produkta pakalpojuma versiju, neizraisot dÄ«kstÄvi? Bieža stratÄÄ£ija ir kanÄrijputniÅa izvietoÅ”ana, kurÄ jÅ«s lÄnÄm novirzÄt nelielu daļu (piemÄram, 1%) reÄlÄ trafika uz jauno versiju. Ja tÄ darbojas labi, jÅ«s pakÄpeniski palielinÄt trafiku. Å Ä« ievieÅ”ana bieži prasa sarežģītu loÄ£iku slodzes lÄ«dzsvarotÄja vai API vÄrtejas lÄ«menÄ«. Tas pats attiecas uz A/B testÄÅ”anu vai trafika atspoguļoÅ”anu testÄÅ”anas nolÅ«kos.
Ievads pakalpojumu tÄ«klÄ (Service Mesh): tÄ«kls pakalpojumiem
Pakalpojumu tÄ«kls ir Ä«paÅ”s, konfigurÄjams infrastruktÅ«ras slÄnis, kas risina Å”os izaicinÄjumus. Tas ir tÄ«kloÅ”anas modelis, kas atrodas virs jÅ«su esoÅ”Ä tÄ«kla (piemÄram, to, ko nodroÅ”ina Kubernetes), lai pÄrvaldÄ«tu visu pakalpojumu-pakalpojumu komunikÄciju. TÄ galvenais mÄrÄ·is ir padarÄ«t Å”o komunikÄciju uzticamu, droÅ”u un novÄrojamu.
Galvenie komponenti: vadības plakne un datu plakne
- Datu plakne: TÄ sastÄv no vieglu tÄ«kla starpniekserveru kopuma, ko sauc par sÄnu konteineriem (sidecars), kas tiek izvietoti blakus katrai jÅ«su mikropakalpojuma instancei. Å ie starpniekserveri pÄrtver visu ienÄkoÅ”o un izejoÅ”o tÄ«kla trafiku uz un no jÅ«su pakalpojuma. Tie nezina un tiem nav svarÄ«gi, ka jÅ«su pakalpojums ir rakstÄ«ts Python; tie darbojas tÄ«kla lÄ«menÄ«. PopulÄrÄkais starpniekserveris, ko izmanto pakalpojumu tÄ«klos, ir Envoy.
- VadÄ«bas plakne: TÄs ir pakalpojumu tÄ«kla "smadzenes". TÄ ir komponentu kopa, ar kuru jÅ«s, operators, mijiedarbojaties. JÅ«s nodroÅ”inÄt vadÄ«bas plaknei augsta lÄ«meÅa noteikumus un politikas (piemÄram, "atkÄrtoti mÄÄ£iniet neveiksmÄ«gus pieprasÄ«jumus uz Produkta pakalpojumu lÄ«dz 3 reizÄm"). PÄc tam vadÄ«bas plakne pÄrvÄrÅ” Ŕīs politikas konfigurÄcijÄs un izplata tÄs visiem sÄnu konteineru starpniekserveriem datu plaknÄ.
GalvenÄ atziÅa ir Å”Äda: pakalpojumu tÄ«kls pÄrceļ tÄ«kloÅ”anas problÄmu loÄ£iku no jÅ«su individuÄlajiem Python pakalpojumiem uz platformas slÄni. JÅ«su FastAPI izstrÄdÄtÄjam vairs nav jÄimportÄ atkÄrtotas mÄÄ£inÄÅ”anas bibliotÄka vai jÄraksta kods mTLS sertifikÄtu apstrÄdei. ViÅi raksta biznesa loÄ£iku, un tÄ«kls pÄrÄjo apstrÄdÄ caurspÄ«dÄ«gi.
PieprasÄ«jums no PasÅ«tÄ«jumu pakalpojuma uz Produkta pakalpojumu tagad plÅ«st Å”Ädi: PasÅ«tÄ«jumu pakalpojums ā PasÅ«tÄ«jumu pakalpojuma sÄnu konteiners ā Produkta pakalpojuma sÄnu konteiners ā Produkta pakalpojums. Visa "maÄ£ija" ā atkÄrtoti mÄÄ£inÄjumi, slodzes balansÄÅ”ana, Å”ifrÄÅ”ana, metrikas vÄkÅ”ana ā notiek starp abiem sÄnu konteineriem, ko pÄrvalda vadÄ«bas plakne.
Pakalpojumu tÄ«kla galvenie pÄ«lÄri
SadalÄ«sim pakalpojumu tÄ«kla sniegtÄs priekÅ”rocÄ«bas Äetros galvenajos pÄ«lÄros.
1. Uzticamība un noturība
Pakalpojumu tÄ«kls padara jÅ«su sadalÄ«to sistÄmu robustÄku, nemainot jÅ«su lietojumprogrammas kodu.
- AutomÄtiskie atkÄrtoti mÄÄ£inÄjumi: Ja pakalpojuma izsaukums neizdodas pÄrejoÅ”as tÄ«kla kļūdas dÄļ, sÄnu konteiners var automÄtiski atkÄrtot pieprasÄ«jumu, pamatojoties uz konfigurÄtu politiku.
- Taimauti: JÅ«s varat ieviest konsekventus, pakalpojumu lÄ«meÅa taimautus. Ja lejupÄjais pakalpojums neatbild 200 ms laikÄ, pieprasÄ«jums Ätri neizdodas, novÄrÅ”ot resursu aizturÄÅ”anu.
- ĶÄdes pÄrtraucÄji: Ja pakalpojuma instance konsekventi neizdodas, sÄnu konteiners var to uz laiku noÅemt no slodzes balansÄÅ”anas kopas (aktivizÄjot Ä·Ädes pÄrtraucÄju). Tas novÄrÅ” kaskÄdes neveiksmes un dod neveselÄ«gajam pakalpojumam laiku atjaunoties.
2. PadziļinÄta novÄrojamÄ«ba
SÄnu konteinera starpniekserveris ir ideÄls skatu punkts trafika novÄroÅ”anai. TÄ kÄ tas redz katru pieprasÄ«jumu un atbildi, tas var automÄtiski Ä£enerÄt daudz telemetrijas datu.
- Metrikas: TÄ«kls automÄtiski Ä£enerÄ detalizÄtas metrikas visam trafika apjomam, tostarp latentumu (p50, p90, p99), veiksmes rÄdÄ«tÄjus un pieprasÄ«jumu apjomu. Tos var savÄkt ar tÄdiem rÄ«kiem kÄ Prometheus un vizualizÄt tÄdos informÄcijas paneļos kÄ Grafana.
- SadalÄ«tÄ izsekoÅ”ana: SÄnu konteineri var ievietot un izplatÄ«t izsekoÅ”anas galvenes (piemÄram, B3 vai W3C Trace Context) starp pakalpojumu izsaukumiem. Tas ļauj izsekoÅ”anas rÄ«kiem, piemÄram, Jaeger vai Zipkin, salikt kopÄ visu pieprasÄ«juma ceļu, nodroÅ”inot pilnÄ«gu priekÅ”statu par jÅ«su sistÄmas darbÄ«bu.
- Piekļuves žurnÄli: IegÅ«stiet konsekventus, detalizÄtus žurnÄlus katram pakalpojumu-pakalpojumu izsaukumam, kas parÄda avotu, galamÄrÄ·i, ceļu, latentumu un atbildes kodu, visu bez vienas `print()` komandas jÅ«su Python kodÄ.
TÄdi rÄ«ki kÄ Kiali var pat izmantot Å”os datus, lai Ä£enerÄtu reÄllaika atkarÄ«bu grafiku jÅ«su mikropakalpojumiem, parÄdot trafika plÅ«smu un veselÄ«bas statusu reÄllaikÄ.
3. UniversÄlÄ droŔība
Pakalpojumu tīkls var ieviest nulles uzticības droŔības modeli jūsu klasterī.
- SavstarpÄjais TLS (mTLS): TÄ«kls var automÄtiski izsniegt kriptogrÄfiskas identitÄtes (sertifikÄtus) katram pakalpojumam. PÄc tam tas izmanto Å”os sertifikÄtus, lai Å”ifrÄtu un autentificÄtu visu trafiku starp pakalpojumiem. Tas nodroÅ”ina, ka neviens neautentificÄts pakalpojums nevar pat sazinÄties ar citu pakalpojumu, un visi dati tranzÄ«tÄ tiek Å”ifrÄti. To var ieslÄgt ar vienkÄrÅ”u konfigurÄcijas slÄdzi.
- AutorizÄcijas politikas: JÅ«s varat izveidot jaudÄ«gus, detalizÄtus piekļuves kontroles noteikumus. PiemÄram, jÅ«s varat uzrakstÄ«t politiku, kas nosaka: "Atļaut `GET` pieprasÄ«jumus no pakalpojumiem ar 'order-service' identitÄti uz `/products` galapunktu 'product-service' pakalpojumÄ, bet liegt visu citu." Tas tiek ieviests sÄnu konteinera lÄ«menÄ«, nevis jÅ«su Python kodÄ, padarot to daudz droÅ”Äku un auditÄjamÄku.
4. ElastÄ«ga trafika pÄrvaldÄ«ba
Å Ä« ir viena no jaudÄ«gÄkajÄm pakalpojumu tÄ«kla funkcijÄm, kas dod jums precÄ«zu kontroli pÄr to, kÄ trafiks plÅ«st caur jÅ«su sistÄmu.
- DinamiskÄ marÅ”rutÄÅ”ana: MarÅ”rutÄjiet pieprasÄ«jumus, pamatojoties uz galvenÄm, sÄ«kdatnÄm vai citiem metadatiem. PiemÄram, marÅ”rutÄjiet beta lietotÄjus uz jaunu pakalpojuma versiju, pÄrbaudot konkrÄtu HTTP galveni.
- KanÄrijputniÅa izvietoÅ”ana un A/B testÄÅ”ana: Ieviesiet sarežģītas izvietoÅ”anas stratÄÄ£ijas, sadalot trafiku procentuÄli. PiemÄram, nosÅ«tiet 90% trafika uz jÅ«su Python pakalpojuma versiju `v1` un 10% uz jauno `v2`. JÅ«s varat uzraudzÄ«t `v2` metrikas, un, ja viss izskatÄs labi, pakÄpeniski novirzÄ«t vairÄk trafika, lÄ«dz `v2` apstrÄdÄ 100%.
- Kļūdu injekcija: Lai pÄrbaudÄ«tu jÅ«su sistÄmas noturÄ«bu, jÅ«s varat izmantot tÄ«klu, lai apzinÄti injicÄtu kļūdas, piemÄram, HTTP 503 kļūdas vai tÄ«kla aizkaves, specifiskiem pieprasÄ«jumiem. Tas palÄ«dz jums atrast un novÄrst vÄjÄs vietas, pirms tÄs izraisa reÄlu pÄrtraukumu.
Pakalpojumu tÄ«kla izvÄle: GlobÄlÄ perspektÄ«va
Ir pieejami vairÄki nobrieduÅ”i, atvÄrtÄ koda pakalpojumu tÄ«kli. IzvÄle ir atkarÄ«ga no jÅ«su organizÄcijas vajadzÄ«bÄm, esoÅ”Äs ekosistÄmas un operatÄ«vÄs kapacitÄtes. TrÄ«s visievÄrojamÄkie ir Istio, Linkerd un Consul.
Istio
- PÄrskats: Ko atbalsta Google, IBM un citi, Istio ir visbagÄtÄ«gÄkais un jaudÄ«gÄkais pakalpojumu tÄ«kls. Tas izmanto pÄrbaudÄ«to Envoy starpniekserveri.
- StiprÄs puses: NepÄrspÄjama elastÄ«ba trafika pÄrvaldÄ«bÄ, jaudÄ«gas droŔības politikas un dinamiska ekosistÄma. Tas ir de facto standarts sarežģītÄm, uzÅÄmuma lÄ«meÅa izvietoÅ”anÄm.
- ApsvÄrumi: TÄ jauda nÄk ar sarežģītÄ«bu. MÄcīŔanÄs lÄ«kne var bÅ«t stÄva, un tam ir augstÄkas resursu izmaksas salÄ«dzinÄjumÄ ar citiem tÄ«kliem.
Linkerd
- PÄrskats: CNCF (Cloud Native Computing Foundation) pabeigts projekts, kas prioritÄti pieŔķir vienkÄrŔībai, veiktspÄjai un operatÄ«vajai ÄrtÄ«bai.
- StiprÄs puses: To ir neticami viegli instalÄt un sÄkt lietot. Tam ir ļoti zems resursu nospiedums, pateicoties tÄ pielÄgotajam, Ä«paÅ”i vieglajam starpniekserverim, kas rakstÄ«ts Rust. Funkcijas, piemÄram, mTLS, darbojas "Ärpus kastes" bez konfigurÄcijas.
- ApsvÄrumi: Tam ir vairÄk specifisks un fokusÄts funkciju kopums. Lai gan tas izcili aptver galvenos novÄrojamÄ«bas, uzticamÄ«bas un droŔības lietoÅ”anas gadÄ«jumus, tam trÅ«kst dažu Istio progresÄ«vo, ezotÄrisko trafika marÅ”rutÄÅ”anas iespÄju.
Consul Connect
- PÄrskats: Daļa no plaÅ”Äkas HashiCorp rÄ«ku kopas (kurÄ ietilpst Terraform un Vault). TÄ galvenÄ atŔķirÄ«ba ir pirmÄs klases atbalsts daudzplatformu vidÄm.
- StiprÄs puses: LabÄkÄ izvÄle hibrÄ«da vidÄm, kas aptver vairÄkus Kubernetes klasterus, dažÄdus mÄkoÅpakalpojumu sniedzÄjus un pat virtuÄlÄs maŔīnas vai fiziskos serverus. TÄ integrÄcija ar Consul pakalpojumu katalogu ir nevainojama.
- ApsvÄrumi: TÄ ir daļa no lielÄka produkta. Ja jums ir nepiecieÅ”ams pakalpojumu tÄ«kls tikai vienam Kubernetes klasterim, Consul varÄtu bÅ«t vairÄk, nekÄ jums nepiecieÅ”ams.
PraktiskÄ ievieÅ”ana: Python mikropakalpojuma pievienoÅ”ana pakalpojumu tÄ«klam
IzskatÄ«sim konceptuÄlu piemÄru, kÄ jÅ«s pievienotu vienkÄrÅ”u Python FastAPI pakalpojumu tÄdam tÄ«klam kÄ Istio. Å Ä« procesa skaistums ir tas, cik maz jums ir jÄmaina jÅ«su Python lietojumprogramma.
ScenÄrijs
Mums ir vienkÄrÅ”s `user-service`, kas rakstÄ«ts Python, izmantojot FastAPI. Tam ir viens galapunkts: `/users/{user_id}`.
1. solis: Python pakalpojums (bez tīkla-specifiska koda)
JÅ«su lietojumprogrammas kods paliek tÄ«ra biznesa loÄ£ika. Nav nekÄdu importu Istio, Linkerd vai Envoy.
main.py:
from fastapi import FastAPI
app = FastAPI()
users_db = {
1: {"name": "Alice", "location": "Global"},
2: {"name": "Bob", "location": "International"}
}
@app.get("/users/{user_id}")
def read_user(user_id: int):
return users_db.get(user_id, {"error": "User not found"})
Pievienotais `Dockerfile` ir arÄ« standarta, bez Ä«paÅ”Äm modifikÄcijÄm.
2. solis: Kubernetes izvietoŔana
JÅ«s definÄjat sava pakalpojuma izvietoÅ”anu un pakalpojumu standarta Kubernetes YAML. Atkal, nekas specifisks pakalpojumu tÄ«klam Å”eit vÄl nav.
apiVersion: apps/v1
kind: Deployment
metadata:
name: user-service-v1
spec:
replicas: 1
selector:
matchLabels:
app: user-service
version: v1
template:
metadata:
labels:
app: user-service
version: v1
spec:
containers:
- name: user-service
image: your-repo/user-service:v1
ports:
- containerPort: 8000
---
apiVersion: v1
kind: Service
metadata:
name: user-service
spec:
selector:
app: user-service
ports:
- port: 80
targetPort: 8000
3. solis: SÄnu konteinera starpniekservera injekcija
Å eit notiek maÄ£ija. PÄc pakalpojumu tÄ«kla (piemÄram, Istio) instalÄÅ”anas jÅ«su Kubernetes klasterÄ«, jÅ«s iespÄjojat automÄtisku sÄnu konteinera injekciju. Istio gadÄ«jumÄ Å”Ä« ir vienreizÄja komanda jÅ«su vÄrdu telpai:
kubectl label namespace default istio-injection=enabled
Tagad, kad jÅ«s izvietojat savu `user-service`, izmantojot `kubectl apply -f your-deployment.yaml`, Istio vadÄ«bas plakne automÄtiski mutÄ pod specifikÄciju, pirms tÄ tiek izveidota. TÄ pievieno Envoy starpniekservera konteineru podam. JÅ«su podam tagad ir divi konteineri: jÅ«su Python `user-service` un `istio-proxy`. Jums nemaz nebija jÄmaina jÅ«su YAML.
4. solis: Pakalpojumu tÄ«kla politiku piemÄroÅ”ana
JÅ«su Python pakalpojums tagad ir daļa no tÄ«kla! Viss trafiks uz un no tÄ tiek starpniekots. Tagad jÅ«s varat piemÄrot jaudÄ«gas politikas. PiemÄrosim stingru mTLS visiem pakalpojumiem vÄrdu telpÄ.
peer-authentication.yaml:
apiVersion: security.istio.io/v1beta1
kind: PeerAuthentication
metadata:
name: default
namespace: default
spec:
mtls:
mode: STRICT
PiemÄrojot Å”o vienkÄrÅ”o YAML failu, jÅ«s esat Å”ifrÄjis un autentificÄjis visu pakalpojumu-pakalpojumu komunikÄciju vÄrdu telpÄ. Tas ir milzÄ«gs droŔības ieguvums bez jebkÄdÄm lietojumprogrammas koda izmaiÅÄm.
Tagad izveidosim trafika marÅ”rutÄÅ”anas noteikumu, lai veiktu kanÄrijputniÅa izvietoÅ”anu. PieÅemsim, ka jums ir izvietots `user-service-v2`.
virtual-service.yaml:
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
name: user-service
spec:
hosts:
- user-service
http:
- route:
- destination:
host: user-service
subset: v1
weight: 90
- destination:
host: user-service
subset: v2
weight: 10
Ar Å”o `VirtualService` un atbilstoÅ”u `DestinationRule` (kas definÄ `v1` un `v2` apakÅ”kopas), jÅ«s esat norÄdÄ«jis Istio sÅ«tÄ«t 90% trafika uz jÅ«su veco pakalpojumu un 10% uz jauno. Tas viss tiek darÄ«ts infrastruktÅ«ras lÄ«menÄ«, pilnÄ«gi caurspÄ«dÄ«gi Python lietojumprogrammÄm un to izsaucÄjiem.
Kad vajadzÄtu izmantot pakalpojumu tÄ«klu? (Un kad nevajadzÄtu)
Pakalpojumu tÄ«kls ir jaudÄ«gs rÄ«ks, taÄu tas nav universÄls risinÄjums. TÄ ievieÅ”ana pievieno vÄl vienu pÄrvaldÄmas infrastruktÅ«ras slÄni.
Ieviesiet pakalpojumu tīklu, ja:
- JÅ«su mikropakalpojumu skaits pieaug (parasti pÄrsniedzot 5-10 pakalpojumus), un to mijiedarbÄ«bas pÄrvaldīŔana kļūst par problÄmu.
- JÅ«s darbojaties daudzvalodu vidÄ, kur ir nepiecieÅ”ams ieviest konsekventas politikas pakalpojumiem, kas rakstÄ«ti Python, Go un Java.
- Jums ir stingras droŔības, novÄrojamÄ«bas un noturÄ«bas prasÄ«bas, kuras ir grÅ«ti izpildÄ«t lietojumprogrammas lÄ«menÄ«.
- JÅ«su organizÄcijai ir atseviŔķas izstrÄdes un operÄciju komandas, un jÅ«s vÄlaties dot izstrÄdÄtÄjiem iespÄju koncentrÄties uz biznesa loÄ£iku, kamÄr operÄciju komanda pÄrvalda platformu.
- JÅ«s esat daudz ieguldÄ«jis konteineru orÄ·estrÄÅ”anÄ, Ä«paÅ”i Kubernetes, kur pakalpojumu tÄ«kli integrÄjas visvienkÄrÅ”Äk.
Apsveriet alternatīvas, ja:
- Jums ir monolÄ«ts vai tikai daži pakalpojumi. TÄ«kla operatÄ«vÄs izmaksas, visticamÄk, pÄrsniegs tÄ sniegtÄs priekÅ”rocÄ«bas.
- JÅ«su komanda ir maza un tai trÅ«kst spÄju apgÅ«t un pÄrvaldÄ«t jaunu, sarežģītu infrastruktÅ«ras komponentu.
- JÅ«su lietojumprogramma prasa absolÅ«ti zemÄko iespÄjamo latentumu, un sÄnu konteinera starpniekservera radÄ«tÄs mikrosekundes lÄ«meÅa papildu izmaksas ir nepieÅemamas jÅ«su lietoÅ”anas gadÄ«jumÄ.
- JÅ«su uzticamÄ«bas un noturÄ«bas vajadzÄ«bas ir vienkÄrÅ”as un tÄs var pietiekami atrisinÄt ar labi uzturÄtÄm lietojumprogrammas lÄ«meÅa bibliotÄkÄm.
SecinÄjums: JÅ«su Python mikropakalpojumu pilnvaroÅ”ana
Mikropakalpojumu ceļŔ sÄkas ar izstrÄdi, bet Ätri kļūst par operatÄ«vu izaicinÄjumu. Pieaugot jÅ«su uz Python balstÄ«tajai sadalÄ«tajai sistÄmai, tÄ«kloÅ”anas, droŔības un novÄrojamÄ«bas sarežģītÄ«ba var pÄrslogot izstrÄdes komandas un palÄninÄt inovÄcijas.
Pakalpojumu tÄ«kls risina Ŕīs problÄmas tieÅ”i, abstrahÄjot tÄs no lietojumprogrammas un ievietojot tÄs Ä«paÅ”Ä, valodu neatkarÄ«gÄ infrastruktÅ«ras slÄnÄ«. Tas nodroÅ”ina vienotu veidu, kÄ kontrolÄt, nodroÅ”inÄt un novÄrot komunikÄciju starp pakalpojumiem, neatkarÄ«gi no tÄ, kÄdÄ valodÄ tie ir rakstÄ«ti.
IevieÅ”ot pakalpojumu tÄ«klu, piemÄram, Istio vai Linkerd, jÅ«s dodat saviem Python izstrÄdÄtÄjiem iespÄju darÄ«t to, ko viÅi prot vislabÄk: veidot izcilas funkcijas un nodroÅ”inÄt biznesa vÄrtÄ«bu. ViÅi ir atbrÄ«voti no sarežģītas, atkÄrtojoÅ”as tÄ«kloÅ”anas loÄ£ikas ievieÅ”anas nastas un tÄ vietÄ var paļauties uz platformu, kas nodroÅ”ina noturÄ«bu, droŔību un ieskatu. Jebkurai organizÄcijai, kas nopietni domÄ par savas mikropakalpojumu arhitektÅ«ras mÄrogoÅ”anu, pakalpojumu tÄ«kls ir stratÄÄ£isks ieguldÄ«jums, kas atmaksÄjas uzticamÄ«bÄ, droŔībÄ un izstrÄdÄtÄju produktivitÄtÄ.