8.2.1 Обзор ГОСТ Р 70860—2023
Распространенной формой бессерверных вычислений является форма «функции как услуга» (FaaS). FaaS представляет собой форму бессерверных вычислений, в которой функциональные возможности, используемые потребителем облачной службы, заключаются в выполнении кода приложения потребителя в виде одной или нескольких функций, каждая из которых запускается по выбранному потребителем событию. FaaS также является разновидностью формы «вычисления как услуга» (CompaaS) согласно определению по ГОСТ ISO/IEC 17788.
FaaS может выполнять код клиентского приложения, написанный на одном или нескольких языках программирования. Все облачные сервисы FaaS поддерживают приложения, написанные на одном или нескольких языках программирования, включая, помимо прочего, С#, Go, Java™, JavaScript, РНР, Python, Ruby, Swift. FaaS поддерживает функциональные возможности платформы как услуги в отношении предоставления программного стека среды выполнения, необходимого для выполнения кода приложения. Таким образом, потребителю облачной службы не нужно развертывать и поддерживать программный стек среды выполнения. Как правило, FaaS не требует написания кода приложения потребителя облачной службы для использования какой-либо конкретной среды разработки приложений. Кроме того, FaaS организует работу приложения и программного стека среды выполнения по требованию для обслуживания любых событий, которые запускают приложение.
Цель FaaS — сделать инфраструктуру невидимой для разработчиков приложений и сервисов. При использовании FaaS базовые серверы, ВМ и (или) контейнеры невидимы для пользователя сервиса. Разработчик не только не имеет к ним доступа, но и не может получить его, поскольку они автоматически управляются поставщиком облачной службы как часть облачного сервиса.
Важным аспектом FaaS является то, что ресурсы потребляются только во время выполнения определенной функции. Обычно, когда приложение использует ВМ или контейнер в вычислительном облачном сервисе, каждый запущенный экземпляр ВМ или контейнера потребляет ресурсы непрерывно и независимо от того, выполняет ли он входящие запросы или нет. В случае с FaaS ресурсы не потребляются, когда обрабатываемые события отсутствуют. Это может снизить затраты потребителя облачной службы, особенно в том, что касается редко используемых функций. FaaS выделяет необходимые ресурсы (например, базовый контейнер), когда в отношении данной функции возникает событие.
Автоматизированное управление, обеспечиваемое FaaS, является основной отличительной особенностью, т. к. высокая масштабируемость обеспечивается в автоматическом режиме. Если частота возникновения событий для данной FaaS растет, то объем ресурсов, выделяемых соответствующей облачной службе для обработки этих событий, автоматически увеличивается, а когда частота возникновения событий снижается, они удаляются [из 8.2.1 Обзор ГОСТ Р 70860—2023]
8.2.2 Функции FaaS ГОСТ Р 70860—2023
Использование FaaS подразумевает написание одной или нескольких функций, где каждая функция — это часть программного кода, предназначенная для выполнения одной конкретной задачи. Именно из-за этой особенности программирования бессерверной среды выполнения эти облачные сервисы получили такое название — «функция как услуга» (FaaS). По сути, это серьезное изменение способа разработки приложений и сервисов, включая добавление отдельных принципов архитектуры микросервисов (см. раздел 9). Существуют определенные принципы, которые действуют в отношении функций и способа их выполнения.
Функции не имеют состояния, что означает, что все функции не сохраняют состояния, возникающие между их последовательными вызовами. Фактически это означает, что функции сами не хранят никаких данных. Если функции необходимо хранить данные и получать к ним доступ и время жизни этих данных превышает время одного вызова функции, то тогда функция интегрируется с одним или несколькими облачными сервисами хранения данных (см. раздел 12).
Каждая функция выполняется при наступлении некоторого события, где уведомление о событии является результатом некоторого изменения состояния, т. е. модель FaaS имеет соответствующую архитектуру, управляемую событиями, а это предполагает асинхронное поведение, связанное с отправкой и получением событий. Такой подход обеспечивает гораздо более высокую масштабируемость и устойчивость приложений, особенно если приложения реализованы на распределенных системах.
Функции ограничены по времени, т. е. они не могут выполняться дольше заданного времени, определяемого поставщиком облачной службы. Лимит времени зависит от конкретного предложения FaaS, но часто он не превышает нескольких минут. Таким образом, какие-либо длительные задачи не подходят для обработки в качестве функции.
С ограничением функций по времени связан и вопрос задержки запуска функций. Речь идет о количестве времени, которое необходимо FaaS, чтобы при возникновении события создать работающий экземпляр функции. Это может быть либо холодный запуск, когда новый экземпляр должен быть запущен с нуля, либо горячий запуск, когда FaaS может повторно использовать экземпляр из предыдущего события. Первый вариант имеет гораздо большую задержку, чем второй. Холодный запуск гораздо более вероятен для функций, которые используются нечасто, поскольку FaaS обычно удаляет экземпляр, который не использовался на протяжении определенного (обычно короткого) периода времени.
Все функции доступны через API и могут быть вызваны либо клиентом, находящимся полностью вне облачной системы (например, приложением конечного пользователя, запущенным на клиентском устройстве), либо клиентом, который является частью общего приложения. Каждая функция может рассматриваться как микросервис, и, в свою очередь, каждая функция может зависеть от использования других микросервисов для реализации своих функциональных возможностей.
То, как события описываются в структурах данных, имеет важное значение для функций в рамках бессерверных сред выполнения. Поэтому были созданы спецификации, помогающие четко и согласованно описывать события.
Поскольку за один раз можно развернуть только одну функцию, бессерверный подход обеспечивает значительную гибкость в этом плане. Приложения могут создаваться по одной функции за раз, каждая из которых развертывается и масштабируется отдельно. Это также позволяет ускорить разработку и развертывание (нет необходимости ждать сборки приложения или сервиса, содержащего несколько функциональных возможностей). Каждая функциональная возможность может быть создана, протестирована и развернута отдельно [из 8.2.2 Функции FaaS ГОСТ Р 70860—2023]
8.2.3 Бессерверные фреймворки ГОСТ Р 70860—2023
Бессерверный фреймворк представляет собой инструмент, призванный оказать помощь при создании и развертывании функций для облачных сервисов FaaS. В частности, он поддерживает развертывание функций в рамках разных предложений FaaS различных поставщиков облачных служб.
Как правило, сервисы FaaS являются собственностью поставщика облачной службы. Однако существуют и отдельные реализации FaaS на базе открытого исходного кода.
Для решения проблемы разработки функций для развертывания на любом из множества предложений FaaS поставщиков облачных служб были разработаны бессерверные фреймворки, которые позволяют разрабатывать функции, ориентированные на различные FaaS по требованию, учитывая различия между ними (особенно в отношении процессов загрузки и развертывания) [из 8.2.3 Бессерверные фреймворки ГОСТ Р 70860—2023]
8.2.4 Связь FaaS с микросервисами и контейнерами ГОСТ Р 70860—2023
FaaS подразумевает использование облачной архитектуры микросервисов для приложений. FaaS предусматривает использование «облачного» подхода к приложениям, который существенно отличается от «монолитных» приложений, где все функции содержатся в одном пакете.
Таким образом, использование FaaS и функций — это один из способов реализации архитектуры приложений на основе микросервисов, который требует использования контейнеров и связанных с ними CMS.
Однако существует возможность совместного использования FaaS с микросервисами, реализованными с помощью контейнеров (или с использованием ВМ). При этом функции будут вызывать микросервисы на основе контейнеров, а микросервисы на основе контейнеров будут вызывать функции FaaS по мере необходимости [из 8.2.4 Связь FaaS с микросервисами и контейнерами ГОСТ Р 70860—2023]