Введение
Распределенная структура приложений в вычислительной технике
Модель «клиент-сервер» — это распределенная структура приложений, которая разделяет задачи или рабочую нагрузку между поставщиками ресурса или услуги, называемыми серверами, и теми, кто запрашивает услуги, называемыми клиентами. Клиенты и серверы часто взаимодействуют по компьютерной сети на отдельных аппаратных средствах, но и клиент, и сервер могут располагаться в одной системе. Сервер запускает одну или несколько серверных программ, которые предоставляют свои ресурсы клиентам. Клиент обычно не предоставляет свои ресурсы, но запрашивает контент или услугу у сервера. Клиенты, таким образом, инициируют сеансы связи с серверами, которые ожидают входящие запросы. Примерами компьютерных приложений, использующих модель «клиент-сервер», являются электронная почта, сетевая печать и Всемирная паутина.
Роль клиента и сервера
Характеристика "клиент-сервер" описывает взаимоотношения между взаимодействующими программами в приложении. Серверный компонент предоставляет функцию или сервис одному или нескольким клиентам, которые инициируют запросы на эти сервисы. Серверы классифицируются в зависимости от предоставляемых ими сервисов. Например, веб-сервер предоставляет веб-страницы, а файловый сервер – компьютерные файлы. Общим ресурсом может быть любое программное обеспечение и электронные компоненты серверного компьютера, включая программы, данные, процессоры и устройства хранения. Предоставление ресурсов сервера в пользование является сервисом. Определяется ли компьютер как клиент, сервер или и то, и другое, зависит от характера приложения, которому требуются сервисные функции. Например, один компьютер может одновременно запускать программное обеспечение веб-сервера и файлового сервера для предоставления различных данных клиентам, выполняющим разные типы запросов. Клиентское программное обеспечение также может взаимодействовать с серверным программным обеспечением на том же компьютере. Взаимодействие между серверами, например, для синхронизации данных, иногда называют межсерверным взаимодействием или связью между серверами.
Связь между клиентом и сервером
Как правило, сервис представляет собой абстракцию вычислительных ресурсов, и клиенту не требуется знать, как сервер обрабатывает запрос и отправляет ответ. Клиент должен лишь понимать ответ, основываясь на общеизвестном прикладном протоколе, то есть на содержании и формате данных для запрошенного сервиса. Клиенты и серверы обмениваются сообщениями по схеме «запрос-ответ». Клиент отправляет запрос, а сервер возвращает ответ. Этот обмен сообщениями является примером межпроцессного взаимодействия. Для взаимодействия компьютерам необходимо иметь общий язык и следовать определенным правилам, чтобы и клиент, и сервер знали, чего ожидать. Язык и правила взаимодействия определяются в коммуникационном протоколе. Все протоколы работают на прикладном уровне. Прикладной протокол определяет базовые модели диалога. Для дальнейшей формализации обмена данными сервер может реализовать программный интерфейс приложения (API). API – это уровень абстракции для доступа к сервису. Ограничивая взаимодействие определенным форматом данных, он упрощает их разбор. Абстрагируя доступ, он облегчает обмен данными между различными платформами. Сервер может получать запросы от множества различных клиентов за короткий промежуток времени. Компьютер может выполнять лишь ограниченное количество задач одновременно и полагается на систему планирования для определения приоритетов входящих запросов от клиентов и их обработки. Чтобы предотвратить злоупотребления и обеспечить максимальную доступность, серверное программное обеспечение может ограничивать доступность для клиентов. Атаки типа «отказ в обслуживании» (DoS) направлены на использование обязанности сервера обрабатывать запросы, перегружая его избыточным количеством запросов. Если между клиентом и сервером передается конфиденциальная информация, необходимо использовать шифрование.
Пример
Когда клиент банка получает доступ к услугам онлайн-банкинга через веб-браузер (клиент), клиент отправляет запрос на веб-сервер банка. Данные для входа клиента могут храниться в базе данных, к которой веб-сервер обращается как клиент. Сервер приложений интерпретирует полученные данные, применяя бизнес-логику банка, и передает результат веб-серверу. Наконец, веб-сервер возвращает результат клиентскому веб-браузеру для отображения. На каждом этапе этой последовательности обмена сообщениями между клиентом и сервером компьютер обрабатывает запрос и возвращает данные. Это шаблон обмена сообщениями "запрос-ответ". Когда все запросы обработаны, последовательность завершается, и веб-браузер отображает данные клиенту. Этот пример иллюстрирует шаблон проектирования, применимый к клиент-серверной модели: принцип разделения ответственности.
На сервере
Серверная часть относится к программам и операциям, выполняемым на сервере. Это противопоставляется клиентской части, где программы и операции выполняются на клиенте.
Компьютерная безопасность
В контексте компьютерной безопасности уязвимости или атаки на стороне сервера – это те, которые происходят на серверной компьютерной системе, а не на стороне клиента или при передаче данных между ними. Например, злоумышленник может воспользоваться уязвимостью SQL-инъекции в веб-приложении, чтобы злонамеренно изменить или получить несанкционированный доступ к данным в базе данных сервера. В другом случае, злоумышленник может взломать серверную систему, используя уязвимости в лежащей в основе операционной системе, и затем получить доступ к базе данных и другим файлам так же, как и авторизованные администраторы сервера.
Клиентская сторона
Клиентская сторона относится к операциям, выполняемым клиентом в компьютерной сети.
Общие понятия
Обычно клиент – это компьютерное приложение, например веб-браузер, которое работает на локальном компьютере пользователя, смартфоне или другом устройстве и подключается к серверу по мере необходимости. Операции могут выполняться на стороне клиента, поскольку они требуют доступа к информации или функциональности, доступной на клиенте, но не на сервере, поскольку пользователю необходимо наблюдать за операциями или вводить данные, либо потому, что серверу не хватает вычислительных ресурсов для своевременного выполнения операций для всех обслуживаемых клиентов. Кроме того, если операции может выполнять клиент без передачи данных по сети, это может занять меньше времени, потребовать меньшей пропускной способности и снизить риски для безопасности. Когда сервер предоставляет данные общепринятым способом, например, в соответствии со стандартными протоколами, такими как HTTP или FTP, пользователи могут выбирать из множества клиентских программ (например, большинство современных веб-браузеров могут запрашивать и получать данные как по HTTP, так и по FTP). В случае более специализированных приложений программисты могут разрабатывать собственный сервер, клиент и протокол связи, предназначенные для совместного использования. Программы, работающие на локальном компьютере пользователя без отправки или получения данных по сети, не считаются клиентами, и, следовательно, их операции не называются клиентскими.
Компьютерная безопасность
В контексте компьютерной безопасности уязвимости или атаки на стороне клиента относятся к тем, которые происходят на компьютерной системе клиента / пользователя, а не на стороне сервера или при передаче данных между ними. Например, если сервер содержит зашифрованный файл или сообщение, которое можно расшифровать только с помощью ключа, хранящегося на компьютерной системе пользователя, атака на стороне клиента обычно является единственной возможностью злоумышленника получить доступ к расшифрованному содержимому. Например, злоумышленник может установить вредоносное ПО на клиентскую систему, что позволит ему просматривать экран пользователя, записывать нажатия клавиш и похищать копии ключей шифрования пользователя и т.п. В качестве альтернативы, злоумышленник может использовать уязвимости межсайтового скриптинга для выполнения вредоносного кода на системе клиента без необходимости установки постоянного вредоносного ПО. и RFC 4. Это использование продолжалось в Xerox PARC в середине 1970-х годов. Одним из контекстов, в котором исследователи использовали эти термины, был дизайн языка программирования компьютерных сетей под названием Decode Encode Language (DEL). К 1992 году слово "сервер" вошло в общий обиход.
Централизованные вычисления
Модель «клиент-сервер» не предписывает, чтобы серверы обладали большим количеством ресурсов, чем клиенты. Скорее, она позволяет любому компьютеру общего назначения расширять свои возможности, используя общие ресурсы других компьютеров. Централизованные вычисления, напротив, специально выделяют значительное количество ресурсов небольшому числу компьютеров. Чем больше вычислительной нагрузки переносится с клиентских компьютеров на центральные, тем проще могут быть клиентские компьютеры. Они в значительной степени полагаются на сетевые ресурсы (серверы и инфраструктуру) для вычислений и хранения данных. Дисковый узел загружает даже свою операционную систему из сети, а компьютерный терминал вообще не имеет операционной системы; он служит лишь интерфейсом ввода-вывода для сервера. В отличие от этого, «толстый клиент», такой как персональный компьютер, обладает большим количеством ресурсов и не зависит от сервера для выполнения основных функций. По мере снижения стоимости и увеличения мощности микрокомпьютеров с 1980-х по конец 1990-х годов многие организации перенесли вычисления с централизованных серверов, таких как мейнфреймы и мини-ЭВМ, на «толстые клиенты». Это обеспечило больший, более индивидуальный контроль над компьютерными ресурсами, но усложнило управление информационными технологиями. В 2000-х годах веб-приложения достигли достаточной зрелости, чтобы конкурировать с программным обеспечением, разработанным для конкретной микроархитектуры. Эта зрелость, более доступные объемы хранения данных и развитие сервисно-ориентированной архитектуры стали одними из факторов, способствовавших появлению тенденции к облачным вычислениям в 2010-х годах.
Сравнение с архитектурой одноранговых систем
В дополнение к модели «клиент-сервер», распределенные вычислительные приложения часто используют архитектуру приложений «одноранговая сеть» (P2P). В модели «клиент-сервер» сервер часто проектируется как централизованная система, обслуживающая множество клиентов. Требования сервера к вычислительной мощности, памяти и хранилищу должны быть соответствующим образом масштабированы в соответствии с ожидаемой нагрузкой. Системы балансировки нагрузки и обеспечения отказоустойчивости часто используются для масштабирования сервера за пределы одной физической машины. Балансировка нагрузки определяется как методичное и эффективное распределение сетевого или прикладного трафика между несколькими серверами в серверном парке. Каждый балансировщик нагрузки располагается между клиентскими устройствами и серверными узлами, принимая и затем распределяя входящие запросы на любой доступный сервер, способный их обработать. В одноранговой сети два или более компьютера (узла) объединяют свои ресурсы и взаимодействуют в децентрализованной системе. Узлы равноправны или эквивалентны и являются частью неиерархической сети. В отличие от клиентов в архитектуре «клиент-сервер» или сети «клиент-очередь», узлы взаимодействуют друг с другом напрямую. В одноранговой сети алгоритм в протоколе связи одноранговой сети балансирует нагрузку, и даже узлы с ограниченными ресурсами могут помочь распределить нагрузку. Если узел становится недоступным, его общие ресурсы остаются доступными, пока другие узлы предоставляют их. В идеале, узлу не требуется обеспечивать высокую доступность, поскольку другие, резервные узлы компенсируют время простоя ресурсов; по мере изменения доступности и производительности узлов протокол перенаправляет запросы. Архитектуры «клиент-сервер» и «главный-ведомый» рассматриваются как подкатегории распределенных одноранговых систем.