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
PRO

May 30, 2019
Tweet

More Decks by Moscow Python Meetup

Other Decks in Programming

Transcript

  1. РЕШЕНИЕ ПРОБЛЕМЫ
    КОНСИСТЕНТНОСТИ РАСПРЕДЕЛЕННЫХ
    ДАННЫХ В МИКРОСЕРВИСАХ ДЛЯ
    PYTHON-ПРОЕКТОВ

    View Slide

  2. [email protected]
    @d3rky
    Лонкин Павел Ingram Micro Cloud
    Team Lead

    View Slide

  3. View Slide

  4. View Slide

  5. Service A Service B
    Model A Model B

    View Slide

  6. AuthN & AuthZ Reports
    Account
    Report
    User

    View Slide

  7. Требования
    1. Не добавлять жестких связей между сервисами
    2. Поддержка разных баз данных
    3. Простота решения
    4. Минимальная дублирование данных
    5. Возможность доступа к массиву данных
    6. Целостность данных

    View Slide

  8. Требования к API

    View Slide

  9. View Slide

  10. Общая БД

    View Slide

  11. Композиция API

    View Slide

  12. Композиция API
    Использует готовые API
    Дополнительные запросы
    Производительность при запросе
    списка
    Сложно фильтровать по полям
    объектов, на которые ссылаемся

    View Slide

  13. Репликация Базы Данных
    Database A Replica А
    Service A
    Database B
    Service B

    View Slide

  14. Репликация Базы Данных
    Работает из коробки
    Целостность данных
    Database A Replica А
    Service A
    Database B
    Service B

    View Slide

  15. Репликация Базы Данных
    Работает из коробки
    Целостность данных
    Жесткая связь
    Нельзя использовать разные
    базы
    Нельзя сделать частичную
    репликацию таблицы
    Дублирование данных
    Database A Replica А
    Service A
    Database B
    Service B

    View Slide

  16. Программная репликация
    Database A
    Service A
    Database B
    Service B
    Message Brocker

    View Slide

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

    View Slide

  18. Программная репликация
    Целостность данных
    Эффективный доступ
    Удобный доступ к связанным
    данным
    Сохраняем только те данные,
    которые требуются
    Дублирование данных
    Eventual Consistency
    Database A
    Service A
    Database B
    Service B
    Message Brocker

    View Slide

  19. Требования к решению
    • Поддержка Django Models
    • Должно быть просто сказать какие модели отправляем
    • Должно быть просто сказать какие модели должны слушать
    изменения
    • Должна быть возможность синхронизировать данные или срез
    данных по запросу

    View Slide

  20. AuthN & AuthZ Reports
    Account
    Report
    User

    View Slide

  21. AuthN & AuthZ Reports

    View Slide

  22. AuthN & AuthZ Reports

    View Slide

  23. AuthN & AuthZ Reports

    View Slide

  24. AuthN & AuthZ Reports

    View Slide

  25. AuthN & AuthZ DB Reports DB
    Account
    Report
    User

    View Slide

  26. AuthN & AuthZ DB Reports DB
    Account
    Report
    User
    Signals
    RabbitMQ

    View Slide

  27. AuthN & AuthZ DB Reports DB
    Account
    AccountReference
    Report
    User UserReference
    Signals
    RabbitMQ

    View Slide

  28. AuthN & AuthZ DB Reports DB
    Account
    AccountReference
    Report
    User UserReference
    Sidecar
    RabbitMQ
    Signals

    View Slide

  29. Resync
    • Простая Django команда
    • Умеет пересылать сообщения для конкретной модели
    • Умеет пересылать сообщения для среза данных

    View Slide

  30. Результаты
    • Решили проблему в соответствии с требованиями
    • Написали библиотеку
    • Это стало работать быстро
    • Разработчики счастливы
    • Клиенты счастливы

    View Slide

  31. Todo
    • Bulk операции (create, update, delete)
    • Поддержать миграцию source модели на target модели
    • Open source

    View Slide

  32. Todo
    • Bulk операции (create, update, delete)
    • Поддержать миграцию source модели на target модели
    • Open source

    View Slide

  33. Todo
    • Bulk операции (create, update, delete)
    • Поддержать миграцию source модели на target модели
    • Open source

    View Slide

  34. View Slide