
3.6. Итоги 211
деления, скрывая детали, касающиеся связи с серверами, текущего местоположе-
ния серверов и репликации серверов. Кроме того, программное обеспечение
клиента способно частично скрыть возникающие сбои и процессы восстановле-
ния после сбоев.
Серверы часто сложнее клиентов, но тем не менее при их построении приме-
няется относительно немного архитектурных моделей. Так, например, серве-
ры могут быть итеративными или параллельными, реализовывать одну или не-
сколько служб, сохранять информацию о состоянии или не сохранять. Остальные
архитектурные особенности касаются адресации служб и механизмов прерыва-
ния серверов после прихода запроса на обслуживание и возможно в ходе его вы-
полнения.
Серверы объектов выделяются в особый класс. Коротко говоря, сервер объек-
тов
—
это процесс, содержащий размещенные в своем адресном пространстве объ-
екты и готовый принимать направленные к ним обращения. В отдельную катего-
рию серверы объектов выделяются во многом благодаря разнообразию способов
обращения к объектам. Так, например, сервер может запустить отдельный поток
выполнения для каждого запроса к объекту. С другой стороны, он может выде-
лять каждому объекту собственный поток выполнения или оставить единственный
поток выполнения для всех своих объектов. Посредством адаптера объектов в
различных серверах может быть реализована разная политика обращения к объ-
ектам. Коротко говоря, адаптер объектов
—
это компонент, реализующий только
одну политику обращения. На сервере может быть несколько адаптеров объектов.
Важной для распределенных систем темой является перенос кода с машины
на машину. Для того чтобы поддерживать перенос кода, имеются две веские при-
чины
—
повышенР1е производительности и мобильность. Если связь дорога, мы
можем иногда уменьшить взаимодействие, перенеся вычисления с сервера на
клиент и заставив клиент все что можно обрабатывать локально. Гибкость же
возрастает, когда клиент имеет возможность динамически загружать программ-
ное обеспечение, необходимое для работы с конкретным сервером. Загруженное
программное обеспечение может быть уже настроено на взаимодействие с этим
сервером, избавляя клиента от необходимости повторно устанавливать его до на-
чала работы.
Перенос кода приносит проблемы использования локальных ресурсов, свя-
занные с тем, что эти ресурсы также необходимо переносить на другие машины,
организовывать новые привязки кода к локальным ресурсам целевой машины
или задействовать глобальные ссылки. Другая проблема заключается в том, что
при переносе кода мы должны принимать во внимание гетерогенность системы.
Текущая практика показывает, что, возможно, лучшим средством справиться
с
гетерогенностью являются виртуальные машины, которые эффективно скры-
вают гетерогенность с помощью интерпретируемого кода.
И, наконец, программные агенты
—
специальный вртд процессов, работающих
как автономные модули, но способных кооперироваться с другими агентами.
С
точки зрения распределенных систем, отличие агентов от обычных приложе-
ний в том, что агенты взаимодействуют друг с другом посредством коммуника-
ционного протокола прикладного уровня, который называется языком взаи-