Качество может не соответствовать всяким stackoverflow, но мне всё равно.
Итак, начнём с некоторых личных вещей, а именно:
1 — Данный материал написан трукодером, он сам вникает в эту архитектуру и собственно пытается донести что-то до аудитории.
2 — Здесь не будет примеров с конкретными ЯП.
3 — Если кто-то дочитал до этого пункта, благодарствую, надеюсь вам понравится.
Визуализация «клиент-серверной» архитектуры
С вашего позволения, я нарисую её в программе Adobe Photoshop(нам заплатили за рекламу). Конечно, если кому-то необходимо более красивый рисунок, обращайтесь. Мы немного отвлеклись от темы, итак, как же выглядит клиент-сервер:
Обозначим кружки слева-направо: Client 1, Client 2 … Client 5. Клиенты есть, что ещё надо? В прицнипе — ничего, ведь существует архитектура «клиент-клиент», но, мы с вами здесь по другому поводу. Добавим в нашу схему сервер, и проанализируем что-же вышло:
Ну добавили сервер и добавили, что с того? Верно, ничего.
Продолжим, давайте познакомимся с «деревенскими» определениями клиента и сервера.
Клиент
Клиент — это оболочка, которая позволяет взаимодействовать с сервером, но взаимодействовать так, чтобы пользователь видел только «формочки да кнопочки». Приведу пример клиента, конечно же, в виде рисунка.
Очень надеюсь, что всё понятно и доступно. Переходим к серверу. Что же это такое..?
Сервер
Сервер — это огроомный такой шкафище, с кучей жёстких дисков и огромным охлаждением, он ещё работает 24/7.
Пара важных моментов:
- Серверу необходимо обладать мощностями, которых хватит с запасом, да, возможно ресурсы сервера будут потрачены в пустую, но при карантинах, как сейчас, и огромных нагрузках вышеупомянутый объект не упадёт.
- На сервере в обязательном порядке реализовывается вся основная логика программы. Вся работа с данными, и т.д. исключительно на сервере, дабы не произошли неприятные ситуации в виде утечек пользовательских данных, как вариант.
Забыл упомянуть о базе данных, которая поставляется в комплекте с сервером, ведь данные необходимо где-то хранить, верно?
База данных
База данных работает исключительно с сервером, позволяет хранить в себе информацию. Пока это всё что нужно о ней знать.
Итак, возвращаемся к нашей схеме, теперь у нас появился новый объект — база данных, давайте визуализируем это.
Наверняка читатель думает, ну нарисовал ты эти каракули, и как это связано? Переходим к следующему этапу, если так можно выразиться.
Связь всего этого абсурда
Как же связаны все клиенты, сервер, база? Как они «общаются»? Что вообще происходит? Происходит следующее..(визуализирован будет конечный результат)
Допустим наше приложение — мессенджер. У нас 5 пользователей: Client 1, … , Client 5. Имеется только общий чат.
Предположим Client 1 отправляет в чат сообщение, что с ним происходит? Происходит следующее:
Client 1 отправляет сообщение в чат, вызывается функция, передающая это сообщение на сервер, с которого оное отправляется в базу данных, со стороны непонятно и громоздко.
Что же дальше? На самом деле, всё немного не так как описано выше, сервер делает запрос в базу данных, тем самым добавляя в неё сообщение, база в свою очередь, грубо говоря, отправляет свой «вид» после внесения изменений.
После обращения к базе, сервер снова совершает это действие, но запрашивая информацию с неё, после чего «рассылает» её всем клиентам.
Кажется .. у нас закипает голова. Что-ж, в текстовом виде это выглядит так:
клиент → сервер → база.
база ← сервер → клиенты.
Очень надеюсь, что всё вышесказанное понятно. Итак, соберём всё в кучу.
Клиент — штука с интерфейсами, картинками, красотой.
Сервер — штука с основной логикой.
База данных — штука хранящая в себе всё, начиная от данных, заканчивая логами.
Аналогичным образом, написав сообщение в наш импровизированный чат от лица Client 2, мы получим такую же схему. Вот вся суть клиент-серверной архитектуры.
Поговорим о плюсах и минусах данной технологии. Начнём с положительного.
Плюсы
1 — Экономический плюс. Мощный сервер — дешевле большего количества клиентских машин.
2 — Нет дублирования кода. Клиент отвечает только за отрисовку красоты на экране юзверя, сервер = логика.
3 — Информационной безопасности плюс. Все данные под защитой. Обычный пользователь не сможет «случайно» сломать ваше приложение.
Минус(-ы)
In my humble opinion, главный минус — лёг сервер, всё, «жизнь остановилась», легла база и аналогичная ситуация.