Обложка: Почему вам стоит выбрать gRPC для своего следующего проекта

Почему вам стоит выбрать gRPC для своего следующего проекта

REST — это мейнстрим и стандартный выбор при проектировании API, особенно когда речь идет о микросервисных приложениях. Но для определённого набора сценариев использования важную роль может играть модель gRPC.

Это архитектура RPC с открытым исходным кодом, разработанная Google для обеспечения высокоскоростной связи между микросервисами. Создание gRPC (удалённый вызов процедур Google) преследовало основную цель — ускорение передачи данных между сервисами.  Для обмена сообщениями модель использует Protobuf, высокоэффективный формат обмена сообщениями с высокой степенью упаковки для сериализации структурированных данных. Благодаря этому gRPC справляется с проблемами передачи больших объёмов данных.

Почему gRPC?

gRPC построен на основе HTTP/2 вместо HTTP 1.1. И это даёт несколько преимуществ перед классическим REST. Используя эту модель, мы можем работать с клиент-серверными архитектурами. То есть теперь клиент может открывать соединение, в которое будет непрерывно слать сообщения. В зависимости от бизнес-логики сервер может дождаться получения всех сообщений и обработать их или обрабатывать каждое сообщение клиента.

Кроме того, стрим может быть открыт на стороне сервера. Клиент посылает запрос на сервер, а тот возвращает поток ответов и отправляет сообщение о его завершении. Ещё можно создать двунаправленный поток, в котором клиент и сервер будут передавать друг другу данные без особого порядка.

Также в gRPC существует встроенная кодогенерация — нет необходимости подключать сторонние библиотеки и изобретать костыли. Всё идет из коробки. Система поддерживает множество языков и можно достаточно быстро сгенерировать клиент, например, на С# и сервер на Java.

Согласно широко цитируемым тестам, опубликованным Руваном Фернандо, соединения gRPC API значительно быстрее, чем соединения REST API — в 7-10 раз.

Но, конечно, не всё идеально. Для написания и настаивания клиента или сервера на gRPC потребуется намного больше времени. Из-за того, что модель не используется повсеместно, доступно не так много фреймворков и документации для его изучения и настройки. И куда меньше ответов на всеми любимом StackOverflow.

Когда стоит выбрать gRPC?

Так как REST используется повсеместно, то использовать gRPC со сторонними сервисами будет достаточно сложно. Придётся убедить другую команду также использовать его. Но если у вас есть ограничения по трафику и пропускной способности сети или, например, вы делаете внутреннее взаимодействие между сервисами, где важна скорость, то эта модель будет отличным выбором.

А какие плюсы gRPC вы знаете?