Статьи

AWS Lambda для разработчиков без серверов Java: что для вас?

Как безсерверные вычисления могут помочь вашей производственной инфраструктуре?

Архитектура безсерверных вычислений привлекает к себе внимание в последние несколько лет, поскольку она сосредоточена на одном из основных компонентов приложения: серверах. Эта архитектура использует другой подход.

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

Новая одежда Облака

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

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

Введите AWS Lambda

Впервые эта модель была представлена ​​Amazon как AWS Lambda в 2014 году. Компания была первой, предложившей безсерверный сервис в составе пакета Amazon Web Services.

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

Другими словами, основной рабочий процесс остается прежним: написать код, загрузить его на сервер для запуска и устранить проблемы со временем ответа, операциями и так далее.

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

Наряду с FaaS, серверная архитектура также называется Backend as a Service (BaaS), которая устраняет значительную часть накладных расходов на администрирование базы данных и обеспечивает авторизацию для разных пользователей и уровней.

Тим Вагнер, генеральный директор AWS Lambda, поделился диаграммой, которая иллюстрирует компоненты и их соединения: лямбда-функция в качестве вычислительного ресурса («бэкэнд») и мобильное приложение, которое подключается непосредственно к нему, плюс Amazon API Gateway для предоставления конечной точки HTTP для статического сайта Amazon S3:

Serverless-Architecture-схема

Диаграмма безсерверной архитектуры. Источник: Амазонка

Забота о вашем коде

Основная цель AWS Lambda — позволить разработчикам создавать небольшие, по требованию и реагирующие на события приложения простым способом. Он работает для вас и управляет «вычислительным парком», который балансирует память, процессор, сеть, применяет исправления безопасности, отслеживает состояние и любые другие необходимые ресурсы и действия.

Хороший способ взглянуть на это как на аутсорсинговую услугу. Мало того, что он «перемещает ИТ», он может даже помочь вам снизить эксплуатационные расходы, поскольку вы можете снизить расходы на инфраструктуру и даже сократить количество членов команды, необходимых для обслуживания серверов.

Говоря о затратах, вы платите только за то, что используете, исходя из количества запросов на ваши функции и времени выполнения вашего кода. Важно отметить, что уровень бесплатного пользования включает в себя 1 миллион бесплатных запросов в месяц и до 3,2 миллиона секунд вычислительного времени в месяц.

Расчет каждого запроса отсчитывается от того, когда он начинает выполняться как ответ на событие или вызов вызова. И это также включает в себя тесты с консоли.

Согласно Amazon, AWS Lambda является платформой для многих сценариев приложений. Но, конечно, здесь есть одна загвоздка: это утверждение относится только к языкам, поддерживаемым AWS Lambda: Node.js, Java и Python.

С другой стороны, построение функций AWS Lambda с помощью Java может быть выполнено с помощью уже известных вам инструментов, Maven или Gradle, и процесс сборки остается практически таким же.

Покажи мне код

Вызов функции AWS Lambda довольно прост после базовой настройки, и вы можете просмотреть полное объяснение здесь.

Он включает в себя определение POJO, которые представляют входной и выходной JSON, указание интерфейса, представляющего наш микросервис, и аннотирование его именем функции Lambda, которая вызывается при ее вызове.

Следующим шагом будет использование LambdaInvokerFactory для создания реализации этого интерфейса. Это позволит нам совершать звонки в службу, которая работает на Lambda. Затем мы можем просто вызвать наш сервис, используя этот прокси-объект, например … считать кошек:

1
2
3
4
5
CountCatsInput input = new CountCatsInput();
input.setBucketName("pictures-of-cats");
input.setKey("three-cute-cats");
  
int cats = catService.countCats(input).getCount();

Прежде чем ты начнешь…

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

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

Закрыт. Говоря о передаче всего на ваш облачный хост, использование AWS Lambda означает, что вы должны использовать AWS. Это может не быть проблемой сейчас, но она станет тем, если вы когда-нибудь задумаетесь о переходе в Google или просто использовании своих собственных серверов.

Гибкость. Вы не сможете войти в систему, чтобы вычислить экземпляры или настроить операционную систему или язык выполнения.

Безопасность. Использование третьей стороны также означает использование его безопасности. Мы не говорим, что AWS небезопасен, но вы полностью передаете эту ответственность третьей стороне, которая может быть не идеальной. ,

Мониторинг. С помощью AWS Lambda вы можете отслеживать и отлаживать свою систему только с помощью собственного инструмента CloudWatch. Хотя вы по-прежнему можете создавать собственные сигналы тревоги, просматривать частоту запросов и частоту ошибок — это довольно простой инструмент, и он может не помочь вам понять причину ваших проблем.

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

Последние мысли

Amazon начал движение без серверов с AWS Lambda, и в настоящее время другие компании, такие как Microsoft, Google, IBM и другие, предлагают эту модель, а также небольшие компании и стартапы.

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

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