gRPC - альтернатива REST API от Google. Пишем gRPC сервер и клиент на Java и Python.

2021 ж. 23 Ақп.
130 616 Рет қаралды

Скачать PVS-Studio бесплатно: www.viva64.com/alishev
KZhead канал PVS-Studio: / pvsstudiotool
VK группа PVS-Studio: vk.com/pvsstudio_rus
pom.xml: gist.github.com/NeilAlishev/1...
Продвинутая Java - swiftbook.org/courses/415
Telegram: t.me/alishev_g
Реклама и сотрудничество: alishev.neil@gmail.com

Пікірлер
  • Telegram: t.me/alishev_g

    @alishevN@alishevN3 жыл бұрын
  • Хорошее видео. Позволило поверхностно разобраться в gRPC под стакан уиски. В свою очередь это позволило отдебажить gRPC сервак заказчика на котлине и понять почему он возвращал NPE в ответе. А то непонятно было, куда коней запрягать с этим gRPC. Ура, баг починен, автору респект.

    @wizardadeptus2044@wizardadeptus20442 жыл бұрын
  • Как всегда на высшем уровне.... все четко, понятно, без воды... Спасибо большое!!!

    @aliaksandraryzhyk4138@aliaksandraryzhyk41382 жыл бұрын
  • Офигенно! Как раз на проекте столкнулся с использованием микросервисов, которые общаются по gRPC. Помогло очень быстро въехать в тему. Спасибо большое!

    @eugenenazirov@eugenenazirov Жыл бұрын
  • Огромная благодарность, Наиль, за Ваш труд! Реально талант. Настолько доступным языком объяснять сложные вещи. Смотрел в других источниках про gRPC , почти ничего не понял. После этого видео сразу целостное понимание технологии, подхода и преимуществ. И сразу с примером👍Спасибо!)

    @user-vj7dc1ib2y@user-vj7dc1ib2y Жыл бұрын
  • Я наконец то разобрался с gRPC) Спасибо тебе за проделанную работу!

    @user-hv2vy3kd9f@user-hv2vy3kd9f2 жыл бұрын
  • Очень круто, отличное содержание, приятно смотреть. Спасибо за труд.

    @Skykvi@Skykvi Жыл бұрын
  • Очень качественная подача информации, спасибо вам огромное

    @psy667@psy6673 жыл бұрын
  • Блин чувак. Ты просто вангуешь. Я только сегодня такой думал: блин, вот бы урок про микросервисы замутил бы кто то годный. И тут уведомление. Просто бомба. Спасибо большое. От души. Я в этой жизни теперь точно не буду счастлив, пока лично не найду тебя не пожму руку. Спасибо

    @DairaGames@DairaGames3 жыл бұрын
    • :)

      @alishevN@alishevN3 жыл бұрын
  • Очень классный материал! Посмотрел до этого 10 роликов по gRPC и не мог разобраться все равно, теперь же все ясно, спасибо!

    @nikenuke@nikenuke7 ай бұрын
  • Наиль, благодарю! Всегда актуально и своевременно. Спасибо еще раз!

    @varchar21@varchar213 жыл бұрын
  • Шикарный урок - очень подробно и понятно. Спасибо!

    @ivanfedin9094@ivanfedin9094 Жыл бұрын
  • Так вот как ты выглядишь, Alishev. Этот видео формат очень крут!

    @olegrazin3429@olegrazin34293 жыл бұрын
  • Мне бы такого ментора как ты, спасибо большое добрый человек !

    @RG-em1nh@RG-em1nh3 жыл бұрын
  • Спасибо большое за ценный и подробный урок!

    @user-ty7dj4pm5b@user-ty7dj4pm5b Жыл бұрын
  • Мужик, спасибо за объяснение с практикой и сжато в тоже время. Я ваще не в теме был. Но честно, мужик. ctrl + A, ctrl + c - скопировать все содержимое файла. ctrl + A, ctrl + v - вставить в файл с полной заменой. Так сильно проще, чем крутить колесико.

    @user-jo5js4ug5b@user-jo5js4ug5b11 ай бұрын
  • Чел ты лучший, серьезно, мне кажется если бы ты объяснял кватновую механику или молекулярную физику, даже тут все было бы предельно понятно. Огромное тебе спасибо, благодаря тебе научился действительно многому

    @leonidvolobuev7096@leonidvolobuev70963 жыл бұрын
  • Прекрасный урок, большое спасибо!

    @user-rk1xr3cs8x@user-rk1xr3cs8x2 жыл бұрын
  • Наиль, у Вас талант объяснять сложные вещи простым языком. Например я очень долго искал и не мог найти понятное для себя руководство по Spring'у, пока не наткнулся на Ваш курс - он стал для меня единственным спасательным кругом. И то же самое с gRPC. Вам нужно собственную школу по программированию открывать для программистов, уже владеющих основами языков программирования, такой как бы продвинутый курс. Или стажировать людей за деньги где-то с оплатой в Вашу сторону. Первую работу найти очень тяжело, поэтому думаю на это реально должен быть спрос - новичкам дать возможность покупать коммерческий опыт, котирующийся у работодателей, за деньги.

    @user-mk2xy9py8s@user-mk2xy9py8s7 ай бұрын
  • Как же ж вовремя! Как раз на работе попросили замутить gRPC клиент!

    @Denis-Orlov@Denis-Orlov3 жыл бұрын
  • Большое спасибо вам, очень полезное видео. Пойду поищу ваши уроки про Java

    @ykochubeev@ykochubeev Жыл бұрын
  • Редко оставляю комментарии, но ты красавчик! Столько полезного материала!❤

    @user-hd8sc3ux7i@user-hd8sc3ux7i8 ай бұрын
  • Отличный и понятный урок, спасибо!

    @user-fy5kj8hf4j@user-fy5kj8hf4j3 жыл бұрын
  • Спасибо за Ваш труд! Коммент в поддержку канала.

    @svetlanamazhaykina6918@svetlanamazhaykina6918Ай бұрын
  • Аргмент по несжимаемость JSON надуманный. Он отлично жмётся тем же gzip или brotli, где не будет проблемы того что у нас один и тот же ключ повторяется много раз (будет ссылка на этот символ при сжатии).

    @CyberAcidPlanet@CyberAcidPlanet3 жыл бұрын
  • Я человек простой, вижу новое видео Алишева - захожу, ставлю лайк!

    @dzmitrydarashuk6528@dzmitrydarashuk65287 ай бұрын
  • Ща некогда, но позже обязательно погляжу. И чую новый формат зайдет (давно пора) Пока просто лайкос и низкий поклон за труд!

    @MrNil1982@MrNil19823 жыл бұрын
  • Круто, очень доступно, красавчик!

    @It_wizards@It_wizards2 жыл бұрын
  • Был бы очень признателен за подобные уроки по kafka и maven :)

    @fedyasavchuk1043@fedyasavchuk10433 жыл бұрын
  • Товарищ Алишев, хочу сказать тебе, что ты крутой поц, который выручает меня в знаниях уже который раз, тебя знают половина моей группы в институте, ты уже стал некой мафией в java. Держишь уже свою нишу довольно долго, репект

    @AndreyMalygin@AndreyMalygin2 жыл бұрын
  • Афигенная штука. Теперь буду писать пет проекты только на gRPC!

    @vladimirnechiporyuk2948@vladimirnechiporyuk294811 ай бұрын
  • Классный урок, побольше бы таких )

    @ZzooD@ZzooD3 жыл бұрын
  • Не знал ранее про данный механизм. Спасибо)

    @Nievinor@Nievinor3 жыл бұрын
  • Супер ролик! Большое спасибо. Доходчиво и понятно.

    @miketuev3241@miketuev32413 жыл бұрын
  • Получил первый оффер! Спасибо огромное за grpc и все видео по Spring, кучу раз пересматривал и конспектировал.

    @spilnich@spilnich3 жыл бұрын
    • Кайф!

      @alishevN@alishevN3 жыл бұрын
  • Круто! Очень хорошо разобрано, заходит отлично ) Талантливый человек талантлив во многом (на заднем плане гитара и синтезатор : ) )

    @faniskhalikov9736@faniskhalikov97363 жыл бұрын
  • По моему мнению Наиль самый комфортный обозреватель по Java!!! Скорость подачи ин-фы + грамотная речь + хороший объём нового материала!!! В общем просто КЛАСС👍

    @user-lx4dc1ls3e@user-lx4dc1ls3e6 ай бұрын
  • спасибо! все понятно и лаконично

    @alekcandrovich@alekcandrovich2 жыл бұрын
  • Хороший урок. Спасибо)

    @pozystark@pozystark2 жыл бұрын
  • Нет слов! Спасибо тебе огромное!

    @antondzmitruk2102@antondzmitruk21023 жыл бұрын
  • Ух годнота. Однозначно лайк!!!

    @llARXANGELll@llARXANGELll2 жыл бұрын
  • Отсутствие строгой типизации, это не минус, а плюс JSON. По поводу избыточности JSON. { "header":["date", "event"], "data": [ ["2020-01-14", "Событие 1"], ["2020-01-19", "Событие 2"], ["2020-01-23", "Событие N"], ] } Так, что избыточных ключей легко избежать. Также ничто не мешает гонять потоки JSON объектов по HTTP 2. Тем не менее большое спасибо за видеоролик.

    @kursruk@kursruk3 жыл бұрын
    • А теперь каждый раз пиши ручные парсеры на этот вот свой формат, который из коробки ни одна либа для работы с жсонами не поймет.

      @alexanderp6982@alexanderp6982 Жыл бұрын
  • Формат кстати бомбезный. Люблю иногда посмотреть стримы от GeekBrains (Александр Фирсунов) из за того, что урок идёт на примере и больше часа.

    @DairaGames@DairaGames3 жыл бұрын
  • супер видео! понятно преподнесено материал! спасибо!

    @evgenkr2993@evgenkr29933 жыл бұрын
  • Классно!!! Спасибо большое за проделанную работу! Очень интересно слушать!

    @user-uu7cg8mp7l@user-uu7cg8mp7l3 жыл бұрын
  • Послушал с удовольствием, первый раз покурить оторвался на 47й минуте))

    @Pewdew@Pewdew3 жыл бұрын
  • 21:30 для браузера можно использовать gRPC-web. Там пока есть ряд ограничений по стримингу, но в целом рабочий вариант.

    @maxim9976@maxim99763 жыл бұрын
    • Да ну куча проблем у gRPC-web. Вот приходит вам мессаг-респонс, и нужно её прочитать. Вы делаете toObject и если в глубине есть тип google_protobuf_struct_pb.Struct то оно превратится в fieldsMap. И можно конечно на Struct юзать toJavaScript, но Struct может быть очень глубоким потомком jspb.Message и во-первы, идти через геттеры к нему крайне неудобно, а во-вторых, нам нужно все дерево и нужно как-то мержить результат toObject и его потомка. С типизацией у Struct тоже плохо - она вообще не имеет типа и это реально приводит к проблемам в typescript. В целом ну очень неудобно, имхо.

      @RedkeiGost@RedkeiGost2 жыл бұрын
  • Ты мог бы сказать типо есть такая штука от Гугла и используйте ее вместо REST, она лучше), но ты прям с самого начала разжевал) Браво!

    @antondzmitruk2102@antondzmitruk21023 жыл бұрын
  • Очень круто. Спасибо

    @ivanstrelka3448@ivanstrelka34482 жыл бұрын
  • Не успел начать рест изучать, а тут уже что-то новое)

    @ChamZod@ChamZod3 жыл бұрын
    • не парься, ещё долго рест будет актуален.

      @NummeSpnet@NummeSpnet3 жыл бұрын
  • Просто Вау! Такая крутая штука, а я и не знал! Спасибо автору за труд, очень хороший и нужный вводный ролик! Кстати, а почему в сервере response билдится каждую итерацию цикла? Один раз сбилдить, затем много раз отправлять. Или так нельзя?

    @denislobanov7582@denislobanov75822 жыл бұрын
  • Крутой урок, спасибо!

    @mykytafrolov@mykytafrolov3 жыл бұрын
  • Спасибо за видео

    @indecentexposure852@indecentexposure85211 ай бұрын
  • Спасибо за видео. Но вопрос возник в голове у меня - ведь если текст, то его тоже можно сжимать на лету, есть же алгоритмы. Которые достаточно эффективно и быстро сжимаю данные и вот их можно по сети гонять. По сути ведь все равно gRPC дает накладные расходы на кодировние/декодирование, в REST это можно на сжатие/распаковку тратить. Ну правде это не решает вопрос с протоколом и стримами, согласен, но тем не менее.

    @Softovick@Softovick3 жыл бұрын
  • С удовольствием послушал тебя, Наиль!

    @ramilsafin5751@ramilsafin57513 жыл бұрын
    • Из предложений по улучшению контента: можешь приобрести планшет или ноутбук с поддержкой стилуса (ручки) для интерактивного добавления материала поверх слайдов.

      @ramilsafin5751@ramilsafin57513 жыл бұрын
    • @@ramilsafin5751 Спасибо за фидбэк!) Подумаю над этим.

      @alishevN@alishevN3 жыл бұрын
  • Большое спасибо!

    @daniyarrakhymbek5876@daniyarrakhymbek587610 ай бұрын
  • Спасибо! очень помог

    @tuujhfjjiyiiitr5763@tuujhfjjiyiiitr5763 Жыл бұрын
  • Надеюсь тема grpc будет дальше развиваться,очень нужная штука сейчас,а русскоязычных материалов нету

    @MrShark123123@MrShark1231233 жыл бұрын
  • json так же сжимается может deflate или gzipом, если настроено сжатие между клиентом и серверов. это прям очень стандартно. и реально эффективно это все и получается бинарно. так же весь html передается, он сжимается при передаче. посмотрите это с помощью tcpdump данные в теле буду бинарными а не текстовыми при использовании сжатия

    @IgorAlov@IgorAlov3 жыл бұрын
  • В REST API ведь можно использовать потоковые данные через библиотеку Reactor для Spring Boot. Данные передаются через Mono и Flux. Спасибо за обзор. Все четко и доступно. Однозначно заинтересовала технология. Немного напрягает что вместо JSON используется бинарный код

    @TeamKiller06@TeamKiller063 жыл бұрын
    • Если не нравится делай на старых технологиях, и как ты собираешься организовывать стримы?

      @johnxibai8454@johnxibai84542 жыл бұрын
  • Спасибо! Видео супер!

    @GT-cv3xu@GT-cv3xu3 жыл бұрын
  • Спасибо!

    @lookingforthetruth5903@lookingforthetruth590310 ай бұрын
  • Отличное видео) Спасибо

    @user-iu6yz6ck6h@user-iu6yz6ck6h3 жыл бұрын
  • Никто не мешает в rest использовать бинарный формат и сжатие.

    @user-fg7hf4qo8m@user-fg7hf4qo8m3 жыл бұрын
    • Я бы посмотрел как ты свагером нагенеришь код под бинарные сообщения

      @kalashnikofsergey7064@kalashnikofsergey70643 жыл бұрын
    • Я мешаю

      @dark_evil77@dark_evil773 жыл бұрын
    • @@kalashnikofsergey7064 чем? Тут ведь речь шла не об удобстве и трудозатратах, а о принципиальной возможности.

      @user-fg7hf4qo8m@user-fg7hf4qo8m3 жыл бұрын
    • это помимо того, что json, как и любой текст, прекрасно жмётся апаратными средствами, прозрачно для разработчика.

      @user-ns7jq7sf1g@user-ns7jq7sf1g3 жыл бұрын
  • Отличное видео !

    @aidynabirov7728@aidynabirov77282 жыл бұрын
  • Лукас атдущи! работа с железом wanted :)

    @tonyvegas6009@tonyvegas60093 жыл бұрын
  • Автолайк, Наиль скажи пожалуйста когда ждать следующий урок по спрингу, ну ооочень жду там как раз на самом интересном ты остановился

    @ilyababcenco6864@ilyababcenco68643 жыл бұрын
    • по спрингу я записываю полный курс. выйдет через месяц-два

      @alishevN@alishevN3 жыл бұрын
  • Не посмотрев видео, сразу ставлю лайк!

    @gamechannel_833@gamechannel_8333 жыл бұрын
    • так же делаю

      @user-vq2hi1df2i@user-vq2hi1df2i3 жыл бұрын
  • Неплохая обертка веб сокетов

    @mazeltov2701@mazeltov27013 жыл бұрын
  • был ли у кого затык в том, что после генерации классов из прото файла, в таргет папке все как в видео, но при имплементации возникает затык, идея просто не видит этот класс из таргета, при ручном импорте com.example.grpc* , идея не видит уже с папки example . хотя ТООЧНО она в иерархии папок в таргет файлах есть как в видео.

    @alexeymyasnichenko3318@alexeymyasnichenko33182 жыл бұрын
  • Увидел тему, посмотрел длительность - лайк не глядя.

    @redologs@redologs3 жыл бұрын
  • спасибо огромное за урок, очень многое для себя уловил))

    @olzhasserikbayev1155@olzhasserikbayev11553 жыл бұрын
  • Спасибо большое за видео. Хочу спросить - а как задавать повторяющиеся поля?Как задать хобби в этом примере? Я постоянно отваливаюсь по OutOfBoundException

    @user-vz5yr3dm7d@user-vz5yr3dm7d3 жыл бұрын
  • Спасибо

    @Das.Kleine.Krokodil@Das.Kleine.Krokodil Жыл бұрын
  • Охренеть! Это же гениально! Общение клиента и сервера как по шине между процессором и ОЗУ, например. Я балдею)

    @evgenyshevelev6100@evgenyshevelev61003 жыл бұрын
  • Просто топ)

    @darkstyleV@darkstyleV2 жыл бұрын
  • Скажите, пожалуйста, в чем отличие установки соединения по HTTP 2 с последующим получением по этому соединению потока данных и сокетов? Используя сокеты тоже ведь можно установить отдельное соединение с сервером и получать по нему данные? Большое спасибо за урок!

    @arthureirich7591@arthureirich75913 жыл бұрын
    • HTTP и Web Sockets это разные протоколы сделанные на основе TCP

      @gregory-povorozniuk-piano@gregory-povorozniuk-piano Жыл бұрын
  • Блин , хорошая лекция. Толковый лектор....

    @user-vc5sn3ob6c@user-vc5sn3ob6c Жыл бұрын
  • Подход работы с gRPC, чем то похож с SOAP. Там на основе wsdl генерится java код, а здесь на основе proto файла. Как у клиента так и у сервера эти два файла должны быть одинаковые.

    @konstantinviktorovich8194@konstantinviktorovich81943 жыл бұрын
  • привет! а как происходит версионирование proto файлов? допустим на сервере он поменялся, это же не значит, что все клиенты должны обновляться? есть какие-то версии пакетов, чтобы использовать конкретный proto файл на клиентах?

    @ZIK_1337@ZIK_13375 ай бұрын
  • В тренде :) 👍

    @user-df1bx3jl2c@user-df1bx3jl2c3 жыл бұрын
  • Наиль, а если мы работаем в другой IDE, где нету такого окна Maven с package, как нам тогда всё запускать?

    @eugenenovikov671@eugenenovikov6712 жыл бұрын
  • огромное списибо

    @user-be2cy2fb9u@user-be2cy2fb9u2 жыл бұрын
  • Интересная технология

    @nikolay7658@nikolay76583 жыл бұрын
  • Обалдеть! 😳

    @p.polunin@p.polunin Жыл бұрын
  • Как скопировать джава RMI в другие языки и ни кому не говорить. Структура 1 в 1. И этой штуке 100 лет в обед. Я еще не родился. За видео лайк.

    @kamurashev@kamurashev3 жыл бұрын
  • Прикольно... я уже хотел написать что-то из серии так это уже проходили с WSDL а тут и скорость выше раз в 10 и тыры пыры

    @dmsa9404@dmsa94043 жыл бұрын
  • "в случаи с монолитным приложением мы можем изменить какую-то часть и это затронет другие приложения" - вопрос архитектуры монолита. Зацепленность-связанность, все дела. "Всё объединено" это не от монолитности же зависит. Микросервис тоже можно изменить так, что это затронет зависящие от него микросервисы. Используется версия http2 только если браузер его полностью поддерживает. Иначе энвой же шлет по http1, разве нет? Ключ-единицу 29:21 мог бы и proto сгенерировать.

    @RedkeiGost@RedkeiGost2 жыл бұрын
  • Json сжимается gzip-ом разве нет?

    @kazakhification@kazakhification3 жыл бұрын
    • даже сжатый JSON все равно занимает больше места, чем protobuf - nilsmagnus.github.io/post/proto-json-sizes/

      @alishevN@alishevN3 жыл бұрын
    • @@alishevN Честно не много не понял,так если проблема в размере JSON,что мешает весь JSON прогнать через protobuf и отправить? я ничего не имею против gRpc но в большом проекте где под 1000+ методов которые взаимодействуют с различными микросервисами замучаешься всё описывать в .proto (для такой задачи надо нанимать отдельно человека на должность mapper ;) )

      @FastDamage@FastDamage3 жыл бұрын
    • @@FastDamage у нас в C# можно описывать интерфейсы)

      @mishashins@mishashins3 жыл бұрын
    • Автор даёт ссылку на тесты. Там видно что при коротких сообщениях прото дает выигрыш. Однако на больших сообщениях явно теряет преимущество. Я думаю что нужно ещё больше тестов. Повысить энтропию данных, зажать их и посмотреть что получиться. Есть шанс что в разных ситуациях, в разных задачах придется выбирать между прото или json вариантом, так как есть зависимость от объема данных и рассеивании. Аргумент того что json сжатие требует процессорное время, такое себя, так как любое сжатие этого требует. Нужно больше хороших синтетических тестов и тестов из жизни, реальных проектов. Но по мне, пока что, JSON выглядит лучше, даже если на коротких сообщениях проигрывает.

      @brunneng8575@brunneng85753 жыл бұрын
  • для приема данных с сенсоров используется mqtt, а http для веба

    @pavelgolin2421@pavelgolin24213 жыл бұрын
  • Очень интересное видео, спасибо за информацию. P.S Технология чем то похожа на WCF в C#.

    @SnitchShow@SnitchShow3 жыл бұрын
    • wcf хорош, но его нельзя использовать c .net core (только клиент) по этому придется брать gRPC

      @sp1ne2104@sp1ne21043 жыл бұрын
  • Лайк, подписка. Спасибо за интересное видео. Будет контент про Flutter/Dart?

    @rrbb@rrbb3 жыл бұрын
    • про эти темы вряд ли

      @alishevN@alishevN3 жыл бұрын
  • Наилю лайк неглядя)

    @phil2964@phil29643 жыл бұрын
  • а SoapUI еще используется где-нибудь?

    @Roma4086@Roma40863 жыл бұрын
  • >нам нужно только унаследоваться от этого класса 35:45 Тем временем класс public **final** class Upd: так бы прямо и говорил что мы будем наследоваться от вложенного класса. 😂

    @silentium_noxe@silentium_noxe3 жыл бұрын
  • Лучший! Спасибо! А уроки по спрингу еще будут?

    @emptyinside1753@emptyinside17533 жыл бұрын
    • да, будет полный курс по спрингу.

      @alishevN@alishevN3 жыл бұрын
    • @@alishevN когда примерно будет? На юдеми или на Ютубе?

      @smackthat6309@smackthat63093 жыл бұрын
  • некоторые зависимости из этого урока и protobuf-maven-plugin не обновлялись аж с 2018 года. есть какой-то более современный стек, заменяющий эти, очевидно, устаревшие инструменты?

    @cannibalirk3055@cannibalirk305510 ай бұрын
  • Поясните как контролить версии прото файла!? Как сервисы должны понять что он обновился и нужно его поменять и перегенерить код!?

    @k0rinf@k0rinf3 жыл бұрын
  • Годно, плюсую!

    @dmitr8194@dmitr81943 жыл бұрын
  • У меня такой вопрос, когда мы делаем стрим данных от сервера клиенту, в этот стрим попадает 10000 сообщений, которые клиент вычитывает подключившись к серверу, если происходит перезапуск клиента то сообщения читаются с начала, а как сделать, чтобы сервер стримил сообщения которые клиент получал бы не с самого начала, а в реальном времени, т.е. со следующего отправленного после подключения клиента?

    @vladislavborisov985@vladislavborisov9852 жыл бұрын
KZhead