Strategier for horisontal skalering
Forstå hvordan WebSocket-forbindelser fordeles mellom flere serverinstanser for bedre ytelse.
Strategier for horisontal skalering er en gratis leksjon i Programmering av WebSockets og sanntidssystemer på CoddyKit. Dette er leksjon 1 av 4. Du kan lese hele leksjonen gratis nedenfor – og deretter øve praktisk i nettleseren med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Den er en del av læringsløpet i Programmering av WebSockets og sanntidssystemer, og fremdriften din synkroniseres mellom nettet og CoddyKit-appen. Kurset i Programmering av WebSockets og sanntidssystemer inneholder totalt 4 leksjoner.
Hvorfor skalere WebSockets?
Se for Dem at den fantastiske applikasjonen Deres plutselig blir svært populær! Tusenvis, kanskje til og med millioner, av brukere vil koble seg til samtidig.
Én server kan bare håndtere et begrenset antall aktive WebSocket-tilkoblinger før den blir overbelastet. Det er som en vei med ett kjørefelt som skal håndtere trafikken i rushtiden!
For å holde applikasjonen rask og pålitelig trenger vi strategier for å håndtere denne store trafikkmengden.
Skalere opp eller ut?
Når én server ikke er nok, har De to hovedalternativer for skalering:
- Vertikal skalering: Oppgrader den eksisterende serveren med mer CPU, RAM eller raskere lagring. Tenk på det som å gjøre det ene kjørefeltet på veien bredere.
- Horisontal skalering: Legg til flere servere for å dele belastningen. Det er som å legge til flere kjørefelt på veien, eller til og med bygge parallelle veier!
For WebSockets foretrekkes ofte horisontal skalering. Det gir bedre robusthet og fleksibilitet.
Utfordringen med tilstand
WebSockets er annerledes enn tradisjonelle HTTP-forespørsler. HTTP er ofte tilstandsløs (hver forespørsel er uavhengig), mens WebSockets oppretter en tilstandsbevarende, vedvarende tilkobling.
Det betyr at klienten og serveren opprettholder en åpen kommunikasjonslinje. Hvis De tilfeldig sender en klient til en annen server midt i en samtale, vet ikke den nye serveren hva som foregår!
Denne «tilstanden» gjør horisontal skalering litt mer komplisert enn med tilstandsløse API-er.
Møt lastbalansereren
For å fordele trafikken på flere servere bruker vi en lastbalanserer. Tenk på den som en smart trafikkdirigent ved inngangen til serverparken.
Oppgaven er å dirigere innkommende klienttilkoblinger effektivt til én av de tilgjengelige WebSocket-serverne i bakenden. Dette hindrer at én enkelt server blir en flaskehals.
WebSocket-håndtrykk og lastbalansering
Husk at en WebSocket-tilkobling starter som en HTTP-forespørsel og deretter «oppgraderes» til en WebSocket-tilkobling. Lastbalansereren må forstå denne prosessen.
Den må konfigureres til å håndtere Upgrade-headeren i HTTP-forespørselen riktig og deretter opprettholde TCP-tilkoblingen for WebSocket-trafikken. Uten dette blir ikke tilkoblingen etablert!
Hold forbindelsen «fast»: klebrige økter
Fordi WebSockets er tilstandsbevarende, er det ofte viktig at en klient fortsetter kommunikasjonen med den samme serveren i bakenden som den først koblet seg til.
Dette oppnås ved hjelp av en teknikk som kalles klebrige økter (eller øktaffinitet). Lastbalansereren husker hvilken server klienten brukte, og sender alle senere forespørsler fra denne klienten til den samme serveren.
Vanlige metoder er å bruke klientens IP-adresse eller en spesialinformasjonskapsel.
Eksempel på en klebrig økt
La oss se på en enkel Node.js WebSocket-server. Tenk deg at du har flere instanser av denne serveren kjørende. Med sticky sessions vil klienten konsekvent koble seg til den samme serveren og få den samme «Server ID».
Slik kjører du den: npm install ws og deretter node server.js
const WebSocket = require('ws');
const http = require('http');
const serverId = `Server-${Math.floor(Math.random() * 100) + 1}`;
const server = http.createServer((req, res) => {
res.writeHead(200, { 'Content-Type': 'text/plain' });
res.end(`Hello from HTTP on ${serverId}\n`);
});
const wss = new WebSocket.Server({ server });
wss.on('connection', ws => {
console.log(`Client connected to ${serverId}`);
ws.send(`Welcome from ${serverId}!`);
ws.on('message', message => {
console.log(`Received on ${serverId}: ${message}`);
ws.send(`Echo from ${serverId}: ${message}`);
});
ws.on('close', () => {
console.log(`Client disconnected from ${serverId}`);
});
});
server.listen(8080, () => {
console.log(`${serverId} listening on port 8080`);
});Begrensninger ved sticky sessions
Selv om sticky sessions er svært nyttige for å opprettholde en klients tilkobling til én server, har de noen ulemper:
- Serverfeil: Hvis serveren klienten er bundet til, krasjer, mister klienten tilkoblingen og må kanskje opprette tilstanden på nytt på en annen server.
- Kommunikasjon mellom servere: Hvis en klient på Server A må sende en melding til en klient på Server B, løser ikke sticky sessions dette alene.
I mer komplekse scenarier trenger du mer avanserte strategier, som vi skal se på senere!
Metoder for lastbalansering
Lastbalanserere bruker ulike algoritmer for å avgjøre hvor nye tilkoblinger skal sendes:
- Round Robin: Sender tilkoblinger til serverne i roterende rekkefølge (Server A, deretter B, så C, og deretter A ...).
- Færrest tilkoblinger: Sender tilkoblingen til serveren med færrest aktive tilkoblinger.
- IP-hash: Bruker klientens IP-adresse til konsekvent å sende den til samme server (ideelt for sticky sessions).
Valget avhenger av behovene til applikasjonen.
Rask sjekk: Skalering av WebSockets
Du har lært om horisontal skalering og hvilken rolle lastbalanserere og sticky sessions spiller. La oss teste hva du har forstått!
Oppsummering: Skaler opp!
Godt jobbet! I denne leksjonen lærte du hvorfor horisontal skalering er viktig for WebSocket-applikasjoner med mye trafikk.
- Horisontal skalering legger til flere servere for å håndtere økt belastning.
- Lastbalanserere fordeler innkommende tilkoblinger mellom disse serverne.
- De må støtte prosessen for WebSocket-oppgradering.
- Sticky sessions sørger for at en klient konsekvent kobler seg til den samme backend-serveren, slik at tilstanden bevares.
Deretter skal vi se på hvordan du konfigurerer disse lastbalansererne på en effektiv måte!
Lær deg Programmering av WebSockets og sanntidssystemer med en AI-veileder – gratis
Skriv og kjør ekte kode i nettleseren, få umiddelbar hjelp fra en AI-veileder som er tilgjengelig døgnet rundt, og fortsett der du slapp – på nettet eller i appen.
- Kurs
- 12
- Leksjoner
- 47
Ofte stilte spørsmål
Er leksjonen «Strategier for horisontal skalering» gratis?
Ja – hele teksten i «Strategier for horisontal skalering» er gratis å lese her på nettet. For å øve interaktivt med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt, og for å låse opp resten av Programmering av WebSockets og sanntidssystemer-kurset, kan du oppgradere til CoddyKit PRO. Kurset i Programmering av WebSockets og sanntidssystemer inneholder totalt 4 leksjoner.
Hva lærer jeg i «Strategier for horisontal skalering»?
Forstå hvordan WebSocket-forbindelser fordeles mellom flere serverinstanser for bedre ytelse. Du øver på Programmering av WebSockets og sanntidssystemer med praktisk kode som du kjører direkte i nettleseren, mens en AI-veileder som er tilgjengelig døgnet rundt, svarer på spørsmålene dine mens du jobber deg gjennom leksjonen.
Trenger jeg erfaring for å begynne med Programmering av WebSockets og sanntidssystemer?
Ingen tidligere erfaring er nødvendig. Programmering av WebSockets og sanntidssystemer på CoddyKit er lagt opp for både nybegynnere og viderekomne, så De kan begynne her eller helt fra start og lære i Deres eget tempo. Dette er leksjon 1 av 4.
Hvor lang tid tar leksjonen «Strategier for horisontal skalering»?
De fleste CoddyKit-leksjoner tar omtrent 5–10 minutter. Hver leksjon er kort og interaktiv, slik at De gjør jevne fremskritt og kan fortsette akkurat der De slapp – både på nettet og i appen.
Kan jeg skrive og kjøre kode i denne Programmering av WebSockets og sanntidssystemer-leksjonen?
Ja. Alle Programmering av WebSockets og sanntidssystemer-leksjoner har en innebygd kodeeditor, slik at De kan skrive og kjøre ekte kode direkte i nettleseren og få umiddelbar tilbakemelding fra AI – uten lokal konfigurering.
Alle leksjonene i dette kurset
- Strategier for horisontal skalering
- Lastbalansering av WebSocket
- Distribuert tilstandsbehandling
- Pub/Sub-backplane med Redis