JavaRush /Java блог /Random /Серверы. Ликбез для «чайников»

Серверы. Ликбез для «чайников»

Статья из группы Random
Ниже мы приводим адаптированный перевод статьи The non-techie’s guide to servers Кеннена Чандрасегарана (Kannan Chandrasegaran), разработчика из компании Panopto. Просим обратить внимание, что статья рассчитана на новичков, которые мало знакомы с понятием серверной части приложения и серверов. Серверы. Ликбез для «чайников» - 1

Из жизни офиса

Сложно быть «не-технарём» в ИТ-компании, уж поверьте! Маркетологи, менеджеры по продажам, бухгалтеры — не суть важно — время от времени они сталкиваются со своими технически подкованными коллегами. Это могут быть программисты или системные администраторы.... В любом случае, "не-технари" чувствуют себя так, будто им ампутировали важную часть мозга. Или они высадились на неизвестную планету с разумной негуманоидной жизнью. Или…
Серверы. Ликбез для «чайников» - 2
Иногда, конечно, всё заканчивается благополучно. Вот, например, девушка-«фронтендщица», идёт по коридору. Ничто не предвещает беды: она направляется налево, вы – направо, и как можно быстрее… Нет, в этот раз не пронесло. Вы уже сидите с ней за столом, и пытаясь побороть неловкое молчание, спрашиваете: «А...чем именно ты занимаешься?». Она начинает рассказывать что-то, но вы не сразу врубаетесь, о чём она. Вроде бы и слова знакомые: пользовательский интерфейс, приложения, и — точно, Facebook — это сайт. Ага, там есть кнопочки, меню… Вы кое-как разобрались в хитросплетениях её работы, киваете ей на прощание и ваши пути расходятся в коридорах большого офиса.
Серверы. Ликбез для «чайников» - 3
Но рано или поздно вам не так повезёт: вы встретите инженера по серверам. Или бек-энд разработчика. Не зная в какие дебри сейчас попадёте, вы наивно задаёте тот же вопрос и... получаете абракадабру в ответ. Слышите уйму иностранных слов, а в голове пробегают мысли: «Прилично ли спросить, что такое API?», «Мы всё время используем «бэдэ» (DataBase), правда, что ли?», «Кто такой, чёрт побери, этот Джейсон (JSON)??». Ваш знакомый инженер пытается рассказать вам о серверах, но не понимает, насколько вам сложно понять его наполненную профессиональными терминами речь. Вероятно, вы уже слышали слово "сервер" раньше, но его употребляют в настолько разных контекстах, что осознать его значение крайне сложно. Что ж попробуем разобраться с этим термином.

Вниз по кроличьей норе

Когда обычный человек (в смысле, не программист или админ) использует приложение, всё, что он видит — это интерфейс, картинку, которая реагирует на какие-то очевидные (чаще всего) действия. На самом деле то, что пользователи понимает под «приложением» обычно — его фронт-енд, то есть, лицевая, часть, обёртка, с которой они взаимодействуют. А вот о том, что внутри, то есть о том, что заставляет приложение работать, пользователи знают крайне мало. Скажем, вы отправляете мне сообщение, например, по Whatsapp или Viber. Это выглядит так, будто сообщение идет с вашего смартфона на мой. Давайте посмотрим на этот процесс внимательнее. Скажем, вы отправляете мне сообщение, когда мой телефон выключен, а затем вы сами выключаете свой смартфон. И вот, я включаю свой телефон, и все-таки получаю ваше сообщение, хотя наши телефоны одновременно не работали. Похоже, мы что-то упустили! Это «что-то», пропущенный нами компонент — бек-энд или сервер.
Серверы. Ликбез для «чайников» - 4
Говоря о фронт-энде и бек-энде, программисты обычно подразумевают разделение пользовательской части приложения от программной логики. Итак, фронт-энд (front-end) — это интерфейсная часть приложения, а бек-энд (back-end) — его серверная часть.

Серверы

По сути, сервер — это вычислительная машина, компьютер, который подсоединён к Интернету, и постоянно включён.
Две основные задачи сервера: хранение данных и обеспечение взаимодействия.
Серверы. Ликбез для «чайников» - 5
Вы отправляете сообщение по Whatsapp или Viber, приложение на вашем смартфоне посылает сообщение на сервер, где оно хранится. Когда Viber, установленный на моем смартфоне, подключается к серверу, тот присылает мне все хранящиеся сообщения.
Сервер — это «базовая станция» с которой работает приложение
Когда приложению требуется какая-либо информация, оно обращается к серверу. Когда приложению требуется связаться с другим пользователем приложения, именно сервер обеспечивает их взаимодействие. Термины сервер, бэк-энд и API (апи) часто используются как взаимозаменяемые.

Хранилища или системы хранения данных

Основная задача сервера — хранение данных. Сюда входят файлы: фотографии, видео и документы. Сервер хранит их в структурированном виде, который похож на папки на вашем компьютере, таким образом они могут быть доступны приложениям. Также на сервере хранится информация. Все приложения содержат информацию важную для их работы.
Серверы. Ликбез для «чайников» - 6
Вы можете представить такую информацию в виде набора таблиц. Например, приложению необходимо хранить информацию о пользователе и его пароле, чтобы могла пройти аутентификация. Ваше приложение может быть путеводителем по ресторанам, в этом случае сервер будет хранить информацию о каждом ресторане. Помимо самой информации сервер также записывает связи между данными. Например, пользователь лайкает ресторан в приложении на смартфоне, и сервер запоминает такую связь между рестораном и пользователем.
Серверы. Ликбез для «чайников» - 7
Это позволяет ответить на многие вопросы. Например:
  • Сколько пользователей лайкнули этот ресторан?
  • Какие рестораны нравятся этому пользователю?
  • Блюда какой кухни нравятся сразу нескольким пользователям?
Информация и связи между данными хранятся в базе данных (БД). Существует множество видов баз данных, но все они:
  • могут хранить информацию
  • могут хранить связи между данными
  • могут получать запросы об информации и отвечать на них как единичными данными или набором данных, в зависимости от запроса.
Существует много видов баз данных, каждая из которых имеет свои преимущества и недостатки. Если вы слышите такие термины как SQL, MySQL, MongoDB, CouchDB, Redis, то знайте — речь идет о базах данных.

Взаимодействие

Ключевая задача сервера — взаимодействие с приложением и другими серверами.
Серверы. Ликбез для «чайников» - 8
Многие задачи приложения требуют взаимодействия с сервером. Например, если пользователь что-то ищет, поисковый запрос посылается на сервер и оттуда приходит результат. Если пользователь шлет сообщение другому пользователю, оно сначала приходит на сервер. А затем оттуда отправляется на приложение другого пользователя, чаще всего в виде отправленного уведомления. Интерфейсы, которые предоставляет сервер для того, чтобы приложения могли с ним взаимодействовать, обычно называются API. Ну а какие-то функции интерфейса можно сопоставить с конечными точками (endpoints), например, с поиском или авторизацией на сайте. Непосвященным такое взаимодействие может показаться странным. Двумя наиболее распространенными форматами взаимодействия являются JSON и XML.
Серверы. Ликбез для «чайников» - 9
XML слева, JSON справа На первый взгляд форматы выглядят трудночитаемыми. Важно понимать, что сервер — это просто компьютер, как ваш ноутбук или смартфон. Приложение на вашем телефоне принимает пользовательский ввод в голосовом или текстовом виде, с помощью распознавания голоса или касания к экрану. Приложение обрабатывает эту информацию, а затем дает ответ в виде изображения на экране. Смартфон —компьютер, который взаимодействует с человеком, поэтому ввод и вывод предоставляются в удобной для человека форме. Сервер — вычислительная машина, которая взаимодействует только с другими компьютерами. Человек воспринимает информацию благодаря таким вещам как: размер шрифта, цвет текста и форматирование. Но это ничего не значит для компьютера.
Взаимодействие между серверами происходит в форматах, которые легко разобрать и понять другим компьютерам.

Серверное приложение

Если вы хотите создать приложение, которое будет работать на вашем телефоне, вам также понадобится приложение, которое будет работать на сервере. Серверные приложения создаются с помощью серверных языков программирования и фреймворков, популярными вариантами которых являются Java, Ruby on Rails, Node.js, PHP, ASP.NET.
Серверы. Ликбез для «чайников» - 10
Можно сказать, что API — это «двери» вашего сервера и приложение знает, что в них надо стучать. База данных хранит всю вашу информацию. А серверное приложение – это «мозг», который связывает все вместе. Оно получает и отвечает на запросы, которые поступают ему через API, добавляет и извлекает информацию из базы данных, и принимает решения. Например, когда пользовательское приложение отправляет информацию для входа, запрос поступает через API, правильная информация для входа хранится в базе данных. Задачей серверного приложения сравнить их и соответственно ответить приложению, используя API.

Аппаратное обеспечение

Серверы. Ликбез для «чайников» - 11
Когда вы слышите слово «сервер», скорее всего, вы представляете такую картинку: шкафы с мерцающими лампочками в закрытой комнате. Вероятно, для полноты картины, не хватает только Тома Круза, который спустится с потолка и что-нибудь крадёт. Многие большие компании владеют собственными серверами и целыми центрами обработки данных (те самые огромные комнаты с мерцающими шкафами). У Facebook и Google сотни серверов по всему миру. Когда вы руководите огромным сервисом с миллионами пользователей, содержание собственных серверов может быть значительно дешевле и это обеспечит более высокую производительность. Вместо того чтобы содержать свои собственные сервера многие разработчики используют облачные сервисы. Такие сервисы как Amazon Web Services, Azure и Digital Ocean предлагают возможность использования «виртуальных серверов». Эти сервисы владеют и обслуживают аппаратное обеспечение, а разработчик просто загружает на него серверное приложение. Некоторые провайдеры услуг предоставляют бекэнд как сервис, позволяя вам иметь простой бэкенд без необходимости писать серверное приложение самостоятельно.

Всем ли приложениям нужен бэкенд?

Большинство знакомых вам приложений, скорее всего, имеют бэкенд-компонент. Конечно, можно найти программы без серверной части. Например, некоторые приложения для продуктивности. Легкий способ выяснить есть ли у приложения бэк-енд выглядит так:
если вы переключитесь на режим «В полете», будет ли работать приложение?
Если ответ «нет», это означает что у приложения точно есть бекэнд-сервер.
Серверы. Ликбез для «чайников» - 12
Надеюсь, у вас появилось понимание, что такое бек-энд приложения. Может быть, когда вы встретите своих знакомых-программистов в следующий раз, то сможете не только понять, о чем они говорят, но и использовать какого-нибудь чёртового «Джейсона» в вашей беседе.
Комментарии (13)
ЧТОБЫ ПОСМОТРЕТЬ ВСЕ КОММЕНТАРИИ ИЛИ ОСТАВИТЬ КОММЕНТАРИЙ,
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ
Игорь Макар Уровень 0
16 августа 2022
Мне тоже статься показалась максимально информативной!
Anonymous #2664236 Уровень 1
23 мая 2021
Статья - супер!! мне ,как новичку много чего стало ясным, хотя были моменты, когда нужно было мммдумать, например: "Интерфейсы, которые предоставляет сервер для того, чтобы приложения могли с ним взаимодействовать, обычно называются API." Это уже было ранее в коментах, спасибо, кстати , разъяснения из коментария еще больше прояснили некоторые моменты для меня:)
Артём Уровень 20
8 января 2020
Перед программированием чего-либо необходимо знать, как, что и с чем взаимодействует. В этой статье очень понятно описана структура взаимодействия "клиента" и "сервера". Лично для меня статья закрыла многие вопросы и прояснила моменты, о которых я только догадывался.
Vadim Popov Уровень 10
1 августа 2019
на самом деле огонь статья,спасибо
Mr.Robot Уровень 28 Expert
25 октября 2017
Картинка с нашествием карапузов-зомби порвала в клочья! Примерно так и выглядят все "костыли" и "скрутки" бэкенда, которые тщательно скрываются от пользователей :)
Gennadiy Уровень 7
25 октября 2017
Картинка 2 с ребенком в роли бэкенда озадачила.
Alexashka Уровень 18
25 октября 2017
А можно на белом сделать? Читать невозможно(
Алексей Уровень 26
24 октября 2017
Хорошая статья для новичков. Спасибо.
kruvvtor Уровень 40
24 октября 2017
На картинках у мужика с ребенком голова повернута в разные стороны))), а в целом очень доходчивая статья для новичков. Огромное спасибо.
Антон Горячун Уровень 7
24 октября 2017
"Интерфейсы, которые предоставляет сервер для того, чтобы приложения могли с ним взаимодействовать, обычно называются API." "Все очень понятно для обывателя" Что такое интерфейс как пишется в статье? Это кнопки и внешний вид. Соответственно ему будет не понятно, как приложения будут взаимодействовать? На кнопки нажимать? ... Если бы в начале написали расшифровку, что такое интерфейс для программы, даже из вики: "набор готовых классов, процедур, функций, структур и констант, предоставляемых приложением". Это хоть как то развеяло "тайну". Статья не для новичков.