För att vara en microservice: Hur mindre delar av ett större program skulle kunna göra om DEN

0
156

Noll

martin-fowler-oreilly-conference-2015.jpg

Martin Fowler.

(Bild: O ‘ Reilly OSCON 2015)

“Om du försöker att tänka på systemet, och vad dess arkitektur är”, förklarade Martin Fowler, software design konsult krediteras med att skapa majoritet av microservices perfekt, “det första du måste göra är att räkna ut,” Vad är viktigt? Vad gör vi, eftersom den tekniska ledningen av ett projekt, anser vara de mest viktiga saker i att? . . . Vad är grejen i den kodbas som jag har att hålla på toppen av mitt huvud när jag jobbar på det?'”

Fowler, som talar till en O ‘ reilly-konferens i 2015, var att definiera “arkitektur” – delen av “microservices arkitektur” i ett försök att göra det lättare för sig själv att definiera den främre delen av denna fras. Även om dess skapare, som fortfarande är den hårda delen.

Vad är top-of-mind för microservices arkitekter?

Det finns många tolkningar av microservices, precis som det finns många riktningar som “impressionism” kan ta i målning. Vad dessa tolkningar har gemensamt är en förståelse av programvara som utbytbara delar i stället sammansatta helheter. Om du skulle acceptera en sådan förståelse dig själv, i någon form att det kan ta, kan du hitta dig själv att tänka på något av följande sätt:

Snarare än att fortsätta att bygga din kärna DET fungerar som enorma program som du måste uppgradera alla åren i massiv, exodus-liknande omvälvningar (tillräckligt stor för att motivera din insats, liten nog att i fortsättningen är möjligt), tror du att ditt företags programvara i termer av dess delar demonteras. En liten grupp som får ansvaret för skötsel, underhåll och utveckling av en eller flera delar. Produktionscykeln för att uppgradera eller, när det är nödvändigt, byta ut varje del kan vara mycket kortare och lättare att påskynda. Men utvecklingen av programmet som de tillsammans utgör kan faktiskt fortsätta i samma takt-inte nödvändigtvis snabbare, bara i mindre steg som är möjliga att uppnå med mindre ansträngning, och (förhoppningsvis) billigare.

Varför ens bry sig om microservices?

Fördelarna med microservices arkitektur är inte självförklarande. Kanske du har haft en familjemedlem som har längtade efter förmåga, resurser eller tid att bygga upp ett helt landskap av Legos, och snälla, snälla, vill ni inte låta henne? Förutom att ha kul finns det andra fördelar med att microservices i verkliga världen, “produktion” IT-miljö, kanske din egen? För nu, svaret-som svar på den grunden för en miljard Legos — låter som en förälder stoppar sitt barn för tid: “Kanske. Vi får se”.

Också: 8 sätt att se till att du verkligen behöver microservices

Anledningen till att microservices arkitektur bör vara av intresse för dig ändå, även om du inte är en programmerare eller IT-operatören, eftersom det befinner sig i epicentrum av de viktigaste globala debatten som påverkar IT-avdelningar idag: Vad är det mest kostnads-effektiva och praktiskt sätt för en organisation att distribuera sina applikationer till sina användare?

Du har sett där debatten började. Du vet hur den offentliga som den molnbaserade infrastrukturen fungerar, åtminstone generellt sett. Du kanske har hyrt en virtuell server själv från en molnleverantör till exempel Microsoft, Amazon och Google. Det kan ändå vara klokt för att driva en webbplats på en Apache eller NGINX server installeras på en virtuell maskin (VM). Men om dina arbetsuppgifter ingår att hantera en mjukvaruplattform för din tillverkning, design, forskning, marknadsföring division, du vet att det behöver mer än en processor. Leasing som många VMs som du behöver processorer, är inte kostnadseffektivt.

Containerization erbjuder en lösning på detta dilemma, men du har sett att redan också. Du vet att det är möjligt att göra ett program så att det körs på ett kluster av servrar. Och du skulle ha känt till, eller bara lärt mig om, serverlösa utbyggnaden modeller. Serverlösa gör det möjligt för din organisation betala för den tjänsten din ansökan ger, snarare än den infrastruktur som stöder den.

Men någon gång på vägen, att det i dag eller tre år från och med nu, det kommer tid för din organisation att utforma nya och mycket funktionella applikationer specifikt för, och förmodligen inom dessa nya verksamhetsmodeller. Vad är mönstret att ansökan bör ta, och bör din IT-arbetskraft vara utbildad för att arbeta med det just nu?

Microservices arkitektur kan inte riktigt vara det fullständiga svaret ännu. Men det är att ställa alla de rätta frågorna vid rätt tidpunkt.

Vad gör en microservice göra?

Utveckling av programvara ämnen är ofta abstrakta, vilket gör det svårt att sälja till en allmän publik utan att först koka ihop en attraktiv metafor. En populär bok om microservices arkitektur från en stor utgivare behandlas läsare till en 62-sida förspel innan man närmar sig den enkla frågan om vad en microservice är. Och sedan, boken fortsatte med nästan en ursäkt för varför det är så svårt att förklara.

Snarare än att be om ursäkt här, låt oss ge det en chans.

Göra en sak bra

Anta att du har en e-handelsapplikation. En funktion inom denna tillämpning kan vara att granska de punkter i kundens kundvagn, och uppdatera sina profiler med aktuella priser och frakt uppgifter, särskilt för de kunder som tenderar att lagra objekt i sina vagnar och för att göra inköp när de känner för det. En uppdatering rutin som denna skulle förmodligen redan har uttryckts som en återanvändbar kod för modulen.

En microservice som utför funktion av denna återanvändbara modul kan vara ett separat program, skrivet på samma språk som resten av program eller en helt annan. Det är inte byggt som en del av ansökan, eller installerat det på samma server eller en virtuell maskin. Det är i stället upprätthållas som en separat enhet (för Hamnarbetare, en separat behållare) och utlöses genom några nätverk som drivs mekanism, till exempel vanlig HTTP.

Också: Hur man planerar en microservice genomförandet TechRepublic

På detta sätt, microservice blir ett slags mönster för funktionalitet. Den orchestrator kan inte ens kalla ett exempel på detta mönster till stånd förrän det är absolut nödvändigt, även om en sådan strategi kan införa fördröjning. Helst, en vanlig antal instanser är inställd på att gå på efterfrågan. När användaren efterfrågan nivå stiger bortom en viss nivå, orchestrator kan välja att replikera microservices, ringer många fler tillfällen till att vara.

Mot en mer konkret definition för microservices

Det är den inofficiella, teknisk journalist definition av “microservices.” De mest betrodda formell definition bland utvecklare faktiskt stater, ganska uttryckligen, att det inte bör behandlas som en formell definition. Martin Fowler och James Lewis avancerade uppfattningen att microservices:

Representera affärsprocesser individuellt Är avsedda att köras tillsammans som en suite Är designad att användas automaticallyCommunicate med varandra med ett “lätt mekanism” som exempelvis HTTP för synkron drift (att ta plats i sekvens), eller en någorlunda lätt message queue som APMQ för asynkrona åtgärder (som kan ske parallellt) Kan inte nödvändigtvis använda sig av samma programmeringsspråk eller ramar som en annan, i syfte att arbeta tillsammans

Josh Evans var en senior ingenjör med Netflix, den organisation som banat väg för utformningen och genomförandet av microservices i produktionen. Som vittne till födelsen av den modell, och nu en senior director of data service engineering på GitHub, Evans erbjuds några ytterligare element för att Fowler och Lewis’ modell, under en presentation till en developers’ conference i slutet av 2016:

En microservice kräver minimal, och helst inte, samordning med annan kod komponenter för att vara helt funktionell. Det är, det bör vara självgående, kan fastställa dess syfte nu är det distribueras (“instansieras”). Snarare än att kopiera en hel server för att lägga till effekt att en ansökan, ett orchestrator ska kunna instansieras så många kopior av en microservice som ansökan kan kräva (“trappa”). Vad är mer, flera samtidigt kör instanser av samma microservice kan ha olika funktioner beroende på vilken information de fick eller pekade på, eller de databaser som de var anslutna. Så lite manuell tillsyn bör investeras i microservices miljöer som möjligt, särskilt eftersom orchestrator kan ges rättigheter som att hur man skala fall ut och där, vilket resulterar i ett system vars form och omfattning vid någon tidpunkt kan bli något obekant för de mänskliga observatörer.

Också: Microservices och behållare i tjänsten maskor innebär mindre kaos

josh-evans-netflix-qcon-sf-2016.jpg
(Bild: QCon San Francisco 2016)

“Gå tillbaka till detta tema i biologi, du kan tänka microservices som organ i ett organ system, förklarar Evans. “Dessa system kommer samman för att bilda den totala organismen” för Att hjälpa till att göra sin punkt, han visade sin publik en animerad bild av Netflix’ microservices organism, som innehåller bolagets tidigare och mer konventionell design, men var i huvudsak utformats från grunden för microservices. En service proxy fungerar som den främre dörren för ansökan. Det skickar begäran genom en routing lager (som Netflix kallar “Zuul”) som inte bara planerar en enda destination för begäran, utan hela kedjan av tjänster som är nödvändiga för att uppfylla denna begäran. Routing lager vet vilka tjänster, och i vilken ordning, kommer att uppfylla efterfrågan, och inte varje förfrågan kommer att behöva korsa den fulla djupet av systemet.

netflix-microservices-diagram.jpg
(Bild: Josh Evans, Netflix)

Snodd i mitten av detta diagram, som en nattfjäril att ha vandrat i ett spindelnät, representerar API — den gemensamma delen med vilket kommunikation sker. Märker microservices inte har alla sina egna Api: er; i stället förlitar de sig på en annan tjänst är att ge ett meddelande.

Detta är vad en avsiktlig microservices arkitektur ser ut. Det kan tyckas att inkludera olika typer av esoterics som mjukvaruutvecklare och politiska filosofer älskar att spela. Men här är varför allt detta frågor som: När en organisation förbinder sig att fullt microservices strukturen för DET, som Netflix gjorde, att det inte längre bygger sin ansökan i versioner eller iscensatt utsläpp eller semi-årliga uppdateringar. Det utvecklas mer kontinuerligt, ekologiskt, och i Netflix’ fallet i synnerhet lättare.

Också: Microservices och invasionen av identitet enheter

Kanske inget annat företag i världen som har mandat av Netflix: Att leverera miljontals samtidiga, hög-definition, hifi-video strömmar genom den mest ombytliga system som mänskligheten någonsin har kommit fram till, internet. Så Netflix erfarenheter kommer helt enkelt inte att översätta till de flesta organisationer, om de skulle bry övergång bort från, säg, finansiella tjänster eller läkemedel och få in strömmande media leverans. Netflix: “utveckling mönster kan endast tillämpas på Netflix.

Men i sökandet efter gemensamma — för några fragment av Netflix erfarenhet som kan gälla för företag på large-det finns vissa aspekter av de mer komplexa, mer formell definition av microservices som verkar vara mindre esoteriska och mer grundläggande:

Distribution

I en distribuerad arkitektur som omfattar obegränsat antal servrar, eller ens plattformar, samtidigt, var en funktion betecknas med någon typ av adress som kan lösas genom ett nätverk. En web service, som du kanske känner till, är en sådan tjänst som använder HTTP för att lösa denna adress. En microservice är ett steg längre fram i tåget av evolution. Med design, det är inte förenade med andra återanvändningsbara komponenter det kommer att bli att använda sig av (“anspråk” i vissa utvecklare lingo) i samma kropp-kod. Så den kommer i kontakt med andra komponenter i det egna nätverket eller i sin domän (som, om de är avsedda som avsett, kommer också att vara microservices) med hjälp av samma metod.

Upptäckbarheten

Vad är mer, varje microservice bör kunna göra sig själv synlig genom den process som ansvarar för samordning, planering, och/eller iscensättandet microservices. Genom att “upptäcka” jag menar att orchestrator har medel tillgängliga för att lösa placeringen av en begärd microservice och att få kontakt med det. I det förflutna, tjänster hade svårt platser, och HTTP-adresser som pekade mot dem. Idag, hård-ledningar en tjänst till en adress som arbetar mot hela principen av distribuerade tjänster. Så nu, en orchestrator som Kubernetes kan använda en omvänd proxy som NGINX för att lösa den nuvarande vistelseort för en tjänst som är var som helst i nätverket, får en mer allmän identifierare såsom den HTTP-adress (URI) för ursprung som komponent i lagret som ursprungligen ut det. Här, NGINX fortfarande förhandlar med en DNS (domain name service) för att leta upp den aktuella platsen, men på det här sättet, det kan länka en känd komponent med hjälp av en permanent identifierare, med temporära eller tillfälliga adress som är benägna att ändra i några sekunder.

Också: Netflix är “smarta nedladdningar’ köa för din nästa offline episod CNET

Detta är den service discovery princip — garantera att dina program kan hitta något som rör sig runt en hel del.

Självständighet

Är lokaliserbar genom service discovery gör en microservice att vara frikopplade från applikationer, och därför oberoende hanterbar. Återanvändning genom inkorporering är inte alls ny kod, moderna applikationer i Windows, Mac OS X eller Linux skulle vara omöjligt utan den. Men frikoppling som gör det möjligt för bindningar mellan oberoende komponenter kod för att mappas ut precis innan deras kod är faktiskt utförts, vilket är helt annorlunda från de begrepp som vi alla är del i dag, på “installera” program i system.

Fathoming en övergång till microservices

För att vara en microservice är att fungera som en helt annan typ av program än en ansökan. I början av datorer, programvara var en produkt kan du shrink-wrap i en låda full av skivor och lägg på en hylla med en prislapp. I dessa dagar, ett program som var en klass för program med en myriad av sammanhängande funktioner-en ordbehandlare, en business process modeler, en presentation grafik verktygen.

SOA skapades ursprungligen för att underlätta den programvara som motsvarar sådana specialbyggda komponenter-saker med en funktion som anpassar sig till alla förhållanden inom ett visst intervall. Microservices är verkligen en form av SOA (även om vissa inte håller med). “Micro-” en del är på grund av en tidig insats för att föreställa sig att var och en av dessa komponenter som myror i en koloni. Det hjälpte folk att visualisera konceptet bättre om den metafor liknas vid dessa delar för att något litet. I praktiken finns det dock ingen storlek begränsning till ett microservice. Du kanske tror att det är mot hela poängen att ha en stor microservice, och du skulle ha flera framstående arkitekter är överens med dig.

Det var objekt-orienterad programmering, särskilt för C++ – programmering språk, som först väckte SOA till framträdande, år innan Java. En organisation som har erkänts som en myndighet i SOA, Öppen Grupp, definierar en “service” i detta sammanhang som “en logisk representation av en repeterbar verksamhet som har ett specifikt utfall.” Notera hur eftertänksamt denna definition var skapad: Det är inte aktiviteten i sig som utgör tjänsten, men dess representation som kod. På detta sätt, en annan representation som använder en annan kod, skulle vara-med rätta-en separat tjänst.

Recept är gjort för att vara repeterbara: Montera den exakta andelen av råvaror, laga dem och kombinera dem i en särskild ordning, och du är säker på att återge vad kocken hand i åtanke. Repeterbara kod är ett annat djur. Det beror på faktorer som kan ändra eller styra flödet, såsom:

Variabler som kan förändra avsikten med instruktioner, En databas vars innehåll utgör, bland andra saker, staten arbetet produkten (till exempel, hus byggs, bilen är utformad, frakt linjer som ritas);Frikoppling av upprepade kod kontext från den kod som du kallar det, eller går kontrollen till den, för att säkerställa att funktionen utför kan utföras, kanske på ett annat sätt, på något annat.

I praktiken, funktionellt oberoende är den svåraste aspekten av microservices perfekt att uppnå. Det innebär att utforma en självständig komponent som, med minimal undervisning, som väsentligen kan utbilda sig till sina egna ändamål, utföra en uppgift i enlighet med detta syfte utan problem, och sedan säga upp sig. En sådan komponent, skulle vara relativt lätt att automatisera, inom ramen för ett system som var varje annan komponent fungerat på exakt samma sätt.

Också: Denna webbplats gör du surfar på Netflix enkelt igen CNET

Tänk om en robot vars enda syfte är att slå i en spik. Du ger den vinkel av armatur, längden på nageln, den procentuella andelen av denna längd sträcker sig över basen styrelsen, och den relativa nivån på basen styrelse där det kan sluta hamra. Det lär sig sitt driftsförhållanden vid “födelsen.” Den utför sin enda funktion, och stannar sedan.

En funktionell kombination av sådana robotar skulle vara som mest varje sci-fi-film som någonsin gjorts: ta med dig bort till en utopic värld av framtida sociala order, utan att betala något sinne för osäkra sannolika sekvensen av händelser som skulle ge en sådan order om. Kanske är det inte viktigt för en film, men inget företag någonsin har framgångsrikt ändrat sina principer utan en plan.

Varje teknik sedan den första uppgraderingen till hjulet har krävt sin adoptanten att planera en övergångsperiod. Ingen organisation kommer att kunna anta en microservices-orienterad strategi utan att plotta en kurs för hur dess IT-avdelningar — både sin kod och dess människor-kan göra de metodologiska övergången från där de är nu.

Vad microservices skulle ändra

Om någon enterprise plattform utger sig för att göra det möjligt microservices, dess uppgift ska vara att maximera mängden hävstångseffekt som kan vinnas genom återanvändning och omfördelning av små bitar av kod. Att göra dessa moduler lika funktionella som de kan möjligen vara direkt påverkan tre delar av DET bredare it-ekosystem:

Arbetet mönster av utvecklare av programvara, gör det möjligt för dem att snabbt bygga moduler och applikationer som utnyttjar arbete som de och andra har redan gjort;De strategier för hantering av IT-operatörer, som kan nu använda tjänster över flera plattformar samtidigt applikationer integreras mellan dessa plattformar, för att maximera utnyttjandet och det tänkas att pressa ner verkliga, fysiska kostnader-inklusive kylning.The economics of cloud-baserad distribution, vilket möjliggör för organisationer att fokusera på mindre, mer flexibla, mer hanterbara fakturering komponenter som kör upp effektivitetsvinster samtidigt som man kör ner i rörelsens kostnader.

Men det finns ett underliggande antagande med avseende på någon organisation som skulle anta en microservices modell, antingen i en klumpsumma eller i faser: Som utvecklare och IT-personal kommer att vara i stånd att föreställa sig, planering, och sedan producerar tjänster som delar av program för att komma — som delar av en senare maskinen. Uttryckt på ett annat sätt, microservice utvecklare behöver för att uppfatta sitt arbete oberoende av det sammanhang i vilket den skulle senare komma till användning.

Detta är inte ett naturligt sätt att tänka, lite som en konstnär som producerar ett särskilt segment av en målning utan hänsyn till resten av duken. Och det är där microservices debatten står nu: Hur kan en organisation som lär sitt folk att tänka abstrakt, i ett mål som bara kan förklaras abstrakt och insåg att i det abstrakta, medan på samma gång lovande fördelar som är både mätbara och konkreta?

Läs Mer-Från CBS Interactive Nätverk

Microservices och invasionen av identitet enheter av Scott M. Fulton, III, ZDNet ScaleMicroservices: för det första bryta ner monolitisk tänkande, då monolitisk tillämpningar av Joe McKendrick, Service OrientedMicrosoft öppna källor dess Service Tyg microservices plattform av Mary Jo Foley, Allt Om Microsoft

Någon annanstans

Bakgrund: Vad Gör “Vanliga Microservices” Se Ut? [podcast], Scott M. Fulton, III, Den Nya StackContext: Hur Kommer Alla Säkert Microservices? [podcast], Scott M. Fulton, III, Den Nya StackHow Anta Kubernetes Påverkar CI/CD-Krav för DevOps Lag — intervju med Laura Frank, director of engineering, Codeship

Relaterade Ämnen:

Servrar

Affärssystem

Öppen Källkod

Mobila OS

0