Skip to content

RPC

RPC

Що таке RPC

RPC (Remote Procedure Call) - Виклик віддалених процедур - це клас технологій, що дозволяють комп'ютерним програмам викликати функції або процедури в іншому адресному просторі (на віддалених комп'ютерах, або в незалежній сторонній системі на тому ж пристрої). Зазвичай реалізація технології RPC включає два компоненти: мережевий протокол для обміну в режимі клієнт-сервер та мову серіалізації об'єктів (або структур, для необ'єктних RPC). На транспортному рівні RPC використовують переважно протоколи TCP і UDP, однак, деякі будуються на основі HTTP (що порушує архітектуру ISO/OSI, так як HTTP — спочатку не транспортний протокол).

Характерними рисами виклику віддалених процедур є

  • Асиметрія, тобто один з взаємодіючих боків є ініціатором;
  • Синхронність, тобто виконання викликаючої процедури призупиняється з моменту видачі запиту і відновлюється лише після повернення з викликаної процедури.

Що таке gRPC

gRPC — це високопродуктивний фреймворк, розроблений компанією Google для виклику віддалених процедур (RPC), який працює над HTTP/2. gRPC простий у використанні, ідеально підходить для створення розподілених систем (мікросервісів) та API. Він має вбудовану підтримку балансування навантаження, трасування, аутентифікації та перевірки життєздатності служб. Існує можливість створювати клієнтські бібліотеки для роботи з бекендом на 9 мовах. Висока продуктивність досягається за рахунок використання протоколу HTTP/2 та Protocol Buffers.

Завдяки вбудованим можливостям

  • Протокол Buffers використовується як інструмент для опису типів даних та серіалізації. Фактично, ті, хто потребував продуктивності, раніше брали Protobuf, а далі вже окремо вирішували питання з транспортом. Тепер все в комплекті.
  • HTTP/2 використовується як транспортний засіб. Дозволяє використати переваги повного стиснення даних, контролю трафіку, ініціації подій з сервера, повторного використання одного сокета для кількох паралельних запитів.
  • Статичні шляхи — дозволяє уникати "сервіс/колекція/ресурс/запит?параметр=значення". Тепер тільки "сервіс", а що всередині — описують в термінах моделі та її подій.
  • Немає зв'язування методів з HTTP-методами, немає прив'язки повернених значень до HTTP-статусів.
  • SSL/TLS, OAuth 2.0, аутентифікація через сервіси Google, а також можливість додавання своєї (наприклад, двофакторної).
  • Підтримка 9 мов: C, C++, Java, Go, Node.js, Python, Ruby, Objective-C, PHP, C#.
  • Підтримка gRPC в публічних API від Google. Вже працює для деяких сервісів (REST-версії також залишаться).

Links