2009-11-07 1 views
5

Существуют ограничения, налагаемые доступной памятью, пропускной способностью, процессором и, конечно же, сетевым подключением. Но их часто можно масштабировать по вертикали. Существуют ли какие-либо другие ограничивающие факторы для linux? Могут ли они быть преодолены без изменений ядра? Я подозреваю, что, если не что иное, ограничивающим фактором станет гигабитный ethernet. Но для эффективных протоколов может потребоваться 50K параллельных подключений для болота. Разве что-то еще сломается, прежде чем я смогу получить такой высокий уровень?Сколько открытых подключений udp или tcp/ip может быть у Linux-машины?

Я думаю, что мне нужен программный udp и/или tcp/ip load balancer. К сожалению, ничего подобного в сообществе с открытым исходным кодом, похоже, не существует, за исключением протокола http. Но я не могу писать, используя epoll. Я ожидаю, что он проведет много настроек, чтобы добиться масштабирования, но это работа, которая может быть выполнена постепенно, и я буду лучшим программистом для этого.

ответ

1

На ваш вопрос вы ограничены аппаратными ограничениями. Это была философия дизайна для Linux-систем. Вы точно описываете, какими будут ваши ограничивающие факторы.

4

Один из параметров, с которыми вам, вероятно, придется столкнуться, - джиттер. Увеличивает ли количество подключений в каждом поле, вы, несомненно, ставите нагрузку на все ресурсы указанной системы. В результате, вероятно, пострадают характеристики джиттера.

В зависимости от целевых потребностей, которые могут или не быть проблемой: если вы планируете поддерживать в основном упругого трафика (трафик, который не страдает много от джиттера и латентности), то это нормально. Если доля неупругого трафика высока (например, интерактивный голос/видео), то это может быть более проблематичным.

Конечно, вы можете всегда над инженером в этом случае ;-)

+0

Вы поднимаете хороший пункт о джиттере и задержке и влиянии на неупругом трафике – Eloff

+4

бы человек, который пропустил мою почтовую посылку, чтобы объяснить? прохождение вниз по голосу без комментариев просто грубо. – jldupont

+0

Для TCP другой проблемой является количество входящих данных. Входящие данные занимают буферы ядра, пока они не обрабатываются пользовательским процессом. Если ваше приложение не обрабатывает память «достаточно быстро», ядро ​​может закончиться буферами и паникой. Это можно улучшить, установив небольшой размер буфера Rx на каждый сокет. –

2

Если вы собираетесь иметь сервер, который держит один сокет открыт для одного клиента, то он должен быть тщательно разработан таким образом, что он может эффективно проверить входящие данные от клиентов 10k +. Это называется проблемой 10k.

Современные ядра Linux могут обрабатывать гораздо более 10 тыс. Соединений, как правило, не менее 100 тыс. Вам может потребоваться некоторая настройка, особенно много тайм-аутов TCP (при использовании TCP), чтобы избежать закрытия/устаревания сокетов с использованием большого количества ресурсов, если многие клиенты часто подключаются и отключаются.

Если вы используете модуль conntrack netfilter, также может потребоваться настройка для отслеживания многих подключений (это не зависит от сокетов tcp/udp).

Существует множество технологий для балансировки нагрузки, наиболее известным является LVS (Linux Virtual Server), который может выступать в качестве интерфейса для кластера реальных серверов. Я не знаю, сколько соединений он может обрабатывать, но я думаю, что мы используем его с производительностью не менее 50 тыс. Штук.

0

Попробуйте HAproxy балансир программного обеспечения нагрузки: (т. Е конкретно вид трафика, который вы будете использовать UDP для)

http://haproxy.1wt.eu/

 Смежные вопросы

  • Нет связанных вопросов^_^