Вимоги: Використовуйте Nginx для створення зворотного проксі, відповідального за планування всіх запитів, бекенд розробляється ASP.NET MVC і розгортається на кількох різних серверах, формуючи бекенд-кластерІнформація про сесію не може бути передана, через що деякі запити обробляються некоректно。 Виникнуть такі проблеми:
ASP.NET Вебсайт можна називати наступним чином:
Поширені рішення такі:
Використовуйте базу даних для збереження SESSION
Оскільки кожен сервер має використовувати одну й ту ж сесію, ми можемо зберігати сесію в одній і тій самій базі даних, кожного разу, коли ми звертаємося до неї, щоб перевірити, чи існує ця сесія, чи вона закінчилася, а потім синхронізуємо сесію кількох серверів;
Заслуга:Використання цього методу просте, зручне та легко почати;
Недолік:Використання бази даних для синхронізації сесій збільшує IO бази даних і збільшує навантаження на базу. Водночас кожен доступ має перехоплювати запити та звертатися до бази даних, що призводить до додаткового рівня доступу та марної сесії часу бази даних.
Використовуйте механізми кешування, такі як Memcache або Redis, щоб зберігати SESSION
Використання розподілених механізмів кешування, таких як 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 виглядає так:
(Збереження сесій на основі cookie, яке можна проконсультуватися у закріпленому модулі, виключено)
Конфігурація Nginx:Вхід за гіперпосиланням видно.
(Кінець)
|