Что такое безсерверный?

42

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

Что такое "безсерверный"? Где можно узнать больше об этом и как это можно использовать сегодня?

Евгений
источник
Безсерверные вычисления - это «меньше сервера», так как «куриный бургер» - веганский, так как вы лично не встречались с курицей
Сай Адданки

Ответы:

43

Статья в Википедии о безсерверных вычислениях дает достойное введение в тему:

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

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

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

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

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

  • Серверное программное и аппаратное обеспечение больше не должно управляться разработчиком - облачный провайдер справляется с этим. Если вы когда-нибудь использовали что-то вроде Arch на сервере, вы будете знать, как легко уничтожить критический пакет и сломать все!

  • Это позволяет разработчикам сосредоточиться на том, что они умеют делать - в коде . Большинство разработчиков, вероятно, не будут хороши как в серверной инфраструктуре, так и в программировании - безсерверное решение просто устраняет одну проблему.

Aurora0001
источник
«не нужно вообще заботиться о серверной инфраструктуре». Это действительно хорошая вещь, потому что, по моему опыту, слишком много из них уже / не / с катастрофическими последствиями!
Фил В.
15

У Мартина Фаулера хороший обзор:
https://martinfowler.com/articles/serverless.html

TL; DR
«Безсерверный» описывает разработку приложений и архитектуру, которая разрабатывает приложения, в которых инфраструктура эфемерна , то есть они, как правило, основаны на контейнерах и могут «приходить и уходить» на основе механизма динамического масштабирования. Это предписывает использование архитектур без сохранения состояния, которые зависят от распределенных технологий (таких как хранилища ключей / значений).

Дейв Сверски
источник
2
Не только эфемерно, но и полностью абстрагировано. Во многих современных несерверных установках (таких как AWS EC2 ASG) инфраструктура также эфемерна; Экземпляр EC2 в ASG может быть прерван в любое время.
Адриан
14

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

Первое, что приходит на ум, - это одностраничное приложение javascript, которое использует локальное хранилище и хранится на чем-то вроде Amazon S # или Github Pages (или на любом статическом сайте - это всего лишь распространенные примеры). Представьте себе что-то наподобие приложения в стиле «todo» или «все готово», которое полностью работает в вашем браузере. Ваш браузер запускает службу, такую ​​как S3, для загрузки кода, и все элементы, которые вы храните, хранятся в локальном хранилище вашего браузера. Для этого нет сервера, который вы поддерживаете.

Второй экземпляр, немного более сложный (а также тот, который популяризировал термин «безсерверный»), использует сервис типа AWS Lambda. Позвольте мне объяснить это, представив решаемую проблему:

Много раз за свою карьеру я решал бизнес-проблему для клиента с помощью небольшого количества кода ruby, который выполнял периодическое извлечение, преобразование и загрузку (обычно написанную как задача rake). После этого я обычно автоматизирую это с помощью cron. Тогда возникает проблема: «Где мне разместить эту вещь, которая запускается раз в час?» Для некоторых клиентов мы создали бы сервер в их существующей инфраструктуре. Для других мы бы создали экземпляр EC2, даже если он простаивал в 99% случаев. В любом из этих случаев существует сервер, который требует инициализации, исправления, мониторинга, обновления и т. Д.

С помощью Amazon Lambda я могу взять эту задачу с граблями и запустить ее в своем сервисе как чистую «функцию». Я даже могу запланировать это. Этот клиент больше не будет нуждаться в части инфраструктуры для такой простой разовой работы.

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

Дэвид Бок
источник
Мой голос за пример из жизни в час, который обычно требовал EC2. Теперь вам просто нужна лямбда-функция!
HopeKing
10

Все отличные ответы уже. Я просматривал статью в блоге « Мышление без сервера - как новые подходы отвечают потребностям современной обработки данных в HighScalability», где я натолкнулся на это превосходное объяснение того, что означает отсутствие сервера:

Фраза «без сервера» не означает, что серверы больше не задействованы. Это просто означает, что разработчикам больше не нужно так много думать о них. Вычислительные ресурсы используются как сервисы без необходимости управлять физическими возможностями или ограничениями. Поставщики услуг все чаще берут на себя ответственность за управление серверами, хранилищами данных и другими инфраструктурными ресурсами ... Отсутствие серверов позволяет разработчикам переключать свое внимание с уровня сервера на уровень задач. Безсерверные решения позволяют разработчикам сосредоточиться на том, что их приложения или системы должны делать, устраняя сложность серверной инфраструктуры.

И еще одно извлечение уроков из моего личного опыта создания безсерверной инфраструктуры:

  • Безсерверные конвейеры данных не обязательно должны быть только в режиме реального времени. Можно создать эффективные серверные конвейеры пакетной обработки с помощью механизмов оповещения CloudWatch AWS, что позволяет отслеживать инструменты и создавать оповещения для (AWS) Lambda для вычислений.

Как, например,: хранить файлы в очереди AWS SQS. Как только количество сообщений в очереди достигнет 10, вызовите событие для Lambda.

Dawny33
источник
6

Помимо простого объяснения определения термина «безсерверный», происхождение термина и его история также дают некоторое представление о его значении. Концепция возникла с JAWS рамок по Остен Коллинз , который был позже переименован в бессерверном . Впервые я узнал об этом на сессии AWS re: Invent 2015 , которая может помочь в разработке концепции. Вот что на самом деле придумал термин «Безсерверный», который затем быстро распространился на другие облачные системы:

Иржи Клауда
источник