В настоящее время я работаю над компонентом индексирования, где он создает индексы в разных таблицах базы данных (DynamoDB, ElasticSearch и т. Д.) На основе клиентских конфигураций.
Потенциально могут быть более 100 клиентов, которым нужны разные записи индексациии TPS системы составляет 700. В настоящее время у меня есть 2 подхода,
- У меня есть одна лямбда, слушающая SQS (где подписаны события) и извлекает данные из источника и создает записи индекса для каждого клиента и помещаетиндексы в БД параллельно.
- Или, в вышеупомянутом подходе, время выполнения будет больше - поскольку параллельные вычисления зависят от общего количества доступных ядер.Итак, есть небольшая лямбда, которая дублирует входящие события с небольшим количеством клиентов (скажем, для 1 входящего сообщения, эта лямбда создаст 10 новых сообщений с 10 именами клиентов в ней) и отправит ее в другой SQS.А другая лямбда, подписавшаяся на нее, будет прослушивать эти сообщения и создавать записи индекса для каждого клиента и помещать индексы в БД параллельно.
Итак, оба подхода имеют несколько недостатков,
- Время выполнения выше, но меньше лямбда-вызовов.Более высокая память и более высокая загрузка ЦП.
- Меньше времени выполнения, но больше лямбда-вызовов.Меньше памяти и умеренно высокая загрузка ЦП.
Итак, я хочу иметь экономически эффективные решения, в которых я могу добиться максимального разветвления компонента индексации для построения индексов для нескольких клиентов.Кроме того, какой максимальной степени распараллеливания я могу достичь для каждого экземпляра AWS-лямбды?