Главная

Что на самом деле означают бессерверные технологии.

По правде говоря, это всё те же серверы.

Поделиться:
 

2+

Достаточно модное слово “бессерверный” часто вводит в заблуждение. 

Если вы наберете в поисковике словосочетание “бессерверные вычисления”, то найдете следующее определение в Википедии:

“Бессерверные вычисления — это модель облачных вычислений, в которой платформа динамически распределяет вычислительные мощности. Ценообразование основывается именно на фактическом объеме ресурсов, потребляемых приложением, а не на заранее приобретенных единицах мощности.[1] В этом случае вычисление предоставляется пользователю как услуга.”

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

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

Cloudflare, один из провайдеров бессерверных вычислений, создал отличный график, показывающий то, как использование подобной платформы может сэкономить вам деньги, и каким образом происходит масштабирование:

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

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

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

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

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

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

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

Вот откуда происходит название «бессерверный». Вы, как пользователь серверной мощности, не должны думать о серверах, которые работают за кулисами. Но они там есть!

Итак, в чем подвох?

Почему бессерверные вычисления не применяют повсеместно? Казалось бы, все выиграют, если сервер не будет простаивать.

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

Бессерверные провайдеры, они на слуху и многим известны, это такие сервисы, как AWS Lambda, Cloudflare, Azure и Google Cloud, — все также масштабируются вертикально и выделяют контейнеры для данных, которые распределяются одинаково. Иногда они имеют серверы, которые вовсе не используются. И кто-то все равно должен платить за них, независимо от того, задействованы они или нет.

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

В действительности, бессерверные алгоритмы просто перекладывают задачу механизма вычислений на провайдера. А что, если провайдер не справляется с поставленными задачами? И не забывайте, что именно вы платите за разработку алгоритмов и инфраструктуры. Это означает, что для хранения дополнительных объемов вы можете в конечном итоге заплатить намного больше.

Помните: провайдеры ведут бизнес, коммерция здесь повсюду.

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

Многие провайдеры сервисов с разработкой бэк-энд (Google Maps API и Firebase – пару примеров, которые я использовал) применяют модель “платите по факту потребления”. В этом случае для небольших рабочих нагрузок стоимость выходит намного меньше, чем создание собственного сервера. Данный случай обращения к провайдеру оправдан, но когда вы увеличиваете свою рабочую нагрузку (ваш бизнес растет), стоимость может оказаться намного больше, чем собственная настройка. Имейте это в виду и по мере необходимости используйте специальные калькуляторы.

Что происходит за кулисами?

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

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

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

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

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

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

Переход на бессерверные вычисления

Хочется верить, что бессерверные вычисления могут стать идеальным решением. Я и многие другие люди слишком много беспокоимся о том, будет ли наша система масштабироваться.

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

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

И помните – при бессерверных вычислениях серверы все же используются! 

Спасибо за то, что прочитали статью.

2+