Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Т2. Связь_Таненбаум_СРС_ПРИС.doc
Скачиваний:
1
Добавлен:
01.03.2025
Размер:
1.59 Mб
Скачать

126 Глава 2. Связь

г лушек невозможна, поскольку разные процессы могут запускаться в разных средах исполнения, отличающихся языком программирования, операционной системой и аппаратным обеспечением. Вместо этого в DCE производится компо­новка (динамическая) с локальной заглушкой, скомпилированной в расчете на среду исполнения конкретного процесса. Путем передачи ссылки на заглушку в виде параметра RPC достигается возможность выхода за границы процесса.

2.4. Связь посредством сообщений

Вызовы удаленных процедур и обращения к удаленным объектам способствуют сокрытию взаимодействия в распределенных системах, то есть повышают про­зрачность доступа. К сожалению, ни один из этих механизмов не идеален. В част­ности, в условиях, когда нет уверенности в том, что принимающая сторона в мо­мент выполнения запроса работает, приходится искать альтернативные пути обмена. Кроме того, синхронную по определению природу RPC и RMI, при кото­рой на время осуществления операции необходимо блокировать клиента, време­нами тоже хочется заменить чем-то другим.

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

2.4.1. Сохранность и синхронность во взаимодействиях

Чтобы разобраться во множестве альтернатив в коммуникационных системах, работающих на основе сообщений, предположим, что система организована по принципу компьютерной сети, как показано на рис. 2.19. Приложения всегда вы­полняются на хостах, а каждый хост предоставляет интерфейс с коммуникацион­ной системой, через который сообщения могут передаваться. Хосты соединены сетью коммуникационных серверов, которые отвечают за передачу (или маршру­тизацию) сообщения между хостами. Без потери общности можно предположить, что каждый из хостов связан только с одним коммуникационным сервером. В главе 1 мы предполагали, что буферы могут быть размещены исключительно на хостах. Для более общего варианта нам следует рассмотреть варианты с размеще­нием буферов и на коммуникационных серверах базовой сети.

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

2 .4. Связь посредством сообщений 127

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

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

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

Система электронной почты — это типичный пример сохранной связи (persis­tent communication). При сохранной связи сообщение, предназначенное для от­сылки, хранится в коммуникационной системе до тех пор, пока его не удастся передать получателю. Если отталкиваться от рисунка, можно сказать, сообщение сохраняется на коммуникационном сервере до тех пор, пока его не удастся пере­дать на следующий коммуникационный сервер. Поэтому у отправляющего сооб­щение приложения нет необходимости после отправки сообщения продолжать