Изисквания: Използвайте Nginx за изграждане на обратен прокси, отговорен за планирането на всички заявки, бекендът се разработва от ASP.NET MVC и се разгръща на няколко различни сървъра, формирайки бекенд клъстерИнформацията за сесията не може да се споделя, което води до неправилна обработка на някои заявки。 Ще възникнат следните проблеми:
ASP.NET Уебсайтът може да се нарича по следния начин:
Често използваните решения са следните:
Използвайте базата данни за съхранение на СЕСИЯТА
Тъй като всеки сървър трябва да използва една и съща сесия, можем да съхраняваме сесията в една и съща база данни, всеки път когато я достъпим, отиваме в базата данни, за да проверим дали има тази сесия или дали тя е изтекла, и след това можем да синхронизираме сесията на няколко сървъра;
Заслуга:Използването на този метод е лесно, удобно и лесно за започване;
Недостатък:Използването на базата данни за синхронизиране на сесии ще увеличи входа на базата данни и ще увеличи натоварването върху нея. В същото време всеки достъп трябва да прихваща заявки и да прави заявки към базата данни, което води до допълнителен слой достъп и загуба на време за сесия в базата данни.
Използвайте кеширащ механизъм като Memcache или Redis за съхранение на СЕСИЯТА
Използването на разпределени кеширащи механизми като memcache или redis за съхранение на данни от сесии е популярно решение за балансиране на натоварването и синхронни сесии в много мащабни проекти. Принципът му е, че проектът използва memcache или redis кеша на едно и също място, когато потребителят влезе, сесията се съхранява в кеша и независимо кой сървър на проекта се достъпва, сесийният кеш се получава от едно и също място, така че синхронизацията на сесиите се осъществява лесно;
Заслуга:Използването на кеш за синхронизиране на сесиите няма да увеличи натоварването върху базата данни, нито е нужно ръчно да преценявате дали сесията съществува или изтече, което елиминира част от бизнес логиката.
Недостатък:memcache или redis разделят паметта на много спецификации на блокове за съхранение, като има блокове с размери, което също определя, че memcache или redis не могат напълно да използват паметта, което води до фрагментация на паметта, а ако блоковете за съхранение са недостатъчни, ще настъпи и препълване на паметта.
Използвайте модела ip_hash в Nginx
Тази техника, известна още като сесийно поддържане, е ip_hash технология в nginx, която ви позволяваЗаявките от определен IP адрес се закрепват към същия бекенд сървър, така че клиент и бекенд под този IP да могат да установят стабилна сесия.
(Но има и недостатък, ако мрежата на оператора е по-нестабилна и нестабилна,Изходният IP е динамиченДа, ще има проблеми с този метод. )
Тестовият метод е да се отворят два сайта на база docker,Трябва да създадете нов index.html файл под директориите /data/testsite/a и /data/testsite/b съответно, командата е следната:
Достъп чрез браузър, както е показано по-долу:
Ако създадете нов nginx контейнер на базата на Docker, без да използвате ip_hash технология, заявката може да бъде изпратена към различни бекенд сървъри, както е показано на фигурата по-долу:
Използвайки ip_hash технология, създайте нов файл /data/testsite/nginx.conf със следната конфигурация:
Командата за стартиране на docker е следната:
(Сесийното съхранение на базата на бисквитки, което може да се консултира в закрепения модул, е пропуснато)
Конфигурация на Nginx:Входът към хиперлинк е видим.
(Край)
|