Является ли наличие нескольких цепочек лямбда-звонков плохой идеей? - PullRequest
0 голосов
/ 10 марта 2020

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

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

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

Как вы справляетесь с этим?

1 Ответ

0 голосов
/ 11 марта 2020

У вас может быть один лямбда-запуск другого асинхронно. Тогда вы можете иметь маленькие, быстрые функции. Вот пример Python кода для этого:

payload = {'any-data-you-need-to-pass-along': 'your_data',
           'resources': ['you_can_make_this_something_custom']}

lambda_client = boto3.client('lambda')
lambda_client.invoke(FunctionName=the_arn_of_function_you_want_to_call,
                     InvocationType='Event', 
                     Payload=json.dumps(payload))

Ключ должен использовать InvocationType типа «Событие», так как вызов вызывает асинхронность вызова. Одним из преимуществ этого подхода является то, что у каждого отдельного типа запроса может быть лямбда, которая соответствует его потребностям с точки зрения памяти и времени ожидания. Если все работает в одной большой лямбда-выражении, например, в большом выражении switch, тогда ваша лямбда должна быть сконфигурирована на максимальный объем памяти, который требуется для любого из типов запросов, и это может означать, что небольшие типы запросов выполняются с большим объемом, чем им нужно, и тратят впустую ваши деньги. .

Я рекомендую вам прочитать асинхронные заметки здесь , в которых говорится о других соображениях:

Для асинхронного вызова Lambda добавляет события в очередь перед отправкой. их к вашей функции. Если вашей функции не хватает мощности, чтобы не отставать от очереди, события могут быть потеряны. Время от времени ваша функция может получать одно и то же событие несколько раз, даже если ошибки не происходит. Чтобы сохранить события, которые не были обработаны, настройте свою функцию с очередью недоставленных сообщений.

Если вам нужно больше потока, вы должны изучить пошаговые функции: https://aws.amazon.com/getting-started/tutorials/create-a-serverless-workflow-step-functions-lambda/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...