Должен ли я изменить способ общения наших микросервисов?
Наше приложение состоит из 7 микросервисов, которые имеют некоторую взаимосвязь. В настоящее время мы используем простые очереди хранения, в которые микросервис публикует события (количество событий относительно невелико). Затем у нас есть функция Azure для каждой очереди, которая может вызывать другие микросервисы. Это работает нормально для нас, сейчас службы используют около 20 очередей с соответствующей функцией.
Теперь нам нужно обработать событие с хранилищем блогов, и я немного погуглил, и я запутался. Внезапно возникло много вопросов:
- Должны ли мы перейти на Azure Event Grid
- Он обрабатывает хранилище блобов без каких-либо ограничений (в некоторых функциях триггера блобстраж есть некоторые функции)
- Это позволяет нескольким подписчикам (очереди хранения нет)
- У этого есть много fuz - возможно это - новый рекомендуемый способ
- Мне нравится идея одной центральной вещи, но она немного напоминает мне о biztalk...
- Должен ли я перейти на служебную шину Azure
- Он имеет хороший инструмент (ServiceBusExplorer) для мониторинга очередей и списков, и я мог бы сделать репост любых неудачных событий
- Это визуализирует моих подписчиков лазурных функций приятно
- Должен ли я продолжать только с очередями хранения
- Немного сложно следить, но работает хорошо
Я буду очень благодарен за любые советы или идеи по этому вопросу.
Спасибо
3 ответа
Прежде всего, я хотел бы порекомендовать эти две статьи, они прояснят большинство ваших сомнений относительно этих услуг:
- Выберите между службами Azure, которые доставляют сообщения
- Сравнение очередей хранения и очередей служебной шины
Что касается Сетки событий, она действует как мост между издателем и подписчиком, где издатель будет отправлять сообщения и забывать, обработана ли она или нет, а Сетка событий будет обрабатывать повтор, если получатель \ подписчик не признает, что это было обработано успешно.
Как вы упомянули, очереди хранения имеют ограничения, такие как функции, запускаемые BLOB-объектами, и, возможно, Service Bus, но это будет зависеть от ваших требований к дизайну. Я хотел бы указать на некоторые вещи, которые вы могли бы рассмотреть, прежде чем перейти к Event Grid.
Очереди хранения и служебная шина не заботятся о вашей схеме сообщений, в Event Grid вы должны создать собственное событие на основе их схемы, чтобы обернуть ваше событие, поэтому издатель и подписчик должны понимать Grid Event для этого, а не то, что это большое сделка, но теперь у вас есть обе стороны, связанные с сеткой событий.
Если вы хотите отправить событие прямо в ваш микросервис, вам необходимо внедрить проверку подписки в вашем сервисе, иначе сервис не сможет получать события
Сетка событий повторяет попытку доставки ваших сообщений только в течение 24 часов. Если ваша служба не работает или неправильно обрабатывает сообщение дольше 24 часов, это приведет к потере события. В настоящее время нет способа запрашивать мертвые сообщения. Очереди хранения и служебная шина настраиваются на время хранения сообщения и могут храниться в течение многих дней.
Ваш сервисный веб-хук должен подтвердить получение (http 200 или 202) события в течение 60 секунд, в противном случае он будет считаться неудачным. Если ваша операция длиннее, вы должны отправить ее в очередь и обработать блокировку вашего сервиса.
Возможно, есть и другие ограничения, но те, которые я помню сейчас, могут измениться в ближайшее время, я думаю, что Event Grid - отличная технология, еще в первые дни, и есть много чего улучшить, я бы рекомендовал ее использовать только как концентратор для Azure. Я не думаю, что он готов для использования в качестве интегратора приложений.
Что касается вашего комментария для администратора очередей, для служебной шины у вас есть обозреватель служебной шины, а для хранилища Azure у вас есть обозреватель хранилища Azure, где вы можете проверить сообщения в очереди, это не то же самое, что служебная шина, но помогает.
EventGrid отлично подходит, когда у вас есть уведомления для нескольких подписчиков. Это тот случай для вас?
Примером могут быть отложенные сообщения. С очередями вы можете отложить сообщение, а не с EventGrid. Выбор очередей хранилища или служебной шины зависит от конкретных требований. Вам нужно дедупликация? Или заказанная доставка? Если вы это сделаете, Service Bus - это путь. В противном случае хранилища очередей достаточно.
Это очень сильно зависит от того, как вы используете очереди сообщений, вы можете посмотреть на это сравнение: https://docs.microsoft.com/en-us/azure/service-bus-messaging/service-bus-azure-and-service-bus-queues-compared-contrasted, по сравнению контрастных
Если вам не нужен порядок и если у вас нет строгих ограничений на объем сообщения, размер или TTL, вы можете придерживаться очередей хранения.