Протокол віддаленого виклику процедури (RPC) у розподіленій системі

⚡ Розумний підсумок

Віддалений виклик процедур (RPC) — це протокол міжпроцесного зв'язку, який дозволяє програмі виконувати процедуру в іншому адресному просторі або на іншій машині, приховуючи мережеві деталі за звичайним локальним викликом функції в розподілених клієнт-серверних системах.

  • 📞 Визначення: RPC дозволяє клієнту викликати процедуру на віддаленому сервері так, ніби це локальний виклик.
  • 🗂️ типи: Зворотний виклик, широкомовний та пакетний режими RPC відрізняються тим, як запити маршрутизуються та ставляться в чергу.
  • 🏗️ Archiтекстура: П'ять частин взаємодіють у кожному виклику: клієнт, клієнтська заглушка, середовище виконання RPC, серверна заглушка та сервер.
  • 🔄 Як Це Працює: Заглушує параметри маршалінгу в повідомлення та розпакує результат, що повертається абоненту.
  • 🇧🇷 Компроміси: RPC спрощує розподілений код, але додає мережеві накладні витрати та точки збою порівняно з локальними викликами.
  • 🤖 Кут штучного інтелекту: gRPC обслуговує моделі машинного навчання між мікросервісами, а Copilot пришвидшує написання RPC-заготовок.

Виклик віддалених процедур (RPC) у розподіленій системі

Що таке RPC?

Віддалений процедурний виклик (RPC) є міжпроцесовий зв’язок техніка, що використовується для клієнт-серверних програм. Повна форма RPC - це віддалений виклик процедур (Remote Procedure Call). Механізми RPC використовуються, коли комп'ютерна програма змушує виконувати процедуру або підпрограму в іншому адресному просторі, закодованому як звичайний виклик процедури, без явного кодування програмістом деталей для віддаленої взаємодії.

Цей виклик процедури також керує низькорівневими транспортними протоколами, такими як UDP та TCP/IP, для передачі даних повідомлень між програмами.

Типи RPC

Є три типи RPC:

  • Зворотний виклик RPC
  • Трансляція RPC
  • Пакетний режим RPC

Зворотний виклик RPC

Цей тип RPC забезпечує парадигму однорангового з’єднання (P2P) між процесами-учасниками. Це допомагає процесу діяти як клієнт, так і сервер.

Функції зворотного виклику RPC:

  • Вирішує проблеми інтерактивних програм, що обробляються дистанційно.
  • Надає серверу дескриптор клієнта.
  • Зворотний виклик змушує клієнтський процес чекати.
  • Керує блокуваннями зворотних викликів.
  • Це сприяє впровадженню парадигми взаємодії між процесами-учасниками.

Трансляція RPC

Широкомовний RPC – це запит клієнта, який розсилається по мережі та обробляється всіма серверами, що мають метод для обробки цього запиту.

Функції Broadcast RPC:

  • Дозволяє вказати, що повідомлення запиту клієнта має бути розіслане широкомовно.
  • Ви можете оголосити широкомовні порти.
  • Це допомагає зменшити навантаження на фізичну мережу.

Пакетний режим RPC

Пакетний режим RPC допомагає ставити окремі RPC-запити в чергу в буфер передачі на стороні клієнта, а потім надсилати їх мережею одним пакетом на сервер.

Функції пакетного режиму RPC:

  • Це мінімізує накладні витрати, пов'язані з надсиланням запиту, оскільки надсилає запити через мережу на сервер однією партією.
  • Цей тип протоколу RPC ефективний лише для програм, яким потрібна нижча швидкість викликів.
  • Для цього потрібен надійний протокол передачі.

RPC Archiтектура

Архітектура RPC складається з п'яти компонентів програми:

  1. Клієнт
  2. Заглушка клієнта
  3. RPC Runtime
  4. Заглушка сервера
  5. сервер

RPC Archiтектура

RPC Archiтектура

Як працює RPC?

Під час процесу RPC виконуються такі кроки:

Крок 1) Клієнт, клієнтський заглушка та один екземпляр середовища виконання RPC виконуються на клієнтській машині.

Крок 2) Клієнт запускає процес клієнтського заглушки, передаючи параметри звичайним чином. Клієнтська заглушка зберігається у власному адресному просторі клієнта. Він також запитує локальне середовище виконання RPC надіслати запит до серверної заглушки.

Крок 3) На цьому етапі користувач отримує доступ до RPC, здійснюючи звичайний локальний виклик процедури. RPC Runtime керує передачею повідомлень між клієнтом і сервером через мережу. Він також виконує завдання повторної передачі, підтвердження, маршрутизації та шифрування.

Крок 4) Після завершення серверної процедури виконання повертається до серверного заглушки, яка упаковує (маршалює) повернуті значення в повідомлення. Потім серверна заглушка надсилає повідомлення назад на транспортний рівень.

Крок 5) На цьому кроці транспортний рівень надсилає повідомлення результату назад транспортному рівню клієнта, який повертає повідомлення до клієнтського заглушки.

Крок 6) На цьому етапі клієнтський заглушка демаршалює (розпаковує) повернені параметри в результуючому пакеті, і виконання повертається до викликаючої сторони.

Характеристика RPC

Ось основні характеристики RPC:

  • Викликана процедура знаходиться в іншому процесі, який, ймовірно, знаходиться на іншій машині.
  • Процеси не використовують спільний адресний простір.
  • Параметри передаються лише значеннями.
  • RPC виконується в середовищі серверного процесу.
  • Він не пропонує доступу до середовища викликаючої процедури.

Особливості RPC

Ось важливі функції RPC:

  • Простий синтаксис виклику.
  • Пропонує відому семантику.
  • Забезпечує чітко визначений інтерфейс.
  • Він може взаємодіяти між процесами на одній або різних машинах.

Переваги RPC

Ось переваги/плюси RPC:

  • RPC допомагає клієнтам взаємодіяти із серверами за допомогою традиційного використання викликів процедур мовами високого рівня.
  • RPC моделюється за моделлю локального виклику процедури, але викликана процедура, найімовірніше, виконується в іншому процесі та зазвичай на іншому комп'ютері.
  • RPC підтримує процесоорієнтовані та потокоорієнтовані моделі.
  • RPC приховує внутрішній механізм передачі повідомлень від користувача.
  • Він фіксує багато рівнів протоколу для підвищення продуктивності.
  • RPC забезпечує абсtracція; наприклад, характер мережевого зв'язку, що полягає в передачі повідомлень, залишається прихованим від користувача.
  • RPC можна використовувати як у розподіленому, так і в локальному середовищі.
  • Зусилля, необхідні для переписування та переробки коду, мінімальні.

Недоліки RPC

Ось мінуси/недоліки використання RPC:

  • Віддалений виклик процедур передає параметри лише за значеннями; значення вказівника (посилання) не дозволені.
  • Час виклику (і повернення) віддаленої процедури — накладні витрати — значно вищий, ніж для локальної процедури.
  • Цей механізм дуже вразливий до збоїв, оскільки він включає систему зв'язку, іншу машину та інший процес.
  • Концепцію RPC можна реалізувати різними способами, тому єдиного стандарту немає.
  • Він не пропонує гнучкості для апаратної архітектури, оскільки здебільшого базується на взаємодії.
  • Вартість процесу зростає через виклик віддалених процедур.

Поширені запитання

RPC надає доступ до дій як віддалених процедур, тоді як REST надає доступ до даних як ресурсів, доступ до яких здійснюється через HTTP-дієслова. RPC виглядає як виклик локальної функції; REST зосереджується на ресурсах та стані.

gRPC – це Googleсучасний, високопродуктивний фреймворк RPC. Він використовує HTTP/2 та протокол Buffers та підтримує двонаправлену потокову передачу, що робить його популярним для зв'язку мікросервісів.

RPC може бути обома. Синхронний виклик блокується, доки сервер не поверне результат, тоді як асинхронний виклик повертає результат негайно та обробляє відповідь пізніше. Фреймворки, такі як gRPC, підтримують обидва стилі.

RPC – це форма IPC, яка працює на окремих машинах. Хоча багато методів IPC використовують спільну пам'ять на одному хості, RPC обмінюється повідомленнями через мережу, щоб процеси на різних комп'ютерах могли взаємодіяти.

Поширені реалізації RPC включають gRPC, Apache Thrift, XML-RPC, JSON-RPC та Java RMI. Вони відрізняються форматом даних та способом транспортування, але всі вони дозволяють клієнту викликати процедуру на віддаленому сервері.

RPC не є безпечним за замовчуванням; безпека залежить від транспорту. Реалізації додають TLS-шифрування, токени автентифікації та засоби контролю доступу для захисту викликів.

Платформи машинного навчання використовують RPC, особливо gRPC, для передачі прогнозів моделей між мікросервісами. Клієнт надсилає функції та отримує результат виведення, зберігаючиping Системи штучного інтелекту швидко та слабо пов'язані.

Так. GitHub Copilot може створювати каркас для визначень сервісів .proto, клієнтських заглушок та обробників серверів для gRPC. Розробникам все одно слід перевіряти згенеровані інтерфейси, обробку помилок та керування версіями перед розгортанням у продакшені.

Підсумуйте цей пост за допомогою: