Как да изградите мощни бек-ендове лесно с Serverless

Изграждане на процесор за изображения на AWS Lambda

Среща с Джеф Бар в AWS re: Invent

Започнах да работя като софтуерен разработчик на пълен работен ден през 2012 г. Вие го изграждате, управлявате го като основна ценност на нашия малък екип. Но, аз не знаех нищо за сървърите. Скоро трябваше да науча за подмрежи, балансиращи натоварвания, клъстери от база данни и други, за да поддържам кода, който написах. За мен създаването на софтуер, който решава проблеми, е забавно, а управлението на сървъри не е.

В началото на 2016 г. присъствах на среща с AWS. На тази среща Сам Kroonenburg говори за това как е създал облачен гуру с архитектура без сървър на AWS. Това ме взриви. Идеята за използване на AWS Lambda за изграждане на уеб приложения без управление или мащабиране на сървъри ме закачи.

Оттогава отделям свободното си време за учене и блогове за Serverless. Шест месеца след тази среща Сам ми предложи работа и сега изграждам без сървър системи за пълно работно време за A Cloud Guru.

Обучението за Serverless оказа голямо влияние върху начина, по който изграждам софтуер. Serverless натрупа много скорост и зрялост през 2016 г. Може би сте я гледали миналата година, но не сте я пробвали или може би никога не сте чували за нея. Какъвто и да е случаят, никога не е имало по-добър момент да започнете.

Какво е (и не е) без сървър?

Все още има много дебати за това какво е Serverless. В момента отговорът зависи от това, кого питате. Има два въпроса, какво е продукт без сървър и какво е архитектура без сървър.

Продуктът без сървър се управлява изцяло с мащабиране и гранулиране. Продуктите включват, но не се ограничават до:

  • Изчислете: AWS Lambda, Azure функции и WebTask.
  • Съхранение: S3, DynamoDB и Firebase
  • Удостоверяване: Cognito, Auth0
  • Търсене: Алголия

Забележка Не включих никаква платформа като услуга (PaaS) продукти като Amazon RDS, Heroku или Google App Engine. За тези услуги плащате на час и мащаб, като добавяте или премахвате базовите сървъри. Може да не се налага да управлявате сървъри, но все пак трябва да мислите за тях.

И така, какво е архитектура без сървър? Дефинирам архитектура без сървър като:

Система, управлявана от събития, която използва FaaS и други напълно управлявани услуги за логика и постоянство.

Ако все още се почешете по главата, не се притеснявайте. Това ще има повече смисъл, след като видите пример.

Първи стъпки с Serverless

Най-добрият начин да се научите е да практикувате. Нека се преструваме, че клиент ме помоли да изобретявам анонимни лица на изображения.

Вместо да замъглява лице, клиентът ми иска да замени всяко лице с емоджи. Емоджи трябва да отразява емоцията на това лице.

За да доставя тази услуга, трябва да:

  1. Разрешете на моя клиент да качва изображения
  2. Разпознавайте лицата във всяко изображение
  3. Определете емоцията на всяко лице
  4. Заменете всяко лице с емоджи
  5. Съхранявайте редактираното изображение

Вместо сам да го изграждам, ще използвам архитектура без сървър на AWS.

Без сървърни архитектури

Имам три услуги, които ми трябват, за да развия тази система.

  • Amazon S3: съхранение на файлове, базирани на мащабиран обект
  • AWS Lambda: изчисление без сървър
  • Амазонско възстановяване: анализ на изображението

С помощта на тези услуги разработих следната архитектура.

Архитектура без сървър

Да се ​​върнем към дефиницията на архитектура без сървър.

Система, управлявана от събития, която използва FaaS и други напълно управлявани услуги за логика и постоянство.

Архитектурата, която съм проектирала, отговаря на това определение.

  1. Когато потребител качи файл, се произвежда събитие ObjectCreate и се извиква функция Lambda.
  2. Функцията Lambda призовава Amazon Rekogservation, за да открие лицата и емоциите на всяко лице в каченото изображение.
  3. Функцията Lambda обработва изображението и запазва изображението в Amazon S3

Простотата на този дизайн е това, което прави Serverless завладяващ.

Какви езици и инструменти мога да използвам

Ако искате да изградите тази система сами, трябва да създадете инфраструктура и код.

За да разработите кода, можете да използвате Node.js, Python, Java или C #. Има AWS SDK за всеки от тези езици. Ако езикът ви липсва, гледайте как езиковата поддръжка ще нарасне през 2017 г.

За да създадете инфраструктура има няколко възможности. Първият вариант е да използвате конзолата AWS. Това е добър начин да започнете, докато се учите. Но това не се препоръчва за производствени услуги. Другият вариант е да развиете вашата инфраструктура като код. Два добри инструмента за това са CloudFormation или Terraform.

За да опростите опита си, препоръчвам да използвате инструмент, който ви помага да разгърнете инфраструктурата и кода си. Serverless Framework е инструментът, който препоръчвам да използвате. Това е проект с отворен код с голяма общност от сътрудници (включително и аз). Други алтернативи включват Apex, Claudia, Sparta и др.

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

Виждали сте архитектурата, нека разгледаме някакъв код. Ще използвам Serverless Framework и NodeJs.

Първата стъпка е да се дефинира инфраструктурата с помощта на Serverless Framework. За целта създадох нова услуга.

създаване без сървър --template aws-nodejs - път емотикон-размяна на лица

инфраструктура

Това създава папка, съдържаща конфигурационен файл, наречен serverless.yml. Функциите и инфраструктурата за моята услуга са дефинирани тук.

Тази конфигурация създава функцията Lambda за моето лице и W3 кофа. Функцията Lambda ще бъде извикана, когато обект е създаден в качването / папката.

код

Всяка функция Lambda има манипулатор, който служи като входна точка. Зададох манипулатора за функцията си Lambda на src / facewap.handler в serverless.yml. Това е комбинация от файлов път src / facewap.js и функцията за извикване в този файлов манипулатор.

Всяка функция за обработка има три параметъра:

module.exports.handler = (събитие, контекст, обратно извикване) => {
   ...
   
   // Използвайте callback () и връщайте информация на обаждащия се.
}
  • Събитие: Данни, свързани със събитието. В този случай тя ще съдържа информация за файла, който е създаден в S3
  • Контекст: Ламбда информация за време на изпълнение
  • Обратно повикване: Нормален обратен сигнал за възли, който можете да използвате за връщане на грешка или резултат.

За моя проект функцията Lambda трябва да изпълни три задачи.

  1. Получаване на изображения от събитието S3
  2. Обадете се на API за възстановяване
  3. Обработете изображенията и запазете резултатите.

Можете да видите кода, който извиква Amazon Rekogservation и обработва изображенията на GitHub.

Последната стъпка е да разгърнете проекта и да го тествате. За да разгърна проекта, изпълних следната команда.

sls внедряване - стадий your_stage_name

След това качих изображения от Pexels на S3 и проверих резултатите.

Снимки от Pexels

Това беше наистина забавен проект за изграждане. Изграждането на проект като този е най-добрият начин да се научите. Това ще ви помогне да разберете архитектури, управлявани от събития и как да създавате системи без сървър.

Къде мога да науча повече?

Има много страхотни ресурси, за да научите повече за Serverless.

  • Блогове: Зона без сървър, Без сървър, Блог на облачен гуру
  • Книги: Архитектури без сървър на AWS, AWS Lambda в действие
  • Дискусии: Форум без сървър, Reddit
  • Видеоклипове: презентации без сървър, без сървър
  • Конференция: Остин ServerlessConf
  • Отслабване: без сървър-форум
  • Групи за запознанства: Проверете този списък или потърсете meetup.com
  • Курирани ресурси: Страхотни без сървър, без сървър ресурси

Надявам се постът да ви е вдъхновил да погледнете без сървър. Има много страхотни случаи за употреба, които да опитате. HTTP API, Chatbot или Alexa Skill са само няколко проекта, които трябва да опитате.

Ако имате въпроси относно този проект или като цяло без сървър, можете да се свържете с мен на Medium или Twitter. Ще провеждам семинар в ServerlessConf Austin, ако искате да се срещнете лично.

Hacker Noon е как хакерите започват следобедите си. Ние сме част от семейството на @AMI Сега приемаме заявления и се радваме да обсъдим възможностите за реклама и спонсорство.
Ако ви е харесала тази история, препоръчваме ви да прочетете нашите най-нови технологични истории и тенденциозни технологични истории. До следващия път не приемайте реалностите на света за даденост!