Глоссарий
Термины курса простыми словами — без академизма и без имён на обложках. Если по ходу истории что-то забылось, загляни сюда.
277 терминов
- связанность (coupling)
- Насколько изменение в одном месте вынуждает менять другое. Не дефект — свойство любой системы; вопрос лишь в том, сколько её и какая.
- поток знания
- Направление, в котором одно знает про другое. Течёт против стрелки зависимости: кто вызывает — тот и должен знать устройство того, кого вызывает.
- upstream / downstream
- Upstream — тот, чьим знанием пользуются; downstream — тот, кто вынужден это знание усвоить и подстраиваться под его изменения.
- upstream
- Компонент, чьим функционалом и знанием пользуются другие. Его изменения способны сломать тех, кто ниже по потоку.
- downstream
- Компонент-потребитель: он знает устройство upstream и обязан меняться вслед за ним.
- essential vs accidental
- Существенные связи нужны для цели системы. Случайные — паразитные (как чтение чужих таблиц): их можно и нужно убирать.
- каскадные изменения
- Когда правка в одном месте тянет за собой обязательные правки в других. Распространяются ровно по потоку общего знания.
- контракт
- Явно согласованный узкий интерфейс между компонентами (API, представление). Прячет внутреннее устройство и переносит минимум знания.
- инкапсуляция
- Сокрытие внутреннего устройства за интерфейсом: снаружи видно «что делает», но не «как устроено внутри».
- неявное знание
- Предположения, которые нигде не записаны: «сервер в UTC», «заказы не удаляются», «колонка называется так». Самые опасные связи — их не видно, пока не порвутся.
- SLO (service level objective)
- Внутренняя цель по качеству сервиса: например, «99% запросов быстрее 200 мс». То, за чем команда следит сама.
- SLA (service level agreement)
- Обещание клиенту с последствиями за нарушение (штраф, компенсация). SLO обычно строже SLA — запас на всякий случай.
- перцентиль
- p95 = «95% запросов быстрее этого значения, худшие 5% — медленнее». Показывает хвост задержек, а не размытое среднее.
- p99
- 99-й перцентиль: только 1% запросов медленнее. Часто именно эти «худшие 1%» видят самые активные клиенты.
- медиана (p50)
- Значение, быстрее которого ровно половина запросов. В отличие от среднего, её не задирают редкие выбросы.
- хвостовые задержки (tail latency)
- Самые медленные запросы — правый хвост распределения. Обычно именно они портят впечатление, хотя среднее выглядит хорошо.
- усиление хвоста
- Если страница ждёт много бэкендов сразу, шанс поймать хотя бы один медленный растёт. Редкая задержка одного становится обычной для страницы.
- пропускная способность (throughput)
- Сколько запросов (или записей) система обрабатывает в единицу времени. Дополнение к задержке: одно про «сколько», другое про «как быстро».
- fault vs failure
- Fault — сбой одного компонента (упал диск). Failure — когда система в целом перестала делать своё дело. Цель — чтобы fault не превращался в failure.
- отказоустойчивость
- Способность системы продолжать работать, когда часть её компонентов вышла из строя.
- шторм ретраев (retry storm)
- Сервис тормозит → клиенты повторяют запросы → нагрузка растёт → он тормозит сильнее. Самоусиливающаяся лавина, из которой трудно выбраться.
- предохранитель (circuit breaker)
- Обёртка над вызовом: если сервис стабильно падает, она временно перестаёт его дёргать и быстро отвечает ошибкой — чтобы дать ему прийти в себя.
- экспоненциальная задержка
- Повторять неудачный запрос не сразу, а с растущей паузой (1с, 2с, 4с…) плюс случайный разброс — чтобы не долбить сервис синхронно.
- сброс нагрузки (load shedding)
- Осознанно отклонять часть запросов при перегрузе, чтобы обслужить остальные. Лучше ответить «нет» быстро, чем умереть под всеми сразу.
- обратное давление (backpressure)
- Сигнал «притормози» от получателя к отправителю, когда тот не успевает переваривать поток. Иначе очередь растёт до отказа.
- chaos engineering
- Намеренно ломать части системы в проде (гасить узлы, резать сеть), чтобы заранее убедиться, что она это переживает.
- OLTP
- Онлайн-обработка транзакций: много мелких чтений и записей по ключу, миллисекунды на запрос. Так работает оформление заказа.
- OLAP
- Аналитическая обработка: редкие тяжёлые запросы, сканирующие миллионы строк ради отчёта. Противоположность OLTP по паттерну доступа.
- Cynefin
- Рамка, которая делит проблемы по их природе: ясные, запутанные, сложные, хаотичные. Для каждой — свой способ действовать; универсального нет.
- когнитивная нагрузка
- Сколько всего нужно держать в голове, чтобы понять или изменить код. Чем выше — тем медленнее и рискованнее правки.
- известное незнание
- Ты знаешь, чего именно не знаешь, и можешь это выяснить анализом. Признак «запутанной», но не «сложной» задачи.
- неизвестное незнание
- Ты даже не подозреваешь, чего не знаешь. Такие задачи не просчитать заранее — только пробовать и смотреть, что выйдет.
- фиче-флаг (feature flag)
- Переключатель, который включает или прячет функциональность без нового деплоя. Позволяет катить код и открывать его постепенно.
- канареечный релиз
- Выкатить изменение сначала на малую долю трафика, посмотреть на метрики и только потом — на всех. Название — от канареек в шахтах.
- staging
- Отдельное окружение, максимально похожее на прод, где проверяют изменения перед выкаткой на реальных пользователей.
- переписывание с нуля (big-bang)
- Заменить работающую систему новой одним рывком. Соблазнительно и почти всегда болезненно: риск копится до самого включения.
- impedance mismatch
- Несовпадение форм: объекты в коде — деревья и графы, а реляционная таблица — плоская. Стыковать их приходится вручную или через ORM.
- ORM
- Библиотека, которая автоматически раскладывает объекты кода по таблицам и обратно. Экономит рутину, но прячет то, что реально уходит в базу.
- N+1 запросов
- Один запрос за списком плюс по одному за каждым элементом. Незаметно превращается в сотни обращений к базе на одну страницу.
- нормализация
- Хранить каждый факт ровно в одном месте, а ссылаться на него по id. Меньше дублей — но больше джойнов при чтении.
- денормализация
- Сознательно продублировать данные, чтобы читать их быстрее без джойнов. Плата — следить, чтобы копии не разъехались.
- JSONB
- Тип в PostgreSQL, хранящий JSON в бинарном виде с индексами. Удобно для гибких, вложенных данных без жёсткой схемы колонок.
- schema-on-read
- Схему данных трактуют при чтении, а не при записи. Гибко для разнородных данных, но структура ничем не гарантирована.
- event sourcing
- Хранить не текущее состояние, а полный журнал произошедших событий. Состояние — это результат их проигрывания по порядку.
- CQRS
- Разделить модель на запись и чтение: пишем в одном виде, читаем из другого, заточенного под запросы. Больше гибкости — больше движущихся частей.
- графовая модель
- Данные как узлы и связи между ними. Блестит там, где важны сами связи: соцграфы, маршруты, рекомендации.
- источник истины
- Место, где факт хранится в оригинале. Всё остальное (кэши, индексы, отчёты) — производное, которое можно пересобрать.
- производные данные
- То, что можно заново вычислить из источника истины: индексы, кэши, витрины. Потерять не страшно — пересоберётся.
- неустранимая сложность
- Сложность самой задачи: она есть при любом решении. Убрать нельзя — можно лишь честно с ней работать.
- привнесённая сложность
- Лишняя сложность, которую добавило наше решение, а не задача. Вот её и стоит вычищать.
- god-class
- Класс, который знает и делает слишком много. Меняешь одно — рискуешь задеть всё остальное, что он в себя вобрал.
- степени свободы
- Сколько независимых решений приходится держать в голове одновременно. Чем больше — тем труднее рассуждать о системе.
- наблюдаемость (observability)
- Возможность понять, что происходит внутри системы, по её сигналам снаружи: логи, метрики, трейсы. Без неё отладка — гадание.
- реплика для чтения
- Копия базы, которую нагружают только чтением (отчёты, аналитика), чтобы не мешать основной записи.
- модульность
- Разбиение системы на части, каждую из которых можно понять и менять, не держа в голове всё остальное.
- сокрытие информации
- Прятать самое переменчивое (детали реализации) за стабильным интерфейсом. Тогда изменения внутри не выплёскиваются наружу.
- абстракция
- Показать суть и спрятать детали. Хорошая абстракция даёт много пользы за простой интерфейс.
- глубокий модуль
- Простой интерфейс поверх богатой начинки. Максимум пользы за минимум того, что нужно знать снаружи.
- мелкий модуль
- Интерфейс почти такой же сложный, как содержимое. Пользы прячет мало, а знать про него нужно много — часто не окупается.
- протекающая абстракция
- Абстракция, сквозь которую всё равно приходится знать детали реализации. Обещала спрятать — а знание протекло наружу.
- big ball of mud
- Система без внятной структуры: всё связано со всем. Растёт сама собой, менять её страшно.
- связность (cohesion)
- Насколько элементы внутри модуля служат одной цели. Высокая связность — хорошо: всё, что меняется вместе, лежит рядом.
- модульный монолит
- Один процесс деплоя, но внутри — чёткие модули с границами и контрактами. Порядок микросервисов без их сетевой боли.
- распределённый монолит
- Худшее из двух миров: сервисы разнесли по сети, но связи оставили тесными. Меняешь один — приходится катить остальные.
- оверинжиниринг
- Заложить гибкость под будущее, которое может не наступить. Платишь сложностью сейчас за пользу, которой, возможно, не будет.
- сила интеграции
- Какой тип знания течёт через границу: детали реализации → правило → чужая модель → контракт. Чем «сильнее», тем чаще изменение проходит каскадом.
- интрузивная связь
- Зависимость от того, что автор вообще не считал интерфейсом: чужие таблицы, приватные поля. Сильнейший и самый хрупкий уровень.
- функциональная связь
- Модули делят не данные, а поведение: одно правило, инвариант, порядок действий. Меняться обязаны синхронно.
- модельная связь
- Наружу отдана внутренняя доменная модель. Каждый её рефакторинг задевает всех потребителей.
- контрактная связь
- Интеграция через «модель модели», спроектированную под задачи потребителя. Слабейший уровень: не привязан к внутренностям и версионируется.
- конасценция (connascence)
- Мера того, насколько сложное и неявное знание связывает два фрагмента кода: они «рождены вместе», если менять их приходится синхронно.
- симметричная связь
- Одно правило реализовано в двух местах. Ни вызова, ни импорта — только обязанность меняться синхронно. Самая невидимая связь.
- DRY
- «У каждого знания в системе — одно авторитетное представление». Лекарство от одного правила, размноженного по разным модулям.
- движок хранения
- То, как БД физически пишет и читает данные с диска. Определяет, при какой нагрузке она летает, а при какой задыхается.
- B-дерево
- Движок, обновляющий данные на месте страницами фиксированного размера. Отличные точечные чтения; каждая запись правит страницу и журнал. Так устроен PostgreSQL.
- LSM-дерево
- Движок, который только дописывает данные последовательными порциями и сливает их фоном. Высокая пропускная способность записи ценой более дорогого чтения.
- WAL (журнал упреждающей записи)
- Сначала БД дописывает изменение в последовательный журнал, потом правит сами страницы. Страховка на случай сбоя посреди записи.
- memtable
- Свежие записи LSM копятся в памяти в отсортированном виде и лишь потом сбрасываются на диск одним куском.
- SSTable
- Отсортированный неизменяемый файл, в который LSM сбрасывает memtable. Со временем такие файлы фоном сливаются.
- компакция
- Фоновое слияние файлов LSM: выбрасывает перезаписанные и удалённые значения, чтобы чтения не деградировали. Ест диск и CPU.
- амплификация записи
- Когда одна логическая запись превращается в несколько физических: журнал, страницы, каждый индекс. Главная причина, почему запись со временем дорожает.
- амплификация чтения
- Когда одно логическое чтение вынуждает заглянуть в несколько мест сразу. Плата LSM за дешёвую запись.
- страничный кэш (buffer pool)
- Горячие страницы БД, лежащие в RAM. Пока рабочий набор влезает — всё быстро; перестал влезать — каждое обращение падает на диск.
- bloom-фильтр
- Компактная структура, которая мгновенно отвечает «этого ключа здесь точно нет». Спасает LSM от лишних заглядываний в файлы.
- вторичный индекс
- Дополнительная структура для быстрого поиска не по первичному ключу. Ускоряет чтение — и облагает налогом каждую запись.
- выделение сервиса
- Вынести модуль из монолита в отдельный сервис за сетью. Не «переместить код», а решить, каким знанием он владеет и что отдаёт наружу.
- своя база у сервиса
- У каждого сервиса — собственное хранилище, в которое больше никто не лезет напрямую. Иначе общая база тайком снова всех связывает.
- частичный отказ
- За сетью вызов может не просто вернуть ошибку, а зависнуть или потеряться — и ты не узнаешь, дошёл он или нет. Особенность распределённых систем.
- распределённая транзакция
- Попытка сделать атомарной операцию через несколько сервисов сразу. Дорого, хрупко и держит блокировки по сети — обычно её избегают.
- идемпотентность
- Операция, которую можно безопасно повторить: второй и третий раз дают тот же результат, что и первый. Спасение там, где запрос мог потеряться.
- согласованность в конечном счёте
- Части системы сходятся к общему состоянию не мгновенно, а спустя короткое время. Плата за жизнь без распределённых транзакций.
- владение данными
- У каждого факта — один сервис-хозяин, который его меняет. Остальные спрашивают через контракт, а не правят напрямую.
- эволюция схемы
- Как менять формат сообщений и данных, не ломая тех, кто ещё живёт на старой версии. Правило: добавляй, но не удаляй и не переиспользуй.
- обратная совместимость
- Новый код умеет читать данные, записанные старым. Без неё нельзя обновиться, не переписав сразу всё.
- прямая совместимость
- Старый код спокойно читает данные, записанные новым, — просто игнорирует незнакомые поля. Нужна, пока обе версии живут вместе.
- Protocol Buffers
- Бинарный формат со схемой: компактный и с проверкой совместимости. Хорош для нагруженного межсервисного трафика.
- Avro
- Бинарный формат со схемой, заточенный под эволюцию: писатель и читатель могут иметь разные версии схемы.
- реестр схем
- Общее место, где хранятся версии схем сообщений. Позволяет проверять совместимость до того, как новая версия уедет в прод.
- постепенная выкатка (rolling upgrade)
- Обновляют узлы по очереди, поэтому какое-то время старая и новая версии кода работают одновременно. Значит, формат обязан быть добр к обеим.
- терпимый читатель (tolerant reader)
- Читай только те поля, что тебе нужны, и молча пропускай незнакомые. Тогда чужие добавления в сообщение тебя не ломают.
- сериализация
- Превращение объекта в памяти в поток байтов (для сети или диска) и обратно. Формат сериализации определяет, легко ли потом менять схему.
- дистанция
- «Расстояние» между связанными компонентами: разные процессы, сервисы, команды. Чем оно больше, тем дороже координировать совместное изменение.
- волатильность
- Как часто компонент, как ожидается, будет меняться. Выгода от чистой границы пропорциональна волатильности: вокруг стабильного её строить незачем.
- связанность жизненного цикла
- Компоненты вынуждены собираться, тестироваться и деплоиться вместе. Общий деплой связывает даже тех, кто по смыслу не связан.
- core-поддомен
- То, в чём бизнес выигрывает у конкурентов. Меняется чаще всего — самый волатильный, ему и нужны чистые границы.
- supporting-поддомен
- Нужен бизнесу, но не даёт преимущества и меняется редко. Вкладываться в его модульность обычно не окупается.
- generic-поддомен
- Задача, которую все решают одинаково (аутентификация, платёжный шлюз). Стабильна, и её чаще берут готовой, чем пишут.
- наведённая волатильность
- Стабильный сам по себе компонент, сильно связанный с волатильным, вынужден меняться вместе с ним — и становится волатильным заодно.
- сбалансированная связанность
- Цель — не убрать связи, а свести три оси (сила, дистанция, волатильность) так, чтобы система оставалась модульной: BALANCE = (STRENGTH XOR DISTANCE) OR NOT VOLATILITY.
- глобальная сложность
- Сильная связь, растянутая на большую дистанцию: изменение тащит за собой согласование через сервисы и команды. Худший угол — распределённый монолит.
- локальная сложность
- Слабая связь на малой дистанции: путаница есть, но она заперта в одном месте и наружу не расползается. Терпимо, иногда просто расточительно.
- репликация
- Хранить копии одних и тех же данных на нескольких узлах — чтобы пережить падение одного и разгрузить чтение.
- лидер и реплики (leader/follower)
- Один узел (лидер) принимает записи и раздаёт их копиям (follower). Реплики отвечают на чтение и готовы подхватить, если лидер упадёт.
- failover
- Автоматическое переключение на реплику, когда лидер упал. Спасает от простоя — но должно происходить быстро и без двух лидеров разом.
- синхронная репликация
- Лидер подтверждает запись только когда её приняла реплика. Ничего не теряется при падении — но лидер ждёт, и подвисшая реплика тормозит все записи.
- асинхронная репликация
- Лидер отвечает сразу, а репликам шлёт изменения следом. Быстро — но при падении лидера свежие, ещё не доехавшие записи можно потерять.
- отставание реплик (replication lag)
- Реплика получает изменения с задержкой, поэтому отдаёт слегка устаревшие данные. Отсюда «не вижу свою только что созданную запись».
- чтение своих записей
- Гарантия, что пользователь сразу видит то, что только что записал. Требует читать свои свежие данные с лидера, а не с отстающей реплики.
- шардирование (партиционирование)
- Разбить большой набор данных на части (шарды) по разным узлам — ради объёма и пропускной способности записи, которых не тянет одна машина.
- ключ шардирования
- Поле, по которому данные раскладываются на шарды. Самое дорогое решение: поменять его потом почти невозможно, а плохой выбор рождает горячий шард.
- горячий шард (hot spot)
- Один шард, на который легла непропорциональная доля нагрузки (например «по региону» → Москва). Больше железа ему не поможет — виноват ключ.
- согласованное хеширование
- Способ раскладывать ключи по узлам так, что при добавлении узла переезжает лишь малая часть данных, а не всё разом.
- ребалансировка шардов
- Перераспределение данных при добавлении/удалении узлов. Цель — переместить как можно меньше и не остановить систему.
- транзакция
- Группа операций, которые выполняются как одно целое: либо все вместе, либо никак. Основа денежных инвариантов.
- ACID
- Атомарность, согласованность, изоляция, долговечность — набор гарантий транзакции. Разные СУБД трактуют их по-своему, особенно изоляцию.
- уровень изоляции
- Договор о том, какие гонки между одновременными транзакциями СУБД берёт на себя, а какие оставляет тебе. От read committed до serializable.
- сериализуемость
- Сильнейшая изоляция: транзакции ведут себя так, будто выполнялись строго по одной. Дорого — поэтому включают точечно, где нужны деньги.
- snapshot isolation
- Каждая транзакция видит согласованный «снимок» данных на момент старта. Защищает от многого, но не от write skew.
- write skew
- Две транзакции читают одно и то же, каждая решает «всё ок» и пишет — а вместе нарушают инвариант. Так рождается отрицательный остаток.
- потерянное обновление
- Две транзакции читают значение, обе меняют и записывают — одно изменение затирает другое. Классика двойного списания.
- двухфазная блокировка (2PL)
- Способ добиться сериализуемости через блокировки: держишь их до конца транзакции. Надёжно, но снижает параллелизм.
- двухфазный коммит (2PC)
- Протокол, чтобы несколько узлов либо все закоммитили, либо все откатили. Дорог и хрупок (координатор — точка отказа) — обычно избегают.
- ненадёжная сеть
- Сеть теряет, задерживает и дублирует сообщения. Поэтому нельзя достоверно отличить медленный узел от упавшего — только гадать по таймауту.
- обнаружение сбоя по таймауту
- «Не ответил за N секунд — считаем упавшим». Это догадка, а не факт: узел может быть жив, просто завис или сеть тормозит.
- рассинхрон часов (clock skew)
- Часы разных узлов расходятся и скачут при синхронизации. Поэтому упорядочивать события по времени с их часов — ненадёжно.
- монотонные часы
- Часы, которые только идут вперёд и годятся для измерения интервалов. В отличие от «настенных», они не скачут назад при синхронизации.
- пауза процесса (GC)
- Сборка мусора или приостановка виртуалки могут заморозить процесс на секунды. Со стороны он «мёртв», а потом оживает зомби, не зная, сколько прошло.
- split-brain
- Два узла одновременно считают себя лидером и оба действуют. Итог — конфликты и двойная работа. Главный страх распределённых систем.
- fencing token
- Монотонный номер, выдаваемый вместе с правом на действие. Ресурс отвергает запросы со старым номером — так зомби-лидер не навредит.
- византийский отказ
- Узел ведёт себя произвольно или злонамеренно, а не просто падает. Защита дорога и нужна в основном там, где узлам нельзя доверять.
- консенсус
- Несколько узлов договариваются об одном значении (например, кто лидер) и держатся его, переживая отказ меньшинства.
- линеаризуемость
- Система ведёт себя так, будто существует одна копия данных с атомарными операциями. Сильнейшая согласованность — и самая дорогая по задержке.
- кворум
- Минимум узлов (обычно большинство), которые должны согласиться, чтобы решение считалось принятым. Гарантирует, что двух лидеров не выберут.
- теорема CAP
- При разрыве сети система выбирает одно из двух: согласованность (все видят одно) или доступность (отвечают все половины) — но не оба сразу.
- выбор лидера
- Как узлы гарантированно назначают ровно одного лидера. Надёжно делается через консенсус, а не самоназначением.
- тотально упорядоченная доставка
- Все узлы получают сообщения в одном и том же порядке. Эквивалентно консенсусу — на этом строят реплицированные журналы.
- сервис координации
- Готовая система (ZooKeeper, etcd, Consul) с консенсусом внутри. Берут её вместо того, чтобы писать свой алгоритм — он обманчиво сложен.
- болтливые сервисы
- Два сервиса, которым нужно множество сетевых перекличек на одну операцию. Признак сильной связи, растянутой на большую дистанцию.
- частота интеграции
- Как часто компоненты дёргают друг друга. Высокая частота через сеть — дорогая и хрупкая; сигнал, что дистанцию пора сокращать.
- ребалансировка связанности
- Подстройка трёх осей (сила, дистанция, волатильность), когда изменение сбило баланс. Иногда лечится слиянием — декомпозиция не в одну сторону.
- пакетная обработка (batch)
- Офлайн-обработка: читаем неизменяемый вход и заново генерим выход при каждом запуске. Медленно, зато устойчиво к ошибкам и безопасно перезапускается.
- неизменяемые входы
- Входные данные конвейера не меняются во время обработки. Поэтому упавший прогон можно просто перезапустить с нуля — результат воспроизводим.
- перезапуск обработки
- Прогнать конвейер заново на тех же входах — чтобы исправить баг в коде или пересобрать производные данные. Дешевле и надёжнее ручной штопки.
- MapReduce
- Классическая модель распределённой пакетной обработки: map раскладывает данные, reduce сводит. Идейный предок Spark и подобных движков.
- dataflow-движок
- Система вроде Spark или Flink: описываешь граф преобразований данных, а движок распределяет его по узлам. Гибче голого MapReduce.
- ETL
- Extract-Transform-Load: вытащить данные из источников, преобразовать и загрузить в хранилище для аналитики. Классический батч-сценарий.
- потоковая обработка (stream)
- Обработка неограниченного потока событий по мере поступления — секунды вместо ночи. Противоположность батчу по времени реакции.
- журнал событий (log)
- Упорядоченная, только-дозаписываемая лента событий (Kafka-подобная). В отличие от очереди — хранит историю: её можно перечитать и пересобрать из неё что угодно.
- брокер сообщений
- Посредник, принимающий сообщения от продюсеров и раздающий потребителям. Развязывает их во времени: получатель может быть недоступен — сообщение подождёт.
- Change Data Capture (CDC)
- Превращение изменений в базе в поток событий. Позволяет строить производные представления (поиск, кэш), не трогая код, который пишет в базу.
- материализованное представление
- Заранее посчитанный и сохранённый результат запроса, который обновляется из журнала изменений. Быстрое чтение ценой поддержки в актуальном состоянии.
- exactly-once
- Гарантия, что эффект операции применён ровно один раз. Достигается не «идеальной доставкой», а идемпотентностью получателя: повтор ничего не портит.
- at-least-once
- Сообщение доставят хотя бы раз, но, возможно, несколько. Честный режим сети — поэтому получатель обязан быть идемпотентным.
- «вывернуть базу наизнанку»
- Сделать журнал событий источником истины, а базу, индекс, кэш и склад — производными потребителями лога. Мощно, гибко и дорого; нужно не всем.
- сквозной (end-to-end) аргумент
- Корректность обеспечивают крайние точки (идемпотентность + id запроса), а не гарантии промежуточных звеньев. Проверяй итог там, где за него отвечаешь.
- своевременность vs целостность
- Своевременность — насколько данные свежи (карта может чуть отставать). Целостность — что они не врут (остаток нельзя посчитать неверно). Разные требования к разным данным.
- trust, but verify
- Не доверяй гарантиям систем вслепую: регулярно сверяй производные данные с источником истины аудитом. Тихая порча данных — худший вид сбоя.
- петля обратной связи
- Решение алгоритма меняет мир так, что подтверждает само себя: пометил район «рискованным» → меньше сервиса → больше проблем → «видите, риск». Самосбывающийся прогноз.
- алгоритмическая предвзятость
- Модель, обученная на прошлом, закрепляет и усиливает уже существующую дискриминацию — и прячет её за видимостью «объективных цифр».
- слежка
- Побочный продукт тотального трекинга поведения. Копится «на всякий случай», а согласие на сбор чаще всего иллюзорно — его никто не читает и не может оспорить.
- минимизация данных
- Собирать только то, что действительно нужно, и не дольше, чем нужно. Данные, которых нет, невозможно потерять, украсть или использовать во зло.
- большая языковая модель (LLM)
- Модель, которая продолжает текст наиболее правдоподобным образом. Генерирует правдоподобное, а не гарантированно истинное — уверенный тон входит в комплект.
- агент
- Программа с целью, которая в цикле рассуждает, действует инструментами и смотрит на результат — пока цель не достигнута. Модель внутри — мотор рассуждений, не автор ответов.
- агентный цикл
- Посмотри на ситуацию → реши, что делать → сделай → посмотри, что вышло → повтори. Останавливается, когда цель достигнута — или когда его остановили предохранители.
- генеративный ИИ
- Реактивный «консультант»: один запрос — один ответ, без цели, памяти и действий. Агент — это тот же консультант, которому дали цель, руки и цикл.
- промпт
- Инструкция модели на естественном языке. Неявное знание в чистом виде: никакая граница не проверяет, поняли ли её, — изменил формулировку, и поведение поплыло.
- галлюцинация
- Уверенный правдоподобный ответ, не опирающийся на факты. Не сбой, а штатный режим генеративной модели; лечится источниками данных и правом сказать «не знаю», а не «моделью побольше».
- недетерминизм
- Один и тот же вход может дать разные выходы. Валюта агентных систем: ею платят за гибкость на задачах без готовых правил. Платить за детерминированные задачи — расточительство.
- автономия
- Сколько шагов агент делает без человека. Свойство дизайна, а не модели: границу автономии проводит архитектор — и отвечает за неё.
- инструменты агента (tool use)
- Способ дать агенту руки: модель выбирает, что вызвать, детерминированный код валидирует и исполняет. Модель никогда не трогает систему сама.
- function calling
- Механика tool use: модель возвращает намерение — имя функции и параметры по схеме, — а исполняет его оркестратор. Модель заполняет форму, а не совершает действие.
- схема инструмента
- Имя, параметры с типами, описание — всё, что модель знает об инструменте. Это контракт, сплошная линия на карте: узкий инструмент переживает миграции базы, «выполни SQL» — нет.
- минимальные привилегии
- У агента ровно те права и инструменты, без которых задача не решается. Поверхность возможного вреда определяется списком инструментов, а не «умом» модели.
- human-in-the-loop
- Опасное действие исполняется только после подтверждения человеком: агент готовит заявку, человек жмёт кнопку. Граница — по цене ошибки и обратимости.
- ReAct
- Чередование «рассуждение → действие → наблюдение» в одном цикле: модель думает, зовёт инструмент, смотрит на результат — и думает дальше уже со свежими фактами.
- встроенные инструменты
- Готовые «чужие руки» платформ: исполнение кода, веб-поиск, чтение файлов. Мощность в обмен на поверхность риска — добавлять по потребности задачи, не по прайс-листу.
- окно контекста
- Всё, что модель «знает» в момент ответа: промпт, история, результаты инструментов. Конечное и платное: за токены платишь на каждом вызове — кэширование префикса лишь удешевляет повторную часть.
- токен
- Единица текста и единица тарификации модели. Контекст — деньги: чем больше токенов в окне, тем дороже каждый шаг агентного цикла.
- сессия
- Состояние диалога между вызовами. Живёт не в модели, а в нашем хранилище — со сроком жизни, владельцем и правилами доступа, как любые данные компании.
- короткая память
- То, что лежит в окне контекста прямо сейчас: текущий диалог, свежие результаты инструментов. Быстро и точно, но дорого — платишь на каждом вызове.
- длинная память
- Факты вне окна контекста — в обычном внешнем хранилище. В окно попадают выборкой по релевантности, а не целиком: спросили про возврат — подгрузили правила возвратов.
- суммаризация контекста
- Сжатие старой части диалога в короткую сводку, чтобы влезать в окно и бюджет. Свежее — дословно, старое — конспектом, устойчивые факты — во внешнее хранилище.
- структурированный вывод
- Ответ модели строго по JSON-схеме: контракт на форму выхода. Гарантирует, что ответ разберётся кодом; истинность содержания не гарантирует — её проверяют другие слои.
- эмбеддинг
- Перевод текста в вектор-смысл: у близких по смыслу текстов — близкие векторы. «Сыр помягче для ребёнка» и «нежная моцарелла» рядом, хотя не делят ни одного слова.
- векторное хранилище
- Индекс эмбеддингов, заточенный под поиск ближайших соседей среди миллионов векторов. Ещё одно производное представление: источник истины остаётся в каталоге.
- семантический поиск
- Поиск по близости смысла, а не по совпадению слов. Сила — там, где вопрос и документ говорят разными словами об одном; точные артикулы — территория полнотекста.
- RAG
- Retrieval-augmented generation: найти знание поиском и подложить в контекст — вместо дообучения. Волатильные факты приходят к модели данными, а не весами.
- наивный RAG
- Цепочка «вопрос → поиск → ответ»: один заход, без оценки собственной выдачи. Дёшев и достаточен для вопросов, ответ на которые лежит в одном месте.
- агентный RAG
- Поиск как инструмент внутри агентного цикла: модель планирует, оценивает выдачу, переформулирует и ищет ещё. Кратно дороже цепочки — плати им только за составные вопросы.
- дообучение (fine-tuning)
- Правка весов модели под свою задачу. Отлично держит тон, стиль и жаргон; для волатильных фактов — бетон: цикл обновления днями и никакого «удалить устаревшее».
- свежесть индекса
- Насколько производное представление отстаёт от источника истины. Свойство конвейера с явным SLO, а не модели: производные отстают по построению — вопрос лишь на сколько.
- мультиагентная система
- Несколько специализированных агентов вместо одного универсала. Границы — по доменам знания: у каждого своё узкое меню инструментов и короткий промпт.
- агентный workflow
- Состояние («блокнот» задачи) + узлы («работники») + рёбра («маршруты»). Новое только одно: узлом может быть не только код, но и агент.
- паттерны оркестрации
- Конвейер, параллель, маршрутизатор, групповой чат — четыре способа собрать бригаду. Выбор между ними — выбор, где жить недетерминизму.
- маршрутизация (handoff)
- Лёгкий агент-диспетчер определяет домен вопроса и передаёт его специалисту целиком. Определить домен — дёшево, ответить — дорого; handoff разводит эти цены.
- групповой чат агентов
- Агенты обсуждают задачу, ведущий модерирует. Самый мощный и непредсказуемый по цене паттерн: для исследований и дебатов, не для потока с SLA.
- workflow-as-agent
- Бригада, инкапсулированная за одним входом: снаружи — узкий контракт, внутри — узлы из кода и агентов. Глубокий модуль, как учил шестой модуль.
- god-агент
- Агент с десятками инструментов из всех доменов: путается в выборе, возит всё меню в каждый вызов и стоит как маленькая бригада. God-класс, который ещё и галлюцинирует.
- MCP (Model Context Protocol)
- Стандарт вертикали «агент ↔ инструменты и данные»: сервер публикует инструменты со схемами, любой агент любого фреймворка подключается без кастомного клея. «OpenAPI для агентов».
- MCP-сервер
- Сторона, публикующая инструменты по MCP. Для чужих агентов — граница знания: наружу выходит спроектированный минимум, а не зеркало внутренних API.
- A2A (Agent-to-Agent)
- Протокол горизонтали «агент ↔ агент»: карточки агентов, задачи с жизненным циклом, асинхронные сценарии. Для переговоров автономных агентов из разных экосистем.
- карточка агента (agent card)
- Машиночитаемая визитка агента в A2A: кто я, что умею, как со мной говорить. Discovery для горизонтальных связей.
- AG-UI
- Протокол «агент ↔ человек»: стриминг состояния агента в интерфейс — шаги, промежуточные результаты, кнопки подтверждения, а не только финальный текст.
- discovery
- Ритуал знакомства клиента с MCP-сервером: спросил список инструментов, получил схемы, начал звать. Машиночитаемое меню вместо документации для людей.
- недоверенный клиент
- Чужой агент за границей системы: аутентификация на каждом вызове, минимальные права, лимиты, параноидальная валидация, полный аудит. Чужая модель может прислать что угодно.
- трейс агента
- Запись каждого такта цикла: что модель подумала, какой инструмент выбрала, что получила. Без трейса разбор инцидента — гадание, с ним — три минуты чтения.
- evals
- Регрессионные тесты недетерминированного кода: золотой набор диалогов с критериями, прогон на каждое изменение промпта или модели. Пороги вероятностные, дисциплина — как в CI.
- золотой набор
- Эталонные диалоги — типовые, сложные, коварные, — на которых проверяется каждое изменение. Каждый инцидент добавляет в набор новый тест: инъекция с промокодом теперь живёт там.
- бюджет токенов
- Жёсткий потолок расходов на сессию или агента, живущий в оркестраторе. Предохранитель от циклов: два вежливых бота способны сжечь дневной бюджет за пятьдесят минут.
- предохранители (guardrails)
- Границы в коде вокруг агента: бюджет, лимит шагов, таймаут, circuit breaker, фильтры входа и выхода. Не спрашивают модель, согласна ли она остановиться.
- prompt injection
- Враждебные инструкции внутри данных — отзыва, письма, веб-страницы. Для модели инструкции и данные — один поток токенов, поэтому чужой текст может командовать агентом.
- «инструкции ≠ данные»
- Недоверенный контент маркируется и оборачивается, чтобы модель читала его как данные. Помогает вероятностно; детерминированно защищают только права и HITL.
- версионирование промптов
- Промпт — артефакт с версией, ревью и прогоном evals перед выкаткой, как схема в реестре. «Поправил формулировку на проде» — так теряют качество молча.
- уровни автономии
- Сам / с подтверждением человека / никогда. Решение архитектора, живущее в коде оркестратора, — а не свойство модели и не пожелание промпта.
- матрица «цена ошибки × обратимость»
- Чем дороже и необратимее действие, тем ниже автономия агента. Слова — тоже действия: обещание необратимо с момента, когда его прочитали.
- прозрачность ИИ
- Человек всегда знает, что говорит с машиной. Информирует, но не снимает ответственности: плашка «ответ сгенерирован» — честность, а не щит от собственных слов.
- оспоримость
- С любого места диалога можно дойти до живого человека и оспорить решение. Правило, которого нет на бумаге, оспорить нельзя — поэтому скрытая персонализация не проходит.
- ответственность за агента
- Слово, сказанное системой компании в канале компании, — слово компании. «Модель так решила» — размывание ответственности с приятным голосом.
- аудит решений агента
- Трейс шагов и журнал событий отвечают на «кто сказал и почему» с точностью до токена. Но аудит находит автора записи — автор решения о границах всегда человек.
- колоночное хранение
- На диске рядом лежат значения одной колонки, а не поля одной строки. Скан «три колонки за три года» читает три плотных ленты — и они отлично сжимаются, потому что соседи похожи.
- временной ряд
- Последовательность значений одной величины во времени: цена сыра по дням, курс по часам. Ключевое свойство — соседние точки похожи, и на этом строится всё хранение.
- компрессия временных рядов
- Дельта дельт для таймстампов плюс XOR для значений: похожие соседи схлопываются в почти нули. У Facebook в Gorilla точка ужалась с 16 байт до 1.37 — в двенадцать раз.
- прореживание (downsampling)
- Хранить для старых периодов не каждую точку, а агрегаты: минимум, максимум, среднее по дню или неделе. График на тысячу пикселей не заметит разницы, а диск и запросы — заметят.
- retention (политика хранения)
- Не «когда удалять», а какое представление положено каждому возрасту данных: память → колонки → агрегаты → сырьё в дешёвом архиве. Пока сырьё вечно, остальное пересобираемо.
- дрейф схемы (schema drift)
- Эволюция схем глазами бесправного потребителя: поставщик меняет колонки, единицы и форматы когда хочет и никого не предупреждает. Договориться нельзя — можно только защититься на своей стороне.
- слой сырья (raw layer)
- Файлы от источников хранятся как пришли — неизменяемо, с версиями и датами. Разбор отделён от скачивания: парсер можно чинить и переигрывать по всему архиву.
- карантин данных
- Подозрительные данные не публикуются и не теряются — задерживаются с пометкой «проверяется», пока не разберётся человек. Между молчаливой ложью в витрине и остановкой всего конвейера есть третий путь.
- разные частоты (mixed frequency)
- Валюта — ежедневно, инфляция — ежемесячно, ВВП — ежеквартально. Каждый ряд хранится в родной частоте; выравнивание — явная операция витрин и моделей, а не тихая интерполяция на входе.
- ревизия
- Официальное число пересмотрели задним числом: быстрая оценка → уточнённая → годовая, а иногда и через шесть лет. Не ошибка, а расписание: плата статистики за скорость публикации.
- винтаж данных
- Состояние знания на дату: ряд таким, каким его видел мир, скажем, 16 марта — со всеми тогдашними значениями и без всего, что стало известно позже.
- битемпоральность
- Две оси времени у каждой точки: о каком периоде факт и когда о нём узнали. «Текущее» — представление поверх истории публикаций, а не единственная ячейка.
- point-in-time корректность
- Любой вопрос к данным можно задать «по состоянию на дату» — и получить только то, что было известно тогда. Основа воспроизводимых отчётов и честных бэктестов.
- альтернативные данные
- Данные, собранные не статистическим ведомством, но говорящие об экономике: онлайн-цены, транзакции платформ, логистика. Свежее официальных рядов — и с честными каветами о покрытии.
- nowcasting
- Оценка того, что происходит прямо сейчас, до выхода официальной статистики: онлайн-цены сегодня подсказывают инфляцию, которую опубликуют через месяц. Опережающий сигнал, а не замена.
- методология индекса
- Столетняя наука о том, как честно сложить миллионы цен в одно число: сопоставимые товары, веса по количествам, формулы Ласпейреса—Пааше—Фишера. Переиспользуй, не изобретай.
- порог анонимности
- В любой публикуемой ячейке — минимум N участников, иначе агрегат не публикуется. Превращает принцип «никого нельзя восстановить» в проверяемое правило конвейера.
- бейзлайн
- Дешёвый простой метод — «как в прошлом сезоне» — который любая модель обязана измеримо обойти на данном ряду. В M5 его не обошли 92.5% участников; отнеситесь к нему серьёзно.
- глобальная модель
- Одна модель, обученная сразу на всех рядах: паттерны переиспользуются между рядами (cross-learning), а эксплуатационная сложность не растёт с каталогом — O(1) вместо O(N).
- согласование прогнозов (reconciliation)
- Сумма прогнозов регионов обязана сходиться с прогнозом страны. Для фактов это тождество, для независимых прогнозов — отдельный шаг фабрики.
- foundation-модель временных рядов
- Предобучена на миллиардах чужих точек, прогнозирует незнакомый ряд без обучения. Сильна на холодном старте; на коротких низкочастотных рядах — ядре макроэкономики — уступает простой статистике.
- контаминация бенчмарка
- Претрейн модели видел тестовые ряды публичного лидерборда — «zero-shot» на знакомом тесте показывает фантомное преимущество в десятки процентов. Верить можно только собственному экзамену.
- look-ahead bias
- В обучение или бэктест протекло будущее: перемешанные разбиения, ревизованные значения, признаки-послезнайки. Коварство в том, что утечка улучшает метрики — подглядывающий код побеждает в бэктестах.
- катящееся начало (rolling origin)
- Серия честных запусков «из прошлого»: обучение на известном до точки t, прогноз вперёд, сдвиг, повтор. Оценка из десятков репетиций реальной жизни, а не одного удачного разреза.
- feature store
- Признак определяется один раз и материализуется в два представления: offline-история для обучения и online-значения для инференса. Лечит расхождение «ноутбук против прода» в корне.
- training/serving skew
- Модель училась на одной версии признака, а в проде получает другую: два кода, два окна, две таймзоны. Нарушение DRY, за которое штрафует не ревьюер, а качество прогнозов.
- дрейф данных
- Распределение входов сместилось относительно обучающего: новый регион, другая структура категорий. Модель спрашивают о мире, которого она не видела; повод присмотреться, не приговор.
- дрейф смысла (concept drift)
- Входы те же, но связь между ними и ответом изменилась: после шока ставки спрос реагирует на цены иначе. Лечится переобучением на данных нового мира.
- семантический слой
- Каталог метрик с зафиксированными формулами, джойнами и срезами. LLM выбирает из меню, а не сочиняет SQL по внутренностям — пространство ошибок сжимается с «любой запрос» до «не та метрика».
- text-to-SQL
- Модель пишет SQL по вопросу на человеческом языке. На учебных схемах — ~90% точности, на живых корпоративных — 10–20%: сочинение по чужой внутренней модели остаётся лотереей.
- grounding
- Каждое число в ответе приходит из движка данных с паспортом: ряд, срез, винтаж. Не «попросили модель не выдумывать», а архитектура, в которой выдумке некуда встать.
- микрофронтенды
- Независимо поставляемые фронтенд-приложения, скомпонованные в одно целое. Покупают командам автономный деплой; качество кода и скорость страницы не покупают.
- релизный поезд
- Все команды деплоятся одним расписанием: красный тест одной задерживает вагоны всех. Цена связанного деплоя, измеряемая в днях ожидания фичи.
- закон Конвея
- Структура системы копирует структуру коммуникаций организации. Микрофронтенды — способ применить его сознательно: выровнять артефакты по командам, а не бороться с ним.
- вертикальная нарезка
- Зона = раздел = команда: пользовательский сценарий не пересекает границу деплоя. Дефолт для микрофронтендов; горизонталь (несколько МФ на странице) — осознанное исключение.
- оболочка (app shell)
- Тонкое приложение-каркас: разбирает адрес, грузит зону нужной версии по манифесту, держит сессию. Чем тоньше — тем реже меняется, а её изменения видят все зоны сразу.
- манифест версий
- Карта деплоев зон: какая зона какой версии где лежит. Деплой — обновить строчку, откат — вернуть. Реестр схем и request routing, встретившиеся в браузере.
- связь через общие данные (common coupling)
- Несколько компонентов читают и пишут одну общую структуру — таблицу, стор, глобальный объект. Общие гонки, общий излом, ничья ответственность: самая липкая форма связанности после интрузивной.
- состояние в адресе
- Всё, что описывает «где пользователь и на что смотрит», живёт в URL по опубликованной схеме параметров. Слабейшая связь зон — плюс перезагрузка, история и «поделиться» бесплатно.
- контрактный тест
- Издатель фиксирует схему события, слушатель — свои ожидания; несовместимое изменение роняет сборку, а не прод. Знание границы проверяется на границе.
- version skew
- В проде одновременно живут сочетания версий, которых не было ни на одном стенде: вкладка со вчерашней оболочкой + сегодняшняя зона. Лечится совместимостью на шаг назад, а не перезагрузкой чужих вкладок.
- бюджет производительности
- SLO фронтенда: вес бандла, время до рабочего экрана, отклик — в перцентилях, по зоне и по сквозному пути. Держится механикой CI, а не благими намерениями.
- платформенная команда
- Команда, чей продукт — рельсы для остальных: оболочка, дизайн-система, пайплайны, бюджеты. Метрика успеха — добровольное использование: обязательное обязано быть удобным.
- маятник автономия ↔ консистентность
- Качнули к автономии — команды летят, целое расползается; к консистентности — целое собирается, скорость душится. Зрелость — не вечная точка равновесия, а дешёвое качание.