Технологический стек сам по себе не определяет качество проекта. Важнее то, насколько выбранные инструменты соответствуют задаче, нагрузке, требованиям к безопасности, интеграциям и дальнейшему развитию системы.
В проектах мы рассматриваем технологии как части единого инженерного контура:
Архитектура → Разработка → Безопасность → Производительность → Тестирование → Развертывание → Наблюдаемость
Конкретный набор технологий зависит от типа проекта. Небольшому сайту не требуется инфраструктура распределенной системы, а корпоративному порталу с интеграциями и сложными ролями может быть недостаточно архитектуры обычного CMS-проекта.
Основные принципы остаются одинаковыми:
- Понятные границы компонентов.
- Возможность дальнейшего развития.
- Контролируемая производительность.
- Безопасность данных и доступов.
- Автоматизированные и ручные проверки качества.
- Управляемые релизы.
- Мониторинг работающей системы.
Основные инженерные принципы
Архитектура
Архитектура определяется требованиями проекта, а не желанием использовать максимальное количество технологий.
Учитываем:
- Функциональные области.
- Модели данных.
- Интеграции.
- Нагрузку.
- Требования к отказоустойчивости.
- Необходимость масштабирования.
- Частоту изменений.
- Эксплуатационные ограничения.
По мере роста проекта особенно важны понятные границы ответственности между компонентами.
Производительность
Производительность рассматриваем на нескольких уровнях:
- Пользовательский интерфейс.
- HTTP.
- API.
- backend.
- База данных.
- cache.
- Внешние сервисы.
- Серверная инфраструктура.
Проблема производительности может находиться как в тяжелом JavaScript на клиенте, так и в SQL-запросе, внешнем API или недостаточно эффективном кешировании.
Поэтому оптимизация начинается с измерений и определения фактического узкого места.
Безопасность
Безопасность учитывается на протяжении жизненного цикла проекта.
Базовый подход включает:
- Secure SDLC.
- Принцип минимально необходимых привилегий.
- Управление доступами.
- Управление секретами.
- Контроль зависимостей.
- Защиту форм и API.
- HTTPS/TLS.
- Анализ типовых классов уязвимостей.
- Обновление компонентов.
- Мониторинг событий.
Конкретный набор мер определяется архитектурой и моделью угроз проекта.
Качество
Разные уровни системы требуют разных способов проверки.
Используем сочетание:
- Unit-тестирования.
- Integration-тестирования.
- API-тестов.
- End-to-end сценариев.
- Ручного тестирования.
- Регрессионных проверок.
Автоматизация используется там, где она уменьшает стоимость повторных проверок и помогает быстрее обнаруживать регрессии.
Стандарты и практики разработки
Безопасная разработка
Безопасность рассматривается как часть процесса разработки, а не только как проверка уже готового проекта.
Практики могут включать:
- Требования безопасности на этапе проектирования.
- Secure SDLC.
- Контроль OWASP Top 10.
- Управление секретами.
- Минимизацию привилегий.
- HTTPS и HSTS.
- CSP там, где она необходима.
- Защиту API и пользовательского ввода.
- Своевременное обновление зависимостей.
Производительность и стабильность
В зависимости от архитектуры применяем:
- Браузерное и серверное кеширование.
- Brotli / Gzip.
- CDN.
- Оптимизацию критического рендера.
- Оптимизацию API.
- Анализ базы данных.
- Нагрузочное тестирование.
- Контроль очередей.
- Анализ внешних интеграций.
Отдельная часть эксплуатации - наблюдаемость.
Используются:
- Метрики.
- Логи.
- Трассировка.
- Алерты.
- Контроль деградации.
DevOps и выпуск изменений
Для проектов, где это оправдано, процесс доставки изменений автоматизируется.
CI/CD может включать:
Commit → Build → Tests → Checks → Deploy → Verification
Используем:
- Отдельные окружения.
- Автоматические тесты.
- Линтеры.
- Контроль сборки.
- Управляемый deployment.
- rollback.
- feature flags при необходимости.
Архитектурные и эксплуатационные решения документируются с использованием схем, инструкций и ADR там, где это целесообразно.
QA и тестирование
Типовая структура тестирования строится от небольших изолированных проверок к полноценным пользовательским сценариям:
Unit → Integration → API → E2E
Для автоматизации интерфейсов и пользовательских сценариев могут использоваться:
- Playwright.
- Cypress.
- Selenium.
Также применяются:
- Контрактные тесты.
- Ручные проверки.
- regression checklist.
- Тестирование критических бизнес-сценариев перед релизом.
Выбор конкретного инструмента зависит от архитектуры и стоимости поддержки тестов.
Наши технологии и подходы
Ниже собраны отдельные направления, подробнее раскрывающие используемые технологии, архитектурные решения и практики разработки.
Адаптивный дизайн
Проектирование интерфейсов для разных размеров экранов и типов устройств.
Рассматриваются:
- responsive layout.
- mobile-first.
- Адаптивные компоненты.
- Изображения.
- Типографика.
- Навигация.
- Пользовательские сценарии на мобильных устройствах.
Подробнее об адаптивном дизайне
Мультисервисная архитектура
Подходы к разделению сложной системы на несколько сервисов и компонентов.
На странице рассматриваются:
- Границы сервисов.
- Взаимодействие компонентов.
- Масштабирование.
- Отказоустойчивость.
- Независимое развертывание.
- Распределенные данные.
- Эксплуатационная сложность.
Мультисервисная или микросервисная архитектура применяется только там, где ее преимущества оправдывают дополнительную сложность.
Подробнее о мультисервисной архитектуре
Почему мы выбираем Drupal
Drupal используется для проектов, которым требуется гибкая модель контента, разграничение прав, расширяемость и развитая серверная часть CMS.
Подходит, в частности, для:
- Корпоративных сайтов.
- Порталов.
- Контентных систем.
- Каталогов.
- Проектов с большим количеством типов материалов.
- Сложных административных сценариев.
На отдельной странице разбираем особенности архитектуры Drupal и ситуации, в которых его использование оправдано.
Разработка на ASP.NET
ASP.NET Core - платформа для разработки серверных приложений и API в экосистеме .NET.
Она может использоваться для:
- Веб-приложений.
- API.
- Корпоративных систем.
- Интеграционных сервисов.
- backend-приложений.
- Систем автоматизации.
Современный .NET является кроссплатформенным и может эксплуатироваться в Linux, Windows и контейнерных средах.
PHP и MySQL
PHP продолжает широко использоваться в серверной веб-разработке и является основой большого количества CMS и веб-приложений.
В современных проектах используются:
- Актуальные версии PHP.
- Типизация.
- Composer.
- Управление зависимостями.
- Современные подходы к архитектуре.
- Автоматизированное тестирование.
MySQL и совместимые реляционные СУБД применяются для хранения структурированных данных, транзакций и построения прикладных моделей.
JavaScript и современные frontend-технологии
JavaScript используется для интерактивной части современных веб-интерфейсов.
В зависимости от задачи могут применяться:
- JavaScript.
- TypeScript.
- React.
- Vue.
- Angular.
- Серверный рендеринг.
- Клиентский рендеринг.
- Гибридные подходы.
Выбор frontend-архитектуры зависит от сложности интерфейса, требований к SEO, производительности и характера пользовательских сценариев.
Подробнее о JavaScript и frontend-разработке
Безопасность и стандарты
Отдельное направление посвящено инженерным практикам безопасности.
Рассматриваются:
- Secure SDLC.
- OWASP.
- Управление доступами.
- TLS.
- Безопасность API.
- Защита данных.
- Управление зависимостями.
- security testing.
- Применимые нормативные требования.
Конкретные стандарты и меры выбираются в зависимости от типа системы и обрабатываемых данных.
Подробнее о безопасности и стандартах
Полный цикл разработки
Разработка продукта включает значительно больше этапов, чем непосредственное написание кода.
Типовой жизненный цикл может выглядеть так:
Анализ → Проектирование → UX/UI → Разработка → Тестирование → Релиз → Эксплуатация → Развитие
На отдельной странице рассматривается организация полного цикла и взаимодействие между его этапами.
Подробнее о полном цикле разработки
Как выбирается технологический стек
Требования проекта
Сначала определяются:
- Функциональность.
- Пользователи.
- Бизнес-сценарии.
- Данные.
- Интеграции.
- Нагрузка.
- Требования к доступности.
- Требования безопасности.
Только после этого выбираются конкретные технологии.
Сложность должна соответствовать задаче
Архитектура не должна быть сложнее необходимого.
Например, обычному корпоративному сайту в большинстве случаев не требуется распределенная микросервисная система.
И наоборот, крупный продукт с независимыми функциональными областями, высокой нагрузкой и несколькими командами может перерасти возможности монолитной архитектуры.
Поэтому выбор между решениями всегда связан с компромиссами.
Стоимость эксплуатации
При выборе технологии учитывается не только стоимость первоначальной разработки.
Важны также:
- Сопровождение.
- Обновления.
- Инфраструктура.
- Доступность специалистов.
- Тестирование.
- Мониторинг.
- Миграции.
- Развитие системы.
Иногда технически более простое решение оказывается лучше именно благодаря меньшей стоимости владения.
Масштабирование
Не каждому проекту требуется горизонтальное масштабирование.
Однако архитектура должна учитывать предполагаемый характер нагрузки.
В зависимости от ситуации могут использоваться:
- Вертикальное масштабирование.
- Горизонтальное масштабирование.
- cache.
- CDN.
- Очереди.
- Репликация.
- Распределение нагрузки.
Конкретная схема определяется только после понимания реальных требований.
Поддерживаемость
Система должна оставаться понятной после нескольких лет развития.
Для этого важны:
- Структура кода.
- Документированные границы компонентов.
- Управление зависимостями.
- Автоматические проверки.
- История изменений.
- Документация.
- Воспроизводимое окружение.
Поддерживаемость обычно важнее использования самой новой технологии.
Проверенные и новые технологии
В проектах могут использоваться как давно существующие, так и относительно новые инструменты.
Возраст технологии сам по себе не определяет ее качество.
При выборе оцениваются:
- Зрелость.
- Поддержка.
- Экосистема.
- Документация.
- Безопасность.
- Совместимость.
- Эксплуатационные риски.
- Соответствие задаче.
Новая технология используется тогда, когда дает конкретное преимущество, а не только потому, что появилась недавно.
Технологический подход
Мы рассматриваем веб-проект как совокупность взаимосвязанных уровней:
Интерфейс
↓
Frontend
↓
Backend / CMS
↓
API и интеграции
↓
Данные
↓
Инфраструктура
↓
Мониторинг и эксплуатацияИзменение одного уровня может влиять на остальные.
Например:
- frontend-архитектура влияет на производительность.
- Структура CMS влияет на развитие контента.
- API влияет на устойчивость интеграций.
- Модель данных влияет на производительность backend.
- Инфраструктура влияет на доступность.
- Процессы CI/CD влияют на безопасность релизов.
Поэтому технологии выбираются и оцениваются в контексте всей системы, а не изолированно.