Спринт 12/18: Архитектура системы → Тема 2/6: Фундаментальный стиль → Урок 1/4
Клиент-серверная архитектура
В предыдущих уроках вы узнали про компоненты системы и структуры развёртывания системы. В этом уроке вы познакомитесь с клиент-серверной архитектурой. А также узнаете, что такое толстый и тонкий клиент.
Даня
Я правильно понял Ксению — у Оtium тонкий клиент?
Айгуль
Да, всё так.
Даня
Хм, а у кого тогда толстый? 🙃
Айгуль
Например, у Excel.
Даня
А в чём разница? Расскажешь?
Айгуль
Конечно! Обсудим клиент-серверную архитектуру 🤓
Отсутствие стиля
Проектирование архитектуры ПО без использования какого-либо стиля может привести к отсутствию в ПО различимых архитектурных структур. Такую архитектуру называют «Большой комок грязи» (Big Ball of Mud). Название принадлежит Брайану Футу (Brian Foote) и Джозефу Йодеру (Joseph Yoder):
«Большой комок грязи — это беспорядочно структурированный, растянутый, неряшливый, словно перемотанный на скорую руку изолентой и проволокой, джунгли спагетти-кода. Эти системы показывают безошибочные признаки нерегулируемого роста и постоянных доделок. Информация делится беспорядочно между отдалёнными элементами системы, часто до такой степени, что почти вся важная информация становится глобальной или дублируется. Общая структура системы, возможно, никогда не была чётко определена. Если и была, то стала размыта до неузнаваемости. Программисты, хоть немного понимающие архитектуру, обходят это болото стороной. И только те, кого она волнует мало, и, возможно, те, кому нравится латать дыры в системе каждый день, довольны работой над такими системами».
Архитекторы ПО, как правило, не проектируют «большой комок грязи» намеренно. Это происходит, потому что иногда им кажется, что так можно быстрее начать реализацию ПО и быстрее передать его пользователям.
По мере роста количества функций ПО отсутствие явной структуры делает его доработку невероятно трудной. «Большие комки грязи» приводят к проблемам в части таких атрибутов качества, как тестируемость, масштабируемость и производительность.
Чтобы ПО не превратилось в «большой комок грязи», архитекторы ПО используют стили (шаблоны) при его проектировании.
Типы стилей
Основные типы стилей архитектуры ПО:
Фундаментальные (Fundamental).
Монолитные (Monolithic).
Распределённые (Distributed).
Фундаментальные стили называются так, потому что они внедрены в стили других типов. Они появляются снова и снова на протяжении всей истории ПО, потому что предоставляют полезный взгляд на организацию программного кода, развёртывание и другие аспекты архитектуры системы.
Монолитные и распределённые стили противопоставляют друг другу.
Монолитные стили подразумевают развёртывание всего программного кода системы единовременно, распределённые — развёртывание множества частей кода по отдельности.
Клиент-серверная архитектура
Раньше все функции ПО выполнял один-единственный компьютер. Со временем появилась необходимость распределять функции программного обеспечения по элементам аппаратного обеспечения, чтобы не завязывать всю логику на одном устройстве — так появилась клиент-серверная архитектура.
Клиент-серверная архитектура (Client-Server Architecture) — это фундаментальный стиль (шаблон) архитектуры ПО, задача которого — сбалансировать обработку данных между клиентами и одним или несколькими серверами, разделяя основные функции элементов ПО между ними.
Ниже представлен простой пример клиент-серверной архитектуры, где клиентом является настольный компьютер, ноутбук, планшет или мобильный телефон (смартфон), который даёт указания серверу.
Клиент отвечает за логику представления, в то время как сервер выполняет логику доступа к данным и хранилищам данных. Бизнес-логика может находиться как на стороне клиента, так и на стороне сервера, однако может также быть разделена между ними.
Распределение логики приложения
Чтобы разобраться в том, как между клиентом и сервером распределяется бизнес-логика, необходимо поговорить про толстого и тонкого клиента.
Толстый клиент
Толстый клиент (Thick/Fat/Rich Client) — это клиент, который содержит либо всю, либо большую часть бизнес-логики.
На схеме ниже представлен пример распределения бизнес-логики с использованием толстого клиента. Вся логика находится на клиенте, а значит, он содержит в себе весь набор функций для выполнения задач пользователя.
Примером приложения, использующего толстого клиента, которого пользователям необходимо установить на их устройства, являются цифровые продукты компании Microsoft (Word, Excel или PowerPoint), их данные хранятся локально на компьютере.
Тонкий клиент
Тонкий клиент (Thin Client) — это клиент, который содержит лишь небольшую часть бизнес-логики.
В таком случае картинка выше выглядела бы так:
Многие веб-приложения являются примером использования тонкого клиента. Они работают с веб-браузером.
Веб-браузер (Web Browser) — программа, установленная на клиенте, которая отображает выложенные в сеть интернет страницы. Например, Google Chrome, Safari, Firefox, Opera, Яндекс Браузер, Microsoft Edge и другие.
Веб-браузер выполняет всю логику представления и небольшую часть бизнес-логики. В то время как на стороне сервера находится большая часть бизнес-логики, вся логика доступа к данным и хранилище данных.
Распределение бизнес-логики между веб-браузером клиента и веб-сервером определяет архитектор ПО, исходя из соображений производительности. Пользователи хотят, чтобы система работала быстро. Выполнение части бизнес-логики веб-браузером позволяет ускорить работу системы, потому что клиенту нужно будет реже взаимодействовать с сервером. Например, веб-браузер может проверять введённый пароль на соответствие установленным к нему требованиям: длине пароля, наличию прописных и строчных букв, цифр и специальных символов.
Ниже вы можете увидеть пример устройства тонкого клиента клиент-серверной архитектуры при работе через веб-браузер.
Пример тонкого клиента — веб-приложения Google Docs или Miro, с которыми можно взаимодействовать через веб-браузер, установленный на устройстве.
Определите, какие ПО для компьютера относятся к толстым клиентам, какие — к тонким.
Толстый клиент
Приложение Apple TV
Приложение Apple TV
Приложение Zoom
Приложение Zoom
Photoshop
Photoshop
Тонкий клиент
Сайт diagrams.net
Сайт diagrams.net
Яндекс Почта
Яндекс Почта
Сайт «Кинопоиск»
Сайт «Кинопоиск»
Правильных ответов: 6, неправильных ответов: 0.
Сравнение толстого и тонкого клиента
Выбирая между тонким и толстым клиентом, стоит учитывать следующие факторы:
Цена
Тонкие клиенты более доступны по цене, для них не требуется покупка какого-то специфичного оборудования. Толстых клиентов необходимо устанавливать локально на устройство, у которого должно быть достаточно мощности для выполнения действий, заложенных в бизнес-логике.
Обслуживание
Для тонких клиентов не требуется специфическое обслуживание, ведь вся работа чаще всего осуществляется через браузер. Толстые клиенты нуждаются в техническом обслуживании и индивидуальном обновлении ПО для корректной работы. У пользователя может стоять старая версия приложения и в ней могут не поддерживаться некоторые функции. Ещё у пользователя может быть старая версия операционной системы, которая не поддерживает нужное приложение.
Автономная работа
У тонкого клиента нет режима автономной работы, для него необходимо стабильное и надёжное сетевое соединение. Толстые клиенты позволяют работать автономно.
Безопасность
Толстые клиенты более подвержены угрозам безопасности, ведь нельзя контролировать, что пользователь устанавливает себе на компьютер и какой вирус он мог случайно занести на устройство. В случае с тонким клиентом такие угрозы минимальны.
Надёжность
При сбое в случае с тонкими клиентами пострадают все подключённые клиенты, в отличие от толстых клиентов, которые больше зависят от локальных ресурсов.
Тонкий клиент может или совсем не содержать бизнес-логику, или содержать её малую часть.
Пользователь может работать с этим клиентом только онлайн
Тонкий клиент
В связи с расположением бизнес-логики в тонком клиенте чаще всего работать с ним можно именно через веб-браузер, поэтому клиент должен быть онлайн.
Содержит в себе всю бизнес-логику
Толстый клиент
Толстый клиент содержит в себе бизнес-логику в отличие от тонких клиентов.
Этого клиента необходимо устанавливать на компьютер
Толстый клиент
Толстый клиент устанавливается на персональное устройство пользователя.
В системе произошёл сбой, и все пользователи, работающие с этим клиентом, отключились и потеряли свои данные
Тонкий клиент
В связи с тем что основная часть бизнес-логики тонкого клиента находится на сервере, с которым могут работать множество пользователей, в случае недоступности этого сервера все клиенты потеряют доступ к нему.
Пользователь при работе с этим клиентом должен не забывать про обновление антивирусных программ
Толстый клиент
Толстый клиент устанавливается на устройство пользователя, и для корректной работы важно, чтобы на этом устройстве не было вредоносных программ.
Предоставляет пользователям возможность работать офлайн
Толстый клиент
В связи с тем что толстый клиент содержит в себе всю бизнес-логику, зачастую он может работать офлайн.
Промежуточное ПО
Даня
А что если мой клиент и сервер несовместимы? Менять клиента? Или сервер? 😅
Айгуль
Для таких случаев есть промежуточное ПО!
В клиент-серверной архитектуре для взаимодействия клиента и сервера иногда необходимо промежуточное ПО.
Промежуточное или связующее программное обеспечение (Middleware) — это ПО, связывающее операционную систему и другие программы.
Промежуточное ПО предоставляет множество возможностей для работы программ и помогает разработчикам реализовывать и развёртывать программы более эффективно за счёт предоставления готовых решений для взаимодействия с операционной системой.
Например, промежуточное ПО необходимо, если с сервером взаимодействуют различные клиенты (ноутбуки и мобильные устройства), чтобы обрабатывать запросы от разных типов клиентов, переводя их в единый тип. То есть оно действует как мост между различными технологиями, инструментами и базами данных.
Существует множество типов промежуточного ПО. К ним в том числе относятся сервер приложений и промежуточное ПО мобильного устройства. Сервер приложений устанавливается на сервере, а промежуточное ПО мобильного устройства на клиенте.
Промежуточное ПО мобильного устройства переводит сообщение на язык, понятный серверу приложений.
Примерами серверов приложений являются Microsoft Internet Information Services (IIS), IBM WebSphere Application Server, JBoss Enterprise Application Platform (JBoss EAP).
Преимущества клиент-серверной архитектуры
Масштабируемость
Масштабируемость означает, что можно легко увеличить или уменьшить объём данных хранилища и вычислительные возможности серверов. Если один сервер перегружен, можно просто добавить ещё один сервер. Таким образом, множество серверов используется для выполнения бизнес-логики, логики доступа к данным или хранения данных. В таком случае стоимость обновления будет расти постепенно, вы можете обновляться маленькими частями.
Поддержка различных типов клиентов и серверов
Клиент-серверная архитектура может поддерживать множество различных клиентов и серверов благодаря использованию промежуточного ПО. Вы можете соединить компьютеры, которые используют различные операционные системы, а значит, вы не становитесь заложниками одной системы и одного производителя. Пользователи также могут выбрать, какой компьютер они предпочитают, — в одной сети можно использовать компьютеры, к примеру, на Windows и macOS.
Разделение логики для тонких клиентов
Для тонкой клиент-серверной архитектуры, которая использует сеть интернет, просто разделить логику представления, бизнес-логику и логику доступа к данным и спроектировать каждую из них так, чтобы она была независимой.
Например, логика представления может быть разработана в HTML+CSS, чтобы определить, как страница будет отображаться на экране (например цвета, шрифты, порядок элементов, тексты, командные кнопки, тип списков выбора и так далее). Внешний вид интерфейса можно изменить без какого-либо влияния на бизнес-логику, просто внеся изменения в HTML+CSS. Аналогично можно изменить бизнес-логику, не изменяя логику представления или данные, хранящиеся в базах данных, к которым можно обратиться, используя SQL.
Надёжность
В клиент-серверной архитектуре все приложения поддерживает не один, а несколько серверов. Это позволяет сделать систему более надёжной. Не существует какой-то центральной точки отказа, которая остановит всю систему в случае сбоя. Если один сервер откажет в клиент-северной архитектуре, вся сеть продолжает функционировать, используя остальные серверы. Однако приложение, использующее сервер, который упал, перестанет работать. Имеет смысл заменить его, и тогда работа приложения может быть восстановлена.
Недостатки
Клиент-серверная архитектура также имеет некоторые критические ограничения. Самое важное — сложность. Все приложения в клиент-серверной архитектуре состоят из двух частей — программного обеспечения на стороне клиента и программного обеспечения на стороне сервера. В связи с этим написание программного обеспечения намного сложнее.
Другая сложность связана с обновлением всей системы на новую версию программного обеспечения. С клиент-серверной архитектурой необходимо обновлять всех клиентов и все серверы, а также нужно проверять, применяются ли обновления на всех устройствах.
Подведём итоги
Архитектуру без понятных и различимых структур называют «большим комком грязи». Чтобы ПО не превратилось в него, архитекторы ПО используют архитектурные стили (шаблоны). Одним из них является клиент-серверная архитектура.
Клиент-серверная архитектура стремится сбалансировать обработку данных между клиентом и сервером, разделяя основные функции элементов ПО.
Использование толстого или тонкого клиента позволяет распределить бизнес-логику между клиентом и сервером.
Толстый клиент содержит всю или большую часть бизнес-логики.
Тонкий клиент содержит лишь небольшую часть бизнес-логики.