Глосарій

Словник веб-розробника

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

228 термінів
47 літер
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, автоматичне перепідключення, text-only WebSocket — двонаправлений, бінарні дані, складніший SSE ідеальний для live-дашбордів, стрімінгу нотифікацій, цін, прогресу задач.
Serverless
Serverless — модель розгортання, де ви пишете функцію (handler) і платите лише за час її виконання. Сервери існують, але ви про них не думаєте: провайдер масштабує автоматично від нуля до мільярдів викликів.Як це працюєВи завантажуєте код. При HTTP-запиті або події (S3 upload, черга) провайдер запускає контейнер з вашою функцією, виконує її і зупиняє. «Холодний старт» — перший виклик після простою — може додавати затримку (десятки мс — секунди).Коли підходитьНерівномірне навантаження: від нуля до пікових значеньEvent-driven задачі: обробка файлів, вебхуки, тригери від БДMVP і prototypes — нема потреби налаштовувати сервериКоли не підходитьДовготривалі процеси (ліміт виконання 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. У сучасному коді замінюється реєстрацією через IoC-контейнер як singleton-залежність.
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