Мой двухлетний опыт работы в бессерверных микросерверах с AWS

и уроки, извлеченные из опыта

Я открыл для себя идею бессерверного бэкэнда еще в 2015 году на конференции AWS. Оглядываясь назад, я был всего лишь молодым разработчиком, стремящимся все это изучить и впитать в себя все, что было брошено в моем направлении.

Со временем мне также удалось убедить высшее руководство разрешить мне архитектуру перехода с настройки в стиле EC2 на бессерверную архитектуру, в которой используются Lamdba, API Gateway и S3. Денежная экономия была мгновенной, поскольку модуль оплаты изменился с почасовой оплаты на оплату за миллион звонков.

Вот несколько уроков, извлеченных из всего опыта.

Понимание JavaScript и Node.js имеет значение

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

Самое интересное в работе с AWS Lambda в качестве инструмента и сервиса для размещения вашего бессерверного кода заключается в том, что вы можете написать его на Nodejs (вместе с Python и Java). Однако есть несколько функций, доступных в JavaScript, которые еще не были перенесены в популярный серверный фреймворк.

Возможно, вам удастся написать часто используемую лямбда-функцию hello world и связать ее со шлюзом API, но все, что выходит за рамки этого, требует дополнительных знаний.

Фреймворки очень помогают

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

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

Бессерверная версия похожа на более изощренную версию виртуального хостинга

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

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

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

Обманывать легко, но не делай этого

Тот факт, что микросервисы невелики, не означает, что вы можете сокращать их количество, поскольку речь идет о качестве кода.

Принципы SOLID по-прежнему применяются. Наблюдайте за своим кодом с точки зрения сплоченности в сфере его влияния. Неряшливый код вносит свой вклад в серию специальных функций, которые превратятся в одну большую массу непонятного кода. Это будет только уменьшать выгоды от микросервисов и того, что они могут предложить. Сэкономленные вами затраты будут устранены в виде рефакторинга или переписывания.

Включите автоматизированные конвейеры в свой рабочий процесс с самого начала

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

Для AWS Code Pipeline может с этим справиться. Суть AWS в том, что если вы думаете, что вам что-то нужно, они, вероятно, предоставят вам это как услугу. Знание различных доступных сервисов также может дать вам представление о том, что вы можете делать вручную самостоятельно или делегировать (за небольшую плату) AWS.

Будьте осторожны с тем, кому вы даете учетные данные администратора

Очень легко просто дать кому-то учетные данные администратора. Однако это может быть очень опасно, если этот человек окажется неквалифицированным. Это похоже на предоставление root-доступа кому-то, что может в конечном итоге обойтись вам дороже, чем оно того стоит.

Узнайте, как использовать роли и группы безопасности IAM. На AWS доступно множество сервисов, при этом выполнение некоторых из них обходится дороже, чем других, например, очень больших инстансов EC2. Хотя использование бессерверного режима само по себе является минимальным по стоимости, ограничьте общие учетные данные только тем, что необходимо для обеспечения безопасности, защиты и защиты кошелька.

Не переборщите с архитектурой

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

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

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

Заключительные слова

За те 2 года, что я работал с бессерверными системами, компания в конечном итоге сократила с их помощью как минимум треть своих затрат на инфраструктуру.

В нашем случае установка без сервера намного эффективнее и эффективнее, чем запуск ваших собственных серверов для обслуживания API. Тогда возникает вопрос: если это так дешево, почему не все это делают?

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

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

Давайте оставаться на связи и присоединяйтесь к моему еженедельному потрясающему списку информационных бюллетеней в Интернете. Спасибо за внимание.

Афинья