Глоссарий

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

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

228 терминов
46 букв
R
Race Condition
Race condition (состояние гонки) — ошибка, возникающая когда результат зависит от порядка выполнения параллельных операций. Классический пример: два запроса одновременно читают баланс ($100), оба снимают $80, оба записывают $20 — но должно быть -$60.В БДРешается транзакциями с подходящим уровнем изоляции или SELECT ... FOR UPDATE — блокировка строки до конца транзакции.В кэшеАтомарные операции Redis (INCR, SETNX, Lua-скрипты) предотвращают гонку на уровне кэша.Оптимистичная vs пессимистичная блокировкаОптимистичная — при записи проверяем, изменились ли данные с момента чтения (version number / CAS). Нет блокировок, но возможен retryПессимистичная — блокируем ресурс при чтении, чтобы никто не изменил. Без retry, но снижает параллелизм
RAG (Retrieval-Augmented Generation)
RAG — архитектурный паттерн, дополняющий LLM актуальными данными из внешнего хранилища. Вместо того чтобы «запоминать» все факты в параметрах модели, нужная информация находится во время запроса и передаётся в контекст.Схема RAGПользователь задаёт вопросСистема векторным поиском находит релевантные документыДокументы добавляются в промпт как контекстLLM генерирует ответ на основе контекстаПреимуществаАктуальные данные без переобучения моделиКонтроль источников — ответы основаны на конкретных документахСнижение галлюцинаций для фактических вопросовКогда нуженQ&A по корпоративной документации, поиск в большой базе знаний, чатбот, отвечающий на вопросы по продукту.
Rate Limiting
Rate limiting — ограничение количества запросов от одного клиента (IP, токен, user_id) за единицу времени. Защищает от DDoS, брутфорса паролей, злоупотреблений API и снижает нагрузку на серверы.АлгоритмыFixed window — N запросов за фиксированный интервал (например, 100 в минуту). Прост, но уязвим к пиковым атакам на границах оконSliding window — скользящее окно, более равномерное распределениеToken bucket — клиент получает «жетоны» с фиксированной скоростью и тратит по одному на запрос. Допускает короткие burst-ыLeaky bucket — запросы обрабатываются равномерно, независимо от burst-овРеализацияХраните счётчики в Redis — он поддерживает атомарный инкремент и TTL. HTTP-ответ при превышении лимита: 429 Too Many Requests с заголовком Retry-After.
readonly (PHP 8.1)
readonly — модификатор PHP 8.1, позволяющий записать свойство только один раз (в конструкторе) и запрещающий любые последующие изменения. Идеален для Value Objects и DTO — гарантирует неизменяемость без лишнего кода. Пример class Money { public function __construct( public readonly int $amount, public readonly string $currency, ) {} } $price = new Money(100, 'RUB'); echo $price->amount; // 100 $price->amount = 200; // Error: Cannot modify readonly property readonly class (PHP 8.2) PHP 8.2 добавил readonly class — все свойства класса автоматически становятся readonly. Не нужно писать модификатор для каждого. readonly class Point { public function __construct( public float $x, public float $y, ) {} }
Redis
Redis — in-memory хранилище данных со структурами string, hash, list, set, sorted set и stream. Поскольку все данные хранятся в RAM, операции выполняются за микросекунды. Чаще всего используется как кэш, брокер очередей и pub/sub-система.Типичные сценарииКеширование — сохранить результат тяжёлого SQL-запроса на N секундСессии — быстрое хранение сессий вместо базы данныхОчереди — надёжный брокер для фоновых задач; воркер читает задачи через BRPOP или StreamsRate limiting — атомарный инкремент счётчика запросов за временное окноPub/Sub — трансляция событий между сервисами в реальном времениПерсистентностьRedis хранит данные в памяти, но поддерживает два режима дампа на диск: RDB (снимки) и AOF (лог всех операций). Для кэша персистентность не критична — для очередей лучше включить AOF.
Repository Pattern
Repository — паттерн, изолирующий бизнес-логику от деталей хранения данных. Вместо того чтобы писать SQL-запросы или обращаться к ORM напрямую в сервисах, вся работа с БД инкапсулируется в отдельный класс-репозиторий.Что даётБизнес-логика не знает, откуда берутся данные: из MySQL, Redis или внешнего APIЛегко заменить реализацию в тестах на in-memory или mockЗапросы сосредоточены в одном месте — легче найти и оптимизироватьПростая структураinterface UserRepository { findById(int $id): ?User; save(User $user): void; } class SqlUserRepository implements UserRepository { ... }Когда не нуженВ небольших CRUD-приложениях Repository — излишнее усложнение. Оправдан там, где бизнес-логика сложна и нужна независимость от источника данных.
REST
REST (Representational State Transfer) — архитектурный стиль для построения API поверх HTTP. Ресурсы адресуются через URL, а действия над ними — через стандартные HTTP-методы. REST — не протокол и не стандарт, а набор ограничений, которые делают API предсказуемым и масштабируемым.Ключевые принципыStateless — каждый запрос содержит всю необходимую информацию, сервер не хранит состояние между запросамиЕдиный интерфейс — GET читает, POST создаёт, PUT/PATCH обновляет, DELETE удаляетРесурсы — существительные в URL (/users/42), не глаголы (/getUser)Кешируемость — ответы могут кешироваться, снижая нагрузкуКоды ответов200 OK, 201 Created, 400 Bad Request, 401 Unauthorized, 404 Not Found, 422 Unprocessable Entity, 500 Internal Server Error — правильное их использование делает API самодокументируемым.
Rolling Update
Rolling Update — стратегия обновления, при которой новая версия разворачивается постепенно: по одной или небольшими группами обновляются инстансы, при этом старая версия продолжает обрабатывать запросы. Нулевой downtime без удвоения ресурсов. Схема Начало: [v1][v1][v1][v1] Шаг 1: [v2][v1][v1][v1] ← один инстанс обновлён Шаг 2: [v2][v2][v1][v1] Шаг 3: [v2][v2][v2][v1] Конец: [v2][v2][v2][v2] Параметры maxUnavailable — сколько инстансов может быть недоступно одновременно maxSurge — сколько дополнительных инстансов разрешено запустить сверх нормы Проблема совместимости версий Во время rolling update одновременно работают и v1, и v2. Если v2 изменила схему БД — v1 может не понять новые данные. Решения: backward-compatible миграции или feature flags. Vs Blue-Green, Canary Rolling Update — наиболее бюджетный вариант (без дополнительных ресурсов). Blue-Green требует двойных ресурсов. Canary — тонкий контроль над распределением трафика.