Монолит до мультитенантного SaaS в 4 спринтах-не требуется переписать

Монолит до мультитенантного SaaS в 4 спринтах-не требуется переписать

5 июля 2025 г.

Можете ли вы превратить хрупкое приложение Legacy в мультитенантную SaaS, не переписывая его с нуля? Мы только что сделали. В четырех спринтах наша команда возобновила семилетнюю монолит электронной коммерции как платформу на основе подписки, основанную на Angular 19 SSR, узел 20 + фазвии и Terraform Cloud. Это после того, как работало все, что взорвалось на наших лицах, и контрольный список миграции в пасту. Возьмите кофе: 8-минутное чтение.


1 - Зачем даже мигрировать? (Подсказка: деньги и скорость) ☕

Показатель

До

После

Дельта

Ежемесячный выпуск Cadence

1 / месяц

12 / месяц

× 12

Инфра затрат / арендатор

€ 165

€ 97

-41 %

LCP 75th P (поле)

4,1 с

1,9 с

-54 %

Чистый промоутер

34

65

+31

ROI Kicker:Каждое 1 секундное падение LCP увеличило конверсию воронки на 6 %. Числа сделали финансирование очень, очень счастливыми.


2 - Аудит монстра в 3 измерениях 🕵

Перед прикосновением к коду мы запустили3-D AuditПолем Оцените каждый модуль1 → 5:

Измерение

5 = симптомы красной зоны

Сцепление

Поперечный импорт, контроллеры жира, запутанные angularjs & jquery

Тестовое покрытие

<10 % тренируется

Радиус взрыва

Миграции БД необратимы, Prod Config отличается от постановки

Эмпирическое правило:Все, что забивает ≥ 4, попадает в отставание «Чанглера на рис.


3 - Выбор архитектуры: модульный монолит + флаги функций 🚀

ПочемунетМикро-сервисы сразу?

Вариант

⏱ скорость отправки

🔒 Изоляция арендатора

👷‍ Совластные бремени OPS

Поднят и сдвиг докер

⚡ быстро

😰 Минимальный

😀 Низкий

Модульный монолит + флаги

🔄 Сбалансирован

🙂 Хорошо

🟡 Средний

Микро-сервисы (DDD)

🐢 медленно

😎 Отлично

🔴 High

Мы выбралиМодульный монолит:

  • Одиночный репоВедет тривиально.
  • Функции флаговДавайте отправим темные функции по одному арендатору за раз.
  • Переехать в услугиТолько когда модуль перерастает монолитПолем

4 - Frontend Reward: Angular 19 с местным SSR 🖼

# add server-side rendering in two commands
npx ng add @angular/ssr
npm run build:ssr && npm run serve:ssr

Два урока извлечены

  1. Ленивые острова:Тяжелые графики и диаграммы взорвалисьrenderApplicationпамять Мы завернули ихngSkipHydrationи увлажняется наIntersectionObserverПолем
  2. TC39 Temporal API:Новые даты Angular 19

Результат:LCP <2 S на настоящих устройствах Moto G4Полем


5 - Бэкэнд и аренда: Фастификация + Postgres RLS 🗄

  • ФормификацияПотому что 80 К REQ/S на одном M6G большой с нулевой настройкой.
  • Безопасность на уровне строк (policy USING (tenant_id = current_setting('app.tenant_id'))) держит один дБ, пока мы не достигли 1 ТБ - затем мы разбиваемся.
  • Наблюдаемость: Opentelemetry → Grafana Cloud; Одна приборная панель на арендатора с шаблоном UID.

6-CI/CD: развертывается только зеленые в 45 линиях 📦

# .github/workflows/deploy.yml  (core)
on: [push]
jobs:
  test: …          # npm ci && npm test
  build_ssr: …     # npm run build:ssr
  deploy:
    needs: build_ssr
    runs-on: ubuntu-latest
    permissions: { id-token: write }
    steps:
      - uses: hashicorp/setup-terraform@v3
      - run: terraform init && terraform apply -auto-approve

Prod разворачивается через 11 минут. Если тесты терпят неудачу, Prod нетронут.


7 - Безопасность сначала (действительно) 🔐

Слой

Необходимо контролировать

Инструмент

Аут

Без пароля Magic-Link + OAuth 2.1

Auth.js& Argon2

API

Заражающий ограничение скорости + HMAC SIGS

Фастификация крючков, Redis

Данные

AES-256 PII шифрование + RLS

Postgres 15, AWS KMS

Непрерывно

CIS -уровень 1 как код

Tfsec, Открытый политический агент

Забавный факт:Неделя 1, 37 % трафика были ботами по борьбе с учетом полномочий-автоматически.


8 - Матрица рычага стоимости 💸

Рычаг

Сэкономить год-1

Как

Кеширование края

-23 %

CloudFlare Caches SSR HTML + Stail While-revalidate

Без сервера Cron

-11 %

Ночные отчеты перешли в AWS Lambda

Облачные кредиты

-17 %

AWS Activate + Спонсорство с открытым исходным кодом

Мульти-аз

+6 %расходы

Стоит: SLA 99,95 % → отток -1,2 %


9-Пять уроков, которые мы продолжаем изучать

  1. Флаги функций> Живущие ветви.
  2. Измерить поле LCP, не только маяк.
  3. Документы или умереть.Каждый интерфейс изменение = один файл ADR.
  4. Ид арендатора в день 0-Ретро-подход-это ад.
  5. Спринт после запуска "Broken Windows"спасает моральный дух.

10 - Pocket Checklist (украсть меня) ✅

  1. ☐ Создайте матрицу связи
  2. ☐ Добавитьtenant_idСтолбец везде сейчас
  3. ☐ Корабль рискованные кусочки за флагами
  4. ☐ Синтетическая проверка здоровья на арендатора
  5. ☐ Запланировать спринт «Исправить разбитые окна» после Go-Live

Доставка SaaS никогда не является магией в один щелчок.Но с модульным планом, безжалостной дисциплиной DevOps и одержимостью пользовательским опытом, вы можете превратить скрипучий монолит в рост маховика менее чем за месяц. Поделитесь своими военными историями ниже - шрамы по обмену. 🚀


Оригинал
PREVIOUS ARTICLE
NEXT ARTICLE