Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Александр Чертов "gRPC для .NET разработчика"

Sponsored · Ship Features Fearlessly Turn features on and off without deploys. Used by thousands of Ruby developers.
Avatar for DotNetRu DotNetRu
December 14, 2019

Александр Чертов "gRPC для .NET разработчика"

Последние годы, казалось, что RPC решения в экосистеме .Net стремительно уходят в небытие. Но не так давно вышел ASP.Net Core 3.0, где одной из главных фич стал gRPC- современный RPC фреймворк, разработанный компанией Google и активно поддерживаемый Cloud Native Computing Foundation. В рамках доклада мы рассмотрим как внедрить gRPC в свой проект, что нам это даст(и даст ли?) и с какими проблемами мы можем столкнутся.

Avatar for DotNetRu

DotNetRu

December 14, 2019
Tweet

More Decks by DotNetRu

Other Decks in Programming

Transcript

  1. Обо мне • Senior dotnet developer в ABBYY, Common Cloud

    • Активист MskDotNet Community 2
  2. Применение технологий ABBYY ТЕХНОЛОГИИ ИСКУССТВЕННОГО ИНТЕЛЛЕКТА Оцифровка Классифи- кация Преобра-

    зование документо в Извлечение данных Структурированные документы Слабоструктури- рованные документы Неструктурированные документы ABBYY FineReader ABBYY FlexiCapture ABBYY NLP ABBYY Intelligent Search
  3. Проекты ABBYY в разных отраслях Нефтегаз Энергетика Госсектор Образование Медицина

    Транспорт и логистика Банки и финансы Ритейл Страхование
  4. Agenda • Сравнение RPC и REST подходов • Что такое

    gRPC • Основные достоинства и недостатки • gRPC в .NET • Как внедрить gRPC • И что нам это даст 5
  5. RPC 9 REST • ~ 1980-е • Вызов методов сервиса

    как локальных • Два компонента: сетевой протокол и технология сериализации
  6. RPC 10 REST • ~ 1980-е • Вызов методов сервиса

    как локальных • Два компонента: сетевой протокол и технология сериализации • Не навязывает особых требований к архитектуре
  7. RPC 11 REST • ~ 1980-е • Вызов методов сервиса

    как локальных • Два компонента: сетевой протокол и технология сериализации • Не навязывает особых требований к архитектуре • Есть множество реализаций, часть привязаны к языку/платформе.
  8. RPC 12 REST • ~ 1980-е • Вызов методов сервиса

    как локальных • Два компонента: сетевой протокол и технология сериализации • Не навязывает особых требований к архитектуре • Есть множество реализаций, часть привязаны к языку/платформе. • SOAP
  9. RPC 13 REST • ~ 1980-е • Вызов методов сервиса

    как локальных • Два компонента: сетевой протокол и технология сериализации • Не навязывает особых требований к архитектуре • Есть множество реализаций, часть привязаны к языку/платформе. • SOAP • WCF - .NET
  10. RPC 14 REST • ~ 1980-е • Вызов методов сервиса

    как локальных • Два компонента: сетевой протокол и технология сериализации • Не навязывает особых требований к архитектуре • Есть множество реализаций, часть привязаны к языку/платформе. • SOAP • WCF - .NET • ~ 2000 год
  11. RPC 15 REST • ~ 1980-е • Вызов методов сервиса

    как локальных • Два компонента: сетевой протокол и технология сериализации • Не навязывает особых требований к архитектуре • Есть множество реализаций, часть привязаны к языку/платформе. • SOAP • WCF - .NET • ~ 2000 год • Ресурсы в виде эндпоинтов
  12. RPC 16 REST • ~ 1980-е • Вызов методов сервиса

    как локальных • Два компонента: сетевой протокол и технология сериализации • Не навязывает особых требований к архитектуре • Есть множество реализаций, часть привязаны к языку/платформе. • SOAP • WCF - .NET • ~ 2000 год • Ресурсы в виде эндпоинтов • HTTP методы для CRUD операций
  13. RPC 17 REST • ~ 1980-е • Вызов методов сервиса

    как локальных • Два компонента: сетевой протокол и технология сериализации • Не навязывает особых требований к архитектуре • Есть множество реализаций, часть привязаны к языку/платформе. • SOAP • WCF - .NET • ~ 2000 год • Ресурсы в виде эндпоинтов • HTTP методы для CRUD операций • Ряд требований к сервисам
  14. RPC 18 REST • ~ 1980-е • Вызов методов сервиса

    как локальных • Два компонента: сетевой протокол и технология сериализации • Не навязывает особых требований к архитектуре • Есть множество реализаций, часть привязаны к языку/платформе. • SOAP • WCF - .NET • ~ 2000 год • Ресурсы в виде эндпоинтов • HTTP методы для CRUD операций • Ряд требований к сервисам • Достаточно предсказуем и унифицирован
  15. RPC vs REST Последние годы REST подход доминирует, но для

    микросервисных решений он не всегда подходит 19
  16. gRPC Плюсы • Малый размер сообщений • Эффективная сериализация/десериализация •

    Мультиплексирование • Поддержка потоковой передачи данных 30
  17. 31

  18. gRPC Плюсы • Малый размер сообщений • Эффективная сериализация/десериализация •

    Мультиплексирование • Поддержка потоковой передачи данных • Contract first 32
  19. gRPC Плюсы • Малый размер сообщений • Эффективная сериализация/десериализация •

    Мультиплексирование • Поддержка потоковой передачи данных • Contract first • Поддержка большого кол-ва языков 33
  20. gRPC Минусы • Нет поддержки со стороны браузеров(но есть официальная

    обертка) • Нельзя хостить в Azure App Services и IIS(пока) 35
  21. gRPC Минусы • Нет поддержки со стороны браузеров(но есть официальная

    обертка) • Нельзя хостить в Azure App Services и IIS(пока) • Плохо с тулингом 36
  22. gRPC Минусы • Нет поддержки со стороны браузеров(но есть официальная

    обертка) • Нельзя хостить в Azure App Services и IIS(пока) • Плохо с тулингом • Некоторые вещи делаются сложнее чем в обычных рестовых сервисах(например кэширование, балансировка). 37
  23. Внедряем gRPC Дано: • Простейший файловый сервис • Есть вариант

    на Asp.NET Core 3 для сравнения • Три метода: взять файл, загрузить файл и получить метаданные файлов 43
  24. gRPC- IDL 55 1 2 3 1 - тип данных

    2 - название поля 3- тег поля
  25. gRPC - .Net protobuf .proto type C# type fixed32 uint

    fixed64 ulong sfixed32 int sfixed64 long bool bool string string bytes ByteString .proto type C# type double double float float int32 int int64 long uint32 uint uint64 ulong sint32 int sint64 long 56
  26. Версионирование • Теги всегда должны быть уникальны и неизменны •

    Удаленные поля рекомендуется помечать ключевым словом reserved • Смена типа возможна, но ограничена 84
  27. Аутентификация - опции Поддерживаются: • Azure AD • OAuth 2

    • IdentityServer • OpenID НЕ работает - windows аутентификация(NTLM/Kerberos) 104
  28. Бенчмарк. Замер на локальной машине 111 Дано: • Grpc сервис

    • Asp.NET Core 3 сервис • BenchmarkDotNet • Текстовый файлик на ~100Кб • Файловое хранилище с парой тысяч файлов
  29. Выводы Плюсы: • В целом хороший перфоманс, но надо тестить

    для своих задач. • Потоковая передача данных • Contract first подход- штука интересная, но есть альтернативы. 124
  30. Выводы Минусы: • Плохой вариант если надо дергать апи из

    браузера • Плохой вариант если хостится в IIS(пока по крайней мере) • Не самый лучший DX при отладке • Ряд вещей делается сложнее чем в REST. 125
  31. Ссылки 1. https://grpc.io/ 2. https://performance-dot-grpc- testing.appspot.com/explore?dashboard=5636470266134528 3. https://visualrecode.com/blog/wcf-vs-grpc-round-2 4. https://github.com/grpc/grpc-dotnet

    5. https://github.com/grpc-ecosystem/awesome-grpc 6. https://kubernetes.io/blog/2018/11/07/grpc-load-balancing-on-kubernetes- without-tears/ 7. https://dev.to/thangchung/performance-benchmark-grpc-vs-rest-in-net-core- 3-preview-8-45ak 8. https://medium.com/@EmperorRXF/evaluating-performance-of-rest-vs-grpc- 1b8bdf0b22da 9. https://labs.criteo.com/2017/05/serialization/ 10.https://github.com/grpc/grpc/issues/13586 126