Всем привет! На связи Максим Чудновский и Александр Козлов, мы занимаемся развитием интеграционной платформы Synapse. Это сloud-native децентрализованная платформа для интеграции и оркестрации микросервисов, которая разрабатывается в СберТехе.
Сегодня есть множество протоколов, обеспечивающих эффективную коммуникацию между различными компонентами приложений и систем. Два ярких представителя таких технологий — Dubbo и gRPC, которые, по мнению некоторых экспертов, имеют поразительное сходство. Но действительно ли они так уж похожи?
Мы подготовили два материала на тему интеграционных фреймворков. В этой статье познакомим вас с Dubbo, вспомним про базовое устройство Service Mesh и покажем, как мы на Java обычно решаем вопросы интеграции в наших системах. Во второй статье соберём демоприложение на основе фреймворка Dubbo.
Что такое Service Mesh
Начнём с того, что вспомним, что такое Service Mesh, реализацией которого и является Dubbo. Это современная технология, которая позволяет оптимизировать и автоматизировать работу микросервисов в сложных распределённых системах. Она обеспечивает прозрачное и гибкое управление трафиком, ресурсами и безопасностью на уровне отдельных сервисов, что позволяет улучшить масштабируемость, отказоустойчивость и общую производительность приложения.
Istio — это одно из самых популярных Service Mesh-решений, разработанное компанией Google. Оно предлагает широкий спектр возможностей для управления, мониторинга и безопасности микросервисов, включая поддержку различных протоколов, интеграцию с внешними системами и многое другое. Благодаря гибкости, простоте использования и высокой производительности, Istio становится выбором номер один для многих разработчиков и организаций. Давайте разберёмся, как устроено решение.
Control plane
Control Plane — ключевая часть service mesh-архитектуры, которая отвечает за управление и координацию работы микросервисов. В контексте Istio, control plane представлена компонентом под названием «Istiod», который обеспечивает централизованное управление, маршрутизацию трафика, авторизацию и мониторинг всех сервисов в mesh-сети.
Когда новый сервис добавляется в mesh, Istiod автоматически настраивает и интегрирует его с остальными сервисами, управляя всем жизненным циклом сервиса, от создания до удаления. Кроме того, Istiod обрабатывает все запросы на изменение конфигурации сервисов, обеспечивая тем самым гибкость и масштабируемость системы.
В целом, control plane играет ключевую роль в обеспечении надёжности, безопасности и производительности service mesh-решения, делая его ключевым элементом для современных и высоконагруженных систем.
Data plane
Data Plane в Istio — это слой, который отвечает за обработку и передачу данных между микросервисами. Состоит из компонентов, которые обеспечивают маршрутизацию и проксирование запросов, а также функции безопасности TLS termination и authentication. Один из таких компонентов — Envoy, о котором расскажем ниже.
Работа 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 — это современная архитектура для построения микросервисных распределённых систем. Она предоставляет набор инструментов и протоколов для взаимодействия между различными компонентами системы.
Один из основных компонентов 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();
}
}
Теперь сервис будет доступен для вызова через Dubbo.
Заключение
Dubbo представляет собой мощный инструмент для разработки распределённых систем, обладающий высокой производительностью, надёжностью и гибкостью. Его широкий набор функций позволяет легко создавать и масштабировать сервис-ориентированные архитектуры (SOA) на основе микросервисов для различных областей применения, включая электронную коммерцию, финансовые услуги, телекоммуникации и многое другое.
Преимущества Dubbo включают в себя высокую производительность, устойчивость к отказам, гибкую конфигурацию и инструменты мониторинга и управления, делая его идеальным выбором для создания надёжных и масштабируемых систем. С его помощью разработчики могут легко управлять распределёнными сервисами и обеспечивать высокий уровень доступности приложений.
Несмотря на то, что Dubbo постоянно развивается и совершенствуется, его базовые принципы и функциональность остаются стабильными и эффективными. Разработчикам и архитекторам Dubbo может подойти в качестве инструмента для построения распределённых систем, который обеспечивает высокую производительность и надёжность приложений.
В следующей статье посмотрим на Dubbo в «полевых условиях», соберем на его основе демоприложение и оценим, насколько это «зрелый» фреймворк. А пока благодарим за внимание и приглашаем вас в комментарии!
Комментарии (3)
ivvi
16.08.2024 14:57В статье присутствует одновременно два вот таких предложения:
"Кроме того, gRPC поддерживает различные типы данных, включая структуры, массивы и коллекции."
И немного ниже:
"в то время как gRPC поддерживает только примитивные типы данных."
Невольно возникает вопрос: автор точно разбирается в том, о чём пишет?
keekkenen
16.08.2024 14:57чотко.. стоит найти такое и дальше можно не читать, ибо неизвестно, какого бреда там написали..
phikus
Сложна, сложна, непонятна.
Цепочка складывается такая:
gRPC использует HTTP/2 как транспорт
Dubbo использует gRPC как транспорт
При этом Dubbo поддерживает различные протоколы, такие как HTTP, RMI, Hessian и Thrift, в то время как gRPC поддерживает только HTTP/2.