Что такое Remote Procedure Call (RPC) и как он работает

Ответ

Remote Procedure Call (RPC) — это протокол, который позволяет программе вызывать процедуру (функцию или метод) на другом компьютере в сети так, как будто она является локальной. RPC скрывает сложность сетевого взаимодействия, позволяя разработчикам сосредоточиться на бизнес-логике.

Как это работает (упрощенно):

  1. Клиент вызывает локальную функцию-заглушку (client stub).
  2. Заглушка упаковывает (сериализует) параметры вызова в сообщение и отправляет его по сети на сервер.
  3. Сервер получает сообщение, распаковывает его и передаёт параметры реальной процедуре.
  4. Процедура на сервере выполняется и возвращает результат.
  5. Сервер упаковывает результат и отправляет его обратно клиенту.
  6. Клиентская заглушка получает ответ, распаковывает его и возвращает результат вызывающей программе.

Пример с xmlrpc в Python:

Это простая реализация RPC, использующая XML для передачи данных.

Сервер:

from xmlrpc.server import SimpleXMLRPCServer

# Функция, которая будет вызываться удаленно
def add(x, y):
    return x + y

# Создаем сервер на localhost, порт 8000
server = SimpleXMLRPCServer(("localhost", 8000))
print("Listening on port 8000...")

# Регистрируем функцию под именем 'add'
server.register_function(add, "add")

# Запускаем сервер
server.serve_forever()

Клиент:

import xmlrpc.client

# Подключаемся к удаленному серверу
with xmlrpc.client.ServerProxy("http://localhost:8000/") as proxy:
    # Вызываем удаленную функцию 'add' как локальную
    result = proxy.add(5, 7)
    print(f"5 + 7 = {result}") # Вывод: 5 + 7 = 12

Современные и более производительные реализации RPC включают gRPC (от Google) и Apache Thrift, которые часто используются в микросервисных архитектурах.