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

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

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

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

Avatar for Ruslan Safin

Ruslan Safin

June 07, 2023

More Decks by Ruslan Safin

Other Decks in Programming

Transcript

  1. • Технический директор и архитектор Byndyusoft • Автор и преподаватель

    курса по микросервисной архитектуре ЧелГУ, ИТМО • Член программного комитета CodeFest Руслан Сафин
  2. Рефакторинг архитектуры ▪ Рефакторинг — изменение структуры без изменения поведения

    ▪ В случае рефакторинга архитектуры — без изменения бизнес-сценариев
  3. Рефакторинг архитектуры микросервисов ▪ Рефакторинг данных и API ▪ Изменение

    гранулярности ▪ Перепроектирование bounded– контекстов, сервисов и мастер–данных Сложность рефакторинга
  4. ▪ Изменение гранулярности ▪ Повторы или циклы в трассировках ▪

    Нарушение инкапсуляции и избыточности ▪ Дублирование ▪ Линейный рост инфраструктурных работ ▪ Нарушения принципов проектирования Сигналы о том, что пора рефакторить
  5. Coupling and cohesion ▪ Cohesion (связность, сцепленность, прочность) ▪ Reuse/Release

    Equivalence Principle ▪ Common Reuse Principle ▪ Common Closure Principle ▪ Coupling (связанность) ▪ Acyclic Dependencies Principle ▪ Stable Dependencies Principle ▪ Stable Abstractions Principle
  6. Проблемы архитектуры ▪ Нарушение ▪ Acyclic Dependencies Principle ▪ Single

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

    affects only that component and no other components
  8. Нарушение 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
  9. Алгоритм рефакторинга 1. Сделать видимым 2. Выделить мастер-данные и их

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

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

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

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

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

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

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

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

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

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