Vaatimukset: Käytä Nginxiä käänteisen välityspalvelimen rakentamiseen, joka vastaa kaikkien pyyntöjen aikatauluttamisesta, taustajärjestelmän kehittää ASP.NET MVC ja se on otettu käyttöön useille eri palvelimille, muodostaen taustaklusterinIstuntotietoja ei voida jakaa, mikä johtaa siihen, että jotkut pyynnöt eivät käsitellä oikein。 Seuraavat ongelmat tulevat esiin:
ASP.NET Verkkosivustoa voidaan kutsua seuraavasti:
Yleisesti käytetyt ratkaisut ovat seuraavat:
Käytä tietokantaa SESSIONin tallentamiseen
Koska jokaisen palvelimen täytyy käyttää samaa istuntoa, voimme tallentaa istunnon samaan tietokantaan; joka kerta kun pääsemme tietokantaan, tarkistamme, onko kyseinen istunto vai onko istunto vanhentunut, ja voimme synkronoida useiden palvelimien istunnon;
Ansio:Tämän menetelmän käyttö on yksinkertaista, kätevää ja helppo aloittaa;
Puute:Tietokannan käyttäminen istuntojen synkronointiin lisää tietokannan IO:ta ja lisää tietokannan kuormitusta. Samaan aikaan jokaisen pääsyn täytyy siepata pyynnöt ja tehdä kyselyt tietokannasta, mikä johtaa lisäkerrokseen pääsyä ja hukkaan menevää tietokantaistuntoaikaa.
Käytä välimuistimekanismia, kuten Memcachea tai Redisiä, tallentaaksesi SESSIONin
Hajautettujen välimuistimekanismien, kuten memcachen tai redisin, käyttäminen istuntotietojen tallentamiseen on suosittu ratkaisu kuormantasaukseen ja synkronisiin sessioihin monissa suurissa projekteissa. Sen periaate on, että projekti käyttää memcache- tai redis-välimuistia samassa paikassa, kun käyttäjä kirjautuu sisään, istunto tallennetaan välimuistiin, ja riippumatta siitä, mitä projektin palvelinta käytetään, istuntovälimuisti saadaan samasta paikasta, jolloin istuntojen synkronointi on helppo toteuttaa;
Ansio:Välimuistin käyttö istuntojen synkronointiin ei lisää tietokannan kuormitusta, eikä sinun tarvitse manuaalisesti arvioida, onko istunto olemassa vai vanheneeko, mikä poistaa osan liiketoimintalogiikasta.
Puute:MemCache tai Redis jakaa muistin moniin tallennuslohkojen määrittelyihin, ja on olemassa lohkoja, joiden koko, mikä myös määrittää, ettei Memcache tai Redis pysty täysin hyödyntämään muistia, mikä aiheuttaa muistin pirstoutumista, ja jos tallennuslohkot eivät riitä, tapahtuu myös muistin ylivuotoa.
Hyödynnä ip_hash kuviota Nginxissä
Tämä tekniikka, joka tunnetaan myös nimellä session pitäminen, on nginxin ip_hash teknologia, joka mahdollistaaPyynnöt tietystä IP-osoitteesta kiinnitetään samaan backend-sovelluspalvelimeen, jotta asiakas ja tämän IP:n taustajärjestelmä voivat muodostaa vakaan istunnon.
(Mutta on myös haittapuoli, jos operaattorin verkko on epävakaampi ja epävakaampi,Poistumis-IP on dynaaminenKyllä, tässä menetelmässä tulee olemaan ongelmia. )
Testimenetelmänä avataan kaksi asemaa dockerin perusteella,Sinun täytyy luoda uusi index.html-tiedosto /data/testsite/a ja /data/testsite/b -hakemistoihin, komento on seuraava:
Pääsy selaimen kautta, kuten alla on esitetty:
Jos luot uuden nginx-kontin Dockerin pohjalta ilman ip_hash teknologiaa, pyyntö voidaan lähettää eri backend-palvelimille, kuten alla olevassa kuvassa näkyy:
ip_hash teknologiaa käyttäen luo uusi /data/testsite/nginx.conf -tiedosto seuraavalla kokoonpanolla:
Dockerin käynnistyskomento on seuraava:
(Evästepohjainen istuntojen hallinta, jota voi käyttää kiinnitetyssä moduulissa, jätettiin pois)
Nginx-konfiguraatio:Hyperlinkin kirjautuminen on näkyvissä.
(Loppu)
|