Глоссарий

Словарь веб-разработчика

Визначення технічних термінів з PHP, DevOps, MySQL та AI — з прикладами коду та поясненнями простою мовою.

228 терминов
46 букв
S
Saga Pattern
Saga — паттерн управления распределёнными транзакциями без использования 2PC. Длинная бизнес-транзакция разбивается на последовательность локальных транзакций. Каждая локальная транзакция публикует событие или сообщение. При сбое — выполняются компенсирующие транзакции. Два типа Choreography — каждый сервис реагирует на события и публикует следующие. Нет центрального координатора. Просто, но сложно отследить поток Orchestration — центральный Saga Orchestrator координирует сервисы, отправляя команды и обрабатывая результаты. Сложнее, но прозрачнее Пример: оформление заказа CreateOrder → ReserveInventory → ProcessPayment → ShipOrder если ProcessPayment fails: → ReleaseInventory (компенсирующая) → CancelOrder (компенсирующая) Сложности Компенсирующие транзакции не всегда возможны (отправленное сообщение не отзовёшь). Saga даёт Eventual Consistency, а не ACID. Дебаг сложнее, чем обычная транзакция.
Security Headers
Security headers — HTTP-заголовки ответа, инструктирующие браузер применить дополнительные меры безопасности. Бесплатная защита одной строкой конфигурации сервера. Важные заголовки Strict-Transport-Security: max-age=31536000; includeSubDomains — всегда HTTPS, даже если пользователь ввёл http:// Content-Security-Policy — каким источникам доверять скрипты, стили, изображения. Защита от XSS X-Frame-Options: DENY — запретить встраивание в iframe. Защита от clickjacking X-Content-Type-Options: nosniff — браузер не угадывает тип содержимого Referrer-Policy: strict-origin-when-cross-origin — контроль заголовка Referer Permissions-Policy — ограничить доступ к API (камера, микрофон, геолокация) Проверка securityheaders.com — бесплатный сканер с оценкой A-F. Mozilla Observatory — дополнительный аудит.
Server-Sent Events (SSE)
SSE (Server-Sent Events) — стандартный браузерный API для получения потока обновлений от сервера через обычное HTTP-соединение. Однонаправленный: только сервер → клиент. Проще WebSocket там, где не нужна двунаправленная коммуникация. Как это работает Клиент открывает соединение через EventSource. Сервер отвечает с Content-Type: text/event-stream и держит соединение открытым, отправляя события в формате: data: {"price": 42.5, "symbol": "BTC"}\n\n Клиентский код const es = new EventSource('/api/prices'); es.onmessage = (e) => { const data = JSON.parse(e.data); updatePrice(data.symbol, data.price); }; es.onerror = () => es.close(); SSE vs WebSocket SSE — проще, HTTP/2-friendly, автоматическое переподключение, только текст WebSocket — двунаправленный, бинарные данные, сложнее SSE идеален для live-дашбордов, стриминга уведомлений, цен, прогресса задач.
Serverless
Serverless — модель развёртывания, при которой вы пишете функцию (handler) и платите только за время её выполнения. Серверы существуют, но вы о них не думаете: провайдер масштабирует автоматически от нуля до миллиардов вызовов.Как это работаетВы загружаете код. При HTTP-запросе или событии (S3 upload, очередь) провайдер запускает контейнер с вашей функцией, выполняет её и останавливает. «Холодный старт» — первый вызов после простоя — может добавлять задержку (десятки мс — секунды).Когда подходитНеравномерная нагрузка: от нуля до пиковых значенийEvent-driven задачи: обработка файлов, вебхуки, тригеры от БДMVP и прототипы — не нужно настраивать серверыКогда не подходитДолгосрочные процессы (лимит выполнения 15 мин в AWS Lambda)Постоянная нагрузка — дороже традиционного сервераStateful-приложения с постоянными соединениями (WebSocket)
Service Mesh
Service Mesh — инфраструктурный слой, управляющий сетевой коммуникацией между микросервисами: трафик, безопасность (mTLS), наблюдаемость, circuit breaking — без изменений в коде приложения. Реализуется через sidecar proxy (обычно Envoy). Что предоставляет Traffic management — canary deployments, A/B тесты, retry, timeout, rate limiting между сервисами Security — автоматический mTLS между всеми сервисами. Zero Trust на сетевом уровне Observability — автоматические метрики latency, error rate, tracing между сервисами без кода Circuit Breaking — защита от каскадных отказов на уровне прокси Как это работает Рядом с каждым Pod запускается sidecar-контейнер (Envoy). Весь входящий/исходящий трафик сервиса проходит через него. Control plane (Istiod) конфигурирует все прокси централизованно. Популярные решения Istio (самый популярный), Linkerd (проще), Consul Connect.
Service Worker
Service Worker — JavaScript-файл, выполняющийся в фоновом потоке браузера, независимо от страницы. Перехватывает сетевые запросы, кеширует ресурсы и позволяет приложению работать офлайн. Техническая основа PWA. Как регистрируется // Регистрация if ('serviceWorker' in navigator) { navigator.serviceWorker.register('/sw.js'); } // sw.js — файл Service Worker self.addEventListener('install', event => { event.waitUntil( caches.open('v1').then(cache => cache.addAll(['/index.html', '/app.css', '/app.js']) ) ); }); self.addEventListener('fetch', event => { event.respondWith( caches.match(event.request).then(cached => cached ?? fetch(event.request) ) ); }); Стратегии кеширования Cache First — кеш, если есть; сеть как fallback. Для статики Network First — сеть, если недоступна — кеш. Для API Stale While Revalidate — вернуть кеш, обновить в фоне Ограничения Только HTTPS. Нет прямого доступа к DOM. Собственный цикл жизни (install → activate → fetch).
Singleton
Singleton — паттерн проектирования, гарантирующий существование единственного экземпляра класса и предоставляющий глобальную точку доступа к нему. Классическое применение: класс конфигурации, логер, соединение с БД.Реализацияclass Config { private static ?self $instance = null; private function __construct() {} public static function getInstance(): self { self::$instance ??= new self(); return self::$instance; } }КритикаSingleton — один из наиболее критикуемых паттернов. Он вводит глобальное состояние, усложняет тестирование (трудно заменить на mock), нарушает Dependency Inversion. В современном коде заменяется регистрацией зависимости как singleton в IoC-контейнере.
SLI, SLO, SLA
Три концепта из практики SRE (Site Reliability Engineering) для измерения и согласования надёжности сервиса между командами и клиентами. SLI — Service Level Indicator Числовая метрика, описывающая состояние сервиса. Примеры: процент успешных запросов, latency p99, uptime. «Что измеряем» SLO — Service Level Objective Внутренняя цель для SLI. «Какую планку ставим себе». Пример: 99.9% запросов выполняются за < 500 мс. SLO строже SLA — «буфер» для команды. SLA — Service Level Agreement Юридический договор с клиентом. «Что обещаем вовне». Нарушение SLA — финансовые санкции. Поэтому SLA всегда мягче SLO. Error Budget SLO 99.9% = 0.1% допустимых ошибок в месяц ≈ 43 минуты downtime. Error budget показывает, сколько «баланса надёжности» осталось. Если бюджет исчерпан — останавливаем новые деплои.
Soft Delete
Soft Delete — паттерн «мягкого» удаления: запись не удаляется из БД физически, а помечается как удалённая через поле deleted_at (timestamp). Все запросы автоматически фильтруют «удалённые» записи. Зачем Восстановление случайно удалённых данных Аудит и compliance: данные хранятся по законодательному требованию Сохранение связей: если Order ссылается на удалённого User — запись остаётся Реализация -- Миграция: добавить поле ALTER TABLE users ADD COLUMN deleted_at TIMESTAMP NULL DEFAULT NULL; -- "Удаление" UPDATE users SET deleted_at = NOW() WHERE id = 42; -- Запросы игнорируют "удалённых" SELECT * FROM users WHERE deleted_at IS NULL; Недостатки Таблица растёт и никогда не очищается — нужна архивация Unique constraints: удалённый email может блокировать новый аккаунт Более сложные JOIN-ы и запросы
SOLID
SOLID — пять принципов объектно-ориентированного дизайна, сформулированных Робертом Мартином. Вместе они описывают, как писать код, который легко читать, тестировать и изменять.Пять принциповS — Single Responsibility — класс должен иметь только одну причину для изменения. UserService не должен одновременно отправлять email и сохранять в БДO — Open/Closed — открыт для расширения, закрыт для модификации. Добавляйте новое поведение через новые классы, не изменяя старыеL — Liskov Substitution — дочерний класс должен быть заменителем родительского без изменения поведения программыI — Interface Segregation — лучше несколько узких интерфейсов, чем один широкий. Клиент не должен зависеть от методов, которые не используетD — Dependency Inversion — зависите от абстракций, а не от конкретных реализаций
SPA (Single Page Application)
SPA (Single Page Application) — приложение, где браузер загружает одну HTML-страницу, а все последующие переходы происходят без перезагрузки: JavaScript динамически обновляет DOM и получает данные через API.ПреимуществаПлавная навигация без «мигания» страницыЛогика UI в JavaScript — сервер возвращает только данные (JSON API)Можно преобразовать в PWA (Progressive Web App)НедостаткиSEO — поисковые боты плохо обходят JavaScript-контент. Решается через SSR или Static GenerationПервая загрузка — большой JS-бандл может долго парситься на слабых устройствахСложнее разработка — управление состоянием, роутинг, авторизация — всё на JSПопулярные фреймворкиReact, Vue, Angular, Svelte. Часто сочетаются с метафреймворками (Next.js, Nuxt, SvelteKit), добавляющими SSR и Static Generation.
Spread-оператор (...)
Spread-оператор (...) в PHP распаковывает массив или Traversable в список аргументов или элементов. Упрощает передачу переменного числа аргументов и слияние массивов. Распаковка в аргументы function sum(int ...$nums): int { return array_sum($nums); } $numbers = [1, 2, 3]; echo sum(...$numbers); // 6 Variadic functions function log(string $level, string ...$messages): void { foreach ($messages as $msg) { echo "[$level] $msg\n"; } } log('info', 'Started', 'Connected', 'Done'); Слияние массивов (PHP 8.1 — string keys) $defaults = ['color' => 'blue', 'size' => 'M']; $custom = ['color' => 'red']; $result = [...$defaults, ...$custom]; // ['color' => 'red', 'size' => 'M']
SQL-инъекция
SQL-инъекция — атака, при которой злоумышленник вставляет произвольный SQL-код в запрос через входные данные. Если приложение подставляет их без экранирования, атакующий может читать любые данные, изменять или удалять их, а в некоторых СУБД — выполнять команды ОС.Классический примерЗапрос SELECT * FROM users WHERE email = '{$email}' с вводом ' OR 1=1 -- превращается в WHERE email = '' OR 1=1 --' — и возвращает всех пользователей.ЗащитаПараметризованные запросы / Prepared Statements — единственный надёжный способ. Данные и SQL-код всегда разделены на уровне протокола БДORM — большинство современных ORM используют prepared statements автоматическиWhitelist-валидация — проверять, что значение входит в разрешённый список, а не просто экранироватьНикогда не подставляйте данные пользователя напрямую в SQL-строку, даже после addslashes()
SSH
SSH (Secure Shell) — протокол для защищённого подключения к удалённому серверу по сети. Заменил небезопасный Telnet, где данные шли открытым текстом. Каждый разработчик, деплоящий на VPS или использующий Git-репозиторий, ежедневно пользуется SSH.АутентификацияПо паролю — удобно, но уязвимо к брутфорсу. Лучше отключитьПо ключу — пара приватного и публичного ключа. Приватный лежит у вас, публичный — на сервере в ~/.ssh/authorized_keys. Безопасно и удобноТипичные командыssh user@server.com # подключение ssh-keygen -t ed25519 # генерация ключей ssh-copy-id user@server.com # копирование публичного ключаSSH TunnelingSSH позволяет пробросить локальный порт через зашифрованный туннель: например, подключиться к БД на продакшн-сервере с ноутбука без открытия порта БД наружу.
SSR (Server-Side Rendering)
SSR (Server-Side Rendering) — генерация HTML на сервере при каждом запросе и отправка готовой разметки в браузер. Браузер получает полноценный HTML сразу, без ожидания JavaScript. Противоположность — CSR (Client-Side Rendering, то есть SPA).Преимущества SSRSEO — поисковые боты сразу видят весь контентПервая отрисовка — контент виден до того, как выполняется JSСлабые устройства — меньше работы для браузераНедостаткиКаждый запрос — работа сервера, что повышает нагрузкуМедленнее навигация (по сравнению со SPA) без streaming или partial renderingПодходыTraditional SSR — PHP, Ruby, Python рендерят HTML-шаблоны. Проверено годамиHydration — сервер рендерит HTML, клиент «оживляет» его JS-компонентами (Next.js, Nuxt)Static Generation (SSG) — HTML строится при деплое, а не при запросе. Максимально быстро
SSRF (Server-Side Request Forgery)
SSRF — атака, при которой злоумышленник заставляет сервер выполнить HTTP-запрос к произвольному адресу от своего имени. Сервер «проксирует» запрос — и атакующий получает доступ к ресурсам, недоступным снаружи: внутренние сервисы, metadata-сервис облака, локальная сеть. Пример Приложение загружает изображение по URL от пользователя: fetch_image?url=http://.... Злоумышленник передаёт url=http://169.254.169.254/latest/meta-data/ — AWS metadata endpoint. Сервер получает IAM-токены и возвращает их. Защита Whitelist разрешённых доменов — не доверяйте произвольным URL от пользователя Блокировать запросы к приватным IP: 127.0.0.1, 10.x, 172.16-31.x, 192.168.x, 169.254.x Проверять IP после DNS-резолюции — DNS rebinding обходит проверку хоста IMDSv2 на AWS — токенизированный доступ к metadata
Strangler Fig Pattern
Strangler Fig — стратегия постепенной миграции монолитной системы на новую архитектуру. Новый код «обрастает» старый, как дерево-душитель обрастает хозяина — и постепенно заменяет его, не останавливая систему. Как это происходит Перед монолитом ставится прокси (API Gateway или Nginx) Новые фичи реализуются в новых микросервисах Части монолитного функционала постепенно переносятся в новые сервисы Прокси переключает трафик с монолитного эндпоинта на новый Когда весь функционал перенесён — моноліт выключается Преимущества Нулевой риск: в любой момент можно откатить на монолитный эндпоинт Система работает всё время миграции Постепенное накопление опыта команды с микросервисами Альтернатива Big Bang rewrite — переписать всё сразу. Статистически провальный подход для больших систем.
Strategy Pattern
Strategy — паттерн, выносящий изменяемое поведение в отдельный класс (стратегию) и позволяющий подменять его в runtime. Класс зависит от интерфейса стратегии, а не от конкретной реализации.Примерinterface SortStrategy { sort(array $data): array; } class QuickSort implements SortStrategy { ... } class MergeSort implements SortStrategy { ... } class Sorter { public function __construct(private SortStrategy $strategy) {} public function sort(array $data): array { return $this->strategy->sort($data); } }Когда применятьЕсть несколько вариантов одного алгоритма и нужно переключаться между нимиХотите избежать больших if/switch в коде, выбирающем алгоритмПоведение должно конфигурироваться снаружи или меняться в runtime