Модель клиент-сервер — это распределенная структура приложения , которая распределяет задачи или рабочую нагрузку между поставщиками ресурсов или услуг, называемыми серверами , и инициаторами запроса служб, называемыми клиентами . [1] Часто клиенты и серверы обмениваются данными через компьютерную сеть на отдельном оборудовании, но и клиент, и сервер могут находиться в одной системе. Хост сервера запускает одну или несколько серверных программ, которые делятся своими ресурсами с клиентами. Клиент обычно не делится своими ресурсами, но запрашивает контент или услуги с сервера. Таким образом, клиенты инициируют сеансы связи с серверами, которые ожидают входящих запросов. Примерами компьютерных приложений, использующих модель клиент-сервер, являются электронная почта , сетевая печать и Всемирная паутина .
Характеристика «клиент-сервер» описывает взаимоотношения взаимодействующих программ в приложении. Серверный компонент предоставляет функцию или услугу одному или нескольким клиентам, которые инициируют запросы на такие услуги. Серверы классифицируются по предоставляемым ими услугам. Например, веб-сервер обслуживает веб-страницы , а файловый сервер — компьютерные файлы . Общий ресурс может представлять собой любое программное обеспечение и электронные компоненты серверного компьютера, от программ и данных до процессоров и устройств хранения данных . Совместное использование ресурсов сервера представляет собой услугу .
Является ли компьютер клиентом, сервером или тем и другим, определяется характером приложения, которому требуются сервисные функции. Например, на одном компьютере могут одновременно работать веб-сервер и программное обеспечение файлового сервера, чтобы предоставлять разные данные клиентам, делающим разные типы запросов. Клиентское программное обеспечение также может взаимодействовать с серверным программным обеспечением на одном компьютере. [2] Связь между серверами, например, для синхронизации данных, иногда называют межсерверной или межсерверной связью.
Как правило, служба представляет собой абстракцию компьютерных ресурсов, и клиенту не нужно беспокоиться о том, как работает сервер при выполнении запроса и доставке ответа. Клиенту необходимо только понять ответ на основе известного протокола приложения , т. е. содержания и форматирования данных для запрошенной услуги.
Клиенты и серверы обмениваются сообщениями по схеме «запрос-ответ» . Клиент отправляет запрос, а сервер возвращает ответ. Этот обмен сообщениями является примером межпроцессного взаимодействия . Для общения компьютеры должны иметь общий язык и следовать правилам, чтобы и клиент, и сервер знали, чего ожидать. Язык и правила общения определены в протоколе связи . Все протоколы работают на прикладном уровне . Протокол прикладного уровня определяет основные шаблоны диалога. Чтобы еще больше формализовать обмен данными, сервер может реализовать интерфейс прикладного программирования (API). [3] API — это уровень абстракции для доступа к сервису. Ограничивая общение определенным форматом контента , это облегчает синтаксический анализ . Абстрагируя доступ, он облегчает межплатформенный обмен данными. [4]
Сервер может получать запросы от множества разных клиентов за короткий период времени. Компьютер может выполнять только ограниченное количество задач в любой момент и полагается на систему планирования , которая расставляет приоритеты входящих запросов от клиентов для их обработки. Чтобы предотвратить злоупотребления и максимизировать доступность , серверное программное обеспечение может ограничивать доступность для клиентов. Атаки типа «отказ в обслуживании» предназначены для использования обязанности сервера обрабатывать запросы путем перегрузки его чрезмерной частотой запросов. Шифрование следует применять, если конфиденциальная информация должна передаваться между клиентом и сервером.
Когда клиент банка получает доступ к услугам онлайн-банкинга через веб-браузер (клиент), клиент инициирует запрос к веб-серверу банка. Учетные данные клиента для входа в систему могут храниться в базе данных , а веб-сервер обращается к серверу базы данных в качестве клиента. Сервер приложений интерпретирует возвращаемые данные, применяя бизнес-логику банка , и передает выходные данные на веб-сервер. Наконец, веб-сервер возвращает результат клиентскому веб-браузеру для отображения.
На каждом этапе этой последовательности обмена сообщениями клиент-сервер компьютер обрабатывает запрос и возвращает данные. Это шаблон обмена сообщениями запрос-ответ. Когда все запросы удовлетворены, последовательность завершается, и веб-браузер представляет данные клиенту.
Этот пример иллюстрирует шаблон проектирования , применимый к модели клиент-сервер: разделение задач .
Ранней формой клиент-серверной архитектуры является удаленный ввод задания , относящийся, по крайней мере, к OS/360 (объявлено в 1964 году), когда запрос заключался в запуске задания , а ответом был результат.
При формулировании модели клиент-сервер в 1960-х и 1970-х годах ученые-компьютерщики, создавшие ARPANET (в Стэнфордском исследовательском институте ), использовали термины сервер-хост (или обслуживающий хост ) и пользователь-хост (или использующий-хост ), и они появляются в ранние документы RFC 5 [5] и RFC 4. [6] Такое использование было продолжено в Xerox PARC в середине 1970-х годов.
Одним из контекстов, в которых исследователи использовали эти термины, была разработка языка программирования компьютерных сетей под названием Decode-Encode Language (DEL). [5] Целью этого языка было принимать команды от одного компьютера (пользовательского хоста), который возвращал пользователю отчеты о состоянии, поскольку он кодировал команды в сетевых пакетах. Другой компьютер с поддержкой DEL, хост-сервер, получал пакеты, декодировал их и возвращал отформатированные данные хосту пользователя. Программа DEL на хосте пользователя получила результаты для представления пользователю. Это транзакция клиент-сервер. Разработка DEL только началась в 1969 году, когда Министерство обороны США создало ARPANET (предшественник Интернета ).
Клиент-хост и сервер-хост имеют немного разные значения, чем клиент и сервер . Хост — это любой компьютер, подключенный к сети. В то время как слова «сервер» и «клиент» могут относиться как к компьютеру, так и к компьютерной программе, слова « сервер-хост» и «клиент-хост» всегда относятся к компьютерам. Хост — универсальный многофункциональный компьютер; клиенты и серверы — это просто программы, работающие на хосте. В модели клиент-сервер сервер, скорее всего, будет заниматься обслуживанием.
Первое использование слова « клиент» встречается в статье «Отделение данных от функции в распределенной файловой системе», статье 1978 года ученых-компьютерщиков Xerox PARC Говарда Стерджиса, Джеймса Митчелла и Джея Израэля. Авторы тщательно определяют этот термин для читателей и объясняют, что они используют его, чтобы различать пользователя и сетевой узел пользователя (клиент). [7] К 1992 году слово « сервер» вошло в общий обиход. [8] [9]
Модель клиент-сервер не требует, чтобы хосты-серверы имели больше ресурсов, чем хосты-клиенты. Скорее, он позволяет любому компьютеру общего назначения расширить свои возможности за счет использования общих ресурсов других хостов. Однако централизованные вычисления специально распределяют большое количество ресурсов небольшому количеству компьютеров. Чем больше вычислений переносится с клиентских хостов на центральные компьютеры, тем проще могут быть клиентские хосты. [10] Он в значительной степени зависит от сетевых ресурсов (серверов и инфраструктуры) для вычислений и хранения. Бездисковый узел загружает из сети даже свою операционную систему , а компьютерный терминал вообще не имеет операционной системы; это всего лишь интерфейс ввода/вывода для сервера. Напротив, богатый клиент , такой как персональный компьютер , имеет много ресурсов и не зависит от сервера для выполнения основных функций.
По мере снижения цен на микрокомпьютеры и увеличения мощности с 1980-х по конец 1990-х годов многие организации перевели вычисления с централизованных серверов, таких как мэйнфреймы и миникомпьютеры , на полнофункциональные клиенты. [11] Это обеспечило больший, более индивидуализированный контроль над компьютерными ресурсами, но усложнило управление информационными технологиями . [10] [12] [13] В 2000-е годы веб-приложения стали достаточно зрелыми, чтобы конкурировать с прикладным программным обеспечением , разработанным для конкретной микроархитектуры . Это развитие, более доступное хранилище большой емкости и появление сервис-ориентированной архитектуры были среди факторов, которые породили тенденцию облачных вычислений в 2010-х годах. [14]
В дополнение к модели клиент-сервер приложения распределенных вычислений часто используют архитектуру одноранговых приложений (P2P).
В модели клиент-сервер сервер часто проектируется как централизованная система, обслуживающая множество клиентов. Требования к вычислительной мощности, памяти и хранилищу сервера должны быть соответствующим образом масштабированы в соответствии с ожидаемой рабочей нагрузкой. Системы балансировки нагрузки и аварийного переключения часто используются для масштабирования сервера за пределы одной физической машины. [15] [16]
Балансировка нагрузки определяется как методичное и эффективное распределение сетевого трафика или трафика приложений между несколькими серверами в ферме серверов. Каждый балансировщик нагрузки находится между клиентскими устройствами и внутренними серверами, получая и затем распределяя входящие запросы на любой доступный сервер, способный их выполнить.
В одноранговой сети два или более компьютеров ( пиров ) объединяют свои ресурсы и взаимодействуют в децентрализованной системе . Одноранговые узлы — это равные или равномощные узлы в неиерархической сети. В отличие от клиентов в сети клиент-сервер или клиент-очередь-клиент , одноранговые узлы общаются друг с другом напрямую. [ нужна цитация ] В одноранговых сетях алгоритм однорангового протокола связи балансирует нагрузку , и даже узлы со скромными ресурсами могут помочь разделить нагрузку. [ нужна цитата ] Если узел становится недоступным, его общие ресурсы остаются доступными до тех пор, пока другие узлы предлагают их. В идеале одноранговому узлу не требуется обеспечивать высокую доступность, поскольку другие, избыточные одноранговые узлы компенсируют любой простой ресурса ; по мере изменения доступности и нагрузки одноранговых узлов протокол перенаправляет запросы.
И клиент-сервер, и главный-подчиненный рассматриваются как подкатегории распределенных одноранговых систем. [17]
Распределенные одноранговые системы [...] Это общий стиль, популярными стилями которого являются стили клиент-сервер и главный-подчиненный.