Рубрики
Uncategorized

Без сервера на Amazon: 2019 год в прошлом году мне придется иметь дело с виртуальными машинами?

Последние несколько месяцев я флиртул с Amazon API Gateway и AWS Lambda, AKA «Server Comput … Tagsed с без сервера, AWS, DevOps, HealthyDebate.

Последние несколько месяцев я флиртул с Amazon API Gateway и AWS Lambda, также известной как «Computing без серверов». Я из традиционного опыта. Мне очень удобно управлять собственными виртуальными машинами, балансировщиками нагрузки NGINX, лаками и т. Д. Этот стек обеспечивает удивительную производительность по отличной цене, но он также поставляется со значительным бременем OPS. У меня было несколько проектов, которые я хотел построить, но мысль о продолжающихся усилиях по OPS, чтобы сохранить их, сдерживала меня.

Без сервера кажется идеальным ответом, верно? Мы все можем представить себе чрезмерно энтузиатический разработчик Amazon Evangelist, говорящий о таких вещах:

  • Нет конфигурации сервера, просто сосредоточьтесь на своей бизнес -логике!
  • Мы обратимся к вам исправлениям!
  • Не беспокойтесь о масштабировании, чтобы справиться с шипами трафика, это «просто работает»!
  • Заплатите только тогда, когда ваш код работает!

И, может быть, вы слышали аргументы в отношении разработчиков старой школы:

  • Lambda Cold Starts означает, что пользователи разочаровывают непоследовательное время отклика.
  • Отладка приложения без сервера требует, чтобы нанести нащепление воздуховодов не менее 17 машин Rube Goldberg вместе, просто чтобы увидеть сообщение, информирующее вас о том, что ваши файлы журнала находятся в другом замке.
  • Инструмент, в целом, просто незрелый.

Итак, кто прав, гиперс или ненавистники? Для меня ответ «это зависит». (Я слышу, как вы стонуте отсюда. Извиняюсь.) Я пробовал без сервера для трех разных рабочих нагрузок:

  1. Работа Cron ( a+ , будет рекомендовать 100%)
  2. API ( b , вероятно, хорошая, но не всегда)
  3. Полный веб-сайт ( d , вероятно, не подходит)

Давайте погрузимся по каждому.

Хотя Крон Первоначально упомянутый 45-летний инструмент, изготовленный Bell Labs, он стал общим термином для любого инструмента, который позволяет планировать работу, чтобы происходить через регулярные промежутки времени.

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

В старые времена вы заплатили бы за сервер, чтобы быть на 24/7, вы бы как -то развернули свой код, и вы поставите немного загадочная запись в своем файле Crontab. Если все прошло хорошо, работа будет работать регулярно. Если работа не удалась, вы получите электронное письмо с его выводом. Может быть. Если вы настроили что -то не так, это может просто молча. И хотя ваша работа заняла всего 10 минут, вы все еще на крючке, чтобы заплатить за сервер за остальные 99,3% дня.

В модели без серверов вы пишете функцию AWS Lambda, а затем Настройте правило событий CloudWatch, которое запускает по расписанию Анкет

Под старой моделью вы заплатите 4,30 долл. США в месяц за самый дешевый экземпляр EC2, T3A.Nano, с дискором SSD 8 ГБ. Вы должны были бы сохранить его исправление и защитить от хакеров.

Под моделью без серверов вам понадобится электронная таблица, чтобы выяснить, что она стоит. Ваш счет Lambda имеет две части: фиксированная цена на запрос и переменная цена на за просмотр, которая проходит с тем, как долго ваша функция требуется для работы (округлена до ближайших 100 мс), и сколько памяти он использует. Lambda Prounge Page Имеет таблицу цен, которая заставит бухгалтера пройти кросс-глазами. Еще не смущен? Я тоже был, так что вот разрабатываемое уравнение того, что будет стоить этот пример:

31 запросы * ($ 0,0000002/запрос + 10 минут/запрос * 60 секунд/минута * 10 100 мс блоки/1 секунда * $ 0,000000834/100 мс для 512 МБ) = 0,16 долл. США.

Это 94% дешевле, и у вас практически нет традиционных обязанностей по дому!

Почему не будет Вы хотите без сервера?

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

Lambda также имеет ограниченное хранилище — вы можете хранить файлы в /TMP , Но это ничтожное 512 Мб. Если вам нужно много временного хранилища, это нет.

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

Регистрация может стать дорогим. Lambda использует журналы CloudWatch, которые взимают глазное устойчивое $ 0,50 за ГБ журналов. И это просто для их получения! Вы также заплатите за их хранение (хотя, к счастью, вы можете установить агрессивные политики удержания, чтобы минимизировать эту стоимость) и запросить их.

Мои конкретные задания Cron хорошо вписываются в эти ограничения. Мне понравился опыт использования Server для Cron, и должен был переключиться давно. A+

(Работа Cron была для Code 402 Crawls, сервис, который позволяет легко Поиск общего ползания . Бесстыдный заглушка: проверьте это!)

Следующий проект был вдохновлен моим опытом, пробуя без серверов. Я работал с Lambda, и это было здорово. Измените что -нибудь, упакуйте код, загрузите его, протестируйте его. Пену, промойте, повторите. А потом я переехал в квартиру с. Действительно. Медленный. Интернет Каждый раз, когда я загружал пакет 30-100 МБ для Lambda, Интернет был непригодным для нескольких минут. Это была краткосрочная аренда, поэтому обновление Интернета не было возможно. Конечно, я мог бы использовать AWS Lambda Layers или AWS Codebuild Анкет Но я стар. Я настроен на меня. У меня уже была система. И чтобы добавить оскорбление к травме, каждая загрузка была логически Очень маленький: Конечно, это был большой файл, но изменения из предыдущей версии были действительно маленькими.

Для каждой загрузки это произошло:

Но я знал, что что -то подобное должно быть возможно:

Спойлер: это был возможный!

За исключением того, что для того, чтобы сделать этот инструмент доступным для всех, мне нужно было не один лямбда, а 16! Если бы у меня не было лямбды в каждом регионе, где у пользователя может быть ведро S3, я должен был бы заплатить Вымогательная плата за передачу данных Amazon Анкет

И Я хотел иметь шлюз API в каждом регионе, чтобы я мог дать людям инструмент командной строки, который вызывает сервис с простым старым HTTP-запросом, вместо того, чтобы использовать AWS SDK и внедрял мои учетные данные в командную линию инструмент.

… И это когда стало очевидно, что поддержание этого вручную приведет к безумию. Вместо этого я написал AWS CloudFormation шаблон Это может скрепить все это, от регистрации доменных имен и запроса сертификатов SSL до настройки ведения журнала и публикации функции Lambda.

Итак, как развернуть это как система без сервера по сравнению с традиционным подходом на основе виртуальной машины?

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

Основным беспокойством было холодное время начала. Поскольку большинство людей не проводят свой код загрузки целого дня, для использования сервиса было довольно распространено, чтобы запустить холодный старт и его 3-4 секунду. Но это оказалось не иметь большого значения. В конце концов, альтернативой была несколько минут загрузки.

Я думаю, что для большого количества API применяются те же аргументы. Если API потребляется автоматическим процессом или заменяет очень медленную работу, минусы без сервера стоят выгоды. B

(Вы также можете использовать эту услугу. Я называю это s3patch, но я думаю об этом как rsync для S3 .)

Пьяный с мощностью, я подумал, что пришло время поставить Lambda на Ultimate Test: запустите целый пользовательский веб-сайт.

И вот где все стало необычным.

Помните, как я сказал, что я стар и застрял в моих отношениях? Хотя вы можете написать лямбдас, которые имеют Время холодного начала субсекунды , это требует очень тщательного ограничения сторонних зависимостей, которые вы используете. Между тем, я использовал ExpressJS. Мне нравится ExpressJS. Я хотел запустить свой сайт на ExpressJS, используя очень гладкий Apex Up Server Framework . Вот как выглядит развертывание:

     build: 6,307 files, 24 MB (1.868s)
     deploy: production (commit b957007) (59.374s)    
     endpoint: https://xxx.execute-api.us-east-1.amazonaws.com/production/

Ага. 6,307 Файлы, добавление до 24 МБ Анкет Холодный старт для этой лямбды надежно столкнулся с 7-8-секундным диапазоном, независимо от того, сколько ОЗУ ( И, таким образом, ЦП ) Я выделился на лямбду.

Подумайте о том, в последний раз, когда вы ждали 8 секунд, чтобы загрузить веб -страницу. Я не хочу закончить загрузку, я имею в виду 8 секунд, прежде чем появилось какое -либо доказательство жизни. Вы не можете, верно? Потому что ты никогда не будешь так долго оставаться.

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

Это было ужасно.

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

(Этот сайт был SketchViz, что делает его очень легко создавать Графические диаграммы с нарисованным вручную чувством . Дайте мне знать, как я это сделал — это чувствует себя быстро?)

Начиная с нуля, это инструменты, которые я нашел, действительно полезными при разработке без серверных приложений на AWS:

  • AWS CloudFormation , чтобы сделать все скромное создание ресурсов и проводку (когда это возможно, я предпочитаю использовать собственные инструменты поставщика, поэтому я избегал Terraform В Но я тоже слышал об этом хороших.)
  • Apex Up , для запуска приложения ExpressJS с нулевым трением (я также попробовал claudia.js В Но это было не так гладко. Без сервера Framework Звучит многообещающе, но я бы предпочел, чтобы он получил еще несколько лет боевых шрамов, прежде чем совершить это.)
  • S3Patch , для более быстрых итераций теста загрузки
  • видел для мониторинга журналов CloudWatch в режиме реального времени (конечно, при 9 МБ, он в 150 раз превышает почтенную команду хвоста, но кто-то должен держать производителей жесткого диска в бизнесе!)

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

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

Несмотря на это, независимо от стабильности экосистемы инструментов, Server-Bless-Blatform определенно готова к прайм-тайм. Начните думать о том, какие рабочие нагрузки у вас есть, это было бы хорошо для переезда в Lambda … но, возможно, на данный момент будет работать на виртуальных машинах и контейнерах.

А вы? Какие рабочие нагрузки вы работаете без сервера, и как это ушло? Будет ли 2019 год в прошлом году, когда вы управляете виртуальными машинами?

Оригинал: «https://dev.to/cldellow/serverless-on-amazon-is-2019-the-last-year-i-ll-have-to-deal-with-vms-2a7»