Раздел 15 · Общие IT-компетенции

Системы и протоколы: Unix, E2E, GraphQL, gRPC, очереди

middle-senior~20 мин

без входаВойди, чтобы отмечать прогресс, вести заметки и решать задачи в редакторе. войти

Системы и протоколы: Unix, E2E, GraphQL, gRPC, очереди

На уровне Middle+ от тебя ждут понимания этажом ниже и этажом шире: что делает операционная система под твоим рантаймом, как сервисы разговаривают между собой за пределами REST, и как убедиться, что вся эта конструкция работает (E2E) и наблюдаема (метрики). Урок-обзор по шести темам: модель здесь, глубина по ссылкам.

Unix изнутри

Всё, что ты деплоишь, исполняется поверх Unix-подобной системы, и её устройство протекает в твою работу: контейнеры это не магия, а комбинация механизмов ядра.

Опорные понятия:

  • Kernel против user space. Программы живут в user space и просят ядро о любом вводе-выводе через syscalls. Поэтому «много мелких чтений с диска» медленнее «одного большого».
  • Процессы и потоки. Процесс владеет изолированной виртуальной памятью, потоки делят память процесса. fork плюс exec это способ Unix запускать программы, и именно так твой шелл запускает node.
  • Виртуальная память. Каждый процесс видит собственное адресное пространство, ядро отображает страницы на физическую память. Отсюда swap, page fault и то, почему RSS в top не равен «занятой памяти».
  • IPC. Пайпы, сокеты, разделяемая память, сигналы: способы процессов общаться. kill не «убить», а «послать сигнал».
  • Демоны и init. Долгоживущие фоновые процессы под управлением systemd: рестарты, зависимости, логи в journald.
  • Namespaces и cgroups. Linux namespaces изолируют видимость, cgroups ограничивают ресурсы. Docker это оркестрация поверх этих двух механизмов плюс слоёная файловая система.

Классическая книга по теме: Робачевский, «Операционная система UNIX». Практическая сторона (сервер, systemd, мониторинг руками) в уроке Sysops и Linux.

E2E всерьёз

E2E-тест проверяет систему так, как её видит пользователь: браузер, настоящий бэкенд, настоящая база. За эту честность платим скоростью и хрупкостью, поэтому E2E-тестов мало и они покрывают только критические пути.

Что отличает зрелый E2E-набор:

  • Управляемые данные. Seeds создают известное состояние базы перед тестом; тест не зависит от того, что оставил предыдущий.
  • Page Object. Селекторы и действия страницы инкапсулированы в один класс: меняется вёрстка, меняется одно место, а не сорок тестов.
  • Ожидания вместо sleep. await expect(locator).toBeVisible() вместо sleep(3000): главный источник flaky-тестов это гонки со временем.
  • Параллельность. С изолированными данными тесты бегут в несколько воркеров; без изоляции параллельность превращает набор в лотерею.
  • Отчёты. Allure или встроенный репортер Playwright с трейсами и скриншотами: упавший E2E без артефактов это загадка, а не сигнал.

Инструменты сегодня: Playwright как дефолт, Cypress как зрелая альтернатива. BDD и Gherkin встречаются там, где сценарии пишут вместе с аналитиками. Нагрузочное тестирование (k6, артиллерия запросов вместо кликов) это отдельная дисциплина с теми же принципами управляемых данных.

Глубина в уроках Что такое E2E, Проблемы E2E и Карантин и flaky.

GraphQL deep-dive

GraphQL переворачивает REST: не сервер решает форму ответа, а клиент запрашивает нужные поля. Схема типизирована, под каждым полем живёт resolver.

Цена гибкости: классическая проблема N+1. Запрос «посты с авторами» наивно выполнит один запрос за постами и по одному за каждым автором. DataLoader собирает эти обращения в один WHERE id IN (...).

Когда GraphQL оправдан: много разных клиентов с разными потребностями (web, mobile, партнёры) поверх одних данных. Когда нет: один клиент, один бэкенд, команда без ресурса на схему, кеширование и контроль глубины запросов. Сравнение с REST и gRPC плюс кодогенерация в уроке GraphQL, gRPC и codegen.

дальше после входа

Урок целиком открыт всем, кто вошёл. Войди по своему email, чтобы читать дальше.

Вход пока по приглашению. Если хочешь учиться, напиши Vassiliy.