Please enable JavaScript.
Coggle requires JavaScript to display documents.
Глава 3. Межпроцессное взаимодействие в микросервисной архитектуре -…
Глава 3. Межпроцессное взаимодействие в микросервисной архитектуре
Обзор IPC в микросервисах
Стили взаимодействия
Запрос/ответ
Асинхронный запрос/ответ
Издатель/подписчик
Издатель/асинхронные ответы
Описание API
IDL - язык описания интерфейсов
Постоянно эволюционирует
Первый шаг разработки
Развивающийся API
Проблемы
Несовместимые изменения (нет аналога компиляции)
Одновременно несколько версий
Невозможно одномоментное обновление всех клиентов
Семантическая нумерация версий
semver.org
MAJOR - несовместимые изменения
MINOR - сохраняется обратная совместимость
Значения по умолчанию для пропущенных атрибутов
Игнорировать любые лишние атрибуты
PATCH - исправление ошибки обратной совместимости
Прямая совместимость :red_flag:
Форматы сообщений
Текстовые
Двоичные
Protocol Buffers
Avro
Сравнение трёх бинарных протоколов
Взаимодействие на основе RPI (удалённого вызова процедур)
REST
Модель зрелости
Уровень 0: стучимся на один URL только POST
Уровень 1: концепция ресурсы, разные URL, только POST
Уровень 2: концепция ресурса + HTTP
Уровень 3: HATEOAS. Получаем ресурс GET'ом, он содержит ссылки для действий с ресурсом
Описание API
Swagger
Open API
Несколько ресурсов за один запрос
GraphQL
Netflix Falcor
Ресурс — это все, что вы хотите показать внешнему миру через ваше приложение.
gRPC
Применение шаблона "Предохранитель"
RPI-прокси, который в случае достижения опеределнного лимита последовательности отказов начинает отклонять все вызовы, пока не истечет определенное время
Надёжный RPI-прокси
Ограниченное время блокировки
Ограниченное кол-во неудачных запросов от клиента
Шаблон "Предохранитель", если процент неудачных запросов к серверу растёт, размыкается предохранитель, некоторые запросы пропускаются к серверу, если они успешные, предохранитель смыкается
Реакция на недоступность
Вернуть ошибку
Вернуть кэшированное значение
Обнаружение сервисов
На уровне приложения
Саморегистрация
Обнаружение на клиентской стороне
На уровне платформы
Сторонняя регистрация
Обнаружение на стороне сервера
Взаимодействие с помощью асинхронного обмена сообщениями
Обмен сообщениями
Сообщение
Документ
Событие
Команда
Канал
Точка-точка
Издетель-подписчик
Поддерживаются все стили
Создание спецификации
Использование брокера сообщений
Без брокера
ZeroMQ
Брокер
Факторы выбора
Поддерживаемые языки
Поддерживаемые стандарты обмена сообщениями
Порядок следования сообщений
Гарантии доставки
Постоянное хранение
Устойчивость
Масштабируемость
Латентность
Конкурирующие потребители
Архитектурные проблемы
Конкурирующие получатели и порядок следования сообщений
Сегментированный канал
Дублирование сообщений
Идемпотентные дескрипторы
Отклонение дубликатов :question:
Транзакционный обмен сообщениями
Распределённые транзакции
Таблицы БД в качастве очереди сообщений
Шаблон "Пуликация событий"
Шаблон "Опрашивающий издатель" - шедулером селектим из БД новые события
Шаблон "Отслеживание транзационного журнала"
Debezium
LinkedIn Databus
DynamoDB streams
Eventuate Tram
:red_flag:
Использование асинхронного обмена сообщениями для улучшения доступности
Репликация данных
Завершение обработки после возвращения ответа