В общем случае чтобы прикладная
программа, выполняющаяся на рабочей станции, могла запросить услугу у некоторого
сервера, как минимум требуется некоторый интерфейсный программный слой,
поддерживающий такого рода взаимодействие. Из этого и вытекают основные
принципы системной архитектуры "клиент-сервер".
Система разбивается на две
части, которые могут выполняться в разных узлах сети, - клиентскую и серверную
части. Прикладная программа или конечный пользователь взаимодействуют с
клиентской частью системы, которая в простейшем случае обеспечивает просто
надсетевой интерфейс. Клиентская часть системы при потребности обращается
по сети к серверной части. (В развитых системах сетевое обращение к серверной
части может и не понадобиться, если система может предугадывать потребности
пользователя, и в клиентской части содержатся данные, способные удовлетворить
его следующий запрос).
Интерфейс серверной части
определен и фиксирован. Поэтому возможно создание новых клиентских частей
существующей системы (пример интероперабельности на системном уровне).
Основной проблемой систем,
основанных на архитектуре "клиент-сервер", является то, что в соответствии
с концепцией открытых систем от них требуется мобильность в как можно более
широком классе аппаратно-программных решений открытых систем. Даже если
ограничиться UNIX-ориентированными локальными сетями, в разных сетях применяется
разная аппаратура и протоколы связи. Попытки создания систем, поддерживающих
все возможные протоколы, приводит к их перегрузке сетевыми деталями в ущерб
функциональности.
Еще более сложный аспект
этой проблемы связан с возможностью использования разных представлений
данных в разных узлах неоднородной локальной сети. В разных компьютерах
может существовать различная адресация, представление чисел, кодировка
символов и т.д. Это особенно существенно для серверов высокого уровня:
телекоммуникационных, вычислительных, баз данных.
Общим решением проблемы
мобильности систем, основанных на архитектуре "клиент-сервер" является
опора на программные пакеты, реализующие протоколы удаленного вызова процедур
(RPC - Remote Procedure Call). При использовании таких средств обращение
к сервису в удаленном узле выглядит как обычный вызов процедуры. Средства
RPC, в которых, естественно, содержится вся информация о специфике аппаратуры
локальной сети и сетевых протоколов, переводит вызов в последовательность
сетевых взаимодействий. Тем самым, специфика сетевой среды и протоколов
скрыта от прикладного программиста.
При вызове удаленной процедуры
программы RPC производят преобразование форматов данных клиента в промежуточные
машинно-независимые форматы и затем преобразование в форматы данных сервера.
При передаче ответных параметров производятся аналогичные преобразования.
Если система реализована
на основе стандартного пакета RPC, она может быть легко перенесена в любую
открытую среду.