Глосарій
Словник веб-розробника
Визначення технічних термінів з PHP, DevOps, MySQL та AI — з прикладами коду та поясненнями простою мовою.
228
термінів
47
літер
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 popularized її через 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 — потужний, з runner'ами на власній інфраструктурі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) записує очікування у "contract" (pact-файл)
Contract публікується у 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. Cookie надсилаються серверу автоматично і можуть бути 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 будує денормалізовані проєкції зручні для читання. Висока складність, але повна аудит-трейл і можливість «перемотати» стан.Застереження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 коректно відобразив кирилицю.