Ответы пользователя по тегу Сервис-ориентированная архитектура
  • Что использовать для реализации EDA в микросервисной архитектуре?

    @yarkin
    RabbitMQ это про очереди, если у вас есть очередь задач, то не думаю, что захотите чтобы все воркеры выполняли одно и тоже действие. Если нужно, чтобы каждый сервис получал копию сообщения, они должны иметь независимые очереди, которые могут быть подписаны на один эксчендж.
    Если у вас может быть по N инстансов одного сервиса, то все N подписываются на одну и ту же очередь (иначе см. выше что будет), но каждый сервис должен иметь свою очередь.
    Почитайте базовые мануалы по RabbitMQ - https://www.rabbitmq.com/getstarted.html - там много полезного найдёте (на хабре есть переводы на русский, если надо)

    Например, для простоты возмём что эксчендж всего один - events. Есть два сервиса - S1 и S2. У каждого из них по 3 инстанса. Сервисы хотят получать все сообщения которые публикуются в events.
    Получаем (допусти ещё ничего нет):
    - создаём эксчендж events (лучше до запуска всего) с типом fanout
    - первый инстанс S1 при запуске создаёт очередь - events-s1; создаёт биндинг этой очереди на эксчендж events; подписывается на эту очередь
    - второй и третий инстансы S1 при запуске видят, что очередь есть и просто подписываться на неё
    - всё тоже самое повторяется для S2

    При росте сервисов, одного эксченджа может не очень хватить, тогда одна очередь может имеет более одного биндинга к нужным ей эксченджам. Или тип эксченджа можно поменять на topic и управлять тем кто получит сообщения уже через ключи биндингов и заголовки сообщений, а не имена эксченджей.
    Ответ написан
    Комментировать
  • Как правильно организовать очереди?

    @yarkin
    Если клиент не закрывает соединение с конкретным инстансом (или если закрыл, то ответ не должен получить), то посмотрите в сторону RPC, вот с помощью чего оно работает, вот примеры.
    Если результат требует много вычислительных ресурсов и повторять нежелательно, то либо создавать очереди под каждого клиента, либо где-то кэшировать результат (например, в СУБД).
    Ответ написан
  • Какая правильная архитектура с message bus для клиент-серверной IoT-системы?

    @yarkin
    Я не работал с IoT-устройствами, но мне кажется, что отдельная локальная шина звучит логично, так как позволит иметь наименьшие задержки и работать офлайн, а также, возможно, сэкономить батарею. Но зависит от задачи и ресурсов, может оказаться поначалу выгодней работать через серверв. RabbitMQ использовать на IoT-устройстве так себе идея, имхо, для простой отправки в маленьком масштабе он будет невыгоден по ресурсопотреблению.
    Ответ написан
    Комментировать