Автор: No Dishwashing Studio - Marklux
Источник:Введение в Dubbo (3) — Принципы архитектуры
Все права принадлежат автору, при перепечатке указывать источник
предисловие
В предыдущих двух статьях мы узнали об основных концепциях и простом использовании распределенных сервисов. Теперь давайте посмотрим, как dubbo предоставляет эти функции, как это работает и какова общая иерархия фреймворка.
На эту статью ссылаетсяПодробное объяснение дизайна архитектуры DubboиОфициальное руководство пользователя Dubbo
основная функция
Прежде всего, мы должны понять три основные функции, предоставляемые Dubbo:
-
коммуникация
Предоставляет множество абстрактных методов для платформы NIO, а также предоставляет множество методов для взаимной связи и вызова между различными службами. Включает синхронные, асинхронные модели, модели запросов и ответов.
-
Служба управления
Он поддерживает отношения вызова между службами и предоставляет такие функции, как отказоустойчивость служб, балансировка нагрузки и динамическая конфигурация. Это позволяет разработчикам понять общую работу службы в режиме реального времени.
-
Регистрационный центр
Обеспечьте реестр услуг, чтобы услуги можно было динамически добавлять, удалять и обновлять в режиме реального времени для потребителей.
Архитектура узла
Обратитесь к этой диаграмме архитектуры узла, представленной в официальном руководстве dubbo:
Объясните роль каждого узла:
-
Provider
Поставщики открытых услуг
-
Consumer
Потребитель, вызывающий удаленную службу
-
Container
работающий сервисный контейнер
-
Registry
Реестр служб для обнаружения служб
-
Monitor
Центр мониторинга вызова службы статистики
Затем вам нужно понять общие отношения и процесс вызова:
-
Сервис-контейнер отвечает за запуск, загрузку и работу сервис-провайдера (его можно понимать как: бизнес-код, написанный сервис-провайдером для разработчика, а сервис-контейнер обеспечивает работающую среду, так что разработчику не нужно заботиться о деталях запуска и подключения)
-
Когда поставщик услуг запускается, он регистрирует свою собственную службу в реестре. Потребитель сервиса подписывается на нужный ему сервис в реестре при его запуске.
-
Реестр возвращает список адресов поставщика услуг потребителю.Если есть изменение, реестр передаст данные об изменении потребителю на основе постоянного подключения.
-
Потребитель услуги из списка адресов провайдера выбирает провайдера для вызова на основе алгоритма мягкой балансировки нагрузки и, если вызов завершается неудачно, выбирает другого провайдера для вызова.
-
Потребители и поставщики услуг накапливают в памяти количество вызовов и время разговора и регулярно каждую минуту отправляют статистические данные в центр мониторинга.
Преимущества
Вышеупомянутая архитектура узла привносит в dubbo несколько очень мощных функций, которые также являются преимуществами dubbo:
возможность подключения
Все узлы подключены, а потребление сетевых вызовов снижено за счет оптимизации.
Отражено:
- Центр регистрации отвечает за регистрацию и поиск адресов службы, что эквивалентно службе каталогов. Поставщики услуг и потребители взаимодействуют с центром регистрации только при запуске. Центр регистрации не пересылает запросы, и нагрузка невелика.
- Центр мониторинга отвечает за подсчет количества вызовов службы, времени вызова и т. д. Сначала статистика собирается в памяти и каждую минуту отправляется на сервер центра мониторинга, а затем отображается в отчете.
- Поставщик услуг регистрирует предоставляемые им услуги в центре регистрации и сообщает о времени вызова в центр мониторинга, который не включает накладные расходы сети.
- Потребитель услуг получает список адресов поставщиков услуг из центра регистрации, напрямую звонит провайдеру в соответствии с алгоритмом загрузки и сообщает центру мониторинга время звонка, которое включает в себя накладные расходы сети.
- Центр регистрации, поставщик услуг и потребитель услуг являются долгосрочными соединениями, за исключением центра мониторинга.
- Центр регистрации воспринимает существование поставщика услуг через длинное соединение.Если поставщик услуг не работает, центр регистрации немедленно подтолкнет событие, чтобы уведомить потребителя.
- Центр регистрации и центр мониторинга отключены, что не влияет на работающих провайдеров и потребителей, а потребитель кэширует список поставщиков локально.
- Центр регистрации и центр мониторинга не являются обязательными, и потребители услуг могут напрямую подключаться к поставщикам услуг.
прочность
Даже если какие-то узлы в сервисе не будут работать должным образом, система в целом не рухнет, а минимизирует потери за счет множества отказоустойчивых стратегий.
Отражено:
- Время простоя центра мониторинга не влияет на использование, но теряется только часть выборочных данных
- После того, как база данных не работает, реестр все еще может предоставлять запрос списка служб через кеш, но не может регистрировать новые службы.
- Одноранговый кластер центра реестра, после выхода из строя любого из них он автоматически переключается на другой
- После того, как все реестры отключены, поставщики услуг и потребители услуг все еще могут общаться через локальный кэш.
- Поставщик услуг не имеет гражданства.После того, как любой из них выйдет из строя, это не повлияет на использование.
- После того, как все поставщики услуг отключатся, приложение-потребитель услуг будет недоступно и будет бесконечно повторно подключаться, ожидая восстановления поставщика услуг.
Масштабируемость
Когда масштаб службы необходимо скорректировать, нет необходимости приостанавливать службу и повторно развертывать ее, но ее можно динамически переключать, что отражается как:
- Реестр представляет собой одноранговый кластер, который может динамически увеличивать количество экземпляров развертывания компьютеров, и все клиенты автоматически обнаружат новый реестр.
- Поставщики услуг не имеют состояния и могут динамически увеличивать количество экземпляров развертывания компьютеров, а реестр будет передавать информацию о новых поставщиках услуг потребителям.
Возможность обновления
По мере дальнейшего роста сервисного кластера может потребоваться переход на гибкую вычислительную архитектуру. Но сама сервисная структура dubbo не окажет сопротивления обновлению.
Горизонтальная иерархия
С точки зрения разделения узлов мы узнали о базовых компонентах даббо и взаимосвязи между ними.Теперь давайте сделаем горизонтальное расслоение и посмотрим все компоненты всего фреймворка.Обратитесь к следующему рисунку:
Структура Dubbo разделена на 10 уровней, а верхний уровень Service — это уровень интерфейса для разработчиков, которые действительно хотят использовать Dubbo для разработки распределенных сервисов для реализации бизнес-логики. Светло-голубой фон слева на рисунке — это интерфейс, используемый потребителем услуги, светло-зеленый фон справа — это интерфейс, используемый поставщиком услуги, а интерфейс, расположенный на центральной оси, — это интерфейс, используемый обеими сторонами. .
Функция каждого уровня кратко объясняется ниже (поскольку я не читал исходный код, поэтому я просто ссылаюсь на личное понимание документа)
-
Уровень интерфейса службы (служба)
Место, где реализуется бизнес-логика, также является местом, где разработчики, использующие фреймворк, фактически пишут код.
-
Уровень конфигурации (Config)
Где настроить общие параметры запуска.
-
Уровень сервисного прокси (прокси)
Интерфейс вызывает прозрачный прокси, который преобразует Invoker в интерфейс, напрямую вызываемый пользователем. Без этого уровня RPC по-прежнему можно реализовать, но пользователям необходимо вручную формировать Invoker, и прозрачные вызовы не могут быть реализованы.
-
Уровень регистрации службы (реестр)
Инкапсулирует функции регистрации и обнаружения адресов службы. Если уровень регистрации службы отсутствует, поставщику службы необходимо напрямую предоставить адрес вызова службы.
-
Кластерный слой (кластер)
Инкапсулирует маршруты для нескольких поставщиков и обеспечивает балансировку нагрузки, соединяя реестры. Карта, реализующая интеграцию нескольких поставщиков услуг в одного поставщика услуг.
-
Уровень мониторинга (Монитор)
Определите количество вызовов RPC и ситуацию вызова.
-
Уровень удаленного вызова (протокол)
Основной уровень, который инкапсулирует вызовы RPC. Протокол отвечает за управление жизненным циклом Invokers. Invoker — это основная модель Dubbo, представляющаяисполняемый, все вызовы основаны на Invoker, будь то локальные или удаленные вызовы или кластерные вызовы.
-
Уровень обмена информацией (Exchange)
Инкапсулирует различные режимы связи: запрос-ответ, синхронный в асинхронный и т. д.
-
Сетевой транспортный уровень (транспорт)
Abstract mina и netty — это унифицированные интерфейсы, предоставляющие базовые возможности nio.
-
Уровень сериализации данных (Serialize)
Предоставьте несколько основных инструментов многократного использования.
Анализ потока вызовов
На основе следующего рисунка проанализируйте отношения планирования между потребителями услуг и поставщиками услуг на уровне RPC.
Как мы резюмировали ранее, он в основном делится на 3 этапа:
- Поставщик услуг публикует услугу в реестре услуг.
- Потребитель услуги подписывается на услугу из реестра
- Вызывающий службу вызывает службу по подписке
Разверните детали и обратитесь к следующему рисунку:
резюме
Сама структура даббо не сложная, слои четкие.
Понимание архитектуры dubbo помогает понять идеи дизайна распределенных систем и облегчает начало работы.
Реализация системы dubbo также будет проанализирована с точки зрения исходного кода.
предисловие
В предыдущих двух статьях мы узнали об основных концепциях и простом использовании распределенных сервисов. Теперь давайте посмотрим, как dubbo предоставляет эти функции, как это работает и какова общая иерархия фреймворка.
На эту статью ссылаетсяПодробное объяснение дизайна архитектуры DubboиОфициальное руководство пользователя Dubbo
основная функция
Прежде всего, мы должны понять три основные функции, предоставляемые Dubbo:
-
коммуникация
Предоставляет множество абстрактных методов для платформы NIO, а также предоставляет множество методов для взаимной связи и вызова между различными службами. Включает синхронные, асинхронные модели, модели запросов и ответов.
-
Служба управления
Он поддерживает отношения вызова между службами и предоставляет такие функции, как отказоустойчивость служб, балансировка нагрузки и динамическая конфигурация. Это позволяет разработчикам понять общую работу службы в режиме реального времени.
-
Регистрационный центр
Обеспечьте реестр услуг, чтобы услуги можно было динамически добавлять, удалять и обновлять в режиме реального времени для потребителей.
Архитектура узла
Обратитесь к этой диаграмме архитектуры узла, представленной в официальном руководстве dubbo:
Объясните роль каждого узла:
-
Provider
Поставщики открытых услуг
-
Consumer
Потребитель, вызывающий удаленную службу
-
Container
работающий сервисный контейнер
-
Registry
Реестр служб для обнаружения служб
-
Monitor
Центр мониторинга вызова службы статистики
Затем вам нужно понять общие отношения и процесс вызова:
-
Сервис-контейнер отвечает за запуск, загрузку и работу сервис-провайдера (его можно понимать как: бизнес-код, написанный сервис-провайдером для разработчика, а сервис-контейнер обеспечивает работающую среду, так что разработчику не нужно заботиться о деталях запуска и подключения)
-
Когда поставщик услуг запускается, он регистрирует свою собственную службу в реестре. Потребитель сервиса подписывается на нужный ему сервис в реестре при его запуске.
-
Реестр возвращает список адресов поставщика услуг потребителю.Если есть изменение, реестр передаст данные об изменении потребителю на основе постоянного подключения.
-
Потребитель услуги из списка адресов провайдера выбирает провайдера для вызова на основе алгоритма мягкой балансировки нагрузки и, если вызов завершается неудачно, выбирает другого провайдера для вызова.
-
Потребители и поставщики услуг накапливают в памяти количество вызовов и время разговора и регулярно каждую минуту отправляют статистические данные в центр мониторинга.
Преимущества
Вышеупомянутая архитектура узла привносит в dubbo несколько очень мощных функций, которые также являются преимуществами dubbo:
возможность подключения
Все узлы подключены, а потребление сетевых вызовов снижено за счет оптимизации.
Отражено:
- Центр регистрации отвечает за регистрацию и поиск адресов службы, что эквивалентно службе каталогов. Поставщики услуг и потребители взаимодействуют с центром регистрации только при запуске. Центр регистрации не пересылает запросы, и нагрузка невелика.
- Центр мониторинга отвечает за подсчет количества вызовов службы, времени вызова и т. д. Сначала статистика собирается в памяти и каждую минуту отправляется на сервер центра мониторинга, а затем отображается в отчете.
- Поставщик услуг регистрирует предоставляемые им услуги в центре регистрации и сообщает о времени вызова в центр мониторинга, который не включает накладные расходы сети.
- Потребитель услуг получает список адресов поставщиков услуг из центра регистрации, напрямую звонит провайдеру в соответствии с алгоритмом загрузки и сообщает центру мониторинга время звонка, которое включает в себя накладные расходы сети.
- Центр регистрации, поставщик услуг и потребитель услуг являются долгосрочными соединениями, за исключением центра мониторинга.
- Центр регистрации воспринимает существование поставщика услуг через длинное соединение.Если поставщик услуг не работает, центр регистрации немедленно подтолкнет событие, чтобы уведомить потребителя.
- Центр регистрации и центр мониторинга отключены, что не влияет на работающих провайдеров и потребителей, а потребитель кэширует список поставщиков локально.
- Центр регистрации и центр мониторинга не являются обязательными, и потребители услуг могут напрямую подключаться к поставщикам услуг.
прочность
Даже если какие-то узлы в сервисе не будут работать должным образом, система в целом не рухнет, а минимизирует потери за счет множества отказоустойчивых стратегий.
Отражено:
- Время простоя центра мониторинга не влияет на использование, но теряется только часть выборочных данных
- После того, как база данных не работает, реестр все еще может предоставлять запрос списка служб через кеш, но не может регистрировать новые службы.
- Одноранговый кластер центра реестра, после выхода из строя любого из них он автоматически переключается на другой
- После того, как все реестры отключены, поставщики услуг и потребители услуг все еще могут общаться через локальный кэш.
- Поставщик услуг не имеет гражданства.После того, как любой из них выйдет из строя, это не повлияет на использование.
- После того, как все поставщики услуг отключатся, приложение-потребитель услуг будет недоступно и будет бесконечно повторно подключаться, ожидая восстановления поставщика услуг.
Масштабируемость
Когда масштаб службы необходимо скорректировать, нет необходимости приостанавливать службу и повторно развертывать ее, но ее можно динамически переключать, что отражается как:
- Реестр представляет собой одноранговый кластер, который может динамически увеличивать количество экземпляров развертывания компьютеров, и все клиенты автоматически обнаружат новый реестр.
- Поставщики услуг не имеют состояния и могут динамически увеличивать количество экземпляров развертывания компьютеров, а реестр будет передавать информацию о новых поставщиках услуг потребителям.
Возможность обновления
По мере дальнейшего роста сервисного кластера может потребоваться переход на гибкую вычислительную архитектуру. Но сама сервисная структура dubbo не окажет сопротивления обновлению.
Горизонтальная иерархия
С точки зрения разделения узлов мы узнали о базовых компонентах даббо и взаимосвязи между ними.Теперь давайте сделаем горизонтальное расслоение и посмотрим все компоненты всего фреймворка.Обратитесь к следующему рисунку:
Структура Dubbo разделена на 10 уровней, а верхний уровень Service — это уровень интерфейса для разработчиков, которые действительно хотят использовать Dubbo для разработки распределенных сервисов для реализации бизнес-логики. Светло-голубой фон слева на рисунке — это интерфейс, используемый потребителем услуги, светло-зеленый фон справа — это интерфейс, используемый поставщиком услуги, а интерфейс, расположенный на центральной оси, — это интерфейс, используемый обеими сторонами. .
Функция каждого уровня кратко объясняется ниже (поскольку я не читал исходный код, поэтому я просто ссылаюсь на личное понимание документа)
-
Уровень интерфейса службы (служба)
Место, где реализуется бизнес-логика, также является местом, где разработчики, использующие фреймворк, фактически пишут код.
-
Уровень конфигурации (Config)
Где настроить общие параметры запуска.
-
Уровень сервисного прокси (прокси)
Интерфейс вызывает прозрачный прокси, который преобразует Invoker в интерфейс, напрямую вызываемый пользователем. Без этого уровня RPC по-прежнему можно реализовать, но пользователям необходимо вручную формировать Invoker, и прозрачные вызовы не могут быть реализованы.
-
Уровень регистрации службы (реестр)
Инкапсулирует функции регистрации и обнаружения адресов службы. Если уровень регистрации службы отсутствует, поставщику службы необходимо напрямую предоставить адрес вызова службы.
-
Кластерный слой (кластер)
Инкапсулирует маршруты для нескольких поставщиков и обеспечивает балансировку нагрузки, соединяя реестры. Карта, реализующая интеграцию нескольких поставщиков услуг в одного поставщика услуг.
-
Уровень мониторинга (Монитор)
Определите количество вызовов RPC и ситуацию вызова.
-
Уровень удаленного вызова (протокол)
Основной уровень, который инкапсулирует вызовы RPC. Протокол отвечает за управление жизненным циклом Invokers. Invoker — это основная модель Dubbo, представляющаяисполняемый, все вызовы основаны на Invoker, будь то локальные или удаленные вызовы или кластерные вызовы.
-
Уровень обмена информацией (Exchange)
Инкапсулирует различные режимы связи: запрос-ответ, синхронный в асинхронный и т. д.
-
Сетевой транспортный уровень (транспорт)
Abstract mina и netty — это унифицированные интерфейсы, предоставляющие базовые возможности nio.
-
Уровень сериализации данных (Serialize)
Предоставьте несколько основных инструментов многократного использования.
Анализ потока вызовов
На основе следующего рисунка проанализируйте отношения планирования между потребителями услуг и поставщиками услуг на уровне RPC.
Как мы резюмировали ранее, он в основном делится на 3 этапа:
- Поставщик услуг публикует услугу в реестре услуг.
- Потребитель услуги подписывается на услугу из реестра
- Вызывающий службу вызывает службу по подписке
Разверните детали и обратитесь к следующему рисунку:
резюме
Сама структура даббо не сложная, слои четкие.
Понимание архитектуры dubbo помогает понять идеи дизайна распределенных систем и облегчает начало работы.
Реализация системы dubbo также будет проанализирована с точки зрения исходного кода.