Вопрос или проблема
В последние дни вокруг безсерверных вычислений существует много шума, и я пытаюсь понять, в чем основное отличие этой технологии от удаленного вызова процедур?
Насколько я понимаю, это одно и то же. Вы вызываете метод или функцию на чужой машине.
В основном, да, это одно и то же. Вы используете некоторые другие ресурсы так, как описали их владельцы.
RPC — это один из протоколов, с помощью которых вы можете получать доступ к удалённым ресурсам, определенным в RFC 1831. Другим протоколом является, например, SOAP. В общем, RPC — это довольно старая технология, этот RFC был опубликован в 1995 году.
FaaS — это «бизнес-термин», используемый для «ребрендинга» таких старых технологий, как RPC и удаленные вызовы в целом, поскольку сегодня люди и компании готовы покупать всё как услугу. FaaS, в общем, может использовать любой протокол, они даже могут описать свой собственный.
Использование зависит от ваших нужд. Если вам нужно просто связать два ваших сервиса или подготовить API для интеграции с программным обеспечением третьих сторон, используйте RPC или какой-либо другой стандарт.
Это технические термины в разных областях, и они не исключают друг друга.
FaaS — это бизнес-модель, которую облачные поставщики предоставляют своим клиентам;
RPC — это шаблон проектирования распределенных вычислений, что делает его более обобщенной концепцией.
FaaS (как и большинство облачных продуктов) становится популярным по нескольким причинам:
- Пользователям услуг не нужно вообще управлять инфраструктурой.
- Пользователям услуг гарантируется высокая доступность на основе Соглашения об уровне обслуживания от облачного поставщика.
- Инструменты администрирования и анализа затрат от поставщика доступны. (например, вы можете предоставить бухгалтеру, менеджеру проекта или даже финансовому директору доступ к странице выставления счетов)
- Это обеспечивается технологиями контейнеризации во многих контекстах с сопутствующими (по сравнению со старомодной виртуализацией) преимуществами, такими как
- меньшие накладные расходы
- высокая воспроизводимость
- зрелые инструменты или рабочие процессы для CI/CD (например, тегирование, версионирование и развертывание образа Docker)
Во-первых, что касается “вызова метода или функции на чужой машине” — это работает только в том случае, если вызываемая вами служба является стандартной, которая находится на чужой машине, или код, написанный кем-то другим и запущенный на их машине. С безсерверным вычислением вы пишете код, который работает на флоте чужих машин.
Кроме того, для службы, которую вы создаете (ваша собственная служба), вам нужно управлять флотом серверов, на которых работает код, предоставляющий RPC-сервис. Код вызова должен знать имя хоста или IP-адрес, где работает RPC-сервис, и если это флот, вам нужно каким-то образом управлять распределением нагрузки. Вам нужно оценить, сколько серверов вам нужно в флоте, и платить за избыточные, когда вы их не используете, или решать проблемы, если его недостаточно. Вам нужно управлять процессом, который предоставляет RPC на серверном флоте. Вам нужно развернуть его на флоте в соответствии со стратегией непрерывной доставки.
С безсерверными вычислениями вы просто пишете код, добавляете триггер и позволяете службе «безсерверной» управлять и выделять ресурсы для его запуска. (Хорошо, вам все еще нужно управлять стратегией непрерывной доставки!)
Кроме того, RPC похож на только один тип безсерверного вызова: прямые, из безсерверного API. В отличие от этого, безсерверные вызовы могут быть связаны с событиями в облаке, такими как записи в базу данных или файловую систему или очередь данных. С RPC вам нужно написать код для обнаружения события и вызова RPC. С безсерверными технологиями вы просто настраиваете это и позволяете системе справляться с деталями.
Можно возразить по поводу термина «безсерверный», так как, конечно, есть сервер — но это сервер (или, на самом деле, флот серверов), о котором вам не нужно знать и думать, и в этом суть названия.
Для отличного объяснения смотрите http://martinfowler.com/articles/serverless.html
Ответ или решение
Практическое различие между RPC (удалённый вызов процедуры) и FaaS (функция как услуга) заключается в их архитектуре, модели управления ресурсами и способах использования.
-
Определение и возможности:
- RPC — это протокол, который позволяет программе вызывать функции на удалённых серверах так, как если бы они находились на локальной машине. Это означает, что при использовании RPC вам необходимо самостоятельно управлять инфраструктурой, на которой эти функции работают (например, управлять серверами, масштабированием, балансировкой нагрузки и т.д.).
- FaaS — это модель предоставления вычислительных ресурсов, в которой разработчики пишут отдельные функции, которые автоматически исполняются в ответ на события, и за них отвечает облачный провайдер. Вам не нужно управлять серверами, так как облачный провайдер обеспечивает необходимую инфраструктуру и масштабирование.
-
Управление ресурсами:
- При использовании RPC вы должны конфигурировать и поддерживать серверную инфраструктуру, что требует дополнительных затрат и времени, особенно в вопросах масштабируемости и доступности.
- FaaS позволяет вам сосредоточься на написании логики приложения, при этом вся инфраструктура управляется облачным провайдером, который сам следит за предоставлением ресурсов на основе реального использования функции.
-
Ассинхронность и событийное программирование:
- RPC обычно используется для синхронных вызовов, где клиент ожидает ответа от сервера, и может требовать значительных усилий для управления асинхронными вызовами.
- FaaS ориентирован на событийное программирование, что позволяет автоматически запускать функции в ответ на определённые события (например, изменения в базе данных, новое сообщение в очереди и т.д.), предоставляя большую гибкость и возможности для построения реактивных систем.
-
Платежная модель:
- В модели RPC вы часто платите за выделенные ресурсы, независимо от их использования. Это может означать дополнительные затраты, если ваши системы не всегда активно используют доступные серверы.
- С FaaS вы платите только за время выполнения функций, что может значительно снизить затраты, особенно для высоко переменных нагрузок.
В заключение, хотя оба подхода позволяют взаимодействовать с удалёнными сервисами, RPC требует активного управления инфраструктурой и ресурсами, в то время как FaaS предлагает возможность сосредоточиться исключительно на написании кода, делегируя все управленческие задачи провайдеру облачных услуг. Это делает FaaS более подходящим для современных приложений, которые требуют высокой гибкости и скорости разработки.