Раскрывая революцию: исследование мира бессерверных вычислений

Раскрывая революцию: исследование мира бессерверных вычислений

Что такое Serverless?

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

Как работает Serverless?

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

До появления Serverless развертывание веб-приложения было громоздким процессом. Чтобы запустить наше приложение, нужно было сначала создать среду выполнения на стороне сервера. Это включало покупку виртуальных машин, инициализацию их окружения, установку необходимых зависимостей — причём максимально приближая их к нашей локальной среде разработки. Затем, чтобы сделать приложение доступным для пользователей, нужно было купить доменное имя, привязать его к IP-адресу виртуальной машины, настроить и запустить Nginx и, наконец, загрузить и запустить код приложения.

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

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

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

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

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

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

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

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

Точно так же ключ к преимуществам Serverless заключается в его быстром времени запуска. Как это достигается?

Почему Serverless может запускаться так быстро?

Холодный старт — изначально концепция из мира ПК, означающая процесс перезагрузки таблицы BIOS после выключения питания — по сути, загрузка с драйверов оборудования, что приводит к медленному запуску.

В современных облачных средах выключение питания физических серверов практически не встречается. В контексте Serverless холодный старт относится ко всему процессу от вызова функции до готовности экземпляра функции. Наша задача здесь — минимизировать время запуска, так как более короткое время запуска напрямую ведет к более высокой утилизации ресурсов. Текущие облачные провайдеры, используя оптимизации под конкретные языки, достигли среднего времени холодного старта от 100 до 700 миллисекунд. Благодаря JIT-компиляции (Just-In-Time) в JavaScript-движке Google, Node.js демонстрирует самые быстрые холодные старты.

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

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

Как организован Serverless?

Когда ваш экземпляр Serverless выполняется, он состоит как минимум из трех слоев: контейнер, среда выполнения и код функции.

Представьте контейнер как операционную систему (ОС). Для выполнения кода требуется взаимодействие с оборудованием, и контейнер имитирует ядро и информацию об оборудовании, позволяя вашему коду и среде выполнения работать внутри него. Информация о контейнере включает размер памяти, версию ОС, сведения о ЦП, переменные окружения и другое. В настоящее время реализации FaaS могут использовать контейнеры Docker, виртуальные машины (VM) или даже песочницы.

Среда выполнения представляет контекст, в котором выполняется ваша функция. Информация о среде выполнения включает используемый язык программирования и его версию, например Node.js v10 или Python 3.6; вызываемые объекты, такие как aliyun SDK; а также системную информацию, например переменные окружения.

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

Итоги

  1. Цепочка вызовов чистого Serverless-приложения состоит из трех основных компонентов: триггеры функций, службы функций и код функции. Они соответственно заменяют традиционные серверные операции: балансировку нагрузки и обратные прокси-серверы, серверы и среды выполнения приложений, а также развертывание кода приложения.
  2. Наиболее существенное различие между Serverless и традиционными платформами PaaS для хостинга приложений заключается в возможности Serverless-приложений масштабироваться до нуля и быстро запускаться при активации событиями. Функции на Node.js, например, могут достигать запуска и выполнения в течение 100 миллисекунд.
  3. Serverless по своей сути жертвует контролем пользователя и областью применения ради упрощения модели кода. Его слоистая структура дополнительно повышает утилизацию ресурсов, что является одной из главных причин его исключительно короткого времени холодного старта.

Novita AI запускает Serverless-сервис для наших пользователей. Присоединяйтесь к листу ожидания сейчас и начните свой бизнес с бессерверными вычислениями.

Novita AI — это единая облачная платформа, которая расширяет ваши AI-амбиции. Интегрированные API, Serverless, GPU-инстансы — экономичные инструменты, которые вам нужны. Устраните инфраструктурные заботы, начните бесплатно и воплотите свою AI-идею в реальность.

Рекомендуемое чтение

Раскрывая возможности PyTorch

Как развернуть Llama3.1 405B с помощью Novita AI