2017-02-12 12 views
1

Короче говоря, меня интересует создание слабосвязанных микросервисов, подключенных через SNS (по большей части) для обработки запросов API в режиме реального времени.Использование API Gateway под управлением Lambda Функции, которые связывают между Microservices с использованием SNS

Предпосылка

  • Нужно все это происходит в пределах одного тела ответа запроса POST
  • Не можете попросить клиента потянуть за загрузку успеха и/или успешной маршрутизации.

AWS API шлюза Конечные точки

  • POST/API/документы/uploadAndRouteDownWorkflow, выполняет documents.upload и получает комбинированный ответ от documents.upload и workflows.routeDocument функций с указанием полного успеха (загрузка и маршрут работал), частичный успех (но не загружать маршрут), или полный отказ (сбой при загрузке)

лямбда-функции (execut ред в порядке):

- documents.upload

  • Вызванный из API шлюза конечной
  • Закачивает документы к (Система управления документами DMS)
  • Создает сообщение SNS к микропроцессор рабочего процесса для маршрутизации документа

- workflows.routeDocument

  • Вызванный из подписанной SNS тему
  • Маршруты документ/документы в SNS сообщении
  • Возвращает успех/провал на первоначальный запрос АНИ

предостережений, почему документы. загрузка не вызывает workflows.routeDocument внутренне

  1. Microservices не слабосвязанная в малейшей
  2. Двойной процессорного времени для обеих функций лямбда, если принуждая синхронными (возможно)

Возможно ли это закономерность?

Спасибо!

ответ

1

Вот где ломается:

-workflows.routeDocument

  • Возвращает успех/отказ первоначального запроса апи

Это не представляется возможным. Используя SNS, вы отключили сервисы до того момента, когда функция Lambda, ответственная за генерацию ответа на запрос Gateway API (documents.upload), не знает, что произошло в другой функции Lambda. Функция Lambda workflows.routeDocument не имеет доступа к шлюзам API event и context и поэтому не может обновить ответ API.

Единственный способ, которым это могло бы работать, - это если функция Lambda, вызванная API Gateway, провела какой-то опрос, чтобы дождаться завершения второго вызова функции, а затем каким-то образом обратилась к состоянию возврата (хранится в базе данных или что-то в этом роде) и вернул это в ответ. Я думаю, что это потребует много времени для обработки запросов.

В этом примере я думаю, что имеет смысл использовать documents.upload для непосредственного вызова функции лямбда workflows.routeDocument.

+0

Итак, если я правильно понял, мне нужно будет поддерживать некоторый тип синхронного потока, чтобы вернуть результат, указывающий на неудачу неудачи в исходном запросе POST? На этом, если я хочу, чтобы эти штуки были слабо связаны, мне нужно было бы посмотреть на другое решение вне AWS. Чтение в RPC-шаблоне в RabbitMQ через Direct Reply-to (https://www.rabbitmq.com/direct-reply-to.html) похоже на то, что мне интересно делать). Есть ли другой способ в AWS держать вещи слабо связанными, сохраняя синхронное поведение? –

+0

Шаблон RabbitMQ RPC может быть реализован также с помощью SQS от Amazon. Однако вам нужно понять, что RabbitMQ все еще использует очереди и опросы для передачи ответа. В любом полностью разобранном решении у вас будет длинная функция 'documents.upload', опросив базу данных или очередь или что-то ожидающее ответа, который генерируется функцией' workflows.routeDocument'. –

+0

@DavidGarza Возможно, вас заинтересует сегодняшняя анонс AWS: https://aws.amazon.com/about-aws/whats-new/2017/02/amazon-api-gateway-integration-with-aws-step-functions/ –