6 вопросов
gRPC - высокопроизводительный фреймворк для межсервисного взаимодействия поверх HTTP/2. Protocol Buffers, 4 типа взаимодействия (unary, streaming), deadline, interceptors.
gRPC построен поверх HTTP/2, что даёт мультиплексирование, сжатие заголовков и двунаправленный стриминг. Это позволяет gRPC эффективно работать с несколькими параллельными запросами в одном соединении.
Подробнее →Protocol Buffers - бинарный формат сериализации от Google. Данные описываются в .proto файлах (IDL), из которых генерируется код на Go, Java, Python. Компактнее и быстрее JSON, но не человекочитаемый.
Подробнее →gRPC поддерживает 4 типа: 1) Unary - один запрос, один ответ; 2) Server streaming - один запрос, поток ответов; 3) Client streaming - поток запросов, один ответ; 4) Bidirectional streaming - потоки в обе стороны одновременно.
Подробнее →gRPC быстрее REST: бинарный protobuf компактнее JSON, HTTP/2 мультиплексирует запросы, кодогенерация устраняет ручную сериализацию. gRPC хуже для браузеров (нужен grpc-web) и отладки (бинарный формат не читаем). REST лучше для публичных API.
Подробнее →Deadline задаёт абсолютное время, после которого вызов завершается с ошибкой DEADLINE_EXCEEDED. Распространяется через цепочку микросервисов. В Go передаётся через context.WithTimeout. Всегда устанавливайте deadline - иначе запрос может висеть вечно.
Подробнее →Interceptor в gRPC - аналог HTTP middleware. Выполняется до/после основного обработчика. Используется для логирования, метрик, авторизации, трейсинга. В Go есть UnaryInterceptor и StreamInterceptor. Можно объединять в цепочку.
Подробнее →