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

Решение проблемы консистентности распределенных данных в микросервисах для Python-проектов

Решение проблемы консистентности распределенных данных в микросервисах для Python-проектов

Павел Лонкин (Ingram Micro Cloud) @ Moscow Python Meetup 64
"Сталкивались ли вы с проблемой: как быть с разделяемыми данными для приложения с микросервисной архитектурой? Как держать их в консистентом состоянии? Как сделать так, чтобы API для работы с этими данными не тормозили? Расскажу, какой подход мы выбрали в рамках нашего продукта и почему".
Видео: http://www.moscowpython.ru/meetup/64/data-consistency/

Moscow Python Meetup

May 30, 2019
Tweet

More Decks by Moscow Python Meetup

Other Decks in Programming

Transcript

  1. Требования 1. Не добавлять жестких связей между сервисами 2. Поддержка

    разных баз данных 3. Простота решения 4. Минимальная дублирование данных 5. Возможность доступа к массиву данных 6. Целостность данных
  2. Композиция API Использует готовые API Дополнительные запросы Производительность при запросе

    списка Сложно фильтровать по полям объектов, на которые ссылаемся
  3. Репликация Базы Данных Работает из коробки Целостность данных Жесткая связь

    Нельзя использовать разные базы Нельзя сделать частичную репликацию таблицы Дублирование данных Database A Replica А Service A Database B Service B
  4. Программная репликация Целостность данных Эффективный доступ Удобный доступ к связанным

    данным Частичная репликация Database A Service A Database B Service B Message Brocker
  5. Программная репликация Целостность данных Эффективный доступ Удобный доступ к связанным

    данным Сохраняем только те данные, которые требуются Дублирование данных Eventual Consistency Database A Service A Database B Service B Message Brocker
  6. Требования к решению • Поддержка Django Models • Должно быть

    просто сказать какие модели отправляем • Должно быть просто сказать какие модели должны слушать изменения • Должна быть возможность синхронизировать данные или срез данных по запросу
  7. Resync • Простая Django команда • Умеет пересылать сообщения для

    конкретной модели • Умеет пересылать сообщения для среза данных
  8. Результаты • Решили проблему в соответствии с требованиями • Написали

    библиотеку • Это стало работать быстро • Разработчики счастливы • Клиенты счастливы