Введение и сравнение RPC и REST
Введение и сравнение RPC и REST

Ноль.

В настоящее время микросервисные архитектуры сталкиваются с удаленными вызовами между службами. Существует два распространенных метода удаленного вызова: RPC: удаленный вызов процедуры Remote Produce Call, аналогичный RMI. Пользовательский формат данных, основанный на встроенной TCP-связи, быстрый и эффективный. Ранний веб-сервис и ныне популярный даббо являются типичными примерами RPC. Http: http на самом деле является протоколом сетевой передачи, основанным на TCP, который определяет формат передачи данных. В настоящее время связь между клиентским браузером и сервером в основном использует протокол Http. Его также можно использовать для совершения удаленных вызовов службы поддержки. Недостатком является то, что инкапсуляция сообщений раздута. Популярный стиль Rest можно реализовать через протокол http.

один. Введение 1. RPC(remote procedure call)

Выполните функцию на удаленном сервере, вызвав службу (метод) сервера как локальную службу (метод). Общие реализации включают XML-RPC и JSON-RPC. Методы связи в основном одинаковы. Единственная разница — формат передачи данных. (1) Преимущества: ​ ​ Простой дизайн, легко понять Легкая полезная нагрузка Высокая производительность (2) Недостатки: ​ Высокая связь между интерфейсным и внутренним кодом Читабельность кода плохая, и соответствующий код нелегко найти. Это приведет к большому количеству определенных функций, которыми сложно управлять. (3) Ядро RPC является ядром распределенной архитектуры. В зависимости от режима ответа он делится на два типа: Синхронный вызов: клиент вызывает метод сервера, ждет, пока сервер вернет результат или истечет время ожидания, а затем продолжает свою работу. Асинхронный вызов: клиент отправляет сообщение промежуточному программному обеспечению, больше не ждет ответа сервера и напрямую продолжает свою работу. Методы реализации синхронного вызова включают WebService и RMI. Сервисы, предоставляемые веб-сервисом, основаны на веб-контейнерах, а нижний уровень использует протокол http, поэтому он подходит для вызовов между разнородными системами на разных языках. RMI на самом деле является реализацией RPC языка Java, позволяющей методам возвращать объекты Java и базовые типы данных, и подходит для вызовов между различными системами, созданными с использованием языка JAVA.

JAVA-реализацией асинхронных вызовов является JMS (Java Message Service). Текущее промежуточное программное обеспечение JMS с открытым исходным кодом включает в себя ActiveMQ и промежуточное программное обеспечение сообщений Kafka от сообщества Apache, а также RocketMQ от Alibaba.   

2. REST (Передача репрезентативного состояния), передача состояния уровня представления. При разработке API используйте пути для поиска ресурсов, операций определения методов и согласования типов ресурсов с помощью Content-Type и Accept. REST — это архитектурный стиль, который относится к набору архитектурных ограничений и принципов. Приложение или проект, удовлетворяющий этим ограничениям и принципам, является RESTful. Спецификация REST рассматривает весь контент как ресурс, и все в сети является ресурсом. REST не создает новые технологии, компоненты или сервисы, он просто использует существующие функции и возможности Интернета. Может быть реализован полностью через протокол HTTP, используя протокол HTTP для обработки передачи данных. Операции архитектуры REST с ресурсами включают получение, создание, изменение и удаление ресурсов, которые соответствуют методам GET, POST, PUT и DELETE, предоставляемым протоколом HTTP. REST означает передачу репрезентативного состояния (REST), это стиль архитектуры программного обеспечения. REST использует универсальные методы глаголов (GET, PUT, DELETE, POST), определенные протоколом HTTP, для уникальной идентификации сетевых ресурсов с помощью URI. Ответчик описывает ресурсы, которые он запрашивает, посредством связи без сохранения состояния в соответствии с различными потребностями запрашивающей стороны. (1) Преимущества: Сильно развязанный интерфейс и серверная часть Это легко понять, даже не читая документацию, можно примерно понять, для чего используется интерфейс; Интерфейс имеет единственную функцию, его легко расширять и использовать повторно; ​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​ (2) Недостатки: Иногда полезная нагрузка становится чрезвычайно большой Одной и той же странице может потребоваться вызов множества API для получения разных данных, что уменьшит удобство работы при плохой сети. (3) Особенности: Ресурсы. Ресурсы представляют собой набор ориентированных на пользователя наборов данных на основе json (или другого представления). Выражением информации с помощью ресурсов обычно являются данные в концептуальной модели. ​​​​Stateless: так называемый Stateless означает, что все ресурсы могут быть расположены через URI, и это позиционирование не имеет ничего общего с другими ресурсами и не изменится из-за изменений в других ресурсах.     Унифицированный интерфейс: архитектурный стиль RESTful предусматривает, что метаоперации с данными, а именно операции CRUD (создание, чтение, обновление и удаление, то есть добавление, удаление и изменение данных), соответственно соответствуют методам HTTP: GET используется для получения ресурсов, а POST используется для создания новых ресурсов (также может использоваться для обновления ресурсов), PUT используется для обновления ресурсов, а DELETE используется для удаления ресурсов. Это унифицирует интерфейс для всех операций с данными. , удаление, проверка и изменение данных могут быть выполнены только с помощью метода HTTP. URI: вы можете использовать URI (унифицированный указатель ресурса), чтобы указать на ресурс, то есть каждый URI соответствует определенному ресурсу. Чтобы получить этот ресурс, просто получите доступ к его URI, чтобы URI стал адресом или идентификатором каждого ресурса. (4) Принципы проектирования: Все в сети абстрагировано на ресурсы                                               Каждый ресурс имеет уникальный идентификатор ресурса. Один и тот же ресурс имеет несколько форм выражения (xml, json и т. д.). Различные операции с ресурсами не изменят идентификатор ресурса. Все операции не имеют состояния Связь без сохранения состояния означает, что сервер (ответчик) не сохраняет никаких ресурсов, связанных с конкретным HTTP-запросом, а состояние приложения должно быть предоставлено запрашивающей стороной во время процесса запроса. Требуется, чтобы во время сетевого взаимодействия любой веб-запрос был изолирован от других запросов. Когда запрашивающая сторона делает запрос, сам запрос содержит всю информацию, необходимую ответчику для ответа на запрос. Проще говоря, информация о состоянии, хранящаяся на сервере, имеет состояние, а информация о состоянии, хранящаяся на клиенте, не имеет состояния. Принцип REST без сохранения состояния просто способствует достижению балансировки нагрузки. В распределенной веб-системе имеется несколько доступных серверов. Со временем один сервер выходит из строя и может быть передан. на другие серверы для обработки, чего не могут сделать запросы с отслеживанием состояния. RESTful — это архитектура, реализующая стиль дизайна REST, например RESTful API (API стиля дизайна REST). (5) Стиль ​ ​Использование методов HTTP для унификации интерфейса Используйте код состояния HTTP для возврата информации о состоянии. 3. GraphQL (язык графических запросов)

Он вобрал в себя некоторые общие преимущества RPC и REST, используя запрос в качестве базовой единицы, удобно получать нужные данные;     (1) преимущество:         Отличная производительность на низких скоростях сети.         Декларативный поиск данных         Получите соответствующие данные в соответствии с требованиями пользовательского интерфейса и избегайте ненужной передачи данных.     (2) недостаток:         относительно сложно определить         Проблемы с кэшированием требуют более надежного механизма для обеспечения кэширования на уровне полей.         Версия постоянно обновляется и еще не является зрелой. два. Сравнивать: 1. Поставщик службы RPC и интерфейс вызывающей стороны слишком зависят друг от друга, что приводит к сложности кодирования. Однако интерфейс REST более легкий, чем RPC. Зависимость между поставщиком службы и вызывающей стороной зависит только от контракта, и это так. нет уровня кода Сильная зависимость. 2. Службы RPC чувствительны к платформе, и их сложно просто повторно использовать: REST может быть реализован на разных платформах, и вызывающие программы на любом языке могут реализовать его в соответствии с определением интерфейса. 3. Dubbo использует RPC для сервисных вызовов, а SpringCloud использует REST. 4. Протокол связи REST использует HTTP, а RPC обычно использует TCP. 5. Производительность, производительность REST низкая, производительность RPC высокая. 6. Гибкость, REST имеет высокую гибкость, RPC имеет низкую гибкость. 7. С точки зрения использования интерфейс Http фокусируется только на поставщике услуг (сервере). Его не волнует способ вызова клиента или метод вызова. В обычных обстоятельствах, когда клиент использует Http для совершения вызовов, ему достаточно только этого. передавать контент, поэтому клиенту необходимо уделять больше внимания сетевой передаче при его использовании. Потеря, относительно неподходящая для развития бизнеса; службы RPC требуют, чтобы клиентский интерфейс был согласован с сервером. Сервер предоставляет метод, и клиент напрямую инициирует вызов через интерфейс. Бизнес-разработчику нужно только обратить внимание на вызов. бизнес-метод Однако, больше не обращая внимания на детали сетевой передачи, он более эффективен в развитии. 8. С точки зрения производительности, при использовании Http сам Http предоставляет богатые функции состояния и функции расширения. Однако, поскольку Http предоставляет слишком много функций, во время передачи по сети необходимо передавать больше информации. С точки зрения производительности это относительно неэффективно. Однако передача по сети службы RPC передает только данные, относящиеся к бизнес-контенту, поэтому передаваемые данные меньше, а производительность выше.

три. Применимые сценарии API на основе RPC больше подходит для поведения (то есть команд и процедур), а API на основе REST больше подходит для построения моделей (то есть ресурсов и сущностей) и обработки CRUD. REST использует методы HTTP, такие как: GET, POST, PUT, DELETE, OPTIONS и менее распространенный метод PATCH. RPC обычно использует только методы GET и POST. Метод GET обычно используется для получения информации, а метод POST может использоваться для выполнения всех действий.

Поскольку оба метода позволяют осуществлять удаленный вызов, какой нам следует выбрать? (1) С точки зрения скорости RPC быстрее, чем http. Хотя базовым уровнем является TCP, информация в протоколе http часто раздувается, но можно использовать сжатие gzip. (2) С точки зрения сложности реализация RPC более сложна, тогда как http относительно прост. (3) С точки зрения гибкости http лучше, поскольку он не заботится о деталях реализации и является кроссплатформенным и кросс-языковым.

Таким образом, оба имеют разные сценарии использования: (1) Если требуются более высокие требования к эффективности и в процессе разработки используется единый стек технологий, то целесообразно использовать RPC. (2) Если вам нужно быть более гибким, кросс-языковым и кросс-платформенным, очевидно, что http более подходит.

три. Подвести итог 1. RPC: так называемый удаленный вызов процедур. (ориентированный на метод)     SOA: так называемая сервис-ориентированная архитектура (ориентированная на сообщения).     ОТДЫХ: так называемый Representational state transfer (ресурсно-ориентированный)

2. При проектировании API, принимая решение о том, какую форму использовать, необходимо в первую очередь учитывать, кто будет использовать разработанный API: Если это проект, который фокусируется на объектах и ​​ресурсах, требует подключения к различным терминалам и пользователям, а также должен быть простым в использовании и чтении документов, тогда подойдет REST. Если он ориентирован на действия или некоторые внутренние микросервисы предъявляют высокие требования к отклику, вы можете рассмотреть RPC. Если вам необходимо предоставить данные в пользовательский интерфейс или вам нужно оптимизировать и сократить количество запросов в слабой сетевой среде, вы можете рассмотреть GraphQL. Для конечных пользователей попробуйте использовать Restful HTTP. Причина в том, что он обладает обширными знаниями и интуитивно понятен. Все языки программирования поддерживают HTTP (включая оболочку, что упрощает отладку). Для внутренних систем, если машин немного, можно также рассмотреть возможность использования Restful HTTP. Если машин много, попробуйте использовать двоичный RPC. В конце концов, разрыв в производительности по-прежнему огромен. Вызовы и тесты REST очень удобны, RPC немного громоздок, но эффективность RPC не вызывает сомнений, поэтому рекомендуется использовать RPC для внутренних вызовов между несколькими системами. Для внешних сервисов больше подходит Rest. RESTful API и RPC — это две совершенно разные концепции, и их нельзя сравнивать друг с другом. Если мы настаиваем на их сравнении, я считаю, что RESTful — это реализация RPC, то есть RPC включает в себя RESTful API, но RPC не равен RESTful API. RPC: Я думаю, что RPC — это идея, предложенная для удаленного вызова. Вы можете использовать любой метод для достижения своей цели (например: вам решать, какой сетевой протокол использовать для передачи данных). RESTful API: архитектура интерфейса, соответствующая стилю дизайна REST. Это также удаленный вызов через сеть, но удаленный вызов ограничен HTTP.

boy illustration
Неразрушающее увеличение изображений одним щелчком мыши, чтобы сделать их более четкими артефактами искусственного интеллекта, включая руководства по установке и использованию.
boy illustration
Копикодер: этот инструмент отлично работает с Cursor, Bolt и V0! Предоставьте более качественные подсказки для разработки интерфейса (создание навигационного веб-сайта с использованием искусственного интеллекта).
boy illustration
Новый бесплатный RooCline превосходит Cline v3.1? ! Быстрее, умнее и лучше вилка Cline! (Независимое программирование AI, порог 0)
boy illustration
Разработав более 10 проектов с помощью Cursor, я собрал 10 примеров и 60 подсказок.
boy illustration
Я потратил 72 часа на изучение курсорных агентов, и вот неоспоримые факты, которыми я должен поделиться!
boy illustration
Идеальная интеграция Cursor и DeepSeek API
boy illustration
DeepSeek V3 снижает затраты на обучение больших моделей
boy illustration
Артефакт, увеличивающий количество очков: на основе улучшения характеристик препятствия малым целям Yolov8 (SEAM, MultiSEAM).
boy illustration
DeepSeek V3 раскручивался уже три дня. Сегодня я попробовал самопровозглашенную модель «ChatGPT».
boy illustration
Open Devin — инженер-программист искусственного интеллекта с открытым исходным кодом, который меньше программирует и больше создает.
boy illustration
Эксклюзивное оригинальное улучшение YOLOv8: собственная разработка SPPF | SPPF сочетается с воспринимаемой большой сверткой ядра UniRepLK, а свертка с большим ядром + без расширения улучшает восприимчивое поле
boy illustration
Популярное и подробное объяснение DeepSeek-V3: от его появления до преимуществ и сравнения с GPT-4o.
boy illustration
9 основных словесных инструкций по доработке академических работ с помощью ChatGPT, эффективных и практичных, которые стоит собрать
boy illustration
Вызовите deepseek в vscode для реализации программирования с помощью искусственного интеллекта.
boy illustration
Познакомьтесь с принципами сверточных нейронных сетей (CNN) в одной статье (суперподробно)
boy illustration
50,3 тыс. звезд! Immich: автономное решение для резервного копирования фотографий и видео, которое экономит деньги и избавляет от беспокойства.
boy illustration
Cloud Native|Практика: установка Dashbaord для K8s, графика неплохая
boy illustration
Краткий обзор статьи — использование синтетических данных при обучении больших моделей и оптимизации производительности
boy illustration
MiniPerplx: новая поисковая система искусственного интеллекта с открытым исходным кодом, спонсируемая xAI и Vercel.
boy illustration
Конструкция сервиса Synology Drive сочетает проникновение в интрасеть и синхронизацию папок заметок Obsidian в облаке.
boy illustration
Центр конфигурации————Накос
boy illustration
Начинаем с нуля при разработке в облаке Copilot: начать разработку с минимальным использованием кода стало проще
boy illustration
[Серия Docker] Docker создает мультиплатформенные образы: практика архитектуры Arm64
boy illustration
Обновление новых возможностей coze | Я использовал coze для создания апплета помощника по исправлению домашних заданий по математике
boy illustration
Советы по развертыванию Nginx: практическое создание статических веб-сайтов на облачных серверах
boy illustration
Feiniu fnos использует Docker для развертывания личного блокнота Notepad
boy illustration
Сверточная нейронная сеть VGG реализует классификацию изображений Cifar10 — практический опыт Pytorch
boy illustration
Начало работы с EdgeonePages — новым недорогим решением для хостинга веб-сайтов
boy illustration
[Зона легкого облачного игрового сервера] Управление игровыми архивами
boy illustration
Развертывание SpringCloud-проекта на базе Docker и Docker-Compose