С нуля: что такое бэкенд на самом деле
Бэкенд — программа, которая отвечает на запросы на сервере, та половина веба, которую ты никогда не видишь. Это карта «с нуля» и восемь слов, которые Unit 01 и все последующие юниты считают уже знакомыми.
Ты открываешь браузер, вводишь адрес — и страница появляется. Входишь в аккаунт — профиль загружается. Нажимаешь «купить» — письмо с подтверждением приходит через секунду. Ничего из этого не происходит в твоём браузере. Где-то программа на машине, которую ты никогда не увидишь, приняла твой клик, поняла, чего ты хочешь, спросила базу данных и написала ответ — всё меньше чем за секунду. Эта программа и есть бэкенд. Весь этот трек учит, как собрать такую программу — быструю, корректную и не падающую, когда что-то идёт не так. Этот урок — карта перед восхождением.
К концу урока у тебя будет восемь терминов, которые каждый senior-юнит считает само собой разумеющимися — и когда они встретятся в контексте, ты уже будешь знать, какую роль каждый из них играет.
Единственная проблема, которую решает бэкенд
Браузер умеет отображать HTML и запускать JavaScript, но не может безопасно хранить пароли, списывать деньги с карты или держать общую базу, в которую пишут все пользователи сразу. Кому-то нужно жить за пределами браузера, помнить данные между сессиями, соблюдать правила и отвечать на вопросы всех клиентов согласованно. Этот кто-то — бэкенд: программа в дата-центре, доступная по сети, ждущая запросов и отвечающая данными.
Всё, чему учит этот трек — middleware (промежуточные обработчики запроса), async I/O (неблокирующий ввод-вывод), пулы соединений, circuit breaker’ы (предохранители от каскадных сбоев) — это детали поверх одной задачи: принять запрос, сделать полезную работу, вернуть ответ, выдержать нагрузку. Когда встретишь любой из этих терминов дальше по треку, ты уже будешь знать, на каком шаге этого цикла он живёт.
Восемь слов, которые остальной трек считает знакомыми
Senior-юниты дальше используют эти термины, не останавливаясь на определениях. Вот они, по одному предложению — что это и зачем оно.
| Слово | Что это | Зачем оно |
|---|---|---|
| Сервер | Программа (или машина), которая слушает сетевые подключения и отвечает на них. | Чтобы много клиентов могли достучаться до твоего кода, не запуская его у себя. |
| Запрос / Ответ | Диалог из двух сообщений: клиент спрашивает, сервер отвечает. | Чтобы клиент и сервер могли жить на разных машинах и всё равно разговаривать. |
| HTTP-метод | Глагол запроса — GET, POST, PUT, DELETE — сигнализирующий о намерении. | Чтобы сервер понял, читает ли клиент, создаёт или удаляет данные. |
| Endpoint / Маршрут | Пара «URL-путь + метод», которую сервер обязуется обработать (например, POST /orders). | Чтобы клиент знал, куда направить каждый тип запроса. |
| Обработчик (handler) | Функция, которая запускается, когда запрос совпадает с маршрутом. | Чтобы у каждого маршрута была своя логика — читабельная и тестируемая отдельно. |
| Код статуса | Трёхзначное число в ответе (200 OK, 404 Not Found, 500 Error). | Чтобы клиент мог правильно отреагировать, не парся тело ответа ради обнаружения ошибки. |
| База данных | Постоянное хранилище, из которого бэкенд читает и в которое пишет между запросами. | Чтобы данные переживали перезапуски и были общими для всех пользователей и инстансов. |
| Statelessness (без состояния) | Каждый запрос несёт всё, что серверу нужно для ответа; между вызовами память не хранится. | Чтобы любой инстанс сервера мог обработать любой запрос — масштабирование и перезапуски безопасны. |
Как они складываются вместе
Прочитанные по порядку, слова рассказывают одну историю: запрос приходит с HTTP-методом и URL; роутер сервера сопоставляет URL с endpoint’ом и вызывает функцию-обработчик; обработчик читает или пишет в базу данных и формирует ответ; ответ уходит обратно с кодом статуса, который проверяет клиент. Потому что сервер без состояния, он ничего не помнит между вызовами — весь контекст либо приходит в самом запросе, либо живёт в базе. Этот один абзац — весь трек в миниатюре; каждый следующий юнит увеличивает один из шагов.
▸Почему это работает
Зачем нужна statelessness, если она просто перекладывает нагрузку на базу данных? Потому что stateful-сервер — это узкое место: второй запрос пользователя обязан попасть к той же машине, что обработала первый, иначе данные сессии потеряются. Stateless-сервер не имеет такого ограничения — любой инстанс отвечает на любой запрос, поэтому при скачке трафика добавляешь инстансы, при спаде убираешь, без лишней координации. База держит общую истину; сервер остаётся одноразовым.
Это не нужно зубрить
Две честные ремарки перед восхождением. Первая: никто не держит всё это в голове сразу в первый день — ты встретишь каждое слово снова, в своём юните, глубже, и тогда оно уляжется. Эта страница — вешалка для деталей, а не экзамен. Вторая: не каждый бэкенд нуждается в каждой фиче. Крошечный пет-проект может быть одним сервером с тремя маршрутами без балансировщика. Трек учит полной картине, потому что этого требует продакшен под нагрузкой, — но «начни просто, добавляй сложность, когда заболит» и есть senior-инстинкт.
Зачем бэкенд-сервер должен быть без состояния (stateless) — что это даёт?
Расставь путь от клика клиента до ответа, который к нему возвращается:
- 1 Клиент отправляет запрос с HTTP-методом и URL
- 2 Роутер сопоставляет URL с endpoint'ом и вызывает обработчик
- 3 Обработчик читает или пишет в базу данных
- 4 Сервер отправляет ответ с кодом статуса и данными
- 01В одном дыхании: что такое бэкенд и почему он обязан существовать?
- 02Проследи путь запроса с момента, когда клиент его отправил, до момента, когда ответ вернулся, называя каждую концепцию.
Бэкенд — одна идея с кучей навешанной механики: программа на сервере принимает запросы, выполняет логику, читает или пишет в базу и возвращает ответы — всё это без памяти между вызовами, чтобы любой инстанс мог обработать любой запрос. Восемь слов картируют всю поверхность: сервер слушает; запрос несёт метод и URL; роутер сопоставляет его с endpoint’ом и запускает обработчик; обработчик говорит с базой; ответ с кодом статуса уходит обратно; а statelessness делает всё это масштабируемым. Теперь, когда в senior-юните встретится любой из этих терминов, ты будешь знать, какой шаг цикла он описывает — и что именно ломается, когда этот шаг идёт не так.
Что-то непонятно?
Задай вопрос по этому уроку. Вопросы анонимны и попадают напрямую автору — урок станет лучше.
Примени это
Примени этот урок в реальном проекте.