La oss utforske hvordan du kan forbedre innlastingshastigheten for nettsidene dine ved å flytte den mest krevende databehandlingen til bakgrunnen. Dette gjøres enkelt med hjelp av RabbitMQ.
Stabilitet og hurtighet er avgjørende for enhver applikasjon eller nettside. Hvem har vel ikke forlatt en side fordi den brukte for lang tid på å laste?
Hva er RabbitMQ?
RabbitMQ er en åpen kildekode, distribuert og skalerbar meldingsformidler. Den fungerer som et bindeledd for effektiv kommunikasjon mellom sendere og mottakere av meldinger.
RabbitMQ benytter meldingsprotokollen AMQP (Advanced Message Queuing Protocol). AMQP er spesielt utviklet for å håndtere asynkrone meldinger med garanti for levering. Dette oppnås gjennom bekreftelser fra både meldingsformidler til sender og fra mottaker til formidler.
Hvordan fungerer RabbitMQ?
Enkelt forklart, definerer RabbitMQ køer. Disse lagrer meldinger sendt fra sendere. Mottakerapplikasjoner henter og behandler disse meldingene. Dette systemet muliggjør distribuerte systemer, der ulike moduler kommuniserer via meldinger.
Som all kommunikasjon, krever dette en sender, en melding og en mottaker. RabbitMQ fungerer som mellomleddet der meldinger venter på å bli behandlet.
La oss se nærmere på hvordan dette fungerer ved å undersøke de ulike typene utvekslinger som finnes.
Typer utvekslinger
Når en melding sendes via RabbitMQ, går den ikke direkte til en kø. Isteden sendes den til en sentral som distribuerer meldingene til de relevante køene. Dette gir systemet økt fleksibilitet og kontroll.
Bildekreditt: CloudAQMP
De vanligste utvekslingstypene er Direkte, Fanout, Topic og Headers.
Direkte utveksling
Anta at en produsent trenger å sende en ordrebekreftelse til tre forskjellige systemer (forbrukere). Dette innebærer at systemet må kommunisere med tre separate enheter for å fullføre kjøpet.
Siden RabbitMQ leverer meldinger individuelt til hver kø, kan vi la disse systemene motta meldingen direkte.
Vanligvis sender sentralen meldingen til alle køer. Men, ofte ønsker vi ikke dette. Derfor kan vi definere kriterier for å styre hvordan utvekslingen fungerer.
Slik kan meldingen sendes til én enkelt mottaker, istedenfor alle.
Bindingsnøkkel: For å koble en kø til en sentral, oppretter vi en «binding», et forhold mellom køen og sentralen.
Rutingnøkkel: I denne bindingen kan vi legge til en rutingnøkkel. Dette er en nøkkel som dirigerer meldinger til en spesifikk kø.
Hvis du har rutingnøkler X, Y og Z, vil meldingen med rutingnøkkel Y gå til kø Y og leveres til den definerte mottakeren.
Dermed kan vi koble flere køer til en sentral, og samtidig ha ulike relasjoner gjennom rutingnøklene.
Fanout Exchange
Med en fanout-utveksling, vil en melding sendt til sentralen distribueres til alle tilkoblede køer. Hvis 10 køer er koblet til en fanout-sentral, vil alle disse motta den sendte meldingen.
Emneutveksling
Dette er en fleksibel utveksling som lar oss sende meldinger basert på tema. Ved å strukturere rutingnøklene, kan vi skape mønstre og regler for kommunikasjonen mellom systemer.
Eksempel: rutingnøkkel (x.*); rutingnøkkel(*.z); rutingnøkkel (*.y.*).
Hva er AMQP i RabbitMQ?
AMQP (Advanced Message Queuing Protocol) er en åpen meldingsprotokoll for overføring av meldinger mellom applikasjoner. Den kan sammenlignes med HTTP og TCP, men er spesielt designet for asynkron kommunikasjon.
RabbitMQ valgte å implementere AMQP på grunn av sin rolle som en standard for mellomvare, i motsetning til JMS, som definerer et API.
AMQP-spesifikasjonen er utviklet av et internasjonalt konsortium bestående av store selskaper som Red Hat, Cisco Systems og Microsoft. AMQPs interoperabilitet sikrer at alle applikasjoner som implementerer AMQP kan kommunisere med en AMQP-formidler.
AMQP er ikke den eneste protokollen RabbitMQ benytter. Bildet nedenfor viser et utvalg av de protokollene, språkene og APIene som er implementert eller støttet av RabbitMQ.
Viktige funksjoner i RabbitMQ
I tillegg til å muliggjøre asynkron integrasjon mellom ulike applikasjoner, tilbyr RabbitMQ flere funksjoner som har gjort den populær innen meldingsformidling:
Pålitelig lagring
RabbitMQ har mekanismer for å garantere levering av meldinger. Dette inkluderer lagring når ingen mottakere er tilgjengelige, og bekreftelse fra mottakerne når meldingen er behandlet.
Hvis en behandling feiler, kan RabbitMQ sette meldingen tilbake i kø. Den kan enten behandles av en annen mottaker, eller forsøkes behandlet på nytt av den opprinnelige.
RabbitMQ garanterer også at meldinger konsumeres i samme rekkefølge som de ankom køen.
Opprettelse av klynger
Selv om RabbitMQ kan håndtere mange meldinger per sekund, kan det noen ganger være nødvendig med enda høyere kapasitet.
RabbitMQ tillater opprettelse av klynger for å skalere horisontalt. Dette er transparent for både sendere og mottakere.
Høyt tilgjengelige køer
Køer i RabbitMQ kan replikeres over flere noder i en klynge. Dette sikrer at meldingene fortsatt kan behandles selv om en node svikter.
Fleksibel ruting
RabbitMQ gir muligheten til å definere fleksible ruteregler for å dirigere meldinger mellom sentraler og køer.
Støtte for flere protokoller
I tillegg til AMQP, støtter RabbitMQ også STOMP, MQTT og HTTP via plugins. Det inneholder også mekanismer for autentisering og tilgangskontroll.
Praktiske bruksområder for RabbitMQ
De viktigste bruksområdene for RabbitMQ er å muliggjøre asynkron kommunikasjon, redusere kobling mellom applikasjoner, distribuere varsler og håndtere jobbkøer i bakgrunnen.
Et typisk bruksområde for RabbitMQ er i e-handel. Her brukes den til å håndtere salgsordrer og videresende dem til relevante systemer, som distribusjon og fakturering.
Ved behandling av en bestilling, kan salgsmeldingen sendes til både distribusjon og fakturering. Alt foregår asynkront, og en melding kan sendes til flere køer samtidig.
Dette er nyttig når et kjøp er gjort, og produktet må klargjøres for distribusjon, transport og fakturering.
RabbitMQ sørger for at alle disse meldingene sendes til de riktige systemene, selv om de er separate applikasjoner.
Alternativer til RabbitMQ
RabbitMQ er enklere å bruke enn man kanskje tror, men det finnes også flere alternativer:
#1. IronMQ
IronMQ er en rask meldingskø programvare. Den er designet for høy tilgjengelighet, holdbarhet og engangslevering av meldinger. IronMQ er en kraftig skybasert løsning for moderne applikasjoner.
Den støtter push-køer, pull-køer og lange pollinger. Det er også mulig å bruke flere datasentre for høy tilgjengelighet og god skalerbarhet.
Du kan distribuere IronMQ i skyen, på delt eller dedikert maskinvare, eller lokalt. Det finnes også mange klientbiblioteker med lettlest dokumentasjon.
#2. Apache Kafka
Kafka er en plattform for distribuert strømming av hendelser. Den er designet som en replikert, distribuert og vedvarende logg.
Kafka er spesielt godt egnet for hendelsesdrevne mikrotjenester og applikasjoner for strømbehandling i stor skala. Den replikerer hendelser asynkront for feiltoleranse og høy tilgjengelighet.
#3. Apache ActiveMQ
ActiveMQ er en Java-basert meldingsformidler som støtter flere protokoller. Den lar oss integrere applikasjoner ved å bruke AMQP, JMS og Stomp.
Amazon tilbyr også en «administrert» versjon kalt Amazon MQ, som gjør tjenesten enklere å bruke.
Konklusjon
Meldingsformidlere har lenge vært en viktig del av organisasjoners arkitektur. Med økningen av brukere som kobler seg til systemer via flere kanaler, er det behov for løsninger som kan skalere horisontalt til en lav kostnad. Det er også viktig med høy kapasitet for å behandle store mengder meldinger.
En ny generasjon meldingsformidlere, som RabbitMQ, er blitt stadig mer relevant for moderne applikasjoner. De tilbyr høy tilgjengelighet, pålitelighet, interoperabilitet og ytelse.
Du kan også undersøke noen pålitelige RabbitMQ-vertsplattformer for din applikasjon.