Ниже мы приводим адаптированный перевод статьи The non-techie’s guide to servers Каннана Чандрасегарана (Kannan Chandrasegaran), разработчика из компании Panopto. Просим обратить внимание, что статья рассчитана на новичков, которые мало знакомы с понятием серверной части приложения и серверов.
Если совсем коротко: бэкенд это все, что работает не у вас на телефоне, а на чужом компьютере, который называют сервером. Сервер постоянно включен и подключен к интернету, он хранит данные и передает их между пользователями. Рядом с ним живут база данных, где эти данные лежат, и API, через который приложение с сервером разговаривает. Все вместе это и есть та самая «серверная часть», о которой говорят программисты. А то, что вы видите на экране, называется фронтендом, и без бэкенда оно обычно превращается в неподвижную картинку.
![Нарисованный от руки ноутбук на фоне, разделенном по диагонали на светлую и темную половины с надписями FRONT END и BACK END]()
Из жизни офиса
Сложно быть «не-технарем» в ИТ-компании, уж поверьте! Маркетологи, менеджеры по продажам, бухгалтеры, не суть важно кто именно, время от времени они сталкиваются со своими технически подкованными коллегами. Это могут быть программисты или системные администраторы.... В любом случае «не-технари» чувствуют себя так, будто им ампутировали важную часть мозга. Или они высадились на неизвестную планету с разумной негуманоидной жизнью. Или…
Иногда, конечно, все заканчивается благополучно. Вот, например, девушка-«
фронтендщица», идет по коридору. Ничто не предвещает беды: она направляется налево, вы направо, и как можно быстрее… Нет, в этот раз не пронесло. Вы уже сидите с ней за столом, и пытаясь побороть неловкое молчание, спрашиваете: «А...чем именно ты занимаешься?». Она начинает рассказывать что-то, но вы не сразу врубаетесь, о чем она. Вроде бы и слова знакомые: пользовательский интерфейс, приложения, и, точно, Facebook это сайт. Ага, там есть кнопочки, меню… Вы кое-как разобрались в хитросплетениях ее работы, киваете ей на прощание и ваши пути расходятся в коридорах большого офиса.
Но рано или поздно вам не так повезет: вы встретите инженера по серверам. Или бэкенд-разработчика. Не зная в какие дебри сейчас попадете, вы наивно задаете тот же вопрос и... получаете абракадабру в ответ. Слышите уйму иностранных слов, а в голове пробегают мысли: «Прилично ли спросить, что такое API?», «Мы все время используем «бэдэ» (DataBase), правда, что ли?», «Кто такой, черт побери, этот Джейсон (JSON)??». Ваш знакомый инженер пытается рассказать вам о серверах, но не понимает, насколько вам сложно понять его наполненную профессиональными терминами речь. Вероятно, вы уже слышали слово "сервер" раньше, но его употребляют в настолько разных контекстах, что осознать его значение крайне сложно.
Что ж, попробуем разобраться с этим термином.
Кратко
- Сервер это компьютер, который всегда включен и подключен к интернету. Задачи у него две: хранить данные и обеспечивать связь между пользователями.
- Бэкенд это серверная часть приложения, фронтенд это то, что вы видите на экране и на что нажимаете.
- Данные и связи между ними лежат в базе данных. Знакомые слова MySQL, PostgreSQL, MongoDB, Redis это ее разновидности.
- API это набор «дверей» сервера: приложение стучится в нужную и получает ответ. Отдельные двери называют конечными точками, по-английски endpoints.
- Разговаривают приложение и сервер обычно на JSON или XML. Человеку такие форматы читать неудобно, зато компьютеру просто.
- Проверить, есть ли у приложения бэкенд, легко: включите авиарежим. Перестало работать, значит сервер ему нужен.
Вниз по кроличьей норе
Когда обычный человек (в смысле, не программист или админ) использует приложение, все, что он видит, это интерфейс, картинку, которая реагирует на какие-то очевидные (чаще всего) действия. На самом деле то, что пользователь понимает под «приложением», обычно и есть фронтенд, то есть лицевая часть, оболочка, с которой он взаимодействует. А вот о том, что внутри, то есть о том, что заставляет приложение работать, пользователи знают крайне мало.
Скажем, вы отправляете мне сообщение, например, по Whatsapp или Viber. Это выглядит так, будто сообщение идет с вашего смартфона на мой. Давайте посмотрим на этот процесс внимательнее. Скажем, вы отправляете мне сообщение, когда мой телефон выключен, а затем вы сами выключаете свой смартфон. И вот, я включаю свой телефон, и все-таки получаю ваше сообщение, хотя наши телефоны одновременно не работали. Похоже, мы что-то упустили! Это «что-то», пропущенный нами компонент, это бэкенд или сервер.
Говоря о фронтенде и бэкенде, программисты обычно подразумевают разделение пользовательской части приложения от программной логики. Итак, фронтенд (front-end) это интерфейсная часть приложения, а бэкенд (back-end) это его серверная часть.
Серверы
По сути, сервер это вычислительная машина, компьютер, который подсоединен к Интернету, и постоянно включен.
| Две основные задачи сервера: хранение данных и обеспечение взаимодействия. |
Разберем по шагам, что происходит, когда вы пишете мне в мессенджер.
- Вы отправляете сообщение по Whatsapp или Viber.
- Приложение на вашем смартфоне посылает его на сервер.
- Сервер сохраняет сообщение у себя и держит, пока мой телефон выключен.
- Когда Viber на моем смартфоне подключается к серверу, тот присылает мне все хранящиеся сообщения.
| Сервер это «базовая станция», с которой работает приложение |
Когда приложению требуется какая-либо информация, оно обращается к серверу. Когда приложению требуется связаться с другим пользователем приложения, именно сервер обеспечивает их взаимодействие.
Термины сервер, бэкенд и API (апи) часто используются как взаимозаменяемые.
Хранилища или системы хранения данных
Основная задача сервера это хранение данных. Сюда входят
файлы: фотографии, видео и документы. Сервер хранит их в структурированном виде, который похож на папки на вашем компьютере, таким образом они могут быть доступны приложениям.
Также на сервере хранится
информация. Все приложения содержат информацию важную для их работы.
Вы можете представить такую информацию в виде набора таблиц. Например, приложению необходимо хранить информацию о пользователе и его пароле, чтобы могла пройти аутентификация. Ваше приложение может быть путеводителем по ресторанам, в этом случае сервер будет хранить информацию о каждом ресторане.
Помимо самой информации сервер также записывает
связи между данными. Например, пользователь лайкает ресторан в приложении на смартфоне, и сервер запоминает такую связь между рестораном и пользователем.
Это позволяет ответить на многие вопросы. Например:
- Сколько пользователей лайкнули этот ресторан?
- Какие рестораны нравятся этому пользователю?
- Блюда какой кухни нравятся сразу нескольким пользователям?
Базы данных
Информация и связи между данными хранятся в
базе данных (БД). Существует множество видов баз данных, но все они:
- могут хранить информацию
- могут хранить связи между данными
- могут получать запросы об информации и отвечать на них как единичными данными или набором данных, в зависимости от запроса.
Существует много видов баз данных, каждая из которых имеет свои преимущества и недостатки. Если вы слышите такие термины как SQL, MySQL, PostgreSQL, MongoDB, CouchDB, Redis, то знайте: речь идет о базах данных. Захочется копнуть глубже, у нас есть
подборка материалов о базах данных и языке SQL.
Взаимодействие
Ключевая задача сервера это взаимодействие с приложением и другими серверами.
Многие задачи приложения требуют взаимодействия с сервером. Например, если пользователь что-то ищет, поисковый запрос посылается на сервер и оттуда приходит результат. Если пользователь шлет сообщение другому пользователю, оно сначала приходит на сервер. А затем оттуда отправляется на приложение другого пользователя, чаще всего в виде отправленного уведомления. Технически такие запросы идут по протоколу HTTP, тому же самому, по которому браузер открывает вам сайты: про него у нас есть
отдельная статья.
Что такое API
Интерфейсы, которые предоставляет сервер для того, чтобы приложения могли с ним взаимодействовать, обычно называются
API. Ну а какие-то функции интерфейса можно сопоставить с
конечными точками (endpoints), например, с поиском или авторизацией на сайте. Если захочется посмотреть, как такой интерфейс устроен изнутри, начните с
обзора REST.
JSON и XML
Непосвященным такое взаимодействие может показаться странным. Двумя наиболее распространенными форматами взаимодействия являются JSON и XML.
XML слева, JSON справа
На первый взгляд форматы выглядят трудночитаемыми.
Важно понимать, что сервер это просто компьютер, как ваш ноутбук или смартфон. Приложение на вашем телефоне принимает пользовательский ввод в голосовом или текстовом виде, с помощью распознавания голоса или касания к экрану. Приложение обрабатывает эту информацию, а затем дает ответ в виде изображения на экране. Смартфон это компьютер, который взаимодействует с человеком, поэтому ввод и вывод предоставляются в удобной для человека форме. Сервер это вычислительная машина, которая взаимодействует только с другими компьютерами.
Человек воспринимает информацию благодаря таким вещам как: размер шрифта, цвет текста и форматирование. Но это ничего не значит для компьютера.
| Взаимодействие между серверами происходит в форматах, которые легко разобрать и понять другим компьютерам. |
Серверное приложение
Если вы хотите создать приложение, которое будет работать на вашем телефоне, вам также понадобится приложение, которое будет работать на сервере. Серверные приложения создаются с помощью серверных языков программирования и фреймворков, популярными вариантами которых являются
Java,
Ruby on Rails,
Node.js,
PHP,
ASP.NET,
Python,
Go. Список неполный: серверное приложение можно написать почти на любом языке, просто одни используют для этого чаще, а другие реже.
Можно сказать, что API это «двери» вашего сервера и приложение знает, что в них надо стучать. База данных хранит всю вашу информацию. А серверное приложение это «мозг», который связывает все вместе.
Оно получает и отвечает на запросы, которые поступают ему через API, добавляет и извлекает информацию из базы данных, и принимает решения. Например, когда пользовательское приложение отправляет информацию для входа, запрос поступает через API, правильная информация для входа хранится в базе данных. Задача серверного приложения: сравнить их и ответить приложению через API.
Если собрать все вместе, у любого бэкенда получаются три части.
| Часть бэкенда |
За что отвечает |
Аналогия из статьи |
| База данных |
Хранит файлы, информацию и связи между данными |
Хранилище |
| Серверное приложение |
Принимает запросы, обращается к базе, принимает решения и отвечает |
«Мозг» |
| API |
Набор входов, через которые приложение обращается к серверу |
«Двери» |
Аппаратное обеспечение
Когда вы слышите слово «сервер», скорее всего, вы представляете такую картинку: шкафы с мерцающими лампочками в закрытой комнате. Вероятно, для полноты картины, не хватает только Тома Круза, который спустится с потолка и что-нибудь украдет.
Многие большие компании владеют собственными серверами и целыми центрами обработки данных (те самые огромные комнаты с мерцающими шкафами). У Google 30 действующих площадок
в 11 странах, у Meta свои центры в США, Европе и Азии, и каждый такой центр это комплекс зданий, а не одна комната со шкафами. Когда вы руководите огромным сервисом с миллионами пользователей, содержание собственных серверов может быть значительно дешевле и это обеспечит более высокую производительность.
Свои серверы или облако
Вместо того чтобы содержать свои собственные сервера многие разработчики используют облачные сервисы. Такие сервисы как Amazon Web Services, Microsoft Azure, Google Cloud и DigitalOcean предлагают возможность использования «виртуальных серверов». Эти сервисы владеют и обслуживают аппаратное обеспечение, а разработчик просто загружает на него серверное приложение.
Некоторые провайдеры услуг предоставляют бэкенд как сервис, позволяя вам иметь простой бэкенд без необходимости писать серверное приложение самостоятельно.
Всем ли приложениям нужен бэкенд?
Большинство знакомых вам приложений, скорее всего, имеют бэкенд-компонент. Конечно, можно найти программы без серверной части. Например, некоторые приложения для продуктивности. Легкий способ выяснить, есть ли у приложения бэкенд, выглядит так:
| если вы переключитесь на режим «В полете», будет ли работать приложение? |
Если ответ «нет», значит, у приложения почти наверняка есть бэкенд-сервер.
Надеюсь, у вас появилось понимание, что такое бэкенд приложения. Может быть, когда вы встретите своих знакомых-программистов в следующий раз, то сможете не только понять, о чем они говорят, но и использовать какого-нибудь чертового «Джейсона» в вашей беседе.
Вопросы и ответы
Что такое сервер простыми словами?
Сервер это обычный компьютер, только он постоянно включен и подключен к интернету, чтобы приложения могли обратиться к нему в любой момент. Задачи у него две: хранить данные и передавать их между пользователями. Никакой особой магии в железе нет, отличие от вашего ноутбука в том, что сервер общается не с человеком, а с другими компьютерами.
Чем бэкенд отличается от фронтенда?
Фронтенд это часть приложения, которую видит пользователь: экраны, кнопки, тексты и картинки. Бэкенд это серверная часть, которую не видно: она хранит данные, считает, проверяет пароли и передает сообщения между людьми. Фронтенд живет на вашем устройстве, бэкенд на сервере.
Что такое API?
API это набор интерфейсов, через которые приложение обращается к серверу. Удобно представлять его как двери: приложение знает, в какую дверь постучаться, чтобы войти в аккаунт, найти ресторан или получить список друзей. Отдельные такие двери называют конечными точками, по-английски endpoints.
Зачем приложению база данных?
В базе данных сервер хранит саму информацию и связи между ее кусочками. Информация это, например, пользователи и рестораны. Связи это то, какой пользователь какой ресторан лайкнул. Благодаря связям приложение может ответить на вопросы вроде «какие рестораны нравятся этому человеку» или «сколько людей поставили этому месту лайк».
Что такое JSON и XML и зачем они нужны?
Это форматы, в которых приложение и сервер обмениваются сообщениями. Человеку важны шрифт, цвет и верстка, а компьютеру нужна четкая структура, где видно, где кончается одно поле и начинается другое. JSON и XML как раз задают такую структуру. Выглядят они непривычно, но ничего сложного в них нет: это просто список полей и значений.
Как понять, есть ли у приложения бэкенд?
Включите на телефоне авиарежим и откройте приложение. Если оно перестало работать или перестало показывать свежие данные, значит, ему нужен сервер. Если работает как ни в чем не бывало, скорее всего, все происходит прямо на устройстве: так устроены, например, некоторые калькуляторы, заметки и таймеры.
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ