Vertx - несколько против одной вертикали для обработки событий
сценарий
Я получаю сообщение по определенному "адресу" в Vertx eventbus - сообщение может быть четырех типов. Обработчик должен обработать сообщение и отправить результат по другому "адресу" шины событий, его обработчик отправляет его в API внешнего сервиса.
проблема
Как спроектировать Вертикул для этого? Ниже я описал два подхода - один из которых эффективен, быстрее и способен хорошо масштабироваться, учитывая, что он будет развернут в Кубернетесе. Как насчет рабочих статей? Любой другой эффективный подход, которого я пропускаю?
Подходы
- Напишите статью для каждого типа, при этом потребитель Eventbus потребляет и обрабатывает этот тип. Отправьте обработанные данные на адрес "external-service-call".
- Напишите только одну статью - обработчик события может решить и вызвать соответствующий метод в зависимости от типа сообщения и, наконец, опубликовать его по адресу "external-service-call".
Насколько я понимаю, я могу масштабировать второй подход, развернув несколько экземпляров этой вертикали. Под масштабированием я подразумеваю, что это может принимать и обрабатывать большой объем одновременно? Как насчет первого подхода?
Другой подход, вы думаете, я должен знать?
1 ответ
Первый подход несколько предпочтительнее по двум причинам:
- Делать меньше проверок => Меньше процессорного времени => больше параллелизма
- Меньше кода в каждой статье => проще в обслуживании
Сказав это, это не то, что должно беспокоить вас. Твой external-service-call
будет на порядок медленнее, чем любая микрооптимизация на EventBus.
Подход 1: а. Чище. eventbus предназначена для связи между вершинами одного и того же экземпляра вершины или внутри вершин кластера. б. Производительность - поскольку статьи находятся на одном хосте, нет сетевого ввода-вывода и не сильно влияет на производительность.
Подход 2: а. Менее чище, но получит очень небольшое улучшение производительности, что незначительно по сравнению с вызовами внешних служб. B. Плохо с точки зрения ремонтопригодности.
Я бы, наверное, выбрал подход 1.