Оглавление

  1. Введение во взаимодействие сервисов
  2. HTTP/2: Протокол транспортировки
  3. Сериализация и Protocol Buffers (Protobuf)

Введение во взаимодействие сервисов

  • Взаимодействие между сервисами в распределённых системах строится вокруг обмена структурированными сообщениями через API.
    • Процесс взаимодействия:
      1. Сериализация: Сервис-отправитель преобразует внутренний объект в переносимый формат сообщения, например, JSON или XML.
      2. Передача по сети: Сообщение отправляется получателю через сетевой протокол.
      3. Десериализация: Сервис-получатель преобразует данные обратно в объект для внутреннего использования.
    • Способы реализации API:
      • XML-RPC
      • SOAP
      • JSON-RPC
      • REST
      • GraphQL
      • gRPC (основан на HTTP/2 и Protocol Buffers)

Фундаментальная концепция:
Обеспечение строгости передачи данных и эффективного взаимодействия сервисов достигается стандартизованными форматами сериализации и современными сетевыми протоколами.


HTTP/2: Протокол транспортировки

  • HTTP/2 — вторая основная версия протокола HTTP, разработанная на базе Google SPDY.
    • Ключевые отличия от HTTP/1.1:
      • Бинарный протокол:
        • Передача команд и данных в виде бинарных фреймов (frames), а не в текстовом виде.
      • Мультиплексирование (Multiplexing):
        • В HTTP/1.1 возникала проблема head-of-line blocking: каждый запрос блокировал своё соединение до получения ответа, из-за чего браузеры открывали несколько TCP-соединений к одному хосту.
        • В HTTP/2 возможно параллельное выполнение нескольких независимых потоков данных (streams) поверх одного TCP-соединения.
        • Фреймы из разных потоков перемешиваются и отправляются по единому каналу, затем на принимающей стороне собираются обратно. Это повышает эффективность использования сети.
      • Прочие ключевые возможности:
        • Сжатие заголовков (HPACK): уменьшает дублирование данных в заголовках.
        • Приоритезация потоков (Priorities): клиент может указывать приоритеты загрузки ресурсов.
        • Отмена запроса (Cancel): можно отменять ненужные запросы.
        • Server Push: сервер может отправлять ресурсы клиенту проактивно, до запроса клиента.

Фундаментальная концепция:
HTTP/2 решает проблемы эффективности и параллелизма передачи данных, что критически важно для построения высокопроизводительных API.


Сериализация и Protocol Buffers (Protobuf)

  • Сериализация — процесс преобразования структуры данных в формат для хранения или передачи.
    • Форматы сериализации:
      • Текстовые форматы (JSON, XML, YAML):
        • Преимущества: Человекочитаемость, удобство для дебага.
        • Недостатки: Избыточность (размер), слабая типизация, медленная сериализация и десериализация.
      • Protobuf (Protocol Buffers):
        • Описание: Бинарный, эффективный и расширяемый механизм сериализации данных от Google.
        • Принцип работы:
          1. Описание структуры данных в файле .proto — это контракт/схема данных.
          2. Компилятор protoc генерирует код на нужном языке (Go, Python, Java и др.).
          3. Полученные структуры и методы позволяют строго и эффективно сериализовать объекты в бинарный формат и обратно.
        • Преимущества:
          • Статическая схема и строгая типизация: Ошибки несоответствия данных обнаруживаются на этапе компиляции.
          • Компактный размер: Бинарное представление гораздо компактнее текстового.
          • Высокая производительность: Сериализация и десериализация данных выполняются очень быстро.

Фундаментальная концепция:
Строительство современных распределённых систем требует производительной и компактной сериализации, а также строгой типизации на уровне схемы данных.


Итоги и повтор ключевых концепций

  • Эффективное взаимодействие сервисов строится на:
    • Явных, стандартизованных протоколах сериализации (например, Protobuf)
    • Использовании современных транспортных протоколов (например, HTTP/2 с поддержкой бинарных фреймов и мультиплексирования)
    • Жёсткой схеме данных и типизации (для предотвращения ошибок на этапе разработки)
  • gRPC использует все перечисленные подходы, являясь современным инструментом построения быстрого, типобезопасного, масштабируемого взаимодействия между сервисами.
  • Правильная организация API и обмена данными — ключевой элемент надёжных и удобных для разработки распределённых архитектур.