Követelmények: Használd a Nginx-et egy fordított proxy építésére, amely felelős az összes kérés ütemezéséért, a háttérrendszert ASP.NET MVC fejleszti, és több különböző szerverre telepítik, így egy backend klasztert alkotA session információk nem oszthatók meg, ami egyes kérések nem megfelelően történő feldolgozásához vezet。 A következő problémák merülnek fel:
ASP.NET A weboldal a következőképpen nevezhető:
A leggyakrabban használt megoldások a következők:
Használja az adatbázist a SESSION tárolására
Mivel minden szervernek ugyanazt az ülést kell használnia, tárolhatjuk a szekciót ugyanabban az adatbázisban, minden alkalommal, amikor hozzáférünk, megnézzük, van-e ez a munkamenet, vagy lejárt-e az ülés, majd szinkronizálhatjuk több szerver munkamenetét;
Érdem:Ennek a módszernek a használata egyszerű, kényelmes és könnyen elkezdhető;
Hiány:Az adatbázis használata a szingingingák szinkronizálására növeli az adatbázis IO-ját és növeli az adatbázis terhét. Ugyanakkor minden hozzáférésnek el kell fognia a kéréseket és lekérdezést kell végeznie az adatbázisban, ami további hozzáférési réteget eredményez és elpazarolt adatbázis ülésidőt.
Használj gyorsítótározó mechanizmust, például a Memcache-t vagy a Redis-t a SESSION tárolására
Az elosztott gyorsítótározó mechanizmusok, mint például a memcache vagy a redis használata a munkamenetadatok tárolására népszerű megoldás a terheléselosztásra és szinkron ülésekre sok nagyszabású projektben. Az elv, hogy a projekt ugyanott használja a memcache vagy redis cache-t, amikor a felhasználó bejelentkezik, a szekció a cache-ben tárolódik, és függetlenül attól, hogy melyik szervert használják a projektből, a session cache-t ugyanonnan kapják, így a szingíció szinkronizálása könnyen megvalósítható;
Érdem:Gyorsítótár használata az ülések szinkronizálására nem növeli az adatbázis terhét, és nem kell manuálisan megítélni, hogy létezik-e vagy lejár-e az ülés, így némi üzleti logika kizárt.
Hiány:A Memcache vagy Redis számos tárolóblokkra osztja a memóriát, és vannak méretű blokkok, ami azt is megállapítja, hogy a Memcache vagy Redis nem tudja teljesen kihasználni a memóriát, ami memória fragmentációt eredményez, és ha a tárolóblokkok nem elegendőek, memória túlcsordulás is előfordulhat.
Használd ki a ip_hash mintát Nginxben
Ez a technika, más néven session keeping (session keeping ), a nginx ip_hash technológiája, amely lehetővé teszi, hogyEgy adott IP-címről érkező kérések ugyanahhoz a háttérrendszerű alkalmazásszerverhez vannak rögzítve, így egy kliens és egy háttérrendszer ezen IP alatt stabil ülést hozhat létre.
(De van egy hátrány is, ha a szolgáltató hálózata ingatagabb és instabilabb,Az Exress IP dinamikusIgen, ezzel a módszerrel lesznek problémák. )
A tesztmódszer két helyszínt nyitunk docker alapján,Új index.html fájlt kell létrehoznod a /data/testsite/a és /data/testsite/b könyvtárak alatt, a parancs a következő:
Böngészőn keresztül érhető el, ahogy az alábbiakban látható:
Ha létrehozol egy új nginx konténert Docker alapján, ip_hash technológia használata nélkül, a kérést különböző backend szervereknek lehet küldeni, ahogy az alábbi ábrán látható:
ip_hash technológiával hozz létre egy új /data/testsite/nginx.conf fájlt a következő konfigurációval:
Docker indítási parancs a következő:
(A cookie-alapú session keeping (cookie-alapú session-keeping rendszer) (amely a sticky modulban is elérhető) kimarad)
Nginx konfiguráció:A hiperlink bejelentkezés látható.
(Vége)
|