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

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

DotNetRu
December 14, 2019

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

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

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