Три основных варианта — это REST (HTTP/JSON), gRPC (HTTP/2 + Protobuf) и очереди сообщений (Kafka/RabbitMQ). REST и gRPC синхронны; очереди асинхронны.
Три основных варианта — это REST (HTTP/JSON), gRPC (HTTP/2 + Protobuf) и очереди сообщений (Kafka/RabbitMQ). REST и gRPC синхронны; очереди асинхронны.
| Аспект | REST | gRPC | Message Queue |
|---|
| Стиль | Синхр | Синхр | Асинхр |
| Payload | JSON (текст) | Protobuf (бинарный) | Любой (часто бинарный) |
| Производительность | Хорошая | Высокая | Высокая пропускная способность |
| Контракт | OpenAPI (слабый) | .proto (строгий) | Schema/event |
| Streaming | Ограниченный | Встроенный (bidi) | Pub/sub |
| Лучше всего для | Публичные API, браузеры | Внутренние критичные пути | Развязка, события |
service OrderService {
// strongly-typed RPC, generated client + server stubs
rpc GetOrder (OrderId) returns (Order);
}
message OrderId { string id = 1; }
message Order { string id = 1; double total = 2; }
Order Service ─publish→ [ "OrderPlaced" topic ] ─▶ Inventory
└────▶ Notifications
(producer doesn't know or wait for consumers)
Использование синхронного gRPC/REST везде пересоздаёт плотную связанность; использование асинхронного для незамедлительного чтения пользователя добавляет ненужную задержку.
Выбор транспорта устанавливает границы связанности и производительности для каждого взаимодействия, поэтому выбор для каждого варианта использования — а не глобально — это то, что поддерживает систему одновременно быстрой и устойчивой.
Зрелые системы намеренно комбинируют все три: gRPC на внутренних критичных путях, REST на границе и очереди для рабочих процессов.
Библиотека вопросов для IT-собеседований с подробными ответами — от Junior до Senior.
Поддержать