RPC (Remote Procedure Call) – это мощная платформа для работы с удаленными вызовами процедур. RPC позволяют вам писать код так, как будто он будет выполняться на локальном компьютере, хотя на самом деле вызов происходит между двумя разными машинами. Другими словами, RPC обеспечивает связь между удаленными сервисами, когда сервисы развертываются на разных серверах в рамках микросервисной архитектуры. С точки зрения пользователя это выглядит как локальный вызов функции.
Что же происходит под капотом gRPC:
Шаг 1. Клиент нажимает на кнопку «Оплатить» в интернет-магазине, выполняется вызов REST. Тело запроса обычно имеет формат JSON.
Шаги 2–4. Сервис заказов (клиент gRPC) получает вызов REST, преобразует его и выполняет вызов RPC в платежный сервис. gPRC кодирует клиентский запрос в двоичный формат (данный механизм позволяют значительно повысить производительность при передачи по сети в сравнении с REST API, который просто отправляет строки JSON в виде байтов, по некоторым данным из за этого gRPC в 5 раз быстрее, чем JSON) и отправляет его на транспортный уровень.
Шаг 5. gRPC отправляет пакеты по сети через HTTP/2 (это одна из важных причин, почему gRPC может работать так хорошо).
Шаги 6–8: Платежный сервис (сервер gRPC) получает пакеты из сети, декодирует их и вызывает серверное приложение.
Шаги 9–11. Результат возвращается серверным приложением, кодируется и отправляется на транспортный уровень.
Шаги 12–14: Сервис заказов получает пакеты, декодирует их и отправляет результат клиентскому приложению.
Заказ клиента успешно оплачен!