🦒
System Analyst | Knowledge base
  • Введение
  • Soft skills
    • 📍Продукт
      • Роли в IT продукте
        • Системный аналитик (SA)
        • Бизнес-аналитик (BA)
        • SA vs BA
        • 📎Другие аналитики
      • Жизненный цикл продукта
      • Методологии разработки
        • Waterfall
        • Agile
          • Scrum
          • Kanban
      • 📎Целеполагание
        • SMART
        • Матрица Эйзенхауэра
        • RICE
        • 🔒HADI
    • 📍Требования
      • Классификация требований
        • Уровень: Бизнес
        • Уровень: Пользователь
          • Use case
          • User story
          • 📎Job story
        • Уровень: Продукт
          • Функциональные требования
          • Нефункциональные требования
      • Качества требований
      • Методы сбора требований
      • Техническое задание (ТЗ)
  • Hard skills
    • 📍Базы данных
      • Реляционные
        • Транзакции
          • 🔒CAP
        • Нормальные формы
        • SQL
          • DML
          • DDL/DCL/TCL
          • 📎Представления VIEW
        • Констрейты
        • 📎Типы данных
        • 🔒Middle+
          • Особенности работы с конкертными реляционными БД
      • Нереляционные
        • Примеры использования
        • 🔒Middle+
          • Колоночные
            • Сlickhouse
          • Ключ-значение
          • Матричные
          • Документо-ориентированные
          • Графовые
            • JanusGraph | Neo4j etc
      • Масштабирование БД
      • Оптимизация БД
        • 📎Типы индексов
        • 📎Уникальные индексы
        • 🔒Анатомия плана запроса
      • 📎Какую СУБД выбрать
      • 📎Хранение и анализ данных
        • ETL
        • DWH
          • DWH vs Data Lake vs Data Mart
        • OLAP
          • OLAP vs OLTP
        • BI-аналитика
    • 📍Интеграции
      • Форматы данных
        • JSON + JSON Schema
          • 🔒AVRO
        • JSON vs XML
      • Виды интеграций
        • Синхронное взаимодействие
          • REST
            • RESTful принципы
              • Отсутствие состояния (Авторизация)
                • 🔒OAuth / OpenID Connect
              • Кеширование
              • Единообразие интерфейса (CRUD)
                • Запрос/ответ
              • 🔒Cтепень зрелости REST API
            • Проектирование API
            • 📎Асинхронный REST
          • SOAP
            • XSD
            • WSDL
          • REST vs SOAP
        • Асинхронное взаимодействие
          • Kafka
          • RabbitMQ
          • Kafka vs RabbitMQ
          • ESB
          • gRPC
            • Правила proto-контракта
            • Protobuf vs JSON
            • Сравнительная таблица
          • Другое
          • 🔒WebSocket API
        • Sync vs Async
      • 🔒Middle+
        • Stateful vs Stateless
        • Apache Flink
        • оркестрация и хореография
    • 📍Проектирование
      • Архитектура
        • Монолит
        • Микросервисы
          • Паттерны реализации
        • Монолит vs Микросервисы
        • 🔒Middle+
          • Бессерверная
          • Сервис-ориентированная (SOA)
          • Другое
      • Нотации и диаграммы
        • UML
          • Диаграмма классов
          • Диаграмма последовательности
            • Фреймы
          • Диаграмма прецедентов (use case)
          • 🔒Middle+
            • Диаграмма деятельности/активности
            • Диаграмма состояний
        • BPMN
          • Основные элементы
        • BPMN vs UML
        • ERD
        • 📎IDEF0
      • Прототипирование
        • Figma vs Axure
      • Мониторинг
        • Логирование
        • Метрики
        • Алерты
        • 🔒Инструменты
          • Grafana
          • Prometheus
          • ELK
            • Elasticsearch
            • Logstash
            • Kibana
      • 🔐Системный дизайн
    • 📎DevOps for SA
      • Основы сетей
        • OSI
        • TCP/IP
        • HTTP
        • DNS
      • Git (VCS)
        • GitHub vs GitLab
      • Развертывание приложений
        • CI/CD
        • 🔒Middle+
          • Виртуализация/контеризация
            • ✍️Docker
            • Kubernetes
              • ✍️Openshift
      • Cloud Native
        • Сервисы облачных вычислений
        • Cloud-native app vs Traditional app
      • Командная строка
    • 📎QA for SA
      • Postman | Insomnia
      • Swagger
      • Верификация vs Валидация
      • Идентификация/Аутентификация/Авторизация
    • 📎PM for SA
      • Метрики
        • Метрики привлечения
        • Метрики вовлечённости
          • ARPU
          • LTV
          • NPV
          • ROI
          • NPS
      • Прокси метрики
      • Дерево метрик
      • Фреймворки
      • Юнит-экономика
      • Модель Кано
  • Другое
    • Литература
    • Советы по составлению резюме
    • Общие вопросы на собеседовании
    • Вопросы которые надо задать интервьюеру
  • Контакты
Powered by GitBook
On this page

Was this helpful?

  1. Hard skills
  2. Интеграции
  3. Виды интеграций
  4. Асинхронное взаимодействие
  5. gRPC

Сравнительная таблица

SOAP
REST
gRPC

Протокол

HTTP1.1.

HTTP1.1.

HTTP2 (работает в двух направлениях и за счет этого быстрее HTTP1.1)

Подход

сервисно-ориентированный дизайн. Клиент запрашивает у сервера услугу или функцию, которая может затрагивать ресурсы сервера

объектно-ориентированный дизайн. Клиент запрашивает у сервера создание, совместное использование или модификацию ресурсов

сервисно-ориентированный дизайн. Клиент запрашивает у сервера услугу или функцию, которая может затрагивать ресурсы сервера

Формат передаваемых данных

Запрос: XML

Ответ: XML

Запрос: преимущественно JSON (реже XML)

Ответ: JSON со всеми данными, найденными на сервере по этой конечной точке

Запрос: бинарный файл — protobuf.

Ответ: бинарный файл — protobuf.

Контракт

обязательны WSDL-схемы

необязательно OpenAPI (Swagger), эндпоинты могут быть не задокументированы

обязательно пишется по стандарту Protocol Buffers, компилируется внутренним компилятором protoc, который генерирует необходимый исходный код классов из определений в proto-файле

Документирование

WSDL-схемы сложно писать и поддерживать

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

четко определенная и самодокументируемая схема. API на Protobuf генерирует код, код не будет рассинхронизирован с документацией. При генерации кода из Protobuf проходит базовая проверка — сгенерированный код не принимает поля неправильного типа.

Вес

XML весит больше аналогичных JSON и base64 и в основном применяется в legacy-системах, которые были разработаны в конце 1990-х — начале 2000-х.

JSON меньше XML, но больше protobuf

меньше JSON

Производительность

Средняя, данные требуют дополнительной сериализации (парсинга)

Средняя, данные требуют дополнительной сериализации (парсинга)

Высокая, данные изначально сериализованы

Связь с сервером

1—1

1—1, 1—N, N—N

Скорость обмена

Средняя, обмен однонаправленный (запрос-ответ)

Высокая, обмен двунаправленный или стриминговый

Как передает данные

использует только HTTP-POST-запросы

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

Использует четыре основных метода HTTP: GET, POST, PUT, DELETE.

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

Использует только HTTP-POST-запросы.

Число конечных точек (точек входа в приложение)

1

без ограничений

1

Работа в вебе

без допусилий

без допусилий

с дополнительными усилиями:

  • gRPC работает на HTTP2 и передает бинарный файл, а JS в браузере работает на HTTP1 и взаимодействует только с текстовыми файлами. Поэтому существует gRPC-WEB, который может положить base64 в тело текстового сообщения, а затем JS отдельной библиотекой переводит base64 в JSON. gRPC-WEB — отдельный от gRPC протокол, существует только в браузере и действует как уровень перевода между gRPC и приложением в браузере.

  • Фронтовый кодген не знает, где поле обязательное, а где нет. Все не базовые типы генерируются как optional.

  • Стримы для фронта стали доступны не так давно. Раньше для отправки файла писали rest-точку.

Для какой архитектуры

сложная архитектура, выходящая за рамки CRUD. SOAP используют многие банки.

преимущественно CRUD. Самая популярная архитектура API для веб-сервисов и микросервисных архитектур.

преимущественно CRUD

Мультиязыковая поддержка

Не зависит от языка

Средняя, требуются сторонние сервисы для мультиязыковых систем

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

Достоинства

  • Не зависит от языка.

  • Встроенная обработка ошибок.

  • Встроенный протокол безопасности.

  • Самодокументируемый.

  • Клиент отделен от сервера.

  • Нет длительного соединения с отслеживанием состояния → экономия ресурсов.

  • Масштабируемость.

  • Простой в использовании и понимании, большое комьюнити.

  • Есть стандартный список кодов ошибок, но все пользуются им по-своему.

  • Можно внедрять в самых разных форматах без стандартного программного обеспечения.

  • Кэширование на уровне HTTP без дополнительных модулей.

  • Высокая производительность и низкая нагрузка на сеть.

  • Держит соединение, не надо тратить время на подключение.

  • Можно поставить таймаут клиента и тем самым экономить ресурсы.

  • Строгая спецификация типов данных. Под каждое поле выделяет набор битов по порядку.

  • Стандартизация кодов ошибок, зашитая в protobuf.

  • Сам генерирует исходный код по proto.

  • Самодокументируемый.

  • Не зависит от языка, контракт везде одинаковый.

  • Можно использовать для управления контейнерами в k8s и системами хранения данных.

Недостатки

  • Тяжелый XML.

  • Сложный набор правил для описания контракта.

  • Долгое обновление сообщений — особенности схемы.

  • Постоянная необходимость в кодировании данных на сервере до передачи по каналам связи и их последующем декодировании на клиенте.

  • Избыточная нагрузка на сеть.

  • Избыточная или недостаточная выборка данных.

  • Нет документирования и стандартизации.

  • Нет стандарта использования кодов ответов, поэтому часто в успешных кодах могут передаваться ошибки.

  • Постоянная необходимость в кодировании данных на сервере перед передачей по каналам связи и последующем их декодировании на клиенте.

  • Не работает без gRPC-WEB в браузере.

  • Человек не прочитает сообщение без декодера.

  • Для работы нужно программное обеспечение gRPC как со стороны клиента, так и со стороны сервера.

Когда использовать

финтех и другие долгие массивные проекты со сложной архитектурой, легаси с 90-00 хх гг. или исторически выбранный SOAP, от которого не отказаться. Для нового проекта, возможно, стоит присмотреться к альтернативам.

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

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

PreviousProtobuf vs JSONNextДругое

Last updated 1 year ago

Was this helpful?

Источник:

📍
https://habr.com/ru/companies/tinkoff/articles/780024/