Перенаправление трафика TCP NetworkStream на сервере сокетов .NET - PullRequest
0 голосов
/ 03 апреля 2012

Мне нужно построить балансировщик нагрузки в C # .NET. Мне нужно будет направлять запросы, основанные на некоторых критериях, на массив серверных сокетов .NET Tcp.

Какими способами .NET предоставляет перенаправление трафика? Есть ли способ динамически выполнять переадресацию портов (т. Е. Когда целевой хост меняется в зависимости от запроса)?

Любая информация очень ценится. Спасибо.

РЕДАКТИРОВАТЬ: я пытаюсь написать пользовательский балансировщик нагрузки, поэтому я должен был сказать программная динамическая переадресация портов. Я пытаюсь перенаправить клиентские запросы на конечные компьютеры с помощью программного обеспечения / алгоритма клиента.

Ответы [ 3 ]

1 голос
/ 03 апреля 2012

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

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

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

IMHO .NET может быть не лучшим выбором для балансировщика нагрузки на уровне TCP, так как для этого требуется максимальная производительность ... в зависимости от вашего точного сценария, возможно, даже потребуется собрать модуль ядра для достижения приемлемого уровня производительность - сборка модуля ядра невозможна в .NET, только в C / C ++ (или для тех, кто действительно хочет испортить ассемблер) ...

Замечание:

ЕСЛИ вы можете изменить клиентскую сторону, ТОГДА может быть гораздо более эффективный вариант для достижения того, чего вы хотите ... вы бы внедрили центральную службу, выполняющую "логическую балансировку нагрузки", клиенты спрашивают эту центральную службу, какой бэкэнд они следует подключиться и затем подключиться напрямую ... после завершения они просто сигнализируют об этом центральному сервису ... может быть, даже лучше получить "информацию о загрузке" от внутренних машин / сервисов и рассчитать на основе этого ...

1 голос
/ 03 апреля 2012

.NET не включает встроенных функций балансировки нагрузки и переадресации портов. Вам придется написать это самостоятельно или найти библиотеку, которая это делает.

В Win 2008 есть NLB .. но вопросы об этом (NLB) больше подходят для ServerFault

0 голосов
/ 11 мая 2016

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

Например, WinGate имеет несколько прокси-серверов (либо http, либо общее сопоставление TCP), которые вы можете использовать jscriptили другие варианты для изменения пункта назначения для каждого запроса или для каждого соединения.

...