WikiDer > Заглушка (распределенные вычисления)

Stub (distributed computing)

А заглушка в распределенных вычислений это фрагмент кода, который преобразует параметры, передаваемые между клиентом и сервером во время удаленный вызов процедур (RPC).

Основная идея RPC разрешить локальный компьютер (клиент) для удаленного вызова процедур на другом компьютере (сервер). Клиент и сервер используют разные адресные пространства, поэтому параметры, используемые в вызове функции (процедуры), должны быть преобразованы, иначе значения этих параметров не могут быть использованы, потому что указатели на параметры в памяти одного компьютера будут указывать на разные данные на другом компьютере. Клиент и сервер также могут использовать разные представления данных даже для простых параметров (например, прямой порядок байтов против прямой порядок байтов для целых чисел). Заглушки выполняют преобразование параметров, поэтому вызов удаленной процедуры выглядит как вызов локальной функции для удаленного компьютера.

Библиотеки-заглушки должны быть установлены как на стороне клиента, так и на стороне сервера. Заглушка клиента отвечает за преобразование (маршаллинг) параметров, используемых при вызове функции, и деконверсии результатов, переданных с сервера после выполнения функции. скелет, заглушка на стороне сервера, отвечает за деконверсию параметров, переданных клиентом, и преобразование результатов после выполнения функции.

Заготовки можно создать одним из двух способов:

  • Вручную: В этом методе разработчик RPC предоставляет набор функций перевода, из которых пользователь может создавать свои собственные заглушки. Этот метод прост в реализации и может обрабатывать очень сложные типы параметров.
  • Автоматически: Это наиболее часто используемый метод создания заглушек. Он использует язык описания интерфейса (IDL) для определения интерфейса между клиентом и сервером. Например, определение интерфейса содержит информацию, указывающую, является ли каждый аргумент входным, выходным или обоими; только входные аргументы нужно копировать с клиента на сервер, и только выходные элементы нужно копировать с сервера на клиент.

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