stringtranslate.com

Модель клиент-сервер

Схема компьютерной сети клиентов, взаимодействующих с сервером через Интернет.

Модель клиент-сервер — это распределенная структура приложения, которая распределяет задачи или рабочую нагрузку между поставщиками ресурсов или услуг, называемыми серверами , и инициаторами запроса служб, называемыми клиентами . [1] Часто клиенты и серверы обмениваются данными через компьютерную сеть на отдельном оборудовании, но и клиент, и сервер могут находиться в одной системе. Хост сервера запускает одну или несколько серверных программ, которые делятся своими ресурсами с клиентами. Клиент обычно не делится своими ресурсами, но запрашивает контент или услуги с сервера. Таким образом, клиенты инициируют сеансы связи с серверами, которые ожидают входящих запросов. Примерами компьютерных приложений, использующих модель клиент-сервер, являются электронная почта , сетевая печать и Всемирная паутина .

Роль клиента и сервера

Характеристика «клиент-сервер» описывает взаимоотношения взаимодействующих программ в приложении. Серверный компонент предоставляет функцию или услугу одному или нескольким клиентам, которые инициируют запросы на такие услуги. Серверы классифицируются по предоставляемым ими услугам. Например, веб-сервер обслуживает веб-страницы , а файловый серверкомпьютерные файлы . Общий ресурс может представлять собой любое программное обеспечение и электронные компоненты серверного компьютера, от программ и данных до процессоров и устройств хранения данных . Совместное использование ресурсов сервера представляет собой услугу .

Является ли компьютер клиентом, сервером или тем и другим, определяется характером приложения, которому требуются сервисные функции. Например, на одном компьютере могут одновременно работать веб-сервер и программное обеспечение файлового сервера, чтобы предоставлять разные данные клиентам, делающим разные типы запросов. Клиентское программное обеспечение также может взаимодействовать с серверным программным обеспечением на одном компьютере. [2] Связь между серверами, например, для синхронизации данных, иногда называют межсерверной или межсерверной связью.

Связь клиента и сервера

Как правило, служба представляет собой абстракцию компьютерных ресурсов, и клиенту не нужно беспокоиться о том, как работает сервер при выполнении запроса и доставке ответа. Клиенту необходимо только понять ответ на основе соответствующего протокола приложения , т. е. содержания и форматирования данных для запрошенной услуги.

Клиенты и серверы обмениваются сообщениями по схеме «запрос-ответ» . Клиент отправляет запрос, а сервер возвращает ответ. Этот обмен сообщениями является примером межпроцессного взаимодействия . Для общения компьютеры должны иметь общий язык и следовать правилам, чтобы и клиент, и сервер знали, чего ожидать. Язык и правила общения определены в протоколе связи . Все протоколы работают на прикладном уровне . Протокол прикладного уровня определяет основные шаблоны диалога. Чтобы еще больше формализовать обмен данными, сервер может реализовать интерфейс прикладного программирования (API). [3] API — это уровень абстракции для доступа к сервису. Ограничивая общение определенным форматом контента , это облегчает синтаксический анализ . Абстрагируя доступ, он облегчает межплатформенный обмен данными. [4]

Сервер может получать запросы от множества разных клиентов за короткий период времени. Компьютер может выполнять только ограниченное количество задач в любой момент и полагается на систему планирования , которая расставляет приоритеты входящих запросов от клиентов для их обработки. Чтобы предотвратить злоупотребления и максимизировать доступность , серверное программное обеспечение может ограничивать доступность для клиентов. Атаки типа «отказ в обслуживании» предназначены для использования обязанности сервера обрабатывать запросы путем перегрузки его чрезмерной частотой запросов. Шифрование следует применять, если конфиденциальная информация должна передаваться между клиентом и сервером.

Пример

Когда клиент банка получает доступ к услугам онлайн-банкинга через веб-браузер (клиент), клиент инициирует запрос к веб-серверу банка. Учетные данные клиента для входа в систему могут храниться в базе данных , а веб-сервер обращается к серверу базы данных в качестве клиента. Сервер приложений интерпретирует возвращаемые данные, применяя бизнес-логику банка , и передает выходные данные на веб-сервер. Наконец, веб-сервер возвращает результат клиентскому веб-браузеру для отображения.

На каждом этапе этой последовательности обмена сообщениями клиент-сервер компьютер обрабатывает запрос и возвращает данные. Это шаблон обмена сообщениями запрос-ответ. Когда все запросы удовлетворены, последовательность завершается, и веб-браузер представляет данные клиенту.

Этот пример иллюстрирует шаблон проектирования , применимый к модели клиент-сервер: разделение задач .

Серверная часть

Серверная часть относится к программам и операциям, которые выполняются на сервере . В этом отличие от клиентских программ и операций, которые выполняются на клиенте . [5] (см. ниже)

Общие понятия

«Серверное программное обеспечение» означает компьютерное приложение , такое как веб-сервер , которое работает на удаленном серверном оборудовании , доступном с локального компьютера пользователя , смартфона или другого устройства. Операции могут выполняться на стороне сервера, поскольку для них требуется доступ к информации или функциям, недоступным на стороне клиента , или потому, что выполнение таких операций на стороне клиента будет медленным, ненадежным или небезопасным .

Клиентские и серверные программы могут быть общедоступными, например, бесплатными или коммерческими веб-серверами и веб-браузерами , взаимодействующими друг с другом с использованием стандартизированных протоколов . Или программисты могут написать свой собственный сервер, клиент и протокол связи , которые можно использовать только друг с другом.

К операциям на стороне сервера относятся как те, которые выполняются в ответ на запросы клиентов, так и неориентированные на клиента операции, такие как задачи обслуживания. [6] [7]

Компьютерная безопасность

В контексте компьютерной безопасности уязвимости или атаки на стороне сервера относятся к тем, которые происходят в серверной компьютерной системе, а не на стороне клиента или между ними . Например, злоумышленник может воспользоваться уязвимостью внедрения SQL-кода в веб-приложении , чтобы злонамеренно изменить данные в базе данных сервера или получить несанкционированный доступ к ним . В качестве альтернативы злоумышленник может проникнуть в серверную систему, используя уязвимости в базовой операционной системе , а затем получить доступ к базе данных и другим файлам так же, как авторизованные администраторы сервера. [8] [9] [10]

Примеры

В случае проектов распределенных вычислений , таких как SETI@home и Great Internet Mersenne Prime Search , хотя основная часть операций происходит на стороне клиента, серверы отвечают за координацию работы клиентов, отправку им данных для анализа, получение и хранение. результаты, предоставление функций отчетности администраторам проекта и т. д. В случае интернет-зависимого пользовательского приложения, такого как Google Earth , когда запрос и отображение картографических данных происходит на стороне клиента, сервер отвечает за постоянное хранение картографических данных, преобразование пользовательских запросов в данные карты для возврата клиенту и т. д.

В контексте Всемирной паутины к часто встречающимся серверным языкам программирования относятся: [5]

Однако веб-приложения и сервисы могут быть реализованы практически на любом языке, при условии, что они могут возвращать данные в веб-браузеры, основанные на стандартах (возможно, через промежуточные программы) в форматах, которые они могут использовать.

Сторона клиента

Клиентская сторона относится к операциям, которые выполняются клиентом в компьютерной сети .

Общие понятия

Обычно клиент — это компьютерное приложение , такое как веб-браузер , которое запускается на локальном компьютере пользователя , смартфоне или другом устройстве и при необходимости подключается к серверу . Операции могут выполняться на стороне клиента, поскольку они требуют доступа к информации или функциям, доступным на клиенте, но не на сервере, потому что пользователю необходимо наблюдать за операциями или предоставлять входные данные, или потому что серверу не хватает вычислительной мощности для выполнения операций. Своевременно выполнять операции для всех клиентов, которых он обслуживает. Кроме того, если операции могут выполняться клиентом без отправки данных по сети, они могут занимать меньше времени, использовать меньшую пропускную способность и подвергаться меньшему риску безопасности .

Когда сервер обслуживает данные широко используемым способом, например, в соответствии со стандартными протоколами , такими как HTTP или FTP , пользователи могут выбирать из нескольких клиентских программ (например, большинство современных веб-браузеров могут запрашивать и получать данные, используя как HTTP, так и FTP). ). В случае более специализированных приложений программисты могут написать свой собственный сервер, клиент и протокол связи , которые можно использовать только друг с другом.

Программы, которые запускаются на локальном компьютере пользователя без отправки или получения данных по сети, не считаются клиентами, и поэтому операции таких программ не будут называться операциями на стороне клиента.

Компьютерная безопасность

В контексте компьютерной безопасности уязвимости или атаки на стороне клиента относятся к тем, которые происходят в компьютерной системе клиента/пользователя, а не на стороне сервера или между ними . Например, если на сервере содержится зашифрованный файл или сообщение, которое можно расшифровать только с помощью ключа , хранящегося в компьютерной системе пользователя, атака на стороне клиента обычно является единственной возможностью злоумышленника получить доступ к расшифрованному содержимому. Например, злоумышленник может установить вредоносное ПО в клиентскую систему, что позволит злоумышленнику просматривать экран пользователя, записывать нажатия клавиш пользователя, красть копии ключей шифрования пользователя и т. д. В качестве альтернативы злоумышленник может использовать межсайтовый доступ. создание сценариев уязвимостей для выполнения вредоносного кода в системе клиента без необходимости установки какого-либо постоянного вредоносного ПО. [8] [9] [10]

Примеры

Проекты распределенных вычислений , такие как SETI@home и Great Internet Mersenne Prime Search, а также интернет-зависимые приложения, такие как Google Earth , полагаются в первую очередь на операции на стороне клиента. Они инициируют соединение с сервером (либо в ответ на запрос пользователя, как в случае с Google Earth, либо автоматически, как в случае с SETI@home), и запрашивают некоторые данные. Сервер выбирает набор данных ( операция на стороне сервера ) и отправляет его обратно клиенту. Затем клиент анализирует данные (операция на стороне клиента) и, когда анализ завершен, отображает их пользователю (как в случае с Google Earth) и/или передает результаты вычислений обратно на сервер (как в случае с SETI@). дом).

В контексте Всемирной паутины к часто встречающимся компьютерным языкам, которые оцениваются или запускаются на стороне клиента, относятся: [5]

История ранних веков

Ранней формой клиент-серверной архитектуры является удаленный ввод задания , относящийся, по крайней мере, к OS/360 (объявлено в 1964 году), когда запрос заключался в запуске задания , а ответом был результат.

При формулировании модели клиент-сервер в 1960-х и 1970-х годах ученые-компьютерщики , создавшие ARPANETСтэнфордском исследовательском институте ), использовали термины сервер-хост (или обслуживающий хост ) и пользователь-хост (или использующий-хост ), и они появляются в ранние документы RFC 5 [11] и RFC 4. [12] Такое использование было продолжено в Xerox PARC в середине 1970-х годов.

Одним из контекстов, в которых исследователи использовали эти термины, была разработка языка программирования компьютерных сетей под названием Decode-Encode Language (DEL). [11] Целью этого языка было принимать команды от одного компьютера (пользовательского хоста), который возвращал пользователю отчеты о состоянии, поскольку он кодировал команды в сетевых пакетах. Другой компьютер с поддержкой DEL, хост-сервер, получал пакеты, декодировал их и возвращал отформатированные данные хосту пользователя. Программа DEL на хосте пользователя получила результаты для представления пользователю. Это транзакция клиент-сервер. Разработка DEL только началась в 1969 году, когда Министерство обороны США создало ARPANET (предшественник Интернета ).

Клиент-хост и сервер-хост

Клиент-хост и сервер-хост имеют немного разные значения, чем клиент и сервер . Хост — это любой компьютер, подключенный к сети. В то время как слова «сервер» и «клиент» могут относиться как к компьютеру, так и к компьютерной программе, слова «сервер-хост» и «клиент-хост» всегда относятся к компьютерам. Хост — универсальный многофункциональный компьютер; клиенты и серверы — это просто программы, работающие на хосте. В модели клиент-сервер сервер, скорее всего, будет заниматься обслуживанием.

Первое использование слова « клиент» встречается в статье «Отделение данных от функции в распределенной файловой системе», статье 1978 года ученых-компьютерщиков Xerox PARC Говарда Стерджиса, Джеймса Митчелла и Джея Израэля. Авторы тщательно определяют этот термин для читателей и объясняют, что они используют его, чтобы различать пользователя и сетевой узел пользователя (клиент). [13] К 1992 году слово «сервер» вошло в общий обиход. [14] [15]

Централизованные вычисления

Модель клиент-сервер не требует, чтобы хосты-серверы имели больше ресурсов, чем хосты-клиенты. Скорее, он позволяет любому компьютеру общего назначения расширить свои возможности за счет использования общих ресурсов других хостов. Однако централизованные вычисления специально распределяют большое количество ресурсов небольшому количеству компьютеров. Чем больше вычислений переносится с клиентских хостов на центральные компьютеры, тем проще могут быть клиентские хосты. [16] Он в значительной степени зависит от сетевых ресурсов (серверов и инфраструктуры) для вычислений и хранения. Бездисковый узел загружает из сети даже свою операционную систему , а компьютерный терминал вообще не имеет операционной системы; это всего лишь интерфейс ввода/вывода для сервера. Напротив, богатый клиент , такой как персональный компьютер , имеет много ресурсов и не зависит от сервера для выполнения основных функций.

По мере снижения цен на микрокомпьютеры и увеличения мощности с 1980-х по конец 1990-х годов многие организации перевели вычисления с централизованных серверов, таких как мэйнфреймы и миникомпьютеры , на полнофункциональные клиенты. [17] Это обеспечило больший, более индивидуализированный контроль над компьютерными ресурсами, но усложнило управление информационными технологиями . [16] [18] [19] В 2000-х годах веб-приложения стали достаточно зрелыми, чтобы конкурировать с прикладным программным обеспечением , разработанным для конкретной микроархитектуры . Это развитие, более доступное хранилище большой емкости и появление сервис-ориентированной архитектуры были среди факторов, которые породили тенденцию облачных вычислений в 2010-х годах. [20] [ не удалось проверить ]

Сравнение с одноранговой архитектурой

В дополнение к модели клиент-сервер приложения распределенных вычислений часто используют архитектуру одноранговых приложений (P2P).

В модели клиент-сервер сервер часто проектируется как централизованная система, обслуживающая множество клиентов. Требования к вычислительной мощности, памяти и хранилищу сервера должны быть соответствующим образом масштабированы в соответствии с ожидаемой рабочей нагрузкой. Системы балансировки нагрузки и аварийного переключения часто используются для масштабирования сервера за пределы одной физической машины. [21] [22]

Балансировка нагрузки определяется как методичное и эффективное распределение сетевого трафика или трафика приложений между несколькими серверами в ферме серверов. Каждый балансировщик нагрузки находится между клиентскими устройствами и внутренними серверами, получая и затем распределяя входящие запросы на любой доступный сервер, способный их выполнить.

В одноранговой сети два или более компьютеров ( пиров ) объединяют свои ресурсы и взаимодействуют в децентрализованной системе . Одноранговые узлы — это равные или равномощные узлы в неиерархической сети. В отличие от клиентов в сети клиент-сервер или клиент-очередь-клиент , одноранговые узлы общаются друг с другом напрямую. [ нужна цитата ] В одноранговой сети алгоритм однорангового протокола связи балансирует нагрузку , и даже узлы со скромными ресурсами могут помочь разделить нагрузку. [ нужна цитата ] Если узел становится недоступным, его общие ресурсы остаются доступными до тех пор, пока другие узлы предлагают их. В идеале одноранговому узлу не требуется добиваться высокой доступности, поскольку другие, избыточные одноранговые узлы компенсируют любой простой ресурса ; по мере изменения доступности и нагрузки одноранговых узлов протокол перенаправляет запросы.

И клиент-сервер, и главный-подчиненный рассматриваются как подкатегории распределенных одноранговых систем. [23]

Смотрите также

Примечания

  1. ^ «Архитектура распределенных приложений» (PDF) . Солнечная микросистема. Архивировано из оригинала (PDF) 6 апреля 2011 года . Проверено 16 июня 2009 г.
  2. ^ Одним из примеров является система X Window .
  3. ^ Бенаталлах, Б.; Казати, Ф.; Тумани, Ф. (2004). «Моделирование диалога с веб-сервисами: краеугольный камень автоматизации электронного бизнеса». IEEE Интернет-вычисления . 8 : 46–54. дои : 10.1109/MIC.2004.1260703. S2CID  8121624.
  4. ^ Дустдар, С.; Шрайнер, В. (2005). «Опрос по составу веб-сервисов» (PDF) . Международный журнал веб- и грид-сервисов . 1 :1. CiteSeerX 10.1.1.139.4827 . doi : 10.1504/IJWGS.2005.007545. 
  5. ^ abc «Каковы различия между программированием на стороне сервера и на стороне клиента?». Softwareengineering.stackexchange.com . Проверено 13 декабря 2016 г.
  6. ^ «Введение в серверную часть — Изучение веб-разработки | MDN» . http://developer.mozilla.org . 05.11.2023 . Проверено 13 ноября 2023 г.
  7. ^ «Программирование веб-сайтов на стороне сервера — Изучите веб-разработку | MDN» . http://developer.mozilla.org . 30 июня 2023 г. Проверено 13 ноября 2023 г.
  8. ^ Аб Лехтинен, Рик; Рассел, Дебора; Гангеми, GT (2006). Основы компьютерной безопасности (2-е изд.). О'Рейли Медиа . ISBN 9780596006693. Проверено 7 июля 2017 г.
  9. ^ ab JS (15 октября 2015 г.). «Неделя 4: Есть ли разница между клиентской и серверной стороной?». n3tweb.wordpress.com . Проверено 7 июля 2017 г.
  10. ^ аб Эспиноза, Кристиан (23 апреля 2016 г.). «Расшифровка взлома» (PDF) . alpinesecurity.com . Проверено 7 июля 2017 г.[ постоянная мертвая ссылка ]
  11. ^ Аб Рулифсон, Джефф (июнь 1969 г.). ДЕЛ. IETF . дои : 10.17487/RFC0005 . РФК 5 . Проверено 30 ноября 2013 г.
  12. ^ Шапиро, Элмер Б. (март 1969 г.). Сетевое расписание. IETF . дои : 10.17487/RFC0004 . РФК 4 . Проверено 30 ноября 2013 г.
  13. ^ Стерджис, Ховард Э.; Митчелл, Джеймс Джордж; Израиль, Джей Э. (1978). «Отделение данных от функции в распределенной файловой системе». Ксерокс ПАРК .
  14. ^ Харпер, Дуглас. "сервер". Интернет-словарь этимологии . Проверено 30 ноября 2013 г.
  15. ^ «Отделение данных от функции в распределенной файловой системе». Получить данные . Немецкая национальная библиотека науки и технологий . Архивировано из оригинала 2 декабря 2013 года . Проверено 29 ноября 2013 г.
  16. ^ Аб Ние, Джейсон; Ян, С. Джэ; Новик, Наоми (2000). «Сравнение вычислительных архитектур тонких клиентов». Академическое сообщество . дои : 10.7916/D8Z329VF . Проверено 28 ноября 2018 г.
  17. ^ д'Амор, MJ; Оберст, диджей (1983). «Микрокомпьютеры и мейнфреймы». Материалы 11-й ежегодной конференции ACM SIGUCCS по пользовательским сервисам - SIGUCCS '83 . п. 7. дои : 10.1145/800041.801417. ISBN 978-0897911160. S2CID  14248076.
  18. ^ Толя, Нирадж; Андерсен, Дэвид Г.; Сатьянараян, М. (март 2006 г.). «Количественная оценка интерактивного взаимодействия с пользователем на тонких клиентах» (PDF) . Компьютер . 39 (3). Компьютерное общество IEEE : 46–52. дои : 10.1109/mc.2006.101. S2CID  8399655.
  19. Оти, Майкл (22 марта 2011 г.). «Действительно ли облако — это просто возвращение к мейнфреймам?». SQL-сервер Про . Пентон Медиа . Архивировано из оригинала 3 декабря 2013 года . Проверено 1 декабря 2013 г.
  20. ^ Баррос, AP; Дюма, М. (2006). «Рост экосистем веб-сервисов». ИТ-специалист . 8 (5): 31. doi :10.1109/MITP.2006.123. S2CID  206469224.
  21. ^ Карделлини, В.; Колаянни, М.; Ю, П.С. (1999). «Динамическая балансировка нагрузки на веб-серверных системах». IEEE Интернет-вычисления . 3 (3). Институт инженеров по электротехнике и электронике (IEEE): 28–39. дои : 10.1109/4236.769420. ISSN  1089-7801.
  22. ^ «Что такое балансировка нагрузки? Как работают балансировщики нагрузки» . НГИНКС . 1 июня 2014 года . Проверено 21 января 2020 г.
  23. ^ Варма, Васудева (2009). «1: Учебник по архитектуре программного обеспечения». Архитектура программного обеспечения: подход, основанный на конкретных примерах . Дели: Pearson Education India. п. 29. ISBN 9788131707494. Проверено 4 июля 2017 г. Распределенные одноранговые системы [...] Это общий стиль, популярными стилями которого являются стили клиент-сервер и главный-подчиненный.