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

Рефакторинг микросервисной архитектуры

Byndyusoft
October 31, 2022

Рефакторинг микросервисной архитектуры

Даже грамотно спроектированная микросервисная архитектура с течением времени требует пересмотра и рефакторинга.

— Как не пропустить этот момент в случае проектирования и разработки с нуля?
— Как понять, что легаси микросервисы спроектированы не лучшим образом?
— Как, собственно, начать рефакторинг архитектуры и, немало важно, закончить его и довести до прода в виде реализации?

Попробуем ответить на эти и другие вопросы в ходе доклада. Рассмотрим тревожные сигналы о необходимости рефакторинга, поговорим о принципах рефакторинга в переложении на архитектуру микросервисов, наметим конкретные шаги и этапы безопасного и итерационного рефакторинга архитектуры на практике.

Byndyusoft

October 31, 2022
Tweet

More Decks by Byndyusoft

Other Decks in Technology

Transcript

  1. Обо мне • CTO в Byndyusoft.com • Развиваю техническую культуру

    в компании • Участвую в проектах в роли IT-архитектора • Преподаю IT-архитектуру в университете Byndyusoft — это заказная разработка с продуктовым подходом Среди наших заказчиков:
  2. План 1. Рефакторинг архитектуры в случае микросервисов 2. Пример архитектуры

    и разбор её проблем 3. Алгоритм рефакторинга и пример его выполнения 4. План итерационного рефакторинга и пример его выполнения
  3. Рефакторинг архитектуры • Рефакторинг — изменение структуры без изменения поведения.

    • В случае рефакторинга архитектуры — без изменения бизнес-сценариев
  4. Рефакторинг архитектуры микросервисов • Объединение или разделение • сервисов •

    ограниченных контекстов • Рефакторинг данных и API https://www.youtube.com/watch?v=x1xqlXnyXp8 Но что если этого не достаточно? • Перепроектирование bounded-контекстов и мастер-данных
  5. Сигналы о том, что пора рефакторить • Сигналы для изменения

    гранулярности • Что пора объединять • Что пора разделять • Нарушения принципов проектирования
  6. Сигналы для изменения гранулярности • Повторы или циклы в трассировках

    • Нарушение инкапсуляции и избыточности • Дублирование • Максимальная сцепленность • Линейный рост инфраструктурных работ • https://techleadconf.ru/2022/abstracts/9081
  7. Нарушения принципов проектирования • Единственность ответственности • Связанность и связность

    (coupling and cohesion) • Принципы проектирования пакетов/сборок — микросервисов • Reuse/Release Equivalence Principle • Common Reuse Principle • Common Closure Principle • Acyclic Dependencies Principle • Stable Dependencies Principle • Stable Abstractions Principle
  8. Проблемы архитектуры • Нарушение Acyclic Dependencies Principle • Нарушение Single

    Responsibility или Common Closure Principle • Нарушение Reuse/Release Equivalence Principle • Нарушение Common Reuse Principle • Повторы в трассировках • High coupling, low cohesion
  9. Нарушение Single Responsibility / Common Closure Principle A change that

    affects a component affects only that component and no other components
  10. Нарушение Common Reuse Principle The parts in a component are

    reused together. If you reuse one of the parts in a component, you reuse them all
  11. Алгоритм рефакторинга 1. Сделать видимым 2. Выделить мастер-данные и их

    связи - провалидировать потоками данных и сценариями 3. Выделить ответстственности и bounded context - провалидировать потоками данных и сценариями 4. Наложить потоки данных и сформировать драфт архитектуры 5. Провалидировать драфт принципами (если валидация не прошла — возвращаемся назад в п.2) 6. Составить итерационный план перехода 2
  12. Потоки данных. Сценарий N … • Визуализация наложения архитектуры и

    сценариев • Валидация архитектуры и связей • Определение «стабильных» частей системы — например, География
  13. Алгоритм рефакторинга 1. Сделать видимым 2. Выделить мастер-данные и их

    связи - провалидировать потоками данных и сценариями 3. Выделить ответстственности и bounded context - провалидировать потоками данных и сценариями 4. Наложить потоки данных и сформировать драфт архитектуры 5. Провалидировать драфт принципами (если валидация не прошла — возвращаемся назад в п.2) 6. Составить итерационный план перехода 2
  14. Алгоритм рефакторинга 1. Сделать видимым 2. Выделить мастер-данные и их

    связи - провалидировать потоками данных и сценариями 3. Выделить ответстственности и bounded context - провалидировать потоками данных и сценариями 4. Наложить потоки данных и сформировать драфт архитектуры 5. Провалидировать драфт принципами (если валидация не прошла — возвращаемся назад в п.2) 6. Составить итерационный план перехода 2
  15. Алгоритм рефакторинга 1. Сделать видимым 2. Выделить мастер-данные и их

    связи - провалидировать потоками данных и сценариями 3. Выделить ответстственности и bounded context - провалидировать потоками данных и сценариями 4. Наложить потоки данных и сформировать драфт архитектуры 5. Провалидировать драфт принципами (если валидация не прошла — возвращаемся назад в п.2) 6. Составить итерационный план перехода 2
  16. Алгоритм рефакторинга 1. Сделать видимым 2. Выделить мастер-данные и их

    связи - провалидировать потоками данных и сценариями 3. Выделить ответстственности и bounded context - провалидировать потоками данных и сценариями 4. Наложить потоки данных и сформировать драфт архитектуры 5. Провалидировать драфт принципами (если валидация не прошла — возвращаемся назад в п.2) 6. Составить итерационный план перехода 2
  17. Алгоритм рефакторинга 1. Сделать видимым 2. Выделить мастер-данные и их

    связи - провалидировать потоками данных и сценариями 3. Выделить ответстственности и bounded context - провалидировать потоками данных и сценариями 4. Наложить потоки данных и сформировать драфт архитектуры 5. Провалидировать драфт принципами (если валидация не прошла — возвращаемся назад в п.2) 6. Составить итерационный план перехода 2
  18. Итерационный план перехода 1. Выносим отделимое 2. Разделяем логику и

    данные 3. Мигрируем данные 4. Убираем дублирование
  19. Итоги 1. Рассмотрели принципы архитектуры микросервисов 2. Разобрали пример с

    нарушением принципов 3. Составили алгоритм рефакторинга/перепроектирования 4. Спроектировали целевую архитектуру 5. Составили итерационный план перехода
  20. Такой рефакторинг работает и при отсутствии архитектуры Антихрупкость в IT

    Рефакторинг микросервисного монолита, как одного из этапов перехода на микросервисы
  21. Непрерывный процесс рефакторинга архитектуры ГОСТ Р 57100-2016/ISO/IEC/IEEE 42010:2011 «Процесс архитектуризации

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