Принципы и понятия сетевой архитектуры, страница 14

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

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

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

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

В большинстве случаев сетевое приложение состоит из двух независимых частей: “клиента” и “сервера”. Однако никто не запрещает объединить обе функции в одной и той же программе.

Сетевые уровни позволяют устанавливать виртуальное соединение между процессами или компьютерами. Считается, что виртуальное соединение образует виртуальную цепь (virtual circuit). Многие проблемы исчезают, когда вы трактуете виртуальную цепь как настоящее соединение “точка-точка”, перекладывая ответственность за доставку данных на низлежащие сетевые уровни. Модель “клиент-сервер” поступает как раз таким образом.

Каждая из сторон виртуального соединения называется “сокет” (socket). Каждая сторона, или сокет, установленного виртуального соединения обычно выполняет определенные функции. Сокет на стороне клиента, запрашивающий соединение, называется клиентом, а отвечающий на запрос — сервером. Программное обеспечение на стороне сервера называется серверной частью приложения, а на стороне клиента - клиентской частью.

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

Запрос серверу от сетевого компьютера обычно активизируется пользователем. Процесс-клиент посылает запрос на установление соединения с сервером, требуя выполнить для него определенную функцию. Например, клиент может запросить передать ему точное время или определенный файл.

Два типа приложений-серверов

Приложения-серверы делятся на два типа: последовательный и параллельный, в зависимости от метода обработки запросов.

Сервер последовательной обработки запросов

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

Сервер параллельной обработки запросов

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