Скільки веб-серверів має StackOverflow / ServerFault?
Якщо відповідь «більше, ніж один», то чи досягається вона дотримання сеансу під час опитування DNS?
Скільки веб-серверів має StackOverflow / ServerFault?
Якщо відповідь «більше, ніж один», то чи досягається вона дотримання сеансу під час опитування DNS?
Відповіді:
Великі веб-сайти можуть бути "збалансованими" на кількох машинах. У багатьох налаштуваннях, збалансованих навантаженням, користувач може потрапити на будь-яку із задніх машин протягом сеансу. Через це існує низка методів, що дозволяють багатьом машинам ділитися сеансами користувачів.
Вибраний метод буде залежати від стилю збалансованості завантаження, а також від доступності / потужності резервного зберігання:
Інформація про сеанс, збережена лише у файлах cookie : Інформація про сеанс (а не лише ідентифікатор сеансу) зберігається у файлі cookie користувача. Наприклад, cookie користувача може містити вміст їх кошика для покупок. Щоб запобігти підробленню користувачами даних сеансу, разом із файлом cookie може бути наданий HMAC. Цей метод, мабуть, найменш підходить для більшості застосувань:
Балансир завантаження завжди спрямовує користувача на одну і ту ж машину : Багато балансирів завантаження можуть встановлювати власне печиво сеансу, вказуючи, з якої резервної машини користувач надсилає запити, і надалі спрямовує їх на цю машину. Оскільки користувач завжди спрямований на одну машину, обмін сеансами між декількома машинами не потрібно. Це може бути добре в деяких ситуаціях:
Спільна база даних або сховище ключів / цінностей : Інформація про сеанс зберігається в базі даних резервного копіювання, до якої всі веб-сервери мають доступ до запитів та оновлень. Браузер користувача зберігає файл cookie, що містить ідентифікатор (наприклад, ідентифікатор сесії), вказуючи на інформацію про сеанс. Це, мабуть, найчистіший метод із трьох:
Загалом, більшість динамічних веб-додатків виконують ряд запитів до баз даних або запитів на зберігання ключів / цінностей, тому база даних або сховище ключів / цінностей є логічним місцем зберігання даних сеансу.
Якщо у вас запитання полягає в тому, як підтримувати сеанси на декількох зовнішніх веб-серверах, то відповідь зазвичай полягає у використанні централізованої бази даних. Замість того, щоб покладатися на екземпляри веб-сервера для відстеження файлів сеансу в локальних файлових системах, ви записуєте ідентифікатори сеансів і дані сесії в центральну БД, і всі веб-сервери замість цього отримуватимуть дані.
Використання незграбного виглядає як хороше рішення, не так, як згадував @David Pashley
Це означає, що віддалений запам’ятовуваний екземпляр має спільний доступ до всіх серверів та використовує розширення PECL memcache, яке забезпечує власний обробник сеансу.
Потрібно лише змінити два параметри в конфігурації php!
Ось хороший підручник http://www.dotdeb.org/2008/08/25/storing-your-php-sesions-using-memcached/
IIRC, у DotNetRocks # 440 вони сказали один серверний період. Не знаю, чи все ще так.
Правка: Насправді це була Hanselminutes # 134 . Вибачте.
Ви можете встановити печиво.
Ви можете обчислити хеш віддаленого IP (найпростіший, непарний номер віддалених хостів переходить на сервер A, навіть нумеровані хости переходять на сервер B).
Схоже, ви також можете це зробити за допомогою деяких значень, які зберігаються у вихідній системі, якщо ви використовуєте тунель ssl.
Як правило, кожен з перерахованих вище механізмів вимагає "зворотного проксі" сервера або балансира навантаження певного роду. Цей балансир завантаження приймає трафік, а потім направляє його на той сервер, який спочатку провів сеанс, виходячи з одного з вищезазначених критеріїв.
Я не впевнений, що ви маєте на увазі під опитуванням DNS
а) Ви можете зберігати інформацію про сеанс у файлі cookie користувача. Дивіться загартовані файли cookie, які не зберігають даних на стороні сервера, але зберігають стан сеансу http://www.cl.cam.ac.uk/~sjm217/papers/protocols08cookies.pdf . b) Ви можете змінити резервне зберігання сеансу на базу даних або запам’ятовувати. Для усунення єдиної точки відмови можна встановити реплікацію бази даних або кілька вузлів, що запам'ятовуються. Зауважте, що запам’ятовується рекомендується в таких налаштуваннях, коли втрата стану користувача під час сеансу не є великою помилкою і не робить його дуже нещасним. У випадках, коли збереження стану життєво важливе, використовуйте бази даних. І PHP, і Django, і Rails дозволяє розробнику писати користувацький сеанс.