Лестница проектирования систем
(продолжение предыдущего поста)
Проектирование систем — это не единая глобальная концепция. Это лестница.
Большинство инженеров пытаются сразу перейти к «распределённым системам», а потом удивляются, почему всё рушится под нагрузкой.
Масштабирование нельзя просто скопировать и вставить. Его нужно развивать — шаг за шагом.
### ОСНОВЫ
Вы не можете масштабировать то, чего не понимаете.
Цель этого уровня — понять базовые строительные блоки того, как данные поступают в систему и выходят из нее.
Ступеньки этого уровня:
API и коммуникация
Знайте REST, gRPC и GraphQL; не только синтаксис, но и когда каждый из них подходит.
Балансировка нагрузки и обратные прокси
Распределение запросов, поддержание согласованности сессий и предотвращение единых точек отказа.
Кэширование
Мастерство в том, что кэшировать, когда аннулировать и как политики TTL и вытеснения влияют на производительность.
Базы данных и хранилище
Изучение компромиссов между реляционными и нереляционными системами, индексирования, нормализации (до BCNF) и транзакций.
Сетевые технологии и HTTP
Понимание того, как данные перемещаются: запросы, ответы, задержки и пропускная способность.
### МЕХАНИКА
Теперь вы создаете системы, а не просто сервисы.
Цель этого уровня — создать системы, которые выдерживают реальные условия: задержки, сбои и параллелизм.
Основные моменты этого уровня:
Безопасность и аутентификация
Охватываем основы: TLS, JWTs, OAuth2, ограничение скорости и дизайн с минимальными привилегиями.
Доступность и надежность
Понимание SLA, SLI и SLO; и проектирование для плавного снижения производительности, а не слепого времени безотказной работы.
Наблюдаемость
Реализация логирования, трассировки (OpenTelemetry, Sentry) и метрик для анализа, а не шума.
Согласованность данных и транзакции
Применение шаблонов распределенных транзакций (SAGA, 2PC, Outbox, CDC).
Асинхронное взаимодействие
Использование очередей сообщений и шинков событий для децентрализации систем (Kafka, RabbitMQ, MQTT и т.д.).
Шаблоны масштабирования
Изучение вертикального и горизонтального масштабирования, чтения и записи, а также стратегий партиционирования.
### ПРОДВИНУТЫЙ УРОВЕНЬ
Теперь вы не спрашиваете «как это построить», а «как это ведет себя под нагрузкой».
Создавайте системы, которые адаптируются, восстанавливаются и предсказуемо масштабируются по мере роста сложности.
Основные моменты этого уровня:
Инженерия устойчивости
Предохранители, повторные попытки с отступами, тестирование на хаос и разделение систем.
Оптимизация производительности
Настройка узких мест на всех уровнях: БД, кэш, сеть, сериализация и ввод-вывод.
Эволюция системы
Проектирование для изменений: сине-зеленые развертывания, флаги функций и плавные миграции.
Моделирование данных в масштабе
Полиглот-персистентность, материализованные представления, эволюция схемы и аналитические конвейеры.
Архитектуры, управляемые событиями
Полностью децентрализованные системы с богатыми, самодостаточными событиями, которые устраняют обратные вызовы к источникам.
Теория распределенных систем
CAP, PACELC, идемпотентность, конечная согласованность; и когда каждый компромисс приемлем.
Post #2576
1.73K
- 👍 14
- ❤ 4
- ❤🔥 2
- 🔥 2
- 👎 1