The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

В nginx появилась поддержка балансировки UDP-соединений

15.03.2016 16:54

Разработчики http-сервера nginx объявили о реализации поддержки балансировки UDP-соединений, которая дополнила собой ранее добавленный балансировщик произвольных TCP-соединений, реализованный в виде модуля stream. Проброс UDP может быть полезен для распределения нагрузки между несколькими DNS-, syslog- или radius-серверами. UDP-балансировщик уже интегрирован в репозиторий с исходными текстами nginx и войдёт в состав намеченного на 23 марта выпуска 1.9.13.

Среди поддерживаемых методов балансировки: round-robin (круговой перебор, при котором соединения равномерно распределяются среди обработчиков), least-connections (запрос перенаправляется к менее нагруженному серверу), least_time (перенаправление на сервер, демонстрирующий наиболее высокую отзывчивость) и hash (перенаправление на основе хэша от определённого пользователем параметра, например, IP). После перенаправления запроса серверу, nginx дожидается ответа и переотправляет его клиенту. Если сервер не ответил в течение таймаута, nginx помечает сервер как проблемный и прекращает отправлять на него запросы, но раз в несколько секунд проверяет не восстановился ли он, отправляя пробный клиентский запрос.

  1. Главная ссылка к новости (https://www.nginx.com/blog/ann...)
  2. OpenNews: Выпуск nginx 1.9.12
  3. OpenNews: В HTTP-сервер nginx встроена поддержка JavaScript
  4. OpenNews: Выпуск nginx 1.9.5 с поддержкой HTTP/2
  5. OpenNews: Для nginx подготовлен балансировщик TCP-соединений
Лицензия: CC BY 3.0
Короткая ссылка: https://opennet.ru/44049-nginx
Ключевые слова: nginx, udp
При перепечатке указание ссылки на opennet.ru обязательно


Обсуждение (38) Ajax | 1 уровень | Линейный | +/- | Раскрыть всё | RSS
  • 1.1, dkg (?), 17:15, 15/03/2016 [ответить] [﹢﹢﹢] [ · · · ]  
  • +5 +/
    nginx радует. Может кто посоветовать хорошую литературу по настройки для highload?
     
     
  • 2.2, www2 (??), 17:44, 15/03/2016 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Highload не настраивают, их пишут. При отсутствии архитектурных решений, предусматривающих масштабирование проекта на множество серверов, всякие настройки бесполезны, потому что не позволят выжать из железа больше, чем то, на что оно способно.

    Если вы считаете, что Highload - это баззворды вроде Mongo, Django, Memcache и Redis, то мне кажется, что вы ошибаетесь. Всё это - костыли, которые максимально удаляют вас от наиболее эффективного решения. Нормальный проект - это многопроцессный или многопоточный демон с общей памятью, который всё своё носит с собой (не использует сторонних фреймворков или демонов, разработчики которых внезапно могут объявить нужные вам фичи устаревшими и неподдерживаемыми) и всё нужное держит при себе (сессии пользователей вместе со всеми нужными для сеанса объектами хранит в общей для всех воркеров оперативной памяти, а не грузит их при каждом чихе из базы данных, сохраняя в Memcache, "для кэширования").

    И конечно, Highload - это не только веб. Чтобы написать производительное веб-приложение, нужно отбросить общепринятую в вебе шелуху и использовать подходы, которые используются вне веба. Там точно есть чему поучиться, потому там хорошо понимают, что одними баззвордами реальность не обманешь.

     
     
  • 3.3, anonnnn (?), 17:55, 15/03/2016 [^] [^^] [^^^] [ответить]  
  • +/
    А как же микросервисная архитектура, позволяющая легче масштабировать горизонтально?
     
     
  • 4.5, Аноним (-), 18:24, 15/03/2016 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Микросервисы к х-йлоаду относятся только как один из путей потребления вычислительных ресурсов. А так, у тебя голова прожужжаная торгашнёй со всего интернете.
     
  • 4.16, Andrey (??), 19:58, 15/03/2016 [^] [^^] [^^^] [ответить]  
  • +/
    Микросервисы это скорее о подходе к разработке и релизу приложений (CI). И в отличии от монолитных монстров, масштабировать их гораздо проще и приятней, потому и ассоциируются как правильный паттерн для highload-сред.
     
     
  • 5.32, www2 (ok), 08:45, 16/03/2016 [^] [^^] [^^^] [ответить]  
  • +2 +/
    > Микросервисы это скорее о подходе к разработке и релизу приложений (CI). И
    > в отличии от монолитных монстров, масштабировать их гораздо проще и приятней,
    > потому и ассоциируются как правильный паттерн для highload-сред.

    Отличный паттерн, в котором 90% работы заключается в том, чтобы раскодировать запрос и закодировать ответ. Накладные расходы очень большие. Почему вы думаете что есть только микросервисы и монолитные сервисы? Почему монолитный с виду сервис не может оказаться модульным внутри и с разными типами воркеров? Каждый воркер может потреблять столько памяти, сколько ему нужно. Каждого типа воркеров может быть запущено столько, сколько нужно.

    Для обслуживания одного клиента совсем не обязательно все его запросы размазывать тонким слоем по всем серверам. Одним клиентом может заниматься один сервер. При этом данные клиента не обязательно сохранять после каждого запроса в постоянное хранилище и снова загружать всё из этого хранилища, чтобы вспомнить, чем он занимался в прошлом запросе, который был меньше секунды назад. Достаточно иметь арбитра, который будет отслеживать, на каком сервере сейчас обслуживается клиент. Достаточно чтобы серверы, обслуживающие клиентов, обменивались между собой сообщениями.

    Короче - как работает настоящий Highload в его веб-ипостаси, можно увидеть массовых в онлайн-играх. Например вот:
    https://habrahabr.ru/company/mailru/blog/182088/
    https://habrahabr.ru/company/mailru/blog/220359/

    Заметьте - нет ни слова про микросервисы, Django, Mongo, Redis, Memcache и Highload. Упоминается No-SQL в контексте "нам нужна консистентность, а No-SQL её как правило не обеспечивают". Люди думают головой и проектируют архитектуру, а не бросаются на модные слова.

     
  • 3.4, Crazy Alex (ok), 18:01, 15/03/2016 [^] [^^] [^^^] [ответить]  
  • +2 +/
    Эти "баззворды" как раз и дают "общую для всех воркеров оперативную память", независимо от того, где данный воркер запущен. Ну да, кастомный демон, держащий всё в себе - гораздо эффективнее, пока помещается на один сервер. И даже тогда надо как-то обеспечивать горячую замену - но это решаемо. Но как только инстансов становится много - про общую оперативную память можно и нужно забывать, и стандартные решения с известными граблями и путями их обхода рулят.
     
     
  • 4.24, pavlinux (ok), 00:52, 16/03/2016 [^] [^^] [^^^] [ответить]  
  • +2 +/
    Товарищи теоретики, курите Теорию автоматов, Робачевского, IPC, модели параллелизации.
    В двух словах: Задача диктует модель реализации! Остальное - школьный срач.  
     
     
  • 5.30, www2 (ok), 08:25, 16/03/2016 [^] [^^] [^^^] [ответить]  
  • +1 +/
    > Товарищи теоретики, курите Теорию автоматов, Робачевского, IPC, модели параллелизации.
    > В двух словах: Задача диктует модель реализации! Остальное - школьный срач.

    Дело в том, что задача со временем меняется. Сначала это HTML-страничка со списком учеников школы, а потом оно дорастает до соцсети с миллионами активных пользователей. Почему-то есть общепринятые или хорошо раскрученные методы решения этой задачи. Элементы этого решения - микросервисная архитектура, Memcache, Redis, Mongo. Но использование этих баззвордов совсем не означает автоматически, что приложение готово к высоким нагрузкам и хорошо масштабируется.

    На мой взгляд, слово Highload себя дискредитировало. Оно раскручено и активно впихнуто в мозги молодых программеров, желающих стать крутыми. Где звучит слово Highload, там сразу собираются сотни пионеров с горящими глазами, а производители железа довольно потирают ручки.

     
     
  • 6.37, pavlinux (ok), 20:04, 17/03/2016 [^] [^^] [^^^] [ответить]  
  • +/
    >> Товарищи теоретики, курите Теорию автоматов, Робачевского, IPC, модели параллелизации.
    >> В двух словах: Задача диктует модель реализации! Остальное - школьный срач.
    > Дело в том, что задача со временем меняется. Сначала это HTML-страничка со
    > списком учеников школы, а потом оно дорастает до соцсети с миллионами
    > активных пользователей.

    Вы предлагаете масштабировать echo Hello World на 6 лямов юзеров? :)
    Не, это очень даже рационально, с точки зрения зарплаты IT-отдела.

     
  • 4.29, www2 (??), 08:17, 16/03/2016 [^] [^^] [^^^] [ответить]  
  • +/
    >Эти "баззворды" как раз и дают "общую для всех воркеров оперативную память", независимо от того, где данный воркер запущен.

    Ну да. Это же так удобно. Первую страницу клиент запросил у одного сервера, а следующую - у другого.

    >Ну да, кастомный демон, держащий всё в себе - гораздо эффективнее, пока помещается на один сервер.

    Если есть умный прокси, который каждого клиента будет постоянно отправлять на тот сервер, где этот клиент в последний раз обслуживался, то будет эффективнее.

    >Но как только инстансов становится много - про общую оперативную память можно и нужно забывать, и стандартные решения с известными граблями и путями их обхода рулят.

    Эти ваши Memcache с Redis никогда не заменят мозга. Клиента нужно стараться всегда обслуживать в одном и том же месте и хранить в этом месте все его данные в оперативке. Общее хранилище - оно для хранения данных между сеансами.

    Стандартные решения - это метод грубой силы. Для тех, у кого нет мозгов, но много денег на железо.

     

  • 1.6, Ivan_83 (ok), 18:58, 15/03/2016 [ответить] [﹢﹢﹢] [ · · · ]  
  • +8 +/
    Хернёй страдают - тоже самое можно делать в том же PF вообще на уровне ядра, если руки прямые и хватит ума написать пару строчек правил для NAT, rdr и pass.

    Пора уже разрезать nginx на куски: хттп, мыло, и вот эти всякие балансировщики.
    Те проект мало того что оброс модулями по теме, так ещё там теперь всякое не относящиеся к хттп пристраивается тоннами.

     
     
  • 2.7, Crazy Alex (ok), 19:18, 15/03/2016 [^] [^^] [^^^] [ответить]  
  • +3 +/
    Вот да, что-то он совсем в комбайн превратился
     
     
  • 3.11, Аноним (-), 19:42, 15/03/2016 [^] [^^] [^^^] [ответить]  
  • –1 +/
    > Вот да, что-то он совсем в комбайн превратился

    Это было очевидно уже давно.
    Например, там внутри есть собственный аналог systemd, обеспечивающий постепенный перезапуск воркеров без остановки обслуживания, посредством сокет-активации.

     
     
  • 4.26, Аноним (-), 01:55, 16/03/2016 [^] [^^] [^^^] [ответить]  
  • +/
    >> Вот да, что-то он совсем в комбайн превратился
    >
    > Это было очевидно уже давно.
    > Например, там внутри есть собственный аналог systemd, обеспечивающий постепенный перезапуск воркеров без остановки обслуживания, посредством сокет-активации.

    А ты предлагаешь через kill -9 перезапускать?

     
  • 4.34, Аноним (-), 17:18, 16/03/2016 [^] [^^] [^^^] [ответить]  
  • +/
    > Например, там внутри есть собственный аналог systemd,

    Так бзды только собираются еще launchd начать использовать, вот и пришлось рьяным бсдшникам кодить свой вариант.

     
  • 4.38, й (?), 15:04, 19/03/2016 [^] [^^] [^^^] [ответить]  
  • +/
    это не аналог systemd. systemd может послать мастер-процессу HUP, а с воркерами пусть уже сам мастер-процесс разбирается. нормальая архитектура, в общем.
     
  • 3.20, Аноним (-), 23:30, 15/03/2016 [^] [^^] [^^^] [ответить]  
  • +/
    Энтерпрайзники требуют. Попробуй логи с 500 нагруженных серверов получать. То еще приключение.
     
     
  • 4.23, pavlinux (ok), 00:42, 16/03/2016 [^] [^^] [^^^] [ответить]  
  • –2 +/
    О, йопт, админы локалхостов подтянулись... "- Логи, 500 серверов,...".
    Если у тя болит живот, анализ кала и мочи будешь каждую минуту делать?


     
     
  • 5.27, . (?), 03:59, 16/03/2016 [^] [^^] [^^^] [ответить]  
  • +3 +/
    Дурак ты Паша!(С)
    У ынтерпрайза живот всегда болит!
    6 лет назад в одной 3-х буквенной лавке объём ежедневных гзипованных логов составлял 6ТБ.
    И они щедро платили чтоб это всё долетело, застроилось и распарсилось.
    Не думаю что с тех пор стало меньше :-))))
     
     
  • 6.36, Аноним (-), 12:20, 17/03/2016 [^] [^^] [^^^] [ответить]  
  • +/
    Это же не логи :)
     
  • 5.35, Аноним (-), 17:25, 16/03/2016 [^] [^^] [^^^] [ответить]  
  • +/
    > Если у тя болит живот, анализ кала и мочи будешь каждую минуту делать?

    Есть разница - сделать анализ 1 человеку в год или 500 человек ежедневно. Во втором случае придется придумывать автоматизацию процессов и распределение нагрузки на группу воркеров-лаборантов.

    Сходи в большую серьезную лабораторию и посмотри что из себя представляет анализатор. Это почти автоматические машины с кучей датчиков и бортовым компьютером. Лаборанты меняют пробирки, льют реактивы и иногда проверяют/калибруют датчики.

     
  • 2.8, Аноним (-), 19:19, 15/03/2016 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Т.е., позорище.
     
  • 2.10, Аноним (-), 19:41, 15/03/2016 [^] [^^] [^^^] [ответить]  
  • +/
    > Хернёй страдают - тоже самое можно делать в том же PF вообще на уровне ядра, если руки прямые и хватит ума написать пару строчек правил для NAT, rdr и pass.

    Если не секрет - как при помощи PF можно обеспечить балансировку least-connections например?
    Или least-time?

     
     
  • 3.22, Аноним (-), 23:44, 15/03/2016 [^] [^^] [^^^] [ответить]  
  • +/
    >Если не секрет - как при помощи PF можно обеспечить балансировку least-connections например? Или least-time?

    Конечно, это секрет. Пишешь демон, который чекает бэкенды, далее заполняешь таблицы в pf. Смысл, ну вот один в один как в nginx. Ну, е*та, это ж не хайлоад, да.

     
  • 2.12, Аноним (-), 19:50, 15/03/2016 [^] [^^] [^^^] [ответить]  
  • +3 +/
    > тоже самое можно делать в том же PF вообще на уровне ядра, если руки прямые и хватит ума

    Ага, а ещё можно на ассемблере написать модуль ядра и тоже самое сделать вообще в командах микропроцессора, если руки прямые и хватит ума.

     
     
  • 3.14, Аноним (-), 19:52, 15/03/2016 [^] [^^] [^^^] [ответить]  
  • +/
    > Ага, а ещё можно на ассемблере написать модуль ядра

    Лучше на баше, там более прозрачно® и юниксвейно™. Главное, не забыть включить в ядро интерпретатор баша...

     
  • 2.17, rshadow (ok), 20:46, 15/03/2016 [^] [^^] [^^^] [ответить]  
  • +/
    Да все правильно он делает. Хорошее решение для реальных задач. Все остальное теория.
     
     
  • 3.18, Аноним (-), 21:39, 15/03/2016 [^] [^^] [^^^] [ответить]  
  • +1 +/
    от баша у него фрибсд осквернится, тычо
     
     
  • 4.28, . (?), 04:01, 16/03/2016 [^] [^^] [^^^] [ответить]  
  • +/
    > от баша у него фрибсд осквернится, тычо

    Там в портах (по умолчанию) баш свежее твоего в линуксе :)

     
  • 2.19, Nas_tradamus (ok), 22:52, 15/03/2016 [^] [^^] [^^^] [ответить]  
  • +/
    Можно написать демон (хоть на шеле), который будет измерять счетчики pf по sport и dport и добавлять/удалять правила в rdr.
    Я anti-ddos такой видел :)

    Не знаю, есть ли в линуксовом iptables/netfilter что-то вроде round-robin.

     
     
  • 3.21, Аноним (-), 23:40, 15/03/2016 [^] [^^] [^^^] [ответить]  
  • +1 +/
    > Не знаю, есть ли в линуксовом iptables/netfilter что-то вроде round-robin.

    Там много чего есть, один только список модулей на два экрана.

     
  • 2.39, loskiq (ok), 18:21, 24/03/2016 [^] [^^] [^^^] [ответить]  
  • +/
    Классно было бы, если б сайт мог работать через UDP, а не через TCP.
     
     
  • 3.40, Andrey Mitrofanov (?), 18:43, 24/03/2016 [^] [^^] [^^^] [ответить]  
  • +/
    > Классно было бы, если б сайт мог работать через UDP, а не через TCP.

    Не отвлекаться, http/2 вам в дышло!

     
     
  • 4.41, loskiq (ok), 20:09, 24/03/2016 [^] [^^] [^^^] [ответить]  
  • +/
    >> Классно было бы, если б сайт мог работать через UDP, а не через TCP.
    > Не отвлекаться, http/2 вам в дышло!

    Он не поддерживает UDP =/

     

  • 1.25, Аноним (-), 01:51, 16/03/2016 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Был неплохой вебсервер, теперь убогий комбайн.
     
     
  • 2.31, Какаянахренразница (ok), 08:27, 16/03/2016 [^] [^^] [^^^] [ответить]  
  • +2 +/
    > Был неплохой вебсервер, теперь убогий комбайн.

    Никто не заставляет нацеплять все цацки сразу.

     
  • 2.33, Аноним (-), 11:39, 16/03/2016 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Был неплохой веб-сервер который решал одну очень узкоспецифическую задачу, а для остального приходилось городить зоопарк. Теперь есть неплохой веб-сервер, который решает все задачи - красота.
     

     Добавить комментарий
    Имя:
    E-Mail:
    Текст:



    Партнёры:
    PostgresPro
    Inferno Solutions
    Hosting by Hoster.ru
    Хостинг:

    Закладки на сайте
    Проследить за страницей
    Created 1996-2024 by Maxim Chirkov
    Добавить, Поддержать, Вебмастеру