Hej alla!
Har börjat översÀtta en liten bok:
««,
författare: Jakub Korab, förlag: OâReilly Media, Inc., utgivningsdatum: juni 2017, ISBN: 9781492049296.
FrÄn inledningen till boken:
«⊠Denna bok lĂ€r dig att tĂ€nka kring system för meddelandeutbyte med brokers, genom att jĂ€mföra och kontrastera tvĂ„ populĂ€ra brokerteknologier: Apache ActiveMQ och Apache Kafka. HĂ€r kommer exempel pĂ„ anvĂ€ndning och utvecklingsincitament som förde till att deras utvecklare anvĂ€nde helt olika angreppssĂ€tt inom samma omrĂ„de - meddelandeutbyte mellan system med en mellanhand broker. Vi kommer att granska dessa teknologier frĂ„n grunden och lyfta fram pĂ„verkan av olika designalternativ pĂ„ denna vĂ€g. Du kommer att fĂ„ en djup förstĂ„else för bĂ„da produkterna, insikt om hur de bör och inte bör anvĂ€ndas, och kunskap om vad du bör tĂ€nka pĂ„ nĂ€r du övervĂ€ger andra meddelandeutbyte teknologier i framtiden. âŠÂ»
Ăversatta delar hittills:
Jag kommer att publicera fÀrdiga kapitel i takt med översÀttningen.
KAPITEL 1
Introduktion
Meddelandeutbyte mellan system Àr ett av de minst förstÄdda omrÄdena inom IT. Som utvecklare eller arkitekt kan du vara vÀl förtrogen med olika ramverk och databaser. Men det Àr helt möjligt att du har bara en ytlig förstÄelse för hur broker-baserade meddelandeteknologier fungerar. Om du kÀnner igen dig i detta, oroa dig inte, du Àr i gott sÀllskap.
MÀnniskor interagerar vanligtvis med meddelandeinfrastruktur pÄ ett mycket begrÀnsat sÀtt. Ofta ansluter de till ett system som skapades för lÀnge sedan, eller laddar ner en distribution frÄn nÀtet, installerar den i produktion och börjar skriva kod för den. NÀr infrastrukturen sÀtts i produktion kan resultaten vara oklara: meddelande förloras vid fel, meddelandeutskick fungerar inte som du förvÀntade dig, eller brokers "hÀngde" dina producenter eller skickar inte meddelanden till dina konsumenter.
KĂ€nns det bekant?
Ett vanligt scenario Àr att din meddelandeutbyteskod fungerar bra, tills den plötsligt slutar fungera. Denna period av framgÄng skapar en falsk kÀnsla av sÀkerhet, vilket leder till mer kod baserad pÄ missuppfattningar om teknikens grundlÀggande beteende. NÀr nÄgot börjar gÄ fel konfronteras du med den obekvÀma sanningen: att du faktiskt inte förstod produktens grundlÀggande beteende eller de kompromisser som gjordes av författarna, till exempel prestanda kontra tillförlitlighet, eller transaktionalitet kontra horisontell skalbarhet.
Utan en djup förstÄelse för hur mÀklare fungerar, gör mÀnniskor, till synes, rimliga pÄstÄenden om sina meddelandeutbyten, sÄsom:
- Systemet kommer aldrig att förlora meddelanden
- Meddelanden kommer att behandlas i ordning
- Att lÀgga till konsumenter kommer att göra systemet snabbare
- Meddelanden kommer att levereras endast en gÄng
TyvÀrr baseras vissa av dessa pÄstÄenden pÄ antaganden som endast gÀller under vissa omstÀndigheter, medan andra Àr helt enkelt felaktiga.
Denna bok kommer att lĂ€ra dig att resonera kring mĂ€klardrivna meddelandeutbyten genom att jĂ€mföra och kontrastera tvĂ„ populĂ€ra mĂ€klarteknologier: Apache ActiveMQ och Apache Kafka. HĂ€r presenteras anvĂ€ndningsfall och utvecklingsincitament som lett till att deras utvecklare anvĂ€nde helt olika angreppssĂ€tt inom samma omrĂ„de â meddelandeutbyte mellan system med en mellanliggande mĂ€klare. Vi kommer att utforska dessa teknologier frĂ„n grunden och belysa hur olika designalternativ pĂ„verkar dem pĂ„ denna resa. Du fĂ„r en djup förstĂ„else för bĂ„da produkterna, insikt om hur de bör och inte bör anvĂ€ndas, samt vad du ska tĂ€nka pĂ„ nĂ€r du övervĂ€ger andra meddelandeteknologier i framtiden.
Innan vi börjar, lÄt oss gÄ igenom grunderna.
Vad Àr ett meddelandeutbydessystem och varför behövs det?
För att tvÄ applikationer ska kunna kommunicera med varandra mÄste de först definiera ett grÀnssnitt. Definitionen av detta grÀnssnitt involverar att vÀlja transport eller protokoll, som HTTP, MQTT eller SMTP, och att komma överens om meddelandeformaten som systemen kommer att utbyta. Detta kan vara en strikt process, sÄsom att definiera ett XML-schema med krav pÄ nyttolastspecifikationer (payload) för meddelandet, eller det kan vara mycket mindre formellt, som ett avtal mellan tvÄ utvecklare om att en viss del av HTTP-förfrÄgan kommer att innehÄlla klientens ID.
SÄ lÀnge meddelandeformatet och ordningen för att skicka dem mellan systemen Àr överenskomna, kommer de att kunna interagera med varandra utan att behöva bry sig om implementationen av det andra systemet. Insidan av dessa system, sÄsom programmeringssprÄket eller den anvÀnda ramverket, kan förÀndras över tid. SÄ lÀnge kontraktet som helhet upprÀtthÄlls kan interaktionen fortsÀtta utan förÀndringar frÄn den andra sidan. Dessa tvÄ system Àr effektivt isolerade (separatorer) av detta grÀnssnitt.
Meddelandesystem involverar vanligtvis en mellanhand mellan tvÄ system som kommunicerar, vilket ytterligare isolerar avsÀndaren frÄn mottagaren eller mottagarna. Genom detta möjliggör meddelandesystemet för avsÀndaren att skicka ett meddelande utan att behöva veta var mottagaren befinner sig, om de Àr aktiva eller hur mÄnga instanser av dem som finns.
LÄt oss betrakta ett par analogier för de olika problem som ett meddelandesystem löser och introducera nÄgra grundlÀggande termer.
Point-to-Point
Alexandra gÄr till postkontoret för att skicka ett paket till Adam. Hon gÄr fram till disken och överlÀmnar paketet till medarbetaren. Medarbetaren tar emot paketet och ger Alexandra en kvittens. Adam behöver inte vara hemma vid tidpunkten för paketets sÀndning. Alexandra Àr sÀker pÄ att paketet kommer att levereras till Adam vid nÄgot tillfÀlle i framtiden och kan fortsÀtta med sina sysslor. Senare, vid nÄgot tillfÀlle, fÄr Adam paketet.
Detta Àr ett exempel pÄ en meddelandeutbytesmodell punkt-till-punkt. Postkontoret fungerar hÀr som en distributionsmekanism för paket och sÀkerstÀller att varje paket levereras en gÄng. AnvÀndningen av postkontoret separerar akt av sÀndningen av paketet frÄn leveransen av paketet.
I klassiska meddelandesystem implementeras modellen "punkt-till-punkt" genom ordning. En kö fungerar som en FIFO-buffert (först in, först ut), som kan prenumereras av en eller flera konsumenter. Varje meddelande levereras endast till en av de prenumererade konsumenterna. Köer försöker vanligtvis rÀttvist fördela meddelanden mellan konsumenterna. Endast en konsument fÄr detta meddelande.
Till köer tillĂ€mpas termen "pĂ„litliga" ("durable"). PĂ„litlighet â detta Ă€r en egenskap hos tjĂ€nsten som garanterar att meddelandesystemet kommer att spara meddelanden nĂ€r det inte finns nĂ„gra aktiva prenumeranter, fram till dess att konsumenten prenumererar pĂ„ kön för att ta emot meddelanden.
PÄlitlighet blandas ofta ihop med persistens och, Àven om dessa tvÄ termer Àr utbytbara, utför de olika funktioner. Persistens definierar om meddelandet sparas av meddelandesystemet i nÄgot slags lagring mellan mottagandet och leveransen till konsumenten. Meddelanden som skickas till en kö kan vara eller inte vara persistenta.
Meddelandetypen "Punkt-till-punkt" anvÀnds nÀr anvÀndningsfallet krÀver en engÄngshandling med meddelandet. Ett exempel kan vara att sÀtta in medel pÄ ett konto eller lÀgga en bestÀllning för leverans. Vi kommer att diskutera senare varför meddelandesystemet i sig inte kan sÀkerstÀlla en engÄngsleverans och varför köer i bÀsta fall kan garantera att meddelandet levereras Ätminstone en gÄng.
Publicerare-Prenumerant
Gabriella ringer konferensnumret. SÄ lÀnge hon Àr ansluten till konferensen hör hon allt vad talaren sÀger tillsammans med de andra deltagarna i samtalet. NÀr hon kopplar bort missar hon det som sÀgs. Vid Äteranslutning fortsÀtter hon att höra vad som sÀgs.
Detta Ă€r ett exempel pĂ„ en meddelandeutbytesmodell publikation-prenumeration. Konferenssamtal fungerar som en sĂ€ndningsmekanism. Den talande personen bryr sig inte om hur mĂ„nga mĂ€nniskor som för nĂ€rvarande har anslutit sig till samtalet â systemet garanterar att alla som Ă€r anslutna just nu hör vad som sĂ€gs.
I klassiska meddelandesystem implementeras meddelandemodellen "publikation-prenumeration" genom Ă€mnenĂmnet tillhandahĂ„ller samma sĂ€tt att sĂ€nda som konferenssamtalsmekanismen. NĂ€r ett meddelande skickas till Ă€mnet fördelas det till alla prenumererande anvĂ€ndare..
Ămnen Ă€r vanligtvis opĂ„litliga (nondurable). Precis som en lyssnare som inte hör vad som sĂ€gs under konferenssamtalet nĂ€r lyssnaren kopplar bort sig, missar prenumeranter pĂ„ Ă€mnet alla meddelanden som skickas vid den tidpunkt de Ă€r offline. Av denna anledning kan man sĂ€ga att Ă€mnen ger leveransgaranti högst en gĂ„ng för varje konsument.
Meddelandetypen "publicera-prenumerera" anvÀnds vanligtvis nÀr meddelandena Àr informativa och förlusten av ett meddelande inte Àr av stor betydelse. Till exempel kan ett Àmne skicka temperaturavlÀsningar frÄn en grupp sensorer en gÄng per sekund. Ett system som Àr intresserat av den aktuella temperaturen och prenumererar pÄ Àmnet kommer inte att oroa sig för att misslyckas med att ta emot ett meddelande - ett annat kommer att komma snart.
Hybridmodeller
En webbplats för en butik placerar meddelanden om bestÀllningar i en "meddelandekö". Den primÀra konsumenten av dessa meddelanden Àr exekveringssystemet. Dessutom mÄste revisionssystemet ha kopior av dessa bestÀllningsmeddelanden för framtida spÄrning. BÄda systemen fÄr inte missa meddelanden, Àven om sjÀlva systemen Àr otillgÀngliga under en tid. Webbplatsen ska inte behöva veta om andra system.
AnvÀndningsfall krÀver ofta kombinationen av meddelandeutbytena "publicera-prenumerera" och "punkt-till-punkt", till exempel nÀr flera system behöver en kopia av meddelandet och som krÀver bÄde tillförlitlighet och bestÀndighet för att förhindra förlust av meddelanden.
I dessa fall krÀvs en mottagare (destination) (ett gemensamt begrepp för köer och Àmnen) som distribuerar meddelanden i huvudsak som ett Àmne, sÄ att varje meddelande skickas till ett separat system som Àr intresserad av dessa meddelanden, men som ocksÄ kan ha flera konsumenter som mottar de inkommande meddelandena, vilket mer liknar en kö. LÀsningstypen i detta fall Àr en gÄng för varje intresserad part.Dessa hybrida adresser krÀver ofta pÄlitlighet, sÄ om konsumenten kopplar ner, tas meddelandena som skickas under den tiden emot efter att konsumenten Äteranslutit.
Hybrida modeller Àr inte nya och kan tillÀmpas i de flesta meddelandesystem, inklusive bÄde ActiveMQ (genom virtuella eller sammansatta adresser som kombinerar Àmnen och köer) och Kafka (implicit, som en grundlÀggande egenskap i designen av dess adresser).
Nu nÀr vi har lite grundlÀggande terminologi och förstÄelse för vad ett meddelandesystem kan vara bra för, lÄt oss gÄ vidare till detaljerna.
ĂversĂ€ttning utförd av:
NÀsta översatta del:
FortsĂ€ttning följerâŠ
KĂ€lla: habr.com
