redsabien
@redsabien

Как обеспечивается балансировка нагрузки?

Если взять пример любого из сервиса, "Yahoo", "Google" , "Instagram", "Vk"
Какие механизмы применяются для балансировки нагрузки (помимо DNS)
Как тот же поисковик умудряеться ответить миллиону клиентов в секунду если не больше
  • Вопрос задан
  • 1194 просмотра
Решения вопроса 1
@throughtheether
human after all
Для начала хотелось бы отметить, что, на мой взгляд, логичным представляется разделять понятия балансировки (load balancing) и разделения (load sharing) нагрузки. Вкратце, балансировка нагрузки подразумевает некую обратную связь (чем меньше нагрузка сервера, к примеру, тем больше вероятность, что следующий запрос будет обработан именно им), в отличие от разделения нагрузки.

Рассмотрим поверхностно, как происходит взаимодействие клиента с web-сервисом. Клиент обращается по некому URL, происходит разрешение доменного имени в IP-адрес (момент 1). Далее, необходимо установить TCP-сессию с хостом, представленным этим адресом (момент 2). Для этого IP-пакеты, содержащие TCP-сегменты, должны добраться до этого хоста (момент 3). После установления TCP-сессии в ней идет обмен HTTP-сообщениями (момент 4).

В точке (1) возможно как разделение (DNS round-robin), так и балансировка нагрузки (специфичные DNS-решения, отслеживающие метрики производительности серверов). В точке (2) возможны балансировка/разделение нагрузки при помощи NAT или TCP-проксирования. В точке (3) возможно разделение нагрузки при помощи BGP anycast, equal-cost multipath или CARP/VRRP (в порядке уменьшения уровня абстракции архитектуры, если можно так выразиться). В точке (4) возможны балансировка/разделение нагрузки при помощи reverse proxy.

Эта же модель частично применима и при взаимодействии, скажем, веб-сервера с сервером баз данных и прочая.

Примерно таким образом можно распределить нагрузку на большое количество серверов. Но необходимо понимать, что при этом, в зависимости от сферы применения, встает ряд других задач, как, в частности, консистентность состояния серверов.
Ответ написан
Пригласить эксперта
Ответы на вопрос 3
suguby
@suguby
программист, python, django, mysql, git, hg, linux
Стратегии разные есть. Самая простая - кластер из фронтов у которых куча памяти и все закешировано + несколько аппликейшн-серверов + несколько СУБД серверов. А запросы идут на фронты по round-robbin (по кольцу) на входящем роутере. Для шины общения фронтов с апликейшн-серверами используется что-то типа haproxy.
Но все сильно зависит от функциональности, можно ли шардить базы данных, как хорошо кэшируются ответы, и т.п.
Целые конференции проходят по тому "как" HighLoad например, почитайте материалы.
Ответ написан
Комментировать
RicoX
@RicoX
Ушел на http://ru.stackoverflow.com/
Гуглите по слову CDN и читайте все что найдете в поиске, на третей-четвертой статье начнет приходить понимание и варианты. У того же гугла у всех крупных провайдеров стоят специальные серваки с кешем, он их дает бесплатно, так что большая часть конечных абонентов получают свои запросы из кешей с серваков провайдера или магистрала, а так вариантов масштабирования очень много, для коротких запросов типа DNS применяется такая штука как anycast, в общем тема очень обширная.
Ответ написан
Комментировать
@inkvizitor68sl
Linux-сисадмин с 8 летним стажем.
https://events.yandex.ru/lib/talks/379/ - вот вспомнили про яндекс, могли бы найти эту запись =)

Про балансеры в видео, за балансерами - серверы приложений, которых дочерта, которые одинаковы.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы