К каталогу
paper
case-study
experience-report

A Model-based, Quality Attribute-guided Architecture Re-Design Process at Google

Практический разбор QA-guided редизайна архитектуры: QAS, UML static/runtime views и итоговый trade-off анализ.

Открыть PDF

Практика чтения для этого источника ещё не опубликована

Ниже доступен готовый редакционный brief из прежнего каталога. Он даёт контекст, но не засчитывается как lab.

Открыть оригинал

Готовый редакционный разбор

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

Whitepaper

ICSE-SEIP 2023

A Model-based, Quality Attribute-guided Architecture Re-Design Process at Google.

Перейти на сайт

В этой работе Google показали не просто редизайн архитектуры, а воспроизводимый процесс принятия архитектурных решений через QA-сценарии, UML-моделирование и явный trade-off анализ. Главная ценность paper в том, что подход практичен для реальных legacy систем.

Первая страница whitepaper A Model-based, Quality Attribute-guided Architecture Re-Design Process at Google

Первая страница whitepaper (клик по изображению откроет PDF).

Обзор

Review white-paper

Дополнительный разбор процесса и ключевых выводов.

Перейти на сайт

TL;DR

  • Google выбрали критический сценарий QueryTimeSeries и смоделировали только то, что нужно для архитектурного решения.
  • Вместо тяжёлой полной модели использовали легковесный набор артефактов: QAS, component/sequence diagrams и trade-off таблицу.
  • Разделение static и runtime view помогло прозрачно обсудить конфликтующие QA: availability, maintainability, latency, resource efficiency.
  • Результат процесса: аргументированный редизайн с явным планом валидации по метрикам и переносимый шаблон для других команд.

Процесс редизайна (8 шагов)

Шаг 1

Выбрать критический пользовательский сценарий (в paper: QueryTimeSeries).

Шаг 2

Зафиксировать релевантные QA: availability, maintainability, latency, resource efficiency.

Шаг 3

Описать QAS для каждого QA (stimulus -> response -> response measure).

Шаг 4

Согласовать минимальный набор SLO/метрик до обсуждения решений.

Шаг 5

Построить as-is static и runtime модели на одном уровне абстракции.

Шаг 6

Построить to-be модели тем же языком и границами.

Шаг 7

Свести изменения в QA trade-offs + план проверки гипотез данными.

Шаг 8

Встроить артефакты в дизайн-док и процесс архитектурного ревью.

As-is vs To-be (кейс Monarch)

As-is

  • Ключевые компоненты: Root/Zone Mixer, Index Server, Leaf, Repository.
  • Leaf совмещает compute + index + storage, что повышает связность.
  • Replica resolution и query pass проходят через большее число перегруженных узлов.

To-be

  • Leaf декомпозирован: отдельные роли для index и query mix.
  • Leaf API упрощён до key-value обязанностей хранения.
  • Появляются доп. hops, но улучшается изоляция отказов и сопровождаемость.

Анализ по атрибутам качества

Availability

SLO/ожидание

>=99.99% успешных запросов

Риск в as-is

Высокий риск из-за сложного Leaf и fanout-чувствительности.

Эффект to-be

Улучшение за счёт изоляции ответственностей и меньшего blast radius.

Как валидировать

Error budget burn-rate, success-rate QueryTimeSeries, частота partial failures.

Maintainability

SLO/ожидание

Снижение времени rollout/root-cause

Риск в as-is

Высокий риск из-за плотной связности compute/index/storage в Leaf.

Эффект to-be

Улучшение через декомпозицию компонентов и более чистые API границы.

Как валидировать

Rollout time, incidents/month, root-cause time до/после.

Latency

SLO/ожидание

>=99% запросов в пределах M секунд

Риск в as-is

Низкий риск (baseline удовлетворительный).

Эффект to-be

Хуже по hops (12-14 -> 16-18), но в рамках целевого SLO.

Как валидировать

p50/p95/p99 E2E latency и вклад этапов replica/query pass.

Resource efficiency

SLO/ожидание

<10% дополнительного CPU/memory

Риск в as-is

Низкий риск на baseline.

Эффект to-be

Потенциальный overhead из-за доп. RPC, компенсируется лучшей декомпозицией нагрузки.

Как валидировать

CPU/memory/network breakdown и cost-per-query при одинаковой нагрузке.

Итоговая таблица trade-offs

Quality AttributeImportanceRisk (as-is)Trade-off (to-be)Notes
AvailabilityHighHigh+Лучшая failure isolation и меньший blast radius.
MaintainabilityMediumHigh+Границы ответственности чётче, API проще.
LatencyHighLow-Добавляются RPC hops; нужно контролировать tail latency.
Resource efficiencyMediumLow-Доп. overhead по сети/CPU, но потенциал лучшей утилизации.

Lessons learned

  • Моделируйте не систему целиком, а только критический сценарий.
  • Разделяйте static и runtime артефакты, иначе обсуждение быстро теряет точность.
  • QA должны быть измеримыми до выбора решения, иначе trade-off анализ бесполезен.
  • As-is и to-be нужно сравнивать при одинаковом уровне абстракции.
  • Итог должен быть компактным: trade-off таблица + план валидации.

Чеклист: как повторить у себя

  • [ ] Выбран сценарий и зафиксирован SLO.
  • [ ] QA определены и согласованы с командами.
  • [ ] QAS описаны для каждого QA.
  • [ ] As-is: component + sequence diagram подготовлены.
  • [ ] To-be: component + sequence diagram подготовлены.
  • [ ] Trade-off таблица и validation plan добавлены в дизайн-док.
  • [ ] После релиза заведены метрики, дашборды и алерты для валидации.

Связанные главы