Дистанционное управление
Очень распространенный механизм для клиент-серверных приложений предоставляется через RPC, пакет дистанционного управления. RPC был разработан Sun Microsystems, и эта система представляет собой набор инструментов и библиотечных функций. Ключевые приложения, созданные на базе RPC - это NFS (Network Filesystem) и NIS (Network Information System), которые будут рассмотрены в следующих главах.
RPC-сервер состоит из системы процедур, к которым может обратиться клиент, отправляя RPC-запрос к серверу вместе с параметрами процедуры. Сервер вызывает указанную процедуру от имени клиента и возвращает результат, если он есть. Для обеспечения машинонезависимости все данные, обмениваемые между клиентом и сервером, преобразуются к так называемому Внешнему Представлению Данных (XDR) отправителем и обратно к машинно-зависимому формату получателем.
Иногда изменения в RPC-приложении вносят несовместимые изменения в интерфейс вызова процедур. Чтобы избежать конфликтов, RPC-программы имеют номера версий, начиная обычно с 1. С каждой новой версией номер увеличивается. Часто сервер может поддерживать несколько версий одновременно, позволяя клиентам выбирать, какую версию они хотят использовать.
Сетевое взаимодействие между RPC-серверами и клиентами особенное. RPC-сервер предоставляет один или несколько наборов процедур; каждый набор называется программой и идентифицируется уникальным номером программы. В TCP/IP-сетях перед разработчиками RPC стояла задача отображения номеров программ на обобщенные сетевые услуги. Они решили, что каждый сервер будет предоставлять как TCP, так и UDP-порт для каждой программы и версии.
Для обеспечения динамической конфигурации, RPC-приложения выбирают любой доступный порт и регистрируют его у так называемого portmapper — службы-брокера для всех RPC-серверов на машине. Этот метод имеет недостаток в том, что он создает узкое место, похожее на демон inetd. Когда portmapper завершает работу, вся информация о портах RPC теряется. Это обычно означает, что все RPC-серверы необходимо перезапустить вручную или перезагрузить всю систему.
На Linux, portmapper называется rpc.portmap и обычно расположен в /usr/sbin. Кроме того, чтобы убедиться, что он запущен из rc.inet2, portmapper не требует дополнительной настройки.
Преимущества и недостатки RPC
Дистанционное управление с использованием RPC имеет ряд преимуществ, которые делают эту технологию популярной в мире программирования. Однако, как и любая технология, RPC имеет свои ограничения.
Преимущества RPC:
- Модульность: RPC позволяет разработчикам создавать модульные системы, где клиентские и серверные части могут разрабатываться и обновляться независимо друг от друга.
- Простота взаимодействия: При правильном проектировании интерфейса, RPC позволяет обмениваться данными между клиентом и сервером так, словно это локальные функции.
- Переиспользуемость: Серверные процедуры могут быть использованы разными клиентами без изменений.
- Языковая независимость: С использованием XDR, RPC может работать между приложениями, написанными на разных языках программирования.
Недостатки RPC:
- Сложности отладки: Ошибки, возникающие при удаленном вызове, могут быть сложнее для отладки по сравнению с локальными ошибками.
- Зависимость от сети: Работа RPC полагается на надежность сетевого соединения. Отсутствие соединения или задержки в сети могут привести к проблемам в работе приложения.
- Безопасность: Передача данных через сеть всегда подвергается риску перехвата или модификации. Необходимы дополнительные меры безопасности, такие как шифрование и аутентификация.
- Накладные расходы: Преобразование данных в XDR и обратно может привести к дополнительным накладным расходам, особенно при больших объемах передаваемых данных.
Заключение:
RPC является мощным инструментом для создания распределенных приложений, но требует тщательного проектирования и понимания возможных проблем. При правильном использовании, RPC может значительно упростить разработку и масштабирование систем, но разработчикам следует учитывать потенциальные сложности и ограничения данной технологии.