Глоссарий
Словарь веб-разработчика
Визначення технічних термінів з PHP, DevOps, MySQL та AI — з прикладами коду та поясненнями простою мовою.
228
терминов
46
букв
C
Canary Deployment
Canary Deployment — стратегия постепенного развёртывания новой версии: сначала лишь малый процент трафика поступает на новую версию (1% → 5% → 10% → 100%). Если метрики в норме — развёртывание продолжается. При проблемах — откат без широкого влияния.
Схема
Load Balancer
├── v1 (95%) ── стабильная версия
└── v2 (5%) ── новая "canary" версия
Преимущества
Реальные пользователи тестируют новую версию на продакшн-трафике
Проблемы выявляются на 1% трафика, а не на всех
Плавное переключение без downtime
Vs Blue-Green
Blue-Green: трафик переключается мгновенно (0% или 100%)
Canary: постепенно (1% → ... → 100%)
Реализация
Nginx upstream weights, Kubernetes traffic splitting, AWS CodeDeploy Canary, Istio.
CDN
CDN (Content Delivery Network) — распределённая сеть серверов по всему миру, раздающая статические файлы с узла, географически ближайшего к пользователю. Файл, хранящийся на сервере в Киеве, загружается с узла в Лондоне для британского пользователя — без задержек через Атлантику.Что кешируется CDNИзображения, CSS, JavaScript, шрифтыВидео и крупные файлы для скачиванияСтатические HTML-страницы (для JAMstack)ПреимуществаМеньше задержка (latency) — физически ближе к пользователюРазгрузка origin-сервера — большинство запросов обрабатывает CDNЗащита от DDoS — CDN поглощает трафик атаки на edge-узлахПопулярные решенияCloudflare (есть бесплатный план), AWS CloudFront, Fastly, BunnyCDN.
Chaos Engineering
Chaos Engineering — дисциплина намеренного введения сбоев в систему (отключение сервисов, повышение задержки, завершение процессов) для проверки устойчивости к отказам до того как они возникнут в реальной жизни. Netflix популяризировала её через Chaos Monkey.
Принципы
Определите «стационарное состояние» — нормальное поведение системы (RPS, latency, error rate)
Сформулируйте гипотезу: «если убить один Pod — система продолжит работу»
Введите сбой в контролируемых условиях (начинайте со staging)
Сравните реальное состояние с гипотезой
Типичные эксперименты
Отключить один из микросервисов
Увеличить latency к внешнему API на 2 секунды
Симулировать полный сбой БД
Заполнить диск на 95%
Инструменты
Chaos Monkey (Netflix), LitmusChaos (Kubernetes), Gremlin, AWS Fault Injection Simulator.
CI/CD
CI/CD (Continuous Integration / Continuous Delivery) — практика автоматической сборки, тестирования и доставки кода после каждого коммита. Цель: сократить время между написанием кода и его появлением на продакшне, выявляя проблемы как можно раньше.CI — Continuous IntegrationКаждый push запускает автоматический пайплайн: установка зависимостей, статический анализ, юнит-тесты, интеграционные тесты. Если что-то сломалось — разработчик узнаёт сразу, а не через недели.CD — Continuous Delivery/DeploymentПосле успешного CI код автоматически или полуавтоматически доставляется на сервер. Delivery — деплой подтверждает человек, Deployment — полностью автоматически.Популярные инструментыGitHub Actions — встроен в GitHub, бесплатен для публичных репозиториевGitLab CI — мощный, с раннерами на собственной инфраструктуреJenkins — self-hosted, широко используется в enterpriseCircleCI / Bitbucket Pipelines — облачные решения
Circuit Breaker
Circuit Breaker (автоматический выключатель) — паттерн устойчивости для распределённых систем. Защищает от каскадных отказов: если зависимый сервис падает, автоматически «отключает» вызовы к нему и возвращает fallback-ответ вместо зависания.Три состоянияClosed (нормальная работа) — запросы проходят. Счётчик отказов растёт при ошибкахOpen (выключатель сработал) — запросы блокируются, сразу возвращается fallback. Устанавливается когда отказов > порогHalf-Open (проверка) — после timeout пропускается один тестовый запрос. Если успешно → Closed, если нет → обратно в OpenЗачемБез circuit breaker: медленный сервис A → потоки сервиса B зависают в ожидании → сервис B исчерпывает thread pool → падает весь кластер. Circuit breaker «отключает» сервис A и даёт остальной системе продолжить работу.
Clean Architecture
Clean Architecture (Роберт Мартин) — принцип организации кода концентрическими слоями, где внутренние слои не знают о внешних. Зависимости всегда направлены внутрь: от UI и БД — к бизнес-логике, а не наоборот.Слои (изнутри наружу)Entities — бизнес-правила предприятия. Ни от чего не зависятUse Cases — бизнес-правила приложения. Зависят только от EntitiesInterface Adapters — Controllers, Presenters, Gateways. Преобразуют формат между Use Cases и внешним миромFrameworks & Drivers — DB, Web, UI. Самый внешний слойПравило зависимостейКод во внутреннем слое никогда не упоминает что-либо из внешнего. Зависимость инжектируется через интерфейс.Родственные концепцииHexagonal Architecture (Ports & Adapters), Onion Architecture — разные названия для схожей идеи: защитить доменную логику от инфраструктуры.
Clickjacking
Clickjacking (UI Redress Attack) — атака, при которой злоумышленник накладывает прозрачный iframe вашего сайта поверх своей страницы. Пользователь думает, что кликает на кнопку вредоносного сайта, а на самом деле взаимодействует с вашим — подтверждает транзакцию, меняет настройки.
Защита
X-Frame-Options — старый заголовок. DENY запрещает любое встраивание, SAMEORIGIN — только с того же домена
Content-Security-Policy: frame-ancestors — современная замена. Гибче: можно разрешить конкретные домены
// Nginx
add_header X-Frame-Options "DENY";
add_header Content-Security-Policy "frame-ancestors 'none'";
// PHP
header('X-Frame-Options: SAMEORIGIN');
header("Content-Security-Policy: frame-ancestors 'self' https://trusted.com");
Отличие от CSRF
CSRF подделывает HTTP-запрос. Clickjacking заставляет пользователя самостоятельно кликнуть на правильный элемент — не подделывает запрос, а манипулирует кликом.
Code Review
Code review — процесс проверки кода другим разработчиком до мерджа в основную ветку. Находит баги, распространяет знания команды и поддерживает качество кодовой базы. Исследования показывают: code review находит ~60% дефектов на ранней стадии.Что проверятьКорректность: решает ли код задачу? Нет ли edge cases?Читаемость: легко ли читать и поддерживать?Безопасность: SQL-инъекции, XSS, утечки данныхПроизводительность: N+1, отсутствующие индексы, лишние запросыСоответствие стилю и конвенциям проектаПравила хорошего ревьюераКомментируйте код, а не автора: «функция делает X, но лучше Y» вместо «ты сделал неправильно»Объясняйте почему, а не только что изменитьРазличайте блокеры и предложения: nit: — не критично
Command Pattern
Command — паттерн, инкапсулирующий запрос в виде объекта. Отправитель не знает, кто и как выполнит команду — он просто вызывает execute(). Это позволяет ставить команды в очередь, логировать, отменять (undo).
Участники
Command — интерфейс с методом execute()
ConcreteCommand — реализация, знающая получателя и действие
Invoker — хранит и вызывает команды
Receiver — объект, выполняющий реальную работу
Пример
interface Command {
public function execute(): void;
public function undo(): void;
}
class SendEmailCommand implements Command {
public function execute(): void { /* отправить */ }
public function undo(): void { /* отменить */ }
}
class CommandBus {
private array $history = [];
public function dispatch(Command $cmd): void {
$cmd->execute();
$this->history[] = $cmd;
}
}
Где используется
CQRS (Command Bus), очереди задач, транзакционный скрипт, undo/redo в редакторах.
Composer
Composer — менеджер зависимостей для PHP. Он определяет нужные пакеты, загружает их, разрешает конфликты версий и генерирует автозагрузчик. Почти каждый современный PHP-проект начинается с composer.json.Ключевые командыcomposer require vendor/package — добавить пакетcomposer install — установить зависимости из composer.lockcomposer update — обновить зависимости и перегенерировать lock-файлcomposer dump-autoload — перегенерировать autoloadercomposer.json vs composer.lockcomposer.json — диапазоны версий ("^2.0"). composer.lock — точные версии, зафиксированные при установке. Lock-файл гарантирует, что все члены команды и CI-серверы используют одинаковые версии. Всегда коммитьте composer.lock.
Connection Pool
Connection Pool — набор заранее установленных соединений с базой данных, повторно используемых между запросами. Открыть новое соединение с БД — дорогая операция (TCP handshake, аутентификация). Пул позволяет взять готовое соединение вместо открытия нового.Как это работаетПри старте приложение открывает N соединений. Каждый запрос берёт соединение из пула, использует и возвращает обратно. Если все соединения заняты — запрос ждёт или получает ошибку timeout.Ключевые параметрыmin/max connections — минимум и максимум соединений в пулеconnection timeout — сколько ждать свободного соединенияidle timeout — после какого времени простоя закрыть соединениеPHP и persistent connectionsPHP-FPM + MySQL: каждый воркер имеет свой пул. Для централизованного пулинга между воркерами используют PgBouncer (PostgreSQL) или ProxySQL (MySQL).
Container Registry
Container Registry (реестр контейнеров) — хранилище Docker-образов, аналог npm registry для JavaScript или Packagist для PHP. Хранит версионированные образы, откуда их загружают серверы при деплое.
Как используется
# Сборка образа
docker build -t myapp:1.2.0 .
# Тег для реестра
docker tag myapp:1.2.0 registry.example.com/myapp:1.2.0
# Публикация
docker push registry.example.com/myapp:1.2.0
# На сервере
docker pull registry.example.com/myapp:1.2.0
docker run registry.example.com/myapp:1.2.0
Популярные решения
Docker Hub — публичный, бесплатный для публичных образов
GitHub Container Registry (GHCR) — интеграция с GitHub Actions
AWS ECR, Google Artifact Registry — облачные, интегрированные с кластерами
Harbor — self-hosted, open-source
Теги и версионирование
latest — опасен в продакшне: при каждом pull можно получить другой образ. Всегда закрепляйте конкретный тег или SHA-digest.
Content-Type и MIME-типы
Content-Type — HTTP-заголовок, сообщающий получателю формат тела сообщения. MIME-тип (Multipurpose Internet Mail Extensions) — стандарт идентификации типа контента в формате type/subtype.
Распространённые MIME-типы
application/json — JSON-данные (REST API)
application/x-www-form-urlencoded — данные HTML-формы
multipart/form-data — форма с файлами
text/html; charset=utf-8 — HTML-страница
text/plain — простой текст
image/png, image/webp, image/svg+xml
application/pdf
application/octet-stream — бинарные данные (generic скачивание)
Использование
// Ответ сервера
header('Content-Type: application/json; charset=utf-8');
echo json_encode($data);
// Скачивание файла
header('Content-Type: application/pdf');
header('Content-Disposition: attachment; filename="invoice.pdf"');
readfile($path);
Accept заголовок
Клиент указывает, какие типы принимает: Accept: application/json, text/html. Сервер может вернуть разный формат в зависимости от этого (Content Negotiation).
Contract Testing
Contract Testing — тип тестирования, проверяющий соответствие между сервисами-потребителями (consumer) и поставщиками (provider) API. Вместо запуска обоих сервисов одновременно — каждая сторона проверяет контракт независимо.
Проблема, которую решает
При микросервисной архитектуре сервис A ожидает от сервиса B поле user_id, но B переименовал его в userId. Интеграционные тесты не всегда улавливают такие изменения вовремя.
Consumer-Driven Contract Testing
Consumer (A) записывает ожидания в "контракт" (pact-файл)
Контракт публикуется в Pact Broker
Provider (B) автоматически проверяет, что соответствует контракту
Если B изменит API — тест провалится ещё до деплоя
Инструменты
Pact — наиболее популярный фреймворк. Поддерживает PHP, Node, Java, Go и другие. Pact Broker — центральное хранилище контрактов.
Cookie
Cookie — небольшой фрагмент данных, который сервер отправляет браузеру в заголовке Set-Cookie, а браузер автоматически возвращает при каждом последующем запросе к тому же домену. Благодаря этому stateless HTTP «помнит» пользователя.Атрибуты cookieHttpOnly — JavaScript не может прочитать cookie. Защита от XSS-кражиSecure — передаётся только по HTTPSSameSite=Lax/Strict — ограничение cross-site отправки. Защита от CSRFExpires / Max-Age — время жизни; без него cookie сессионная (удаляется при закрытии браузера)Domain / Path — к каким URL отправляется cookieCookie vs localStoragelocalStorage больше (5–10 МБ vs 4 КБ), доступен только из JavaScript. Cookies отправляются серверу автоматически и могут быть HttpOnly (недоступны для JS). Для сессий и токенов безопаснее HttpOnly-cookies.
CORS
CORS (Cross-Origin Resource Sharing) — механизм браузера, который разрешает или запрещает JavaScript-коду на одном домене делать запросы к другому. Браузер проверяет заголовки ответа сервера и решает, может ли клиентский код получить доступ к данным.Как это работаетДля «непростых» запросов (POST с JSON, кастомные заголовки) браузер сначала отправляет preflight-запрос методом OPTIONS. Сервер возвращает заголовки, разрешающие или запрещающие запрос. Если разрешено — браузер отправляет основной запрос.Ключевые заголовкиAccess-Control-Allow-Origin — домен(ы), которым разрешён доступ (* или конкретный домен)Access-Control-Allow-Methods — разрешённые HTTP-методыAccess-Control-Allow-Headers — разрешённые заголовки запросаAccess-Control-Allow-Credentials — можно ли отправлять cookie с запросомНастройка на сервереCORS-заголовки устанавливает сервер — через middleware, конфигурацию Nginx/Apache или непосредственно в коде. Ошибка «blocked by CORS policy» всегда решается на стороне сервера, а не клиента.
CQRS
CQRS (Command Query Responsibility Segregation) — паттерн разделения моделей чтения и записи. Commands изменяют состояние, Queries — читают его. Они используют разные модели, а иногда и разные хранилища.ЗачемЧтение и запись имеют разные требования: запросы на чтение — сложные JOIN-ы и агрегации; команды — транзакционная целостность. Разделение позволяет оптимизировать каждое независимо.Простой CQRSОдна БД, но разные классы: CreateOrderCommand и OrderSummaryQuery. Минимальная сложность, но уже даёт структуру.Полный CQRS с Event SourcingWrite-side хранит события (Event Store), read-side строит денормализованные проекции для чтения. Высокая сложность, но полный audit trail и возможность «перемотать» состояние.ПредостережениеCQRS добавляет сложность. Оправдан в сложных доменах с разной нагрузкой на чтение и запись. Для CRUD-приложений — лишний.
Critical Rendering Path
Critical Rendering Path (CRP) — последовательность шагов, которые браузер выполняет от получения HTML до первой отрисовки пикселей на экране. Оптимизация CRP напрямую влияет на LCP и Time to First Paint.
Шаги
Загрузка HTML → построение DOM
Загрузка CSS → построение CSSOM
DOM + CSSOM → Render Tree
Layout (reflow) — вычисление размеров и позиций
Paint — рисование пикселей
Render-blocking ресурсы
CSS и синхронный JS блокируют построение Render Tree. До завершения их загрузки браузер ничего не рисует.
Оптимизации
Critical CSS inline в <head> — стили above-the-fold загружаются без запроса
<link rel="stylesheet" media="print"> — некритичный CSS не блокирует рендер
<script defer> или async — JS не блокирует парсинг HTML
<link rel="preload"> — загрузить критичные ресурсы раньше
Cron
Cron — планировщик задач Unix/Linux, выполняющий команды по расписанию. Конфигурация хранится в crontab — таблице записей вида «каждую минуту», «в 3:00 каждое воскресенье» и т. д.Синтаксис crontab# мин час день месяц день_недели команда
0 3 * * * /usr/bin/php /app/backup.php # ежедневно в 3:00
*/15 * * * * curl https://api.example.com/ping # каждые 15 минПять полей: минуты (0–59), часы (0–23), день месяца (1–31), месяц (1–12), день недели (0–7, 0 и 7 — воскресенье). * — любое значение, */N — каждые N.Подводные камниCron работает в минимальном окружении — переменные среды могут отсутствовать. Указывайте полные пути к командамЕсли задача выполняется дольше интервала — запустятся параллельные экземпляры. Используйте lock-файлы или flockЛогируйте вывод: command >> /var/log/job.log 2>&1
CSRF
CSRF (Cross-Site Request Forgery) — атака, вынуждающая браузер авторизованного пользователя отправить поддельный запрос на сервер от его имени. Браузер автоматически добавляет cookie — поэтому сервер считает запрос легитимным.Как это происходитЖертва залогинена на bank.com. Она открывает вредоносную страницу, где скрытый <form> автоматически отправляет POST на bank.com/transfer. Браузер добавляет cookie банка — и перевод происходит.ЗащитаCSRF-токен — сервер генерирует уникальный непредсказуемый токен и вкладывает его в скрытое поле формы (<input type="hidden" name="_token" value="...">). При получении формы сервер сверяет токен с тем, что хранится в сессииSameSite cookie — атрибут SameSite=Lax/Strict запрещает браузеру отправлять cookie в cross-site запросах. Наиболее эффективная современная защитаStateless API с Bearer-токенами в заголовке не уязвимы к CSRF
CSS Custom Properties (переменные)
CSS Custom Properties (переменные) — значения, хранящиеся в CSS и доступные всему документу. Объявляются через --название, используются через var(--название). Основа дизайн-систем и тем.
Синтаксис
/* Объявление в :root — глобальная область */
:root {
--color-primary: #c05c08;
--spacing-md: 16px;
--radius: 8px;
}
/* Использование */
.btn {
background: var(--color-primary);
padding: var(--spacing-md);
border-radius: var(--radius);
}
/* Fallback */
color: var(--text-color, #333);
Динамическое изменение через JS
document.documentElement.style
.setProperty('--color-primary', '#0066cc');
Vs Sass/Less переменные
Sass/Less переменные компилируются на этапе сборки — статические. CSS custom properties живут в браузере — динамические, наследуются по DOM, меняются JS и media queries.
CSS Grid
CSS Grid — двумерная система раскладки в CSS. Позволяет размещать элементы одновременно по строкам и столбцам. Идеален для сложных страничных layouts, карточных сеток и любых двумерных конструкций.
Основы
.grid {
display: grid;
grid-template-columns: 1fr 1fr 1fr; /* 3 равных столбца */
grid-template-columns: repeat(3, 1fr); /* то же самое */
grid-template-columns: 200px 1fr 2fr; /* смешанные единицы */
gap: 20px; /* отступы */
}
/* Элемент занимает 2 столбца */
.featured {
grid-column: span 2;
}
Auto-fill vs Auto-fit
/* Столько карточек, сколько поместится (мин 250px) */
grid-template-columns: repeat(auto-fill, minmax(250px, 1fr));
Named Areas
.page {
grid-template-areas:
"header header"
"sidebar main"
"footer footer";
}
header { grid-area: header; }
CSV
CSV (Comma-Separated Values) — текстовый формат таблиц: каждая строка — запись, значения разделены запятой (или точкой с запятой). Простейший формат для обмена данными между Excel, БД и приложениями.
Формат
id,name,email,created_at
1,Alice,alice@example.com,2025-01-15
2,Bob,"Doe, Bob",2025-02-20
Значения с запятой или кавычками берутся в двойные кавычки. Кавычки внутри значения — удваиваются: "".
PHP
// Чтение
$file = fopen('users.csv', 'r');
while (($row = fgetcsv($file)) !== false) {
[$id, $name, $email] = $row;
}
fclose($file);
// Запись
$file = fopen('export.csv', 'w');
fputcsv($file, ['id', 'name', 'email']); // header
fputcsv($file, [1, 'Alice', 'alice@example.com']);
fclose($file);
Подводные камни
Кодировка: Excel по умолчанию открывает в Windows-1252, а не UTF-8. Добавь BOM (\xEF\xBB\xBF) в начало файла, чтобы Excel корректно отобразил кириллицу.