Тема |
Описание |
Доп. |
|---|---|---|
RPC (Remote Procedure Call) — это технология, позволяющая вызывать функции или методы, которые фактически выполняются на другом процессе, машине или даже в другой сети, так, как будто это локальный вызов. То есть RPC скрывает детали сетевого взаимодействия (сериализацию, десериализацию, транспорт), а программист работает с интерфейсом, близким к обычным функциям. Примеры:
|
||
Когда использовать
Система обмена сообщениями gRPC использует вместо JSON бинарный формат Protobuf, благодаря чему размер сообщений становится меньше и увеличивается пропускная способность — скорость передачи в конечном итоге возрастает в 7-10 раз. |
||
Микросервисы Все чаще крупные проекты переходят на микросервисную архитектуру, все большее число компаний принимают gRPC в качестве стандарта передачи данных вместо REST API. Клиент вызывает удаленную процедуру, сериализует параметры и дополнительную информацию в сообщении, после чего шлет сообщение на сервер. Приняв данные, сервер производит их десериализацию, выполняет запрошенную операцию и шлет результат обратно клиенту. Мощности компьютера нельзя увеличивать до бесконечности и в какой-то момент достигается потолок, ограничивающий вертикальное масштабирование проекта. В качестве решения этой проблемы используют деление монолитного приложения на отдельные, небольшие, слабо связанные маленькие приложения — микросервисы. Каждый такой микросервис – это автономное приложение. Микросервисы общаются друг с другом и, взаимодействуют, выполняя функции итогового приложения. Если в монолитной архитектуре пользователь обращается к приложению и получает ответ, то, в случае с микросервисной архитектурой он обращается к микросервису. Этот микросервис, в свою очередь, обращается к другому микросервису, тот, например, может обратиться к третьему микросервису или к базе данных и т.д. Микросервисы обмениваются информацией посредством вызовов их REST API. Неудобство REST API состоит в том, что формат данных, используемый для пересылки данных – не бинарный, а текстовый. Такой формат удобен для визуального ознакомления с содержимым, однако, он никак не оптимизируется, не сжимается при передаче. Соответственно размер передаваемого сообщения получается большой и время на его отсылку увеличивается. Если бы данные были бинарными, мы бы могли применить к ним сжатие. Недостаток REST API состоит в том, что транспортный протокол, применяемый для передачи данных – HTTP 1.1. Поэтому организация стриминга потоковых данных затруднена. Система обмена сообщениями gRPC использует вместо JSON бинарный формат Protobuf, благодаря чему размер сообщений становится меньше и увеличивается пропускная способность — скорость передачи в конечном итоге возрастает в 7-10 раз. Этот формат поддерживает строгую типизацию. Бинарный формат, используемый в gRPC транслируется через протокол HTTP 2, благодаря чему скорость обмена данными (согласно отдельным тестам) увеличивается на 14%. В HTTP 2 хорошо реализованы потоки данных (можно делать запрос к серверу и получать от него поток данных по каналу клиент-сервер). Клиент и сервер обязаны хранить один и тот же proto файл, он действует как посреднический контракт для клиента для вызова любых доступных функций с сервера. |
||
tonic (gRPC)
|
|
|
tarpc
|
|
|
jsonrpsee (JSON-RPC)
|
||
hRPC (Human-readable RPC) — это RPC-фреймворк для Rust (и не только), который позиционирует себя как более простой и "человеческий" аналог gRPC. Он старается объединить плюсы gRPC и REST:
Основная идея: Вы пишете интерфейсы прямо в Rust (или другом языке с поддержкой hRPC), и они превращаются в RPC-сервисы, доступные через HTTP/2. Особенности hRPC
Когда использовать hRPC
|
||
Пример кода hRPC |
Клиент может вызвать
|
|
WebRTCWebRTC — это набор протоколов и API для реального времени (Real-Time Communication):
|
Через crate
|
|
Основные сценарии применения WebRTC |
1. Аудио- и видеозвонки
Особенность: передача идёт P2P, но часто через TURN-серверы (если клиенты за NAT). 2. P2P-чаты и обмен файлами
3. Игры и реальное время
4. Облачные и P2P-приложения
|
|
Связь WebRTC и RPC |
Пример сценария
В итоге:
Когда это актуально
|
|