Node.js-taustakehityksen bootcamp · Oppitunti

Node.js-sovellusten kuormantasaus

Ymmärtäkää, miten kuormantasaajat jakavat liikennettä, ja määrittäkää ne Node.js-taustajärjestelmälle saatavuuden parantamiseksi.

Oppitunti 2/411 vaihetta

Node.js-sovellusten kuormantasaus on ilmainen Node.js-taustakehityksen bootcamp-oppitunti CoddyKitissä. Tämä on oppitunti 2/4. Voit lukea koko oppitunnin alta ilmaiseksi ja harjoitella sen jälkeen käytännössä selaimessa sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla. Oppitunti kuuluu Node.js-taustakehityksen bootcamp-oppimispolkuun, ja edistymisesi synkronoituu verkon ja CoddyKit-sovelluksen välillä. Node.js-taustakehityksen bootcamp-kurssilla on yhteensä 4 oppituntia.

Mitä kuormantasaus on?

Kuvitelkaa suosittu ravintola, jossa on vain yksi kokki. Jos tilauksia tulee liikaa, asiakkaat joutuvat odottamaan tai lähtevät pois! Kuormantasaus vastaa useampien kokkien ja tilausten tehokkaasta jakamisesta vastaavan älykkään esihenkilön lisäämistä.

Verkkokehityksessä kuormantasaaja jakaa saapuvan verkkoliikenteen useiden palvelimien kesken. Näin yksittäisestä palvelimesta ei tule pullonkaulaa ja sovellus pysyy responsiivisena.

Node.js-sovellusten kuormantasaus — kuvitus 1

Node.js ja skaalautuvuuden tarpeet

Node.js tunnetaan ei-estävästä I/O:sta ja tehokkuudestaan. Yksi Node.js-prosessi käyttää kuitenkin vain yhtä suorittimen ydintä. Useampien käyttäjien tai suuren kuormituksen käsittelemiseksi tarvitaan:

  • Skaalaus: Useiden Node.js-instanssien suorittaminen useampien suorittimen ytimien ja suuremman muistin hyödyntämiseksi.
  • Korkea käytettävyys: Jos yksi instanssi vikaantuu, muut voivat ottaa sen tehtävät, jolloin käyttökatkos vältetään.

Kuormantasaajat ovat ratkaisevan tärkeitä Node.js-sovellusten skaalautuvuuden ja korkean käytettävyyden saavuttamisessa.

Miten kuormantasaajat toimivat

Ajatelkaa kuormantasaajaa liikenteenohjaajana. Kun pyyntö saapuu, se ei mene suoraan yhdelle palvelimelle, vaan kulkee ensin kuormantasaajan kautta.

Kuormantasaaja päättää sitten, mikä käytettävissä olevista taustapalvelimista (eli ”instansseista”) soveltuu parhaiten pyynnön käsittelyyn, ja välittää pyynnön sille. Asiakas ei koskaan tiedä, mikä tietty palvelin käsitteli pyynnön.

Jakelu algoritmit

Kuormantasaajat käyttävät erilaisia algoritmeja päättäessään, minne liikenne ohjataan:

  • Round Robin: Pyynnöt jaetaan peräkkäin poolin jokaiselle palvelimelle. Palvelin A saa ensimmäisen pyynnön, palvelin B toisen, sitten C, minkä jälkeen aloitetaan taas A:sta. Yksinkertainen ja tasapuolinen.
  • Least Connections: Pyyntö lähetetään palvelimelle, jolla on vähiten aktiivisia yhteyksiä. Tämä sopii palvelimille, joiden käsittelyajat saattavat vaihdella.

Muitakin menetelmiä on, kuten IP Hash (sticky-istuntoja varten) ja Weighted Round Robin.

Nginx kuormantasaajana

Vaikka laitteistopohjaisia kuormantasaajia on olemassa, ohjelmistopohjaiset kuormantasaajat ovat yleisiä ja joustavia. Suosittu vaihtoehto on Nginx (lausutaan ”engine-X”).

Nginx on suorituskykyinen web-palvelin, joka voi toimia myös käänteisenä välityspalvelimena ja kuormantasaajana. Sitä käytetään usein Node.js-sovellusten edessä liikenteen hallintaan sekä suorituskyvyn ja tietoturvan parantamiseen.

Node.js-instanssin esimerkki

Luodaan yksinkertainen Node.js-palvelin. Jäljittelemme useita instansseja suorittamalla samaa koodia eri porteissa. Palvelin palauttaa porttinsa numeron, jotta näemme, mikä instanssi käsitteli pyynnön.

Kokeilkaa suorittaa tämä esimerkki:

const http = require('http');
const port = process.env.PORT || 3000;

const server = http.createServer((req, res) => {
  res.writeHead(200, { 'Content-Type': 'text/plain' });
  res.end(`Hello from Node.js instance on port ${port}!\n`);
});

server.listen(port, () => {
  console.log(`Server running on port ${port}`);
});

Toinen Node.js-instanssi

Tämä on sama Node.js-sovellus kuin aiemmin, mutta kuvitelkaa sen toimivan erillisenä prosessina esimerkiksi eri palvelimella tai vain toisessa portissa (kuten portissa 3001) samalla koneella.

Kuormantasaaja jakaisi pyynnöt tämän instanssin ja portissa 3000 toimivan instanssin kesken.

Jos suorittaisitte tämän paikallisesti, asettaisitte PORT-ympäristömuuttujan ennen komentosarjan suorittamista (esimerkiksi PORT=3001 node app.js).

const http = require('http');
const port = process.env.PORT || 3001; // Changed default port for instance 2

const server = http.createServer((req, res) => {
  res.writeHead(200, { 'Content-Type': 'text/plain' });
  res.end(`Hello from Node.js instance on port ${port}!\n`);
});

server.listen(port, () => {
  console.log(`Server running on port ${port}`);
});

Nginxin upstream-käsite

Node.js-instanssien kuormantasaamiseksi Nginxillä määritettäisiin upstream-lohko, jossa luetellaan taustapalvelimet. Sen jälkeen server-lohko välittäisi pyynnöt tähän upstream-ryhmään.

Tässä on esimerkki Nginx-asetuksista:

http {
  upstream my_nodejs_app {
    server 127.0.0.1:3000;
    server 127.0.0.1:3001;
  }

  server {
    listen 80;
    server_name example.com;

    location / {
      proxy_pass http://my_nodejs_app;
    }
  }
}

Nginx kuuntelisi porttia 80 ja jakaisi pyynnöt portteihin 3000 ja 3001 oletusarvoisesti Round Robin -strategialla.

Kuormantasaajan muita hyötyjä

Kuormantasaajat tarjoavat muutakin kuin liikenteen jakamista:

  • Vikasietoisuus: Jos palvelin kaatuu, kuormantasaaja lopettaa automaattisesti pyyntöjen lähettämisen sille ja ohjaa liikenteen toimiville palvelimille.
  • SSL:n terminointi: Ne voivat käsitellä SSL/TLS-salauksen ja salauksen purkamisen, jolloin tämä työ siirtyy pois taustalla toimivilta Node.js-palvelimilta.
  • Istunnon pysyvyys (sticky-istunnot): Ne voivat varmistaa, että käyttäjän pyynnöt ohjataan aina samalle taustapalvelimelle, mikä on tärkeää joissakin sovelluksissa.

Pikatarkistus: kuormantasaus

Mitkä seuraavista ovat Node.js-sovelluksen kuormantasaajan käytön keskeisiä hyötyjä?

Kertaus: kuormantasaus

Olet oppinut, että kuormantasaus on olennaista Node.js-sovellusten skaalaamisessa ja korkean käytettävyyden varmistamisessa. Jakamalla saapuvat pyynnöt useiden taustajärjestelmäinstanssien kesken kuormantasaajat estävät pullonkauloja ja tarjoavat vikasietoisuutta.

Nginxin kaltaisia työkaluja käytetään yleisesti ohjelmistopohjaisen kuormantasauksen toteuttamiseen. Ne tarjoavat erilaisia algoritmeja liikenteen tehokkaaseen hallintaan. Tämä arkkitehtuuri on tärkeä vankkojen ja tuotantokäyttöön soveltuvien sovellusten kannalta.

Aloita maksutta

Opi JavaScript tekoälytuutorin avulla — ilmaiseksi

Kirjoita ja suorita oikeaa koodia selaimessa, saa välitöntä apua tekoälytuutorilta ympäri vuorokauden ja jatka siitä, mihin jäit, verkossa tai sovelluksessa.

Kurssit
22
Oppitunnit
92

Usein kysytyt kysymykset

Onko oppitunti ”Node.js-sovellusten kuormantasaus” ilmainen?

Kyllä – oppitunnin ”Node.js-sovellusten kuormantasaus” koko tekstin voi lukea täällä verkossa ilmaiseksi. Jos haluat harjoitella interaktiivisesti sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla sekä avata koko Node.js-taustakehityksen bootcamp-kurssin, päivitä CoddyKit PROhon. Node.js-taustakehityksen bootcamp-kurssilla on yhteensä 4 oppituntia.

Mitä opin oppitunnilla ”Node.js-sovellusten kuormantasaus”?

Ymmärtäkää, miten kuormantasaajat jakavat liikennettä, ja määrittäkää ne Node.js-taustajärjestelmälle saatavuuden parantamiseksi. Harjoittelet Node.js-taustakehityksen bootcamp-aihetta koodilla, jonka suoritat suoraan selaimessa. Ympäri vuorokauden käytettävissä oleva tekoälytuutori vastaa kysymyksiisi oppitunnin aikana.

Tarvitsenko kokemusta aloittaakseni Node.js-taustakehityksen bootcamp-opiskelun?

Aiempi kokemus ei ole tarpeen. CoddyKitin Node.js-taustakehityksen bootcamp-oppimispolku sopii vasta-alkajista edistyneisiin, joten voit aloittaa tästä tai alusta ja edetä omaan tahtiisi. Tämä on oppitunti 2/4.

Kuinka kauan ”Node.js-sovellusten kuormantasaus”-oppitunnin suorittaminen kestää?

Useimmat CoddyKitin oppitunnit kestävät noin 5–10 minuuttia. Jokainen oppitunti on lyhyt ja interaktiivinen, joten edistyt tasaisesti ja voit jatkaa siitä, mihin jäit – sekä verkossa että sovelluksessa.

Voinko kirjoittaa ja suorittaa koodia tällä Node.js-taustakehityksen bootcamp-oppitunnilla?

Kyllä. Jokainen Node.js-taustakehityksen bootcamp-oppitunti sisältää sisäänrakennetun koodieditorin, joten voit kirjoittaa ja suorittaa oikeaa koodia suoraan selaimessa ja saada välitöntä palautetta tekoälyltä – paikallista asennusta ei tarvita.

Kaikki tämän kurssin oppitunnit

  1. Node.js:n välimuististrategiat
  2. Node.js-sovellusten kuormantasaus
  3. Node.js:n tapahtumasilmukan optimointi
  4. Profilointi ja muistivuotojen havaitseminen
← Takaisin: Node.js-taustakehityksen bootcamp