Глоссарий

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

Визначення технічних термінів з 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 корректно отобразил кириллицу.