2016-07-20 4 views
1

Я хочу использовать vert.x3 в кластерном режиме с помощью карибского дерева с помощью java. У меня есть два типа Verticles:Несколько verticles vertx-x3

  1. Verticle для запросов ручки HTTP (простой HTTP сервер) (этот тип Verticle должен быть запущен на каждом узле)
  2. Verticle с (нелокального) eventbus потребителей, для содержащих некоторые данные (у меня есть N частей данных, каждая вершина содержит одну часть, я хотел бы запускать каждую часть в режиме HA и только один экземпляр для каждого (в кластере есть N вершин этого типа)).

Вертикаль первого типа связывается с вертикой второго типа.

У меня также есть fatjar со всем кодом.

И у меня есть несколько вопросов об этом.

Как мне это сделать?
Как запустить кластер?
Я запускаю ту же самую банку на каждом узле или вам нужно что-то сделать?
Как запустить каждый тип вертикулы?
Как гарантировать, что на кластере будет работать только один экземпляр типа 2?
Я потерял сообщения eventbus?
Правильный ли вариант использования vertx для этой задачи?

+0

Этот вопрос слишком широк. Посмотрите руководство по кластеру vert.x и задайте вопросы, связанные с конкретными проблемами. http://vertx.io/docs/vertx-core/java/#_cluster_managers –

+0

@ tom.bujok, чтобы подвести итог, я не понимаю, как vertx развертывает вертикулы. что произойдет, если я разберу те же самые вершины из разных узлов? Должен ли я развернуть все вершины один раз (перед выполнением всех узлов), или каждый узел должен развернуть все вербцы (как в этом случае vertx понимает, что это дубликат?)? – gavrmike

+0

Эй, @gavrmike Я смотрю Vert.x, чтобы решить ту же проблему. Вы нашли решение для вершин типа 2? – rascio

ответ

2

Здесь несколько вопросов. Я постараюсь ответить на все их вопросы.

Как мне это сделать?

Самый простой способ имхо должен иметь один жир банку каждого типа Verticle и каждый Verticle должен иметь зависимость от менеджера hazelcast кластера:

<dependency> 
    <groupId>io.vertx</groupId> 
    <artifactId>vertx-hazelcast</artifactId> 
    <version>3.3.2</version> 
</dependency> 

И в вашей тени плагин указать манифеста атрибуты:

  • Main-Class: io.vertx.core.Launcher
  • Main-Verticle: vertx.bc.service.Main

Как запустить кластер?

Теперь для каждого жира банку вы можете работать как:

java -jar verticle1.jar -cluster 
java -jar verticle2.jar -cluster 

Они должны образовывать ГЦ кластер и быть запущен и работает. Вы можете развернуть на одном компьютере или на нескольких компьютерах, пока ваша сеть поддерживает многоадресную рассылку, которая по умолчанию будет работать для вас. Если у вас есть особые потребности, вам нужно настроить свою конфигурацию HZ.

Как гарантировать, что на кластере будет работать только один экземпляр типа 2?

Вы не можете.Это распределенная система, сеть должна считаться ненадежной, поэтому не может быть предположения, что вы всегда знаете, сколько узлов каждого типа запущено. Для этого вам нужны инструменты мониторинга. Кстати, это не Vert.x, а относится к любой архитектуре распределенной системы/микросервиса.

Я потерял сообщения eventbus?

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

Правильный ли вариант использования vertx для этой задачи?

Если вы используете ha и только 1 экземпляра это должно работать нормально для потребителей verticles, однако обратите внимание, что веб-сервер, если по какой-то причине умирает и появляется снова на другой хост не будет давать то, что вы ищете, так http-сервер «переместился» с host1 на hostN. Это означает, что все ваши веб-клиенты теперь получат сообщение «Не удается подключиться к хосту», так как точка входа в приложение теперь использует другой IP-адрес.