Каков вариант использования vertx multi verticle в одном микросервисе?

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

  • Один из них - это остальная часть для обработки HTTP-запросов.
  • Другой - это соединение с базой данных.

Всякий раз, когда есть какой-либо запрос api, вершина HTTP связывается с вершиной dao через шину событий.

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

Я могу понять случай наличия отдельной рабочей вертикали на случай блокировки звонков. Но в случае неблокирования, вызовы ввода-вывода, каковы его варианты использования?


person Deepak Chougule    schedule 12.06.2020    source источник
comment
неправильный! в большинстве SAMPLE приложений, а не в реальных, вы видите dao-verticle и прочую ерунду   -  person injecteer    schedule 14.06.2020


Ответы (1)


Vert.x не является однопоточным. Он использует модель с несколькими реакторами:

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

Проблема с одним потоком в том, что он может работать только на одном ядре в любой момент, поэтому, если вы хотите, чтобы ваше приложение с однопоточным реактором (например, приложение Node.js) масштабировалось по вашему многоядерному серверу, вам нужно запустить и управлять множеством различных процессов.

Vert.x здесь работает иначе. Вместо одного цикла событий каждый экземпляр Vertx поддерживает несколько циклов событий. По умолчанию мы выбираем число на основе количества доступных ядер на машине, но это можно изменить.

Это означает, что один процесс Vertx может масштабироваться на вашем сервере, в отличие от Node.js.

Таким образом, запуская несколько Вертикалей, вы можете распределить свои сервисы по нескольким потокам / ядрам ЦП.

person dano    schedule 12.06.2020