Ко всем новостям

Dubbo и gRP — сравниваем два разных, но поразительно похожих протокола

Публикации в СМИ
15.08.2024

Источник: Хабр

Всем привет! На связи Максим Чудновский и Александр Козлов, мы занимаемся развитием интеграционной платформы Synapse. Это сloud-native децентрализованная платформа для интеграции и оркестрации микросервисов, которая разрабатывается в СберТехе.

Сегодня есть множество протоколов, обеспечивающих эффективную коммуникацию между различными компонентами приложений и систем. Два ярких представителя таких технологий — Dubbo и gRPC, которые, по мнению некоторых экспертов, имеют поразительное сходство. Но действительно ли они так уж похожи?

Мы подготовили два материала на тему интеграционных фреймворков. В этой статье познакомим вас с Dubbo, вспомним про базовое устройство Service Mesh и покажем, как мы на Java обычно решаем вопросы интеграции в наших системах. Во второй статье соберём демоприложение на основе фреймворка Dubbo.

Что такое Service Mesh

Начнём с того, что вспомним, что такое Service Mesh, реализацией которого и является Dubbo. Это современная технология, которая позволяет оптимизировать и автоматизировать работу микросервисов в сложных распределённых системах. Она обеспечивает прозрачное и гибкое управление трафиком, ресурсами и безопасностью на уровне отдельных сервисов, что позволяет улучшить масштабируемость, отказоустойчивость и общую производительность приложения.

Istio — это одно из самых популярных Service Mesh-решений, разработанное компанией Google. Оно предлагает широкий спектр возможностей для управления, мониторинга и безопасности микросервисов, включая поддержку различных протоколов, интеграцию с внешними системами и многое другое. Благодаря гибкости, простоте использования и высокой производительности, Istio становится выбором номер один для многих разработчиков и организаций. Давайте разберёмся, как устроено решение.

290ea962b1d8e9b75d383b98d9f443eb.png

Control plane

Control Plane — ключевая часть service mesh-архитектуры, которая отвечает за управление и координацию работы микросервисов. В контексте Istio, control plane представлена компонентом под названием «Istiod», который обеспечивает централизованное управление, маршрутизацию трафика, авторизацию и мониторинг всех сервисов в mesh-сети.

1cb09856c139aa56def8d58bf921713d.png

Когда новый сервис добавляется в mesh, Istiod автоматически настраивает и интегрирует его с остальными сервисами, управляя всем жизненным циклом сервиса, от создания до удаления. Кроме того, Istiod обрабатывает все запросы на изменение конфигурации сервисов, обеспечивая тем самым гибкость и масштабируемость системы.

В целом, control plane играет ключевую роль в обеспечении надёжности, безопасности и производительности service mesh-решения, делая его ключевым элементом для современных и высоконагруженных систем.

Data plane

Data Plane в Istio — это слой, который отвечает за обработку и передачу данных между микросервисами. Состоит из компонентов, которые обеспечивают маршрутизацию и проксирование запросов, а также функции безопасности TLS termination и authentication. Один из таких компонентов — Envoy, о котором расскажем ниже.

dee6a56da5cdbfbc6018962169e4f90b.png

Работа Data Plane основана на конфигурации, которую предоставляет Control Plane. Когда новый сервис добавляется в Istio mesh, Control Plane автоматически настраивает Envoy на этом сервисе, чтобы тот мог взаимодействовать с другими сервисами в mesh.

Data Plane также обрабатывает запросы от клиентов и направляет их на соответствующие сервисы, а затем возвращает ответы обратно клиентам. Он также обеспечивает мониторинг и сбор статистики о работе сервисов, что помогает управлять и оптимизировать работу mesh-сети.

Протоколы и их поддержка в Istio

Протокол HTTP

HTTP (Hypertext Transfer Protocol) — основной протокол, используемый для обмена данными в Интернете. В Istio поддержка HTTP реализована через Envoy — прокси-сервер, который обрабатывает входящие и исходящие запросы между сервисами. Envoy поддерживает различные методы аутентификации, шифрование TLS и другие функции, необходимые для безопасной передачи данных.

Протокол gRPC

gRPC (Google Remote Procedure Call) — это открытый протокол, который обеспечивает удалённый вызов процедур и обмен структурированными данными между приложениями. В Istio gRPC интегрирован с Envoy и позволяет сервисам взаимодействовать на основе этого протокола. gRPC в Istio поддерживает шифрование, аутентификацию и другие необходимые функции для безопасности обмена данными.

Протоколы MQTT и AMQP

MQTT (Message Queuing Telemetry Transport) и AMQP (Advanced Message Queuing Protocol) — протоколы для обмена сообщениями между устройствами и серверами. В Istio они интегрированы с помощью стороннего проекта — Envoy-Proxy-MQTT. Это позволяет использовать MQTT и AMQP для взаимодействия между сервисами и обеспечивает шифрование и аутентификацию сообщений.

Интеграция с внешними системами

Istio предоставляет возможность интеграции с различными внешними системами, такими как облачные платформы (например, Google Cloud), сторонние API и другие. Интеграция осуществляется через Envoy, который может обрабатывать запросы, поступающие из внешних систем, и передавать их между сервисами в Istio Mesh.

Немного о gRPC

gRPC — современный протокол удалённых вызовов процедур для быстрой и удобной работы с микросервисами. gRPC позволяет вызывать удалённые процедуры, получать результаты и передавать данные в оба направления.

Вот как это работает:

  • Клиент отправляет запрос на сервер, указывая в нём имя процедуры и аргументы.
  • Сервер принимает запрос, выполняет указанную процедуру и возвращает результат клиенту.
  • Клиент получает результат и продолжает работу.

gRPC использует HTTP/2 для передачи данных, что обеспечивает высокую скорость работы и надёжность. Кроме того, протокол поддерживает аутентификацию, сжатие данных и шифрование для обеспечения безопасности.

gRPC разработан компанией Google, но поддерживается многими языками программирования, включая Java, Python, Go. Благодаря своей простоте и эффективности, gRPC становится всё более популярным среди разработчиков микросервисов.

И хотя gRPC давно стал базовой технологией, давайте теперь рассмотрим уже не новый, но мало освещённый, по крайней мере в европейской части сети, китайский интеграционный фреймворк Dubbo.

Apache Dubbo

Apache Dubbo — популярный фреймворк для разработки распределённых приложений. Он используется многими компаниями и организациями по всему миру, в том числе крупнейшими китайскими корпорациями вроде Alibaba, Tencent, Baidu, JD.com, Huawei. Dubbo подходит для разработки различных типов приложений, включая микросервисы, RESTful API, SOAP-сервисы, и RPC-сервисы.

Envoy и Dubbo

Протокол Dubbo, разработанный компанией Alibaba, — это высокопроизводительный интерфейс удалённых процедур, который использует gRPC для передачи данных. Envoy полностью поддерживает gRPC, что позволяет ему работать с протоколом Dubbo без дополнительных настроек.

В результате разработчики микросервисов, использующие Dubbo, могут получить преимущества Envoy. Например, улучшить производительность своих приложений, используя функции Envoy для оптимизации трафика и управления ресурсами. А ещё без дополнительных инструментов обеспечить безопасную коммуникацию между микросервисами благодаря встроенной поддержке TLS.

Но использование протокола Dubbo в Envoy требует определённой интеграции с другими компонентами, такими как балансировщики нагрузки и системы мониторинга. Это важно учитывать при настройке своих приложений и, возможно, использовать дополнительные инструменты для обеспечения полной функциональности.

Github и Dubbo

На GitHub есть несколько проектов, связанных с Dubbo, но они не очень популярны. Например, у официального репозитория Dubbo всего 1460 звезд и около 250 форков. Также есть несколько других проектов, которые используют Dubbo, но их популярность не очень высока.

Сообщество Dubbo

Dubbo используют в основном азиатские компании, и среди них есть большие игроки:

  • Alibaba. Один из основателей консорциума Dubbo и один из основных разработчиков. Использует эту технологию для своих внутренних сервисов.
  • Tencent. Ещё один основатель консорциума и разработчик Dubbo. Использует его для своих мобильных игр и социальных сетей.
  • Huawei также является членом консорциума и использует Dubbo в своих продуктах.
  • Baidu использует Dubbo в своем поисковом движке.
  • Twitter использует Dubbo для своего API.
  • Netflix использует Dubbo для управления своими кластерами.
  • Uber использует Dubbo для своей платформы обмена сообщениями.
  • Amazon использует Dubbo для некоторых своих сервисов.

Архитектура Dubbo3

Dubbo3 — это современная архитектура для построения микросервисных распределённых систем. Она предоставляет набор инструментов и протоколов для взаимодействия между различными компонентами системы.

32ee80044fb0d3baf1905f583d6d9c0a.png

Один из основных компонентов Dubbo3 — протокол gRPC. Он позволяет обмениваться данными в режиме реального времени, обеспечивая высокую производительность и надёжность. Кроме того, gRPC поддерживает различные типы данных, включая структуры, массивы и коллекции.

Ещё одним важным компонентом Dubbo3 является механизм маршрутизации. Он позволяет определять правила для обработки запросов и направлять их на соответствующие сервисы. Маршрутизация может быть основана на различных критериях, таких как IP-адрес клиента, URL запроса и т. д.

Также в Dubbo3 есть механизм управления транзакциями, который отвечает за согласованность данных в распределённой системе. Это особенно важно для систем, где несколько сервисов могут работать с общими данными.

Наконец, Dubbo3 имеет встроенный механизм безопасности, который обеспечивает защиту данных от несанкционированного доступа. Этот механизм включает в себя шифрование данных, аутентификацию пользователей и другие меры безопасности.

Возможности Dubbo3

  • Поддержка различных языков программирования, включая Java, Python, C++, C# и Go.
  • Поддержка различных протоколов, таких как HTTP, RMI, Hessian и Thrift, в то время как gRPC поддерживает только HTTP/2.
  • Поддержка различных типов данных, включая примитивные типы, коллекции, массивы и объекты, в то время как gRPC поддерживает только примитивные типы данных.
  • Поддержка различных типов сообщений, включая запросы, ответы, события и уведомления, в то время как gRPC поддерживает только запросы и ответы.
  • Поддержка различных типов транзакций, включая атомарные, распределённые и параллельные, в то время как gRPC не поддерживает транзакции.
  • Поддержка различных типов конфигурации, включая XML, YAML и JSON, в то время как gRPC поддерживает только JSON.
  • Поддержка различных типов серверов, включая HTTP, RMI, Hessian и Thrift, в то время как gRPC поддерживает только HTTP/2.
  • Поддержка различных типов клиентов, включая HTTP, RMI, Hessian и Thrift, в то время как gRPC поддерживает только HTTP/2.
  • Поддержка различных типов сервисов, включая REST, SOAP и RPC, в то время как gRPC поддерживает только RPC.

Довольно интересно выходит. Давайте посмотрим, как это можно использовать в Java.

Dubbo в Java

Dubbo поддерживает Java 8 и выше. В Dubbo3 это реализовано через библиотеку Spring Cloud Dubbo. Она предоставляет инструменты для регистрации сервисов, маршрутизации запросов и управления транзакциями.

Вот пример использования Spring Cloud Dubbo для создания сервиса:

@Service public class HelloService { public String sayHello(String name) { return "Hello, " + name + "!"; } }

Для регистрации сервиса необходимо создать конфигурацию:

@EnableDubbo // Enable Dubbo support @ComponentScan("com.mycompany") // Scan for components in this package public class DubboConfig { // Register the HelloService bean as a Dubbo service @Bean("helloService") public HelloService helloService() { return new HelloService(); } }