1. Что такое балансировка нагрузки Новый сайт не должен иметь балансировку нагрузки, потому что трафик невелик, поэтому нет необходимости заниматься такими вещами. Однако с быстрым ростом трафика и трафика на сайте один сервер ограничен собственными аппаратными условиями, и ему трудно выдержать такое большое количество посещений. В этом случае есть два варианта на выбор: 1. Обновить аппаратное обеспечение одного сервера — с двухъядерного на четырёхъядерный, увеличить память и т.д. 2. Увеличить количество серверов, чтобы разделить нагрузку серверов. Для достижения цели увеличения пропускной способности сети и увеличения вычислительной мощности сервера. Первый метод можно понять как вертикальное развитие, которое всегда ограничено. Второй метод — правильный выбор для решения задачи Методы балансировки нагрузки можно разделить на два направления: одно — использование программного обеспечения для достижения балансировки нагрузки, другое — реализация аппаратной балансировки нагрузки (включая сочетание аппаратного и программного обеспечения) Используйте программное обеспечение для достижения балансировки нагрузки, и процесс балансировки нагрузки также потребляет часть системных ресурсов и увеличивает время отклика. Например, LVS, nginx, haproxy, apache и др., эти программные программы для балансировки нагрузки на базе приложений подходят для сайтов с небольшим числом посещений. Если у вас есть сайт с большим количеством посетителей, например Sina и 163, использование аппаратного обеспечения для балансировки нагрузки — самый очевидный выбор. Существует множество алгоритмов балансировки нагрузки, включая балансировку нагрузки на основе количества запросов, корневых IP-адресов и алгоритмов на основе трафика. Есть два алгоритма, которые я часто использую. Один из них основан на количестве запросов Ответ: он может осознать, что каждый сервер может равномерно делить запросы клиента, и если один из серверов выйдет из строя, это не приведёт к негативному влиянию. b. Состояние между серверами должно быть синхронизировано, например, сессия, и необходимы другие способы синхронизации этих состояний. Один из них — согласно IP A, ip_hash алгоритм может отображать IP на сервер, что решает проблему синхронизации сессий b. Плохое в ip_hash в том, что если один из серверов выйдет из строя, пользователи с этим сервером будут подавлены. C, ip_hash легко может привести к несбалансированной нагрузке, теперь, когда правительство речных крабов фильтрует поисковые ключевые слова Google, часто можно обнаружить, что Google не может открыть, но со временем всё будет нормально. Это расстроило энтузиастов Google, и многие пользователи уехали за границу в поисках агентов. Если это произойдёт, эти прокси будут назначены одному серверу, что приведёт к несбалансированной нагрузке и даже сбоям.
Во-вторых, что такое удержание сессии и какова её функция Удержание сессии — это механизм на балансировщике нагрузки, который гарантирует, что запросы доступа, связанные с одним и тем же пользователем, распределяются на один и тот же сервер при выполнении балансировки нагрузки. Что делает сессия, приведите пример Если запрос на доступ пользователя назначен серверу А, и он входит на сервер А, и за короткое время этот пользователь отправляет другой запрос, если функции удержания сессии нет, скорее всего, он будет назначен серверу B, на данный момент на сервере B нет входа, поэтому нужно войти снова, но пользователь не знает, куда назначен его запрос, он считает, что он вошёл, зачем ему снова входить — пользовательский опыт очень плох. А если вы покупаете что-то на Taobao, от login = «Shoot something=» add address = «to pay», это серия процессов, которую также можно понимать как операционный процесс, все эти операции должны выполняться одним сервером и не могут быть назначены разным серверам с помощью балансировщика нагрузки. Удержание сессии имеет ограничение по времени (за исключением серверов, которые связаны с фиксированным, например, ip_hash), и различные инструменты балансировки нагрузки обеспечивают установку времени удержания сессии, LVS, apache и т.д. Даже язык PHP предоставляет session.gc_maxlifetime для установки времени удержания сессии Время удержания сессии должно быть установлено больше, чем время выживания сессии, что может снизить необходимость синхронизации сессий, но его нельзя устранить. Так что синхронизация сессий всё ещё предстоит проводить.
В-третьих, синхронизация сессий Почему именно синхронизация сессий — это уже упоминалось, когда речь шла о сохранении сессий. Для получения дополнительной информации см. раздел «Три метода синхронизации сессий в веб-кластере»
В веб-кластере существует три метода синхронизации сессий
После веб-кластера вы обязательно рассмотрите синхронизацию сессий в первую очередь, потому что после балансировки нагрузки один и тот же IP-доступ к одной и той же странице будет назначен разным серверам. В этой статье приводятся три разных способа решения этой задачи в зависимости от ситуации: Во-первых, используйте базу данных для синхронизации сессии Я не использовал этот метод при синхронизации сессий между несколькими серверами, но если бы пришлось использовать этот метод, я придумал два варианта: 1. Использовать недорогой компьютер для создания базы данных для хранения сессии веб-сервера или создать специальную базу данных на файловом сервере; когда пользователь обращается к веб-серверу, он зайдёт в эту специальную базу данных для проверки ситуации сессии и достижения цели синхронизации сессий. 2. Этот метод заключается в том, чтобы объединить таблицу, в которой хранится сессия, вместе с другими таблицами базы данных; если MySQL также кластерен, каждый узел mysql должен иметь эту таблицу, а таблица данных этой сессионной таблицы должна быть синхронизирована в реальном времени. Объяснение: Использование базы данных для синхронизации сессий увеличивает нагрузку на базу, которая по своей природе склонна к узким местам. Первый из двух вышеуказанных методов лучше, он отделяет таблицу, где сессия размещается отдельно, снижая нагрузку на реальную базу данных 2. Используйте файлы cookie для синхронизации сессий Session — это файловая ситуация, хранящаяся на серверной стороне, а cookie — ситуация с файлом на клиенте. Как достичь синхронизации? Метод очень прост: вместить сессию, сгенерированную страницей посещения пользователя, в файл cookie, то есть использовать файл как станцию ретрансляции. Вы посещаете веб-сервер A, генерируете сессию и добавляете её в cookie, ваш доступ назначается веб-серверу B, в этот момент веб-сервер B сначала оценивает, есть ли эта сессия на сервере, если нет — проверить, есть ли эта сессия в cookie клиента, если нет — значит, сессия действительно не сохранена, если она есть в куки, Синхронизировать сессион в cookie с веб-сервером B, чтобы сессию можно было синхронизировать. Примечание: этот метод прост и удобен в реализации, и не увеличит нагрузку на базу данных, но если клиент отключит cookie, то сессию нельзя синхронизировать, что приведёт к потерям сайта; Файлы cookie не являются высоко защищёнными, и хотя они были зашифрованы, их всё равно можно подделать.
3. Используйте memcache для синхронизации сессий Memcache можно распределять, и без этой функции он не может использоваться для синхронизации сессий. Он может объединить память на веб-сервере в «мемпул», независимо от того, какой сервер генерирует сессион, её можно разместить в этот «мемпул», и всё остальное можно использовать. Преимущества: синхронизация сессий таким образом не увеличивает нагрузку на базу данных, безопасность значительно повышается по сравнению с использованием куки, а перенос сессий в память гораздо быстрее, чем чтение файлов. Недостатки: memcache делит память на множество спецификаций блоков хранения, существуют блоки и размеры, таким образом также определяется, что memcache не может полностью использовать память, что приводит к фрагментации памяти, если блок хранения недостаточен — это также приводит к переполнению памяти.
В-четвёртых, краткое содержание Все три вышеуказанных метода возможны Первый метод, который больше всего влияет на скорость системы, не рекомендуется; Второй способ даёт хорошие результаты, но опасности для безопасности остаются прежними; Третий метод, лично я считаю третий лучшим, рекомендую всем его использовать;
|