2013-10-02 7 views
1

У меня есть проект для работы, и мне нужно создать некоторые клиент-серверные приложения, где я могу отправлять сообщения и все что угодно, на Java. Одна из целей проекта - решить проблему отказа. Когда клиент подключается к серверу и сервер умирает, он автоматически подключается к серверу резервного копирования. То, что я хочу сделать, не требуется, но я хочу реализовать балансировщик нагрузки, чтобы несколько клиентов подключились к предпочтительному серверу.Балансировщик нагрузки, сокеты и java

Соединение между клиентом и сервером должно быть с сокетами TCP.

Это схема сетевой архитектуры: enter image description here

  1. клиент подключается к балансировки нагрузки (ОДП или TCP, я не знаю лучшим решением для данной ситуации).

  2. балансировки нагрузки решает, какой сервер должен что клиент подключения (наиболее пустую)

  3. клиент создает соединение TCP с указанным сервером

Мой вопрос:

Как должен работать балансировщик нагрузки, чтобы клиент мог подключиться к определенному серверу? Отправлять информацию о сервере (ip, порт) клиенту, а клиенты создают другой сокет с новым ip? (Синяя линия).

Или есть способ для балансировки нагрузки подключить эти две конечные точки (сервер № 1 < -> клиент № 1), без необходимости отправлять информацию клиенту?

PS: Я прошу вас, потому что кажется ненужным для каждого клиента, чтобы создать 2 гнезда, чтобы соединиться с сервером (первая розетка черная линия, вторая розетка синяя линия)

+0

Это дизайнерское решение зависит от ваших требований. Наличие сообщений балансировочного маршрута и данных может сделать его узким местом и препятствовать масштабируемости. – Fildor

+0

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

ответ

1

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

+0

Зависит от приложения ... Если Балансер должен будет маршрутизировать большие объемы данных через свой сетевой стек, тогда это может быть больше чтобы просто указать адрес. – Fildor

+0

@KaushikSivakumar Итак, вы говорите, что после того, как балансировщик нагрузки решает, какой сервер использовать, этот сервер делает соединение с клиентом (а не с клиентом -> сервером)? – andrepcg

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