Рубрики
Без рубрики

Введение в gRPC: почему, что, как?

Здравствуйте и добро пожаловать в ТЕХНИЧЕСКУЮ ШКОЛУ. В этом курсе мы собираемся узнать о gRPC и как им пользоваться… Помечено как grpc, новички, go, java.

Полный курс gRPC (Серия из 16 частей)

Здравствуйте и добро пожаловать в ТЕХНИЧЕСКУЮ ШКОЛУ. В этом курсе мы собираемся узнать о gRPC и как использовать его с буфером протокола для разработки приложения на Go и Java.

Вот ссылка на полный плейлист курса gRPC на Youtube Репозиторий Github: pcbook-go и pcbook-java Репозиторий Gitlab: pcbook-go и компьютерный ноутбук- Ява

Давайте начнем с этого простого вопроса: какова мотивация gRPC? Или в чем проблема, которую gRPC пытается решить?

Что ж, ответ – это общение.

Приложения написаны с использованием разных языков программирования. Например, бэкэнд может быть написан на Go, в то время как интерфейс, например, приложение для Android написано на Java, приложение для iOS написано на Swift. Так как же они разговаривают друг с другом?

Сегодняшняя тенденция – использование архитектуры микросервисов. Таким образом, даже на внутренней стороне у нас может быть множество сервисов, написанных на разных языках (например, Go, Python или Rust), в зависимости от потребностей бизнеса и технических ограничений.

Таким образом, для того, чтобы общаться друг с другом, все они должны согласовать набор контрактов API. Например: канал связи, механизм аутентификации, формат полезной нагрузки, модель данных и способы обработки ошибок.

Есть так много вещей, которые необходимо учитывать, и именно поэтому создание API действительно сложно.

Более того, мы хотим, чтобы коммуникация была эффективной, под которой я подразумеваю быструю и легкую. Вы знаете, количество обменных сообщений между микросервисами огромно. Таким образом, чем быстрее связь, тем лучше.

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

И последнее, но не менее важное: мы хотим, чтобы общение было простым. Давайте представим, что мы создаем систему, содержащую сотни, а может быть, и тысячи микросервисов. Мы определенно не хотим тратить большую часть времени на написание кодов только для того, чтобы они могли общаться друг с другом, верно?

То, что мы хотели бы иметь, – это своего рода фреймворк, позволяющий разработчикам сосредоточиться на реализации основной логики своих сервисов. И оставьте все остальное на усмотрение фреймворка.

И эта структура – не что иное, как gRPC.

gRPC – это высокопроизводительная, многофункциональная платформа RPC с открытым исходным кодом, первоначально разработанная Google, а теперь входящая в состав cloud native computing foundation (или CNCF), как и Kubernetes или Prometheus.

Хорошо, так что же означает g в gRPC? Сначала я подумал, что это Google (да, ты знаешь почему). Но на самом деле в каждом выпуске gRPC он обозначает разные вещи, такие как “хороший”, “зеленый”, “славный” и даже сам “gRPC”.

Вы можете ознакомиться с полным списком в эта ссылка .

Как насчет RPC? RPC означает удаленные вызовы процедур. Это протокол, который позволяет программе выполнять процедуру другой программы, расположенной на другом компьютере.

И что в этом удивительного, так это то, что разработчикам не нужно явно кодировать детали сетевого взаимодействия. Это автоматически обрабатывается базовой структурой.

Итак, в клиентском коде это выглядит так, как будто мы просто вызываем функцию кода сервера напрямую. И это работает, даже если коды на клиенте и сервере написаны на разных языках программирования. Как и в этом примере, код клиента написан на Go, а код сервера написан на Rust.

Так как же gRPC может это сделать? По сути, у клиента есть заглушка, которая предоставляет тот же метод (или функцию), что и сервер. Этот заглушка автоматически генерируется для вас gRPC.

Заглушка вызовет платформу gRPC под капотом для обмена информацией с сервером по сети.

И вуаля, волшебным образом все просто работает. Благодаря заглушкам клиенту и серверу теперь нужно заботиться только о реализации своей основной логики обслуживания.

Далее мы увидим, как создаются заглушки rpc с помощью буфера протокола.

Генерация кода является одной из наиболее важных функций gRPC.

Чтобы сгенерировать заглушки для сервера и клиента, нам сначала нужно написать контракт API, который включает описание сервисов и их сообщений полезной нагрузки в файле буфера протокола, который выглядит примерно так:

В этом файле определен метод Hello, который принимает запрос Hello в качестве входных данных и возвращает ответ Hello. Запрос на приветствие содержит только строковое имя, а ответ на приветствие содержит строковое приветствие.

Очень просто, не так ли? Мы узнаем гораздо более подробно об этом позже на практических занятиях с лекциями protobuf.

Из этого протофайла коды заглушек сервера и клиента генерируются компилятором буфера протокола (или протоколом). В зависимости от языка программирования нам придется указать компилятору использовать для него правильный плагин rpc.

Сгенерированные коды для Rust и Go будут выглядеть примерно так:

Хорошо, итак, вы можете задаться вопросом, почему gRPC использует буфер протокола? Что ж, на то есть много причин.

Во-первых, это очень легко читать и понимать.

Во-вторых, это язык, совместимый с автоматической генерацией кода для многих языков

В-третьих, он представляет данные в двоичном формате, который имеет меньший размер, быстрее транспортируется и более эффективен для сериализации, чем некоторые текстовые форматы, такие как JSON или XML.

Он предоставляет строго типизированный контракт API между клиентом и сервером, с которым очень безопасно работать.

И в нем есть отличный набор правил для эволюции API для обеспечения обратной и прямой совместимости.

Звучит довольно потрясающе, не так ли? Но требуется ли буфер протокола для работы с gRPC?

Ответ – НЕТ. Вместо этого вы можете использовать плоские буферы Google или Microsoft bond. Но, на мой взгляд, буфер протокола уже является отличным выбором.

Он поддерживает множество популярных языков программирования, из которых 10 официально поддерживаются, где Go, Java, NodeJS реализованы чисто, а 7 других являются оболочками ядра gRPC C, а именно C++, C#, Objective-C, Python, Ruby, Dart и PHP.

Кроме того, существует множество других неофициальных библиотек для других языков, таких как Swift, Rust, TypeScript, Haskell и так далее.

Хорошо, теперь мы знаем, как gRPC генерирует коды для нас. Надеюсь, вам это покажется интересным.

В следующей лекции мы рассмотрим еще одно секретное оружие gRPC: HTTP/2. Тогда увидимся.

Если вам понравилась статья, пожалуйста подпишитесь на наш канал Youtube и следите за нами в Твиттере для получения дополнительных учебных пособий в будущем.

Если вы хотите присоединиться ко мне в моей нынешней удивительной команде в Voodoo, ознакомьтесь наши вакансии здесь . Удаленно или на месте в Париже/Амстердаме/Лондоне/Берлине/Барселоне при спонсорской поддержке visa.

Полный курс gRPC (Серия из 16 частей)

Оригинал: “https://dev.to/techschoolguru/introduction-to-grpc-why-what-how-4194”