UDP (User Datagram Protocol) - Не требует установки соединения, не использует проверки отправленных пакетов.
TCP (Transmission Control Protocol) - Отвечает надежностью доставки данных в определённой последовательности требует установку соединения что приводит к некоторой задержке и потреблению ресурсов, обеспечивает управление потоком данных и контроль за перегрузками в сети
SOAP (Simple Object Access Protocol) - это протокол обмена структурированными сообщениями между веб-сервисами. Он предоставляет способ для взаимодействия и обмена данными между клиентом и сервером.
SOAP опирается на XML в качестве формата сообщений и использует HTTP или другие транспортные протоколы для передачи этих сообщений. SOAP-сообщения могут быть отправлены через сеть и содержат данные и операции, которые клиент хочет выполнить на сервере.
Основные характеристики SOAP: Простота, Независимость от платформы, Расширяемость (позволяет определить собственные типы данных и операции)
- XML (eXtensible Markup Language — расширяемый язык разметки) – текстовый формат, предназначенный для структурирования, хранения и передачи информации. Поддерживает хранение сложных структур данных, с возможностью валидации схемы. Расширение XML — это конкретная грамматика, представленная словарём тегов и их атрибутов, а также набором правил, определяющих какие атрибуты и элементы могут входить в состав других элементов.
- JSON (JavaScript Object Notation – Объектная нотация JavaScript) — текстовый формат обмена данными. JSON является синтаксисом для представления сложных структур, массивов данных различных типов в виде строк. По сравнению с XML занимают меньше объема на диске за счет отсутствия тэгов разметки.
- YAML – человекочитаемый формат сериализации данных, концептуально близкий к языкам разметки, но ориентированный на удобство ввода-вывода типичных структур данных многих языков программирования.
- CSV (Comma-Separated Values – значения, разделенные запятыми) – текстовый формат, предназначенный для представления табличных данных с фиксированным количеством столбцов. Каждая строка файла — это одна строка таблицы.
RPC (Remote Procedure Call) - это протокол удаленного вызова процедур, который позволяет программам взаимодействовать и обмениваться данными через сеть.
В RPC клиент вызывает удаленную процедуру (функцию, метод) на сервере, как если бы она была локальной. Клиент передает параметры вызова удаленной процедуры, а сервер выполняет эту процедуру и возвращает результат обратно клиенту.
Основные характеристики RPC:
- Прозрачность: RPC скрывает детали взаимодействия по сети и предоставляет простой способ вызова удаленных функций, в котором клиент не обязан знать, что вызов происходит удаленно.
- Параметры и возвращаемые значения: RPC позволяет передавать параметры вызываемой процедуры от клиента к серверу, а также возвращать результаты выполнения обратно клиенту.
- Процедурный стиль: RPC основан на процедурном стиле программирования, где клиент вызывает удаленную процедуру, а сервер ее выполняет.
- Протоколы: Для реализации RPC могут использоваться различные протоколы передачи данных, такие как HTTP, TCP/IP, UDP и другие.
RPC широко используется в распределенных системах и веб-сервисах для взаимодействия между различными компонентами. Он позволяет разделить функциональность на клиентскую и серверную стороны, что облегчает разработку и поддержку приложений.
Примеры популярных RPC-протоколов включают XML-RPC, JSON-RPC, gRPC, Thrift и другие. Эти протоколы определяют формат сообщений и способы сериализации данных для удаленных вызовов процедур.
gRPC (Google Remote Procedure Call) - это открытый фреймворк для разработки распределенных систем, который обеспечивает эффективное и надежное взаимодействие между различными сервисами. gRPC основан на протоколе HTTP/2 и использует бинарный формат сериализации данных Protocol Buffers (protobuf) для эффективной передачи данных.
Основные особенности gRPC:
- Сильная типизация: gRPC использует protobuf для определения структуры данных и сериализации/десериализации. Это обеспечивает сильную типизацию и позволяет легко определять сообщения и сервисы.
- Мультиплатформенность: gRPC поддерживает множество языков программирования, включая Java, C++, Python, Go, Ruby, C#, Node.js и другие. Это позволяет разрабатывать распределенные системы на разных платформах с использованием единого протокола и кода.
- Бинарный протокол: gRPC использует протокол HTTP/2 в качестве транспортного слоя, что обеспечивает эффективную передачу данных с использованием бинарного формата и мультиплексирование запросов на одном соединении.
- Кодогенерация: gRPC позволяет автоматически генерировать клиентский и серверный код на основе определений protobuf. Это упрощает процесс разработки, так как разработчику необходимо только определить сообщения и сервисы, а код для взаимодействия будет сгенерирован автоматически.
- Поддержка потоковой передачи данных: gRPC поддерживает как одностороннюю, так и двустороннюю потоковую передачу данных. Это позволяет эффективно обмениваться потоками данных между клиентом и сервером.