div >
Mar 28, 2019 · 9 perc olvasás
az év 2012 volt. PHP és Ruby on Rails uralkodott, mint a Legfelsőbb szerver oldali technológiák renderelés webes alkalmazások. De, egy merész új versenyző viharral vette át a közösséget — amelynek sikerült kezelnie az 1M egyidejű kapcsolatokat. Ez a technológia nem más, mint a Node.js és folyamatosan nőtt a népszerűsége azóta.
ellentétben a legtöbb versengő technológiák az idő, csomópont.a js beépített webszerverrel érkezett. A szerver megléte azt jelentette, hogy a fejlesztők számtalan konfigurációs fájlt megkerülhettek, például a php.ini
és a
.htaccess
fájlok hierarchikus gyűjteményét. A beépített webkiszolgáló más kényelmet is biztosított, mint például a fájlok feltöltése közben történő feldolgozásának képessége, valamint a Websocketek egyszerű megvalósítása.
minden nap csomópont.a js-alapú webes alkalmazások boldogan kezelik a kérelmek milliárdjait. A világ legnagyobb vállalatainak többségét valamilyen módon csomópont hajtja.js. Azt mondani, hogy csomópont.js a termelés-kész minden bizonnyal egy
kifejezés. Van azonban egy tanács,amely a Node óta igaz.js kezdete: nem szabad közvetlenül kitenni egy csomópontot.a JS feldolgozza az internetet, ehelyett el kell rejtenie egy fordított proxy mögött. De mielőtt megnéznénk az okokat, miért szeretnénk fordított proxyt használni, először nézzük meg, mi az.
a fordított proxy alapvetően egy speciális típusú webszerver, amely fogadja a kéréseket, továbbítja azokat egy másik HTTP szerverre valahol máshol, megkapja a választ, és továbbítja a választ az eredeti kérőnek.
a fordított proxy általában nem küldi el a pontos kérést. Általában valamilyen módon módosítja a kérést. Például, ha a fordított proxy a www.example.org:80
címen él, és továbbítja a kérést a
ex.example.org:8080
címre, akkor valószínűleg átírja az eredeti Host
fejlécet, hogy megfeleljen a cél fejlécének. A kérést más módon is módosíthatja, például egy hibás kérés megtisztítása vagy a protokollok közötti fordítás.
Ha a fordított proxy választ kap, akkor ezt a választ valamilyen módon lefordíthatja. Ismét általános megközelítés a Host
fejléc módosítása, hogy megfeleljen az eredeti kérésnek. A kérések törzsét is meg lehet változtatni. Gyakori módosítás a gzip tömörítés végrehajtása a válaszon. Egy másik gyakori változás a HTTPS támogatás engedélyezése, Ha az alapul szolgáló szolgáltatás csak HTTP-t beszél.
a fordított proxyk bejövő kéréseket is küldhetnek több háttérpéldányra. Ha egy szolgáltatás ki van téve a api.example.org
, a fordított proxy továbbíthatja a kéréseket a api1.internal.example.org
api2
stb.
sok különböző fordított proxy van odakint. A két legnépszerűbb az Nginx és a HAProxy. Mindkét eszköz képes elvégezni a gzip tömörítést és HTTPS támogatást adni, és más területekre is specializálódtak. Nginx a legnépszerűbb a két választás, és van néhány más
hasznos képességek, mint például a képesség, hogy szolgálja a statikus fájlokat egy fájlrendszer, így fogjuk használni, mint egy példa az egész ezt a cikket.
most, hogy tudjuk, mi az a fordított proxy, most megvizsgálhatjuk, miért szeretnénk használni egyet csomóponttal.js.
miért használjak fordított proxyt?
az SSL megszüntetése az egyik legnépszerűbb ok, amiért fordított proxyt használunk. A ones alkalmazás protokolljának megváltoztatása http
– ről https
kicsit több munkát igényel, mint egy s
hozzáfűzése. Csomópont.maga a js képes végrehajtani a szükséges titkosítást és dekódolást a https
számára, és konfigurálható a szükséges tanúsítványfájlok olvasására.
az alkalmazásunkkal való kommunikációhoz használt protokoll konfigurálása és az állandóan lejáró SSL tanúsítványok kezelése azonban nem igazán olyan dolog, amit az alkalmazásunknak aggódnia kell. A tanúsítványok kódbázisba történő ellenőrzése nemcsak unalmas, hanem biztonsági kockázatot is jelent. A tanúsítványok központi helyről történő megszerzése az alkalmazás indításakor szintén kockázattal jár.
ezért jobb, ha az SSL-felmondást az alkalmazáson kívül végezzük, általában fordított proxyn belül. Az olyan technológiáknak köszönhetően, mint a certbot
A Let ‘ s Encrypt, a tanúsítványok fenntartása az Nginx-szel ugyanolyan egyszerű, mint egy cron feladat beállítása. Egy ilyen feladat automatikusan új tanúsítványokat telepít és dinamikusan újrakonfigurálja az Nginx folyamatot. Ez sokkal kevésbé zavaró folyamat, mint mondjuk az egyes csomópontok újraindítása.js alkalmazás példány.
azáltal, hogy engedélyezi a fordított proxy SSL-megszüntetését, ez azt jelenti, hogy csak a fordított proxy szerzői által írt kód fér hozzá a privát SSL-tanúsítványhoz. Azonban, ha a csomópont.a js alkalmazás kezeli az SSL-t, akkor az alkalmazás által használt minden harmadik fél modulja — akár potenciálisan rosszindulatú modulok is — hozzáférhet a privát SSL-tanúsítványhoz.
gzip tömörítés
a gzip tömörítés egy másik funkció, amelyet ki kell töltenie az alkalmazásból egy fordított proxyba. a gzip tömörítési házirendeket a legjobban szervezeti szinten lehet beállítani, ahelyett, hogy minden alkalmazáshoz meg kellene adni és konfigurálni.
a legjobb, ha valamilyen logikát használunk, amikor eldöntjük, hogy mit kell gzipelni. Például a nagyon kicsi, talán 1 KB-nál kisebb fájlokat valószínűleg nem érdemes tömöríteni, mivel a gzip tömörített verziója néha nagyobb lehet, vagy a CPU-költség, ha az ügyfél kibontja a fájlt, nem éri meg. Továbbá, ha bináris adatokkal foglalkozik, a formátumtól függően előfordulhat, hogy nem részesül a tömörítésből. a gzip olyan is, amelyet nem lehet egyszerűen engedélyezni vagy letiltani, meg kell vizsgálnia a bejövő Accept-Encoding
fejlécet a kompatibilis tömörítési algoritmusokhoz.
fürtözés
a JavaScript egyszálú nyelv, ennek megfelelően csomópont.a js hagyományosan egyszálú kiszolgálóplatform volt (bár a jelenleg kísérleti worker thread támogatás elérhető a Node-ban.a js v10 célja ennek megváltoztatása). Ez azt jelenti, hogy egy csomópontból annyi áteresztőképességet kapunk.a JS alkalmazás a lehető legtöbb esetben nagyjából ugyanannyi példányt igényel, mint a CPU magok.
csomópont.a js beépített cluster
modullal rendelkezik, amely éppen erre képes. A bejövő HTTP kéréseket egy fő folyamathoz kell benyújtani, majd elküldik a klaszter dolgozóinak.
a klasztermunkások dinamikus méretezése azonban némi erőfeszítést igényel. Van is általában hozzáadott fölött fut egy további csomópont.js folyamat, mint a diszpécser master folyamat. Ezenkívül a különböző gépek közötti skálázási folyamatok olyan dolgok, amelyeket a cluster
nem tud megtenni.
Ezen okok miatt néha jobb, ha fordított proxyt használunk a kérések elküldésére a futó csomópontra.js folyamatok. Az ilyen fordított proxyk dinamikusan konfigurálhatók úgy, hogy érkezéskor új alkalmazási folyamatokra mutassanak. Valójában egy alkalmazásnak csak a saját munkájával kell foglalkoznia, nem szabad több másolat kezelésével és a kérelmek elküldésével foglalkoznia.
Enterprise Routing
amikor hatalmas webes alkalmazásokkal foglalkozik, például a többcsapatos vállalkozások által épített alkalmazásokkal, nagyon hasznos, ha fordított proxy van annak meghatározására, hogy hova továbbítsa a kéréseket. Például a example.org/search/*
– hez intézett kérések átirányíthatók a belső kereső alkalmazásba, míg a example.org/profile/*
– hez intézett egyéb kérések elküldhetők a belső profil alkalmazásba.
Az ilyen szerszámok más erőteljes funkciókat is lehetővé tesznek, mint például a ragadós munkamenetek, a kék/zöld telepítések, az A/B tesztelés stb. Személyesen dolgoztam egy kódbázisban, ahol ilyen logikát hajtottak végre az alkalmazáson belül, és ez a megközelítés meglehetősen megnehezítette az alkalmazás karbantartását.
teljesítmény előnyei
csomópont.js nagyon alakítható. Képes statikus eszközöket kiszolgálni egy fájlrendszerből, gzip tömörítést végrehajtani HTTP válaszokkal, beépített HTTPS támogatással és sok más funkcióval rendelkezik. Még arra is képes, hogy egy alkalmazás több példányát futtassa, és saját kérésküldést hajtson végre a cluster
modul segítségével.
és mégis, végső soron az a legjobb érdekünk, hogy hagyjuk, hogy egy fordított proxy kezelje ezeket a műveleteket helyettünk, ahelyett, hogy a Csomópontunk lenne.js alkalmazás csinálni. A fent felsorolt okok mindegyikén kívül egy másik oka annak, hogy ezeket a műveleteket a csomóponton kívül szeretné elvégezni.a JS a hatékonyságnak köszönhető.
az SSL titkosítás és a gzip tömörítés két erősen CPU-kötésű művelet. A dedikált fordított proxy eszközök, mint például az Nginx és a HAProxy, általában gyorsabban hajtják végre ezeket a műveleteket, mint a Node.js. Ha egy olyan webszerver, mint az Nginx, statikus tartalmat olvas a lemezről, az gyorsabb lesz, mint a Node.js is. Még a klaszterezés is néha hatékonyabb lehet, mivel egy fordított proxy, mint az Nginx, kevesebb memóriát és CPU-t használ, mint egy további Csomóponté.js folyamat.
de ne vegye figyelembe a szavunkat. Futtassunk néhány referenciaértéket!
a következő terhelésvizsgálatot a siege
használatával végeztük. A parancsot 10-es egyidejűségi értékkel futtattuk (10 egyidejű felhasználó kér), és a parancs 20 000 iterációig futott (200 000 teljes kérés esetén).
a memória ellenőrzéséhez a pmap <pid> | grep total
parancsot futtatjuk néhányszor a benchmark élettartama alatt, majd átlagoljuk az eredményeket. Ha az Nginx-et egyetlen munkásszállal futtatja, akkor két példány fut, az egyik a mester, a másik pedig a munkás. Ezután összegezzük a két értéket. Csomópont futtatásakor.js klaszter 2 3 folyamat lesz, az egyik a mester, a másik kettő pedig munkás. A következő táblázat KB memória oszlopa az egyes Nginxek és csomópontok teljes összege.js folyamat az adott teszthez.
itt vannak a benchmark eredményei: