Может ли AWS Lambda использоваться в качестве бэкэнда для getstream.io? - PullRequest
1 голос
/ 17 февраля 2020

Я не нашел ни одной записи, связанной с этим топи c. Кажется естественным использовать Lambda в качестве бэкэнда gettream, но я не уверен, сильно ли это зависит от постоянных соединений или других архитектурных решений, которые исключают это. Это разумный подход? Кто-нибудь заставил это работать? Любой совет?

Ответы [ 2 ]

1 голос
/ 18 февраля 2020

Да, вы можете использовать AWS Lambda в качестве бэкэнда и интегрировать там с Stream API.

Создание целого приложения на Lambda напрямую будет очень сложным и потребует написания большого количества кода платформы для обеспечить базовую c организацию и структуру вашего проекта.

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

Бессерверный - хороший вариант для этого: https://serverless.com/framework/docs/providers/aws/guide/intro/

0 голосов
/ 18 февраля 2020

Хотя вы можете создать весь веб-сайт только в Lambda, вы должны учесть следующее:

  • Lambda позади API-шлюза имеет ограничение времени ожидания 30 секунд и ограничение размера полезной нагрузки (как полученные, так и отправлено) 6 МБ. Хотя в большинстве случаев это нормально, если у вас есть действительно большие операции или вам нужно отправить действительно большие данные (например, изображения с высоким разрешением), вы не можете сделать это с помощью этого подхода, но вам нужно подумать о что-то еще (например, вы можете отправить SNS в другую лямбда-функцию с более высоким тайм-аутом, которая может делать все это асинхронно, а затем отправлять результат клиенту, когда это будет сделано, предполагая, что клиент способен принимать события)
  • У Lambda холодные запуски, что в терминах замедляет ваши API, когда клиент вызывает их впервые за короткое время. Время холодного старта зависит от языка, на котором вы делаете свои лямбды, так что вы можете подумать и об этом. Если вы используете C# или Java для своих Lambdas, то это, вероятно, не лучший выбор. С этой точки зрения, Node.JS и Python, похоже, являются лучшими вариантами роста с Golang. Вы можете найти больше об этом здесь . И, кстати, теперь вы можете указать Provisioned Throughput для вашей лямбды, которая направлена ​​на устранение проблемы холодного старта, но я еще не использовал ее, поэтому не могу сказать, есть ли какая-либо разница (но я обязательно есть)
  • Если все сделано правильно, вы в конечном итоге будете управлять сотнями функций Lambda, тогда как со стандартным контейнером Docker в ECS вы будете управлять несколькими API с несколькими конечными точками. Этот момент не следует недооценивать, так как с одной стороны это облегчит изменения в будущем, так как лямбда будет небольшой, и вы легко найдете ошибку и исправите ее, но с другой стороны вам придется переходить через эти функции, который, если вы не знаете точно, какая лямбда отвечает за то, что может быть долгим процессом
  • Насколько я знаю, Lambda не может обрабатывать сессии. Поскольку через некоторое время контейнер Lambda удаляется, вы не можете хранить ни одного сеанса внутри самой Lambda. Вы всегда будете нуждаться в структуре для хранения сеанса, чтобы ее можно было разделить между несколькими вызовами Lambda, такими как некоторые записи в таблице DynamoDB или что-то еще, но это означает, что вы должны написать код для этого, находясь в классе. c API (как. NET Core one) все это обрабатывается самим языком, и вам нужно только сохранять или извлекать элементы из сеанса (в большинстве случаев)

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

...