Вопросы для интервью Dubbo (краткое изложение наиболее полных вопросов для интервью)

интервью

Краткое изложение интервью по Java, включая ключевые знания Java и общие платформы с открытым исходным кодом, приветствуется к прочтению. В статье возможны ошибки, т.к. личные знания ограничены, прошу указать! Статья постоянно обновляется...  

ID заглавие адрес
1 Design Patterns Interview Questions (резюме наиболее полных вопросов для интервью) nuggets.capable/post/684490…
2 Вопросы для собеседования по базовым знаниям Java (сводка наиболее полных вопросов для собеседования) nuggets.capable/post/684490…
3 Вопросы для собеседования по коллекции Java (сводка наиболее полных вопросов для собеседования) nuggets.capable/post/684490…
4 Вопросы для интервью JavaIO, BIO, NIO, AIO, Netty (резюме наиболее полных вопросов для интервью) nuggets.capable/post/684490…
5 Вопросы для собеседования по параллельному программированию на Java (сводка наиболее полных вопросов для собеседования) nuggets.capable/post/684490…
6 Вопросы для собеседования об исключении Java (сводка наиболее полных вопросов для собеседования) nuggets.capable/post/684490…
7 Вопросы для интервью с виртуальной машиной Java (JVM) (сводка наиболее полных вопросов для интервью) nuggets.capable/post/684490…
8 Весенние вопросы для интервью (резюме наиболее полных вопросов для интервью) nuggets.capable/post/684490…
9 Вопросы интервью Spring MVC (сводка наиболее полных вопросов интервью) nuggets.capable/post/684490…
10 Вопросы интервью Spring Boot (обобщите наиболее полные вопросы интервью) nuggets.capable/post/684490…
11 Вопросы интервью Spring Cloud (краткое изложение наиболее полных вопросов интервью) nuggets.capable/post/684490…
12 Вопросы интервью Redis (сводка наиболее полных вопросов интервью) nuggets.capable/post/684490…
13 Вопросы для интервью MyBatis (сводка наиболее полных вопросов для интервью) nuggets.capable/post/684490…
14 Вопросы для собеседования по MySQL (сводка наиболее полных вопросов для собеседования) nuggets.capable/post/684490…
15 TCP, UDP, Socket, HTTP вопросы для интервью (сводка наиболее полных вопросов для интервью) nuggets.capable/post/684490…
16 Вопросы для интервью с Nginx (сводка наиболее полных вопросов для интервью) nuggets.capable/post/684490…
17 ElasticSearch Вопросы на собеседовании
18 кафка вопросы интервью
19 Вопросы для интервью RabbitMQ (сводка наиболее полных вопросов для интервью) nuggets.capable/post/684490…
20 Вопросы для интервью Dubbo (краткое изложение наиболее полных вопросов для интервью) nuggets.capable/post/684490…
21 Вопросы интервью ZooKeeper (резюме наиболее полных вопросов интервью) nuggets.capable/post/684490…
22 Вопросы для интервью Netty (краткое изложение наиболее полных вопросов для интервью)
23 Вопросы для интервью с Tomcat (сводка наиболее полных вопросов для интервью) nuggets.capable/post/684490…
24 Вопросы для собеседования по Linux (сводка наиболее полных вопросов для собеседования) nuggets.capable/post/684490…
25 Вопросы для интервью, связанные с Интернетом (краткое изложение наиболее полных вопросов для интервью)
26 Вопросы для интервью по безопасности в Интернете (краткое изложение наиболее полных вопросов для интервью)

Базовые знания

Зачем использовать Дуббо?

  • С дальнейшим развитием сервис-ориентированных сервисов становится все больше и больше, а вызовы и зависимости между сервисами становятся все более и более сложными.Появилась сервисно-ориентированная архитектура (SOA), а также ряд соответствующих технологий. Например, инфраструктура службы, которая инкапсулирует поведение, такое как предоставление службы, вызов службы, обработка соединения, протокол связи, метод сериализации, обнаружение службы, маршрутизация службы и вывод журнала. Так появилась структура управления услугами для распределенных систем, и родился Dubbo.

Что такое Дуббо?

  • Dubbo — это высокопроизводительная, легкая RPC-инфраструктура с открытым исходным кодом, которая предоставляет эффективные решения для управления службами, такие как автоматическая регистрация и автоматическое обнаружение служб, и может быть легко интегрирована с инфраструктурой Spring.

Каковы сценарии использования Dubbo?

  • Прозрачный вызов удаленных методов: вызывайте удаленные методы так же, как вызовы локальных методов, с простой настройкой и без какого-либо вмешательства API.
  • Мягкая балансировка нагрузки и механизм отказоустойчивости: он может заменить аппаратные балансировщики нагрузки, такие как F5, в интрасети, снижая затраты и уменьшая количество отдельных точек.
  • Автоматическая регистрация и обнаружение услуг: больше не нужно жестко записывать адрес поставщика услуг.Центр регистрации запрашивает IP-адрес поставщика услуг на основе имени интерфейса и может легко добавлять или удалять поставщиков услуг.

Каковы основные функции Dubbo?

  • Удаленное взаимодействие: структура сетевого взаимодействия, обеспечивающая абстрактную инкапсуляцию различных инфраструктур NIO, включая методы обмена информацией в режимах «синхронный-асинхронный» и «запрос-ответ».
  • Кластер: сервисная структура, которая обеспечивает прозрачные удаленные вызовы процедур на основе методов интерфейса, включая поддержку нескольких протоколов, а также поддержку кластера, такую ​​как программная балансировка нагрузки, отказоустойчивость, маршрутизация адресов и динамическая конфигурация.
  • Реестр: регистрация службы, основанная на службе каталогов реестра, позволяет потребителям услуг динамически находить поставщиков услуг, делает адреса прозрачными и позволяет поставщикам услуг плавно увеличивать или уменьшать количество машин.

Каковы основные компоненты Dubbo?

在这里插入图片描述

  • Поставщик: поставщик услуг, предоставляющий услугу
  • Потребитель: позвоните потребителю удаленных услуг
  • Реестр: Реестр регистрации и обнаружения служб
  • Монитор: Центр мониторинга и доступ к статистике вызовов
  • Контейнер: служба запускает контейнер

Процесс регистрации и обнаружения сервера Dubbo?

  • Контейнер службы Контейнер отвечает за запуск, загрузку и работу поставщика службы.
  • Когда поставщик услуг запускается, он регистрирует свои собственные службы в реестре.
  • Когда потребитель служб Consumer запускается, он подписывается на необходимые ему службы в реестре.
  • Реестр центра регистрации возвращает список адресов поставщика услуг потребителю.Если есть изменение, центр регистрации передаст данные об изменении потребителю на основе постоянного соединения.
  • Потребитель услуг Потребитель из списка адресов провайдера выбирает провайдера для вызова на основе алгоритма мягкой балансировки нагрузки и, если вызов завершается неудачно, выбирает другого провайдера для вызова.
  • Потребитель услуги Потребитель и провайдер Провайдер накапливают в памяти количество звонков и время разговора, и регулярно ежеминутно отправляют статистические данные в центр мониторинга Монитор.

Архитектурный дизайн

Каковы уровни общей архитектуры Dubbo?

在这里插入图片描述

  • Уровень службы интерфейса (служба): этот уровень связан с бизнес-логикой, а соответствующий интерфейс и реализация разработаны в соответствии с бизнесом поставщика и потребителя.
  • Уровень конфигурации (Config): внешний интерфейс конфигурации, сосредоточенный на ServiceConfig и ReferenceConfig.
  • Service Proxy Layer (Proxy): Прозрачный прокси-сервер интерфейса службы, генерирующий заглушку клиента службы и каркас сервера, сосредоточенный на ServiceProxy, а интерфейс расширения — ProxyFactory.
  • Уровень регистрации службы (Реестр): инкапсулирует регистрацию и обнаружение адресов службы, сосредоточенных на URL-адресе службы, а расширенные интерфейсы: RegistryFactory, Registry, RegistryService.
  • Уровень маршрутизации (кластер): инкапсулирует маршрутизацию и балансировку нагрузки нескольких поставщиков, а также соединяет реестр с Invoker в качестве центра и расширенными интерфейсами: Cluster, Directory, Router и LoadBlancce.
  • Уровень мониторинга (монитор): время вызова RPC и мониторинг времени вызова, сосредоточенный на статистике, и расширенные интерфейсы: MonitorFactory, Monitor и MonitorService.
  • Уровень удаленного вызова (Protocal): инкапсулирует вызовы RPC, сосредоточенные на вызове и результате, и расширяет интерфейс до протокола, вызывающего и экспортирующего
  • Уровень обмена информацией (Exchange): инкапсулирует режим ответа на запрос, от синхронного до асинхронного. Расширенные интерфейсы, основанные на запросе и ответе, — это Exchanger, ExchangeChannel, ExchangeClient и ExchangeServer.
  • Сетевой транспортный уровень (транспорт): абстрактные мина и сеть как унифицированные интерфейсы, с сообщением в качестве центра и расширенными интерфейсами как канал, транспортер, клиент, сервер и кодек.
  • Уровень сериализации данных (Serialize): некоторые повторно используемые инструменты, расширенные интерфейсы: Serialization, ObjectInput, ObjectOutput и ThreadPool.

Как работает Даббо Монитор?

  • Сторона потребителя будет проходить через цепочку фильтров перед инициированием вызова; сторона провайдера также сначала пройдет через цепочку фильтров при получении запроса, а затем выполнит реальную обработку бизнес-логики. По умолчанию Monitorfilters есть как в цепочках фильтров потребителей, так и в цепочках фильтров поставщиков.
  1. MonitorFilter отправляет данные в DubboMonitor

  2. DubboMonitor собирает данные (статистика за 1 минуту по умолчанию) и временно сохраняет их в ConcurrentMapstatisticsMap, а затем использует пул потоков с 3 потоками (имя потока: DubboMonitorSendTimer) для вызова SimpleMonitorService для обхода каждую минуту. StatisticsMap и сбрасывать AtomicReference текущей статистики после каждой отправки.

  3. SimpleMonitorService помещает эти агрегированные данные в очередь BlockingQueue (очередь с заглавной буквы 100000).

  4. SimpleMonitorService использует фоновый поток (имя потока: DubboMonitorAsyncWriteLogThread) для записи данных из очереди в файл (поток записывает в бесконечный цикл).

  5. SimpleMonitorService также использует пул потоков с 1 потоком (имя потока: DubboMonitorTimer) для построения графика статистики в файле каждые 5 минут.

распределенная структура

Какие другие распределенные фреймворки похожи на Dubbo?

  • Самый известный — «Весеннее облако».

Каковы отношения между Dubbo и Spring Cloud?

  • Dubbo — это продукт эпохи SOA, и его основное внимание уделяется вызову сервисов, распределению трафика, мониторингу трафика и разрыву цепи. Spring Cloud родился в эпоху архитектуры микросервисов, учитывая все аспекты управления микросервисами. Кроме того, из-за преимуществ Spring и Spring Boot эти две платформы изначально преследуют разные цели. создать экологию.

В чем разница между Dubbo и Spring Cloud?

  • Нижний уровень Dubbo использует структуру NIO, такую ​​как Netty, которая передается на основе протокола TCP и завершает связь RPC с сериализацией Hession.

  • Spring Cloud основан на интерфейсе Rest протокола Http для вызова связи с удаленным процессом, Условно говоря, запросы Http будут иметь большие пакеты и занимать большую полосу пропускания. Однако REST более гибок, чем RPC. Зависимости между поставщиком услуг и вызывающей стороной зависят только от контракта, и на уровне кода нет сильной зависимости. Это больше подходит для среды микросервисов, в которой делается упор на быструю эволюцию. ориентация на скорость связи по-прежнему удобна и гибка, в зависимости от конкретной ситуации.

Разница между даббо и даббоксом?

  • Dubbox — это проект расширения, созданный Dangdang на основе Dubbo после того, как Dubbo прекратил техническое обслуживание, такое как добавление сервисов для вызовов Restful, обновление компонентов с открытым исходным кодом и т. д.

Регистрационный центр

Какие реестры есть у Dubbo?

  • Центр регистрации многоадресной рассылки: Центр регистрации многоадресной рассылки не нуждается в каком-либо центральном узле, если можно выполнять широковещательный адрес, регистрацию и обнаружение услуги, что реализуется на основе многоадресной передачи в сети.
  • Центр регистрации Zookeeper: на основе реализации распределенной системы координации Zookeeper механизм наблюдения Zookeeper используется для реализации изменений данных.
  • Реестр Redis: на основе реализации Redis, с использованием хранилища ключей/карт, имени и типа службы хранения ключей, URL-адреса службы хранения ключей в карте, времени истечения срока действия службы значений. Модель публикации/подписки на основе Redis для уведомления об изменениях данных.
  • Простой реестр.
  • В качестве реестра рекомендуется использовать Zookeeper.

Кластер реестра Dubbo не работает, могут ли издатель и подписчик по-прежнему обмениваться данными?

  • может общаться. При запуске Dubbo потребитель извлечет данные, такие как адрес интерфейса зарегистрированного производителя, из Zookeeper и кэширует их локально. Каждый раз, когда он вызывается, он вызывается в соответствии с локально сохраненным адресом.

кластер

Какие стратегии балансировки нагрузки предоставляет кластер Dubbo?

  • Random LoadBalance: случайным образом выбирает стратегию провайдера, что полезно для динамической настройки веса провайдера. Чем выше частота коллизий секций, тем больше вызовов, тем равномернее распределение.

  • RoundRobin LoadBalance: Стратегия провайдера выбирается циклически, равномерно распределяется, но есть проблема накопления запросов.

  • LeastActive LoadBalance: наименее активная стратегия вызова для решения проблем с медленными поставщиками, получающими меньше запросов.

  • ConstantHash LoadBalance: стратегия Consistent Hash, так что запросы с одинаковыми параметрами всегда отправляются одному и тому же провайдеру.Когда машина выходит из строя, ее можно выделить другим провайдерам на основе виртуальных узлов, избегая резких изменений в провайдерах.

默认为 Random 随机调用。

Какие решения Dubbo обеспечивают отказоустойчивость кластера?

  • Отказоустойчивый кластер: автоматическое переключение при сбое.При возникновении сбоя повторите попытку с другими серверами. Обычно используется для операций чтения, но повторные попытки вызывают более длительные задержки.
  • Failfast Cluster: Быстрый сбой, выполняется только один вызов, и сразу после сбоя сообщается об ошибке. Обычно используется для неидемпотентных операций записи, таких как добавление новых записей.
  • Failsafe Cluster: Failsafe, когда возникает исключение, игнорирует его напрямую. Обычно используется для таких операций, как запись в журнал аудита.
  • Отказоустойчивый кластер: автоматическое восстановление после сбоев, запись неудачных запросов в фоновом режиме и регулярная их повторная отправка. Обычно используется для операций уведомления о сообщениях.
  • Разветвляющийся кластер: параллельно вызывайте несколько серверов и возвращайтесь, пока один из них работает успешно. Обычно он используется для операций чтения с высокими требованиями к реальному времени, но требует большего расхода ресурсов службы. Максимальное количество параллелей может быть установлено forks=”2”.
  • Кластер вещания: вещание звонит всем провайдерам, звонит им по одному и сообщает об ошибке, если какой-либо из них сообщает об ошибке. Обычно используется для уведомления всех провайдеров о необходимости обновления информации о локальных ресурсах, такой как кэши или журналы.

默认的容错方案是 Failover Cluster。

настроить

Как файлы конфигурации Dubbo загружаются в Spring?

  • Когда контейнер Spring запускается, он считывает некоторые схемы Spring по умолчанию и пользовательские схемы Dubbo. Каждая схема будет соответствовать своему собственному обработчику пространства имен. Обработчик пространства имен анализирует информацию о конфигурации с помощью BeanDefinitionParser и преобразует ее в объект bean-компонента, который необходимо загрузить!

Каковы основные конфигурации?

Этикетка использовать объяснять
<dubbo:service/> Конфигурация службы Используется для предоставления службы, определения метаинформации службы, служба может быть представлена ​​с использованием нескольких протоколов, а служба также может быть зарегистрирована в нескольких реестрах.
<dubbo:reference/> Эталонная конфигурация Используется для создания прокси-сервера удаленной службы, ссылка может указывать на несколько реестров.
<dubbo:protocol/> Конфигурация протокола Он используется для настройки информации о протоколе для предоставления услуг.Протокол указывается поставщиком и пассивно принимается потребителем.
<dubbo:application/> Конфигурация приложения Используется для настройки текущей информации о приложении, независимо от того, является ли приложение поставщиком или потребителем.
<dubbo:module/> Конфигурация модуля Используется для настройки информации о текущем модуле, опционально
<dubbo:registry/> Конфигурация реестра Используется для настройки информации о реестре соединений
<dubbo:monitor/> Конфигурация центра мониторинга Используется для настройки информации, связанной с подключением к центру мониторинга, опционально
<dubbo:provider/> конфигурация провайдера Если свойство ProtocolConfig и ServiceConfig не настроено, используйте это значение по умолчанию, необязательное
<dubbo:consumer/> Конфигурация потребителя Если свойство ReferenceConfig не настроено, используется это значение по умолчанию, необязательное
<dubbo:method/> конфигурация метода Используется для ServiceConfig и ReferenceConfig для указания информации о конфигурации на уровне метода.
<dubbo:argument> конфигурация параметров Используется для указания конфигурации параметров метода

如果是SpringBoot项目就只需要注解,或者开Application配置文件!!!

Каковы методы настройки времени ожидания Dubbo?

Есть два способа установить время ожидания Dubbo:

  • Провайдер услуг устанавливает период тайм-аута.В пользовательской документации Dubbo рекомендуется настроить как можно больше конфигураций на стороне сервера, потому что поставщики услуг лучше потребителей знают о характеристиках предоставляемых ими услуг.
  • Время ожидания устанавливается на стороне потребителя услуги, если время ожидания установлено на стороне потребителя, то сторона потребителя является основной, то есть имеет более высокий приоритет. Поскольку вызывающая служба устанавливает контроль времени тайм-аута, он является более гибким. Если потребитель истечет, поток сервера не будет настроен, и будет сгенерировано предупреждение.

Что происходит, когда истекает время вызова службы поддержки?

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

письмо-соглашение

Какую коммуникационную структуру использует Dubbo?

  • Netty используется по умолчанию в качестве коммуникационной среды.

Какие протоколы поддерживает Dubbo и каковы их преимущества и недостатки?

  • Dubbo: одно длинное соединение и асинхронная связь NIO, подходящие для вызовов службы с большим параллелизмом и небольшим объемом данных, а потребители намного крупнее поставщиков. Транспортный протокол TCP, асинхронная сериализация по Гессе. Dubbo рекомендует использовать протокол dubbo.

  • RMI: он реализован с использованием стандартного протокола RMI JDK.Параметры передачи и объекты возвращаемых параметров должны реализовывать интерфейс Serializable, используя стандартный механизм сериализации Java, используя блокировку коротких соединений, смешанные размеры пакетов передачи и количество потребителей и поставщиков. Аналогично Передача файлов, протокол передачи TCP. Множественная передача по протоколу TCP с коротким соединением, синхронная передача, подходящая для регулярных удаленных сервисных вызовов и взаимодействия RMI. Существует уязвимость в сериализации Java при использовании более ранней версии пакета Common-Collections.

  • WebService: протокол удаленного вызова на основе WebService, интегрированный с реализацией CXF, обеспечивающий взаимодействие с собственным WebService. Множественные короткие соединения, основанные на передаче HTTP, синхронной передаче, подходящей для системной интеграции и межъязыковых вызовов.

  • HTTP: протокол удаленного вызова, основанный на отправке формы Http, реализованный с использованием Spring HttpInvoke. Несколько коротких соединений, протокол передачи HTTP, смешанные размеры входящих параметров, больше поставщиков, чем потребителей, которые должны вызываться приложением и браузером JS.

  • Hessian: интегрируйте службы Hessian, взаимодействуйте на основе HTTP и используйте Servlet для предоставления служб.Dubbo реализуется по умолчанию, когда Jetty встраивается в качестве сервера, обеспечивая взаимодействие со службами Hession. Несколько коротких соединений, синхронная передача HTTP, сериализация по Гессе, большие входящие параметры, более крупные поставщики, чем потребители, высокая нагрузка на поставщиков и передача файлов.

  • Memcache: протокол RPC, реализованный на основе Memcache.

  • Redis: протокол RPC, основанный на реализации Redis.

Шаблоны проектирования

Какие шаблоны проектирования использует Dubbo?

Dubbo 框架在初始化和通信过程中使用了多种设计模式,可灵活控制类加载、权限控制等功能。

  • заводской узор

    Когда Provider экспортирует сервис, он вызывает метод экспорта ServiceConfig. В ServiceConfig есть поле:

private static final Protocol protocol =
ExtensionLoader.getExtensionLoader(Protocol.class).getAdaptiveExtensi
on();
  • заводской узор

    Когда Provider экспортирует сервис, он вызывает метод экспорта ServiceConfig. В ServiceConfig есть поле:

private static final Protocol protocol =
ExtensionLoader.getExtensionLoader(Protocol.class).getAdaptiveExtensi
on();

В Dubbo много этого кода. Это тоже фабричный режим, но для получения класса реализации используется механизм JDKSPI. Преимущество этой реализации в том, что она имеет сильную масштабируемость.Если вы хотите расширить реализацию, вам нужно всего лишь добавить файл в пути к классам, и код не будет мешать. Кроме того, как и в приведенной выше адаптивной реализации, можно динамически решать, какую реализацию вызывать при вызове, но поскольку в этой реализации используется динамический прокси, это сделает отладку кода более проблематичной, и необходимо проанализировать класс реализации, который на самом деле звонил.

  • Шаблон декоратора

    Dubbo широко использует шаблон декоратора как на этапе запуска, так и на этапе вызова. Взяв в качестве примера цепочку вызовов, предоставленную провайдером, конкретный код цепочки вызовов завершается в buildInvokerChain объекта ProtocolFilterWrapper. является:

EchoFilter -> ClassLoaderFilter -> GenericFilter -> ContextFilter ->
ExecuteLimitFilter -> TraceFilter -> TimeoutFilter -> MonitorFilter ->
ExceptionFilter

Скорее, это смесь декораторов и паттернов цепочки ответственности. Например, роль EchoFilter состоит в том, чтобы определить, является ли запрос эхо-тестом, и, если да, напрямую вернуть содержимое, что является проявлением цепочки ответственности. Как и ClassLoaderFilter, он просто добавляет функцию к основной функции и изменяет ClassLoader текущего потока, что является типичным шаблоном декоратора.

  • Шаблон наблюдателя

    Когда Dubbo's Provider запускается, ему необходимо взаимодействовать с центром регистрации, сначала зарегистрировать свой собственный сервис, а затем подписаться на свой собственный сервис.При подписке он принимает режим наблюдателя, чтобы открыть слушателя. Реестр будет регулярно проверять, есть ли обновление службы каждые 5 секунд.Если есть обновление, он отправит уведомление поставщику службы.После того, как поставщик получит уведомление, он запускает метод уведомления NotifyListener для выполнить метод слушателя.

  • Режим динамического прокси

    Адаптивная реализация класса ExtensionLoader, которую Dubbo расширяет JDK SPI, является типичной реализацией динамического прокси. Dubbo необходимо гибко управлять классом реализации, то есть он динамически решает, какой класс реализации вызывать в соответствии с параметрами во время фазы вызова, поэтому метод генерации прокси-класса в первую очередь можно использовать гибко. Код для создания прокси-класса — это метод createAdaptiveExtensionClassCode объекта ExtensionLoader. Основная логика прокси-класса заключается в получении значения указанного параметра в параметре URL в качестве ключа для получения класса реализации.

Управление эксплуатацией и техническим обслуживанием

Насколько сервис совместим со старой версией?

  • Для перехода можно использовать номер версии (версия).В реестре регистрируется несколько сервисов разных версий, и сервисы с разными номерами версий не ссылаются друг на друга. Это чем-то похоже на концепцию группировки услуг.

Что может сделать команда telnet Dubbo?

  • После выпуска службы dubbo мы можем использовать команду telnet для отладки и управления. Службы Dubbo 2.0.5 и выше обеспечивают поддержку портов для команд telnet.

Поддерживает ли Dubbo переход на более раннюю версию?

  • установить mock="return null" в dubbo:reference. Значение mock также можно изменить на true, а затем реализовать класс Mock по тому же пути, что и интерфейс.Правило именования — суффикс «имя интерфейса + Mock». Затем реализуйте собственную логику понижения версии в классе Mock.

Как Dubbo изящно останавливается?

  • Dubbo завершает корректное завершение работы с помощью ShutdownHook JDK, поэтому, если используется команда принудительного завершения работы, такая как kill -9 PID, корректное завершение работы не будет выполнено и будет выполнено только при передаче PID уничтожения.

SPI

В чем разница между Dubbo SPI и Java SPI?

  • JDK-SPI:

    Стандартный SPI JDK загрузит все реализации расширений одновременно.Если некоторые расширения занимают много времени, они бесполезны и тратят ресурсы впустую. Поэтому нереально надеяться только на загрузку определенной реализации.

  • ДУББО СПИ:

    1. Расширить Dubbo без изменения исходного кода Dubbo

    2. Ленивая загрузка, вы можете загрузить только ту реализацию расширения, которую хотите загрузить за раз.

    3. Добавлена ​​поддержка точек расширения IOC и AOP.Точка расширения может напрямую внедрять сеттеры в другие точки расширения.

    4. Механизм расширения Dubbo может поддерживать сторонние IoC-контейнеры и по умолчанию поддерживает Spring Bean.

разное

Поддерживает ли Dubbo распределенные транзакции?

  • В настоящее время не поддерживается, может быть реализовано с помощью tcc-transaction framework

  • Введение: tcc-transaction — компенсационная распределенная платформа транзакций TCC с открытым исходным кодом.

  • TCC-Transaction избегает собственного вторжения в бизнес-код благодаря неявной функции передачи параметров Dubbo.

Может ли Dubbo кэшировать результаты?

  • Для повышения скорости доступа к данным. Dubbo обеспечивает декларативное кэширование, чтобы уменьшить нагрузку на пользователей, добавляющих кэширование
  • На самом деле метки cache="true" на одну больше, чем в обычном конфигурационном файле

От каких пакетов должен зависеть Dubbo?

  • Dubbo должен зависеть от JDK, остальные не являются обязательными.

Какие методы сериализации поддерживает Dubbo?

  • По умолчанию используется сериализация Гессе, а также собственная сериализация Duddo, FastJson и Java.

Какие меры безопасности принимает Dubbo?

  • Dubbo не позволяет пользователям в обход реестра подключаться напрямую через токен Token, а затем управляет авторизацией в реестре.
  • Dubbo также предоставляет услуги черного и белого списка для контроля вызывающих абонентов, разрешенных службой.

Блокируются ли сервисные вызовы?

  • По умолчанию это блокировка, ее можно вызывать асинхронно, и для этого нет возвращаемого значения. Dubbo — это неблокирующая реализация параллельных вызовов на основе NIO. Клиент может вызывать несколько удаленных служб параллельно, не запуская многопоточность. По сравнению с многопоточностью накладные расходы невелики. Асинхронный вызов вернет объект Future.

Как сервис-провайдеры могут внедрить отказоустойчивость?

  • Сбой службы выводит из строя принцип временного узла, основанный на zookeeper.

Могу ли я напрямую подключиться к службе, если используется несколько регистраций для одной и той же службы?

  • Вы можете напрямую подключиться «точка-точка», изменить конфигурацию или напрямую получить доступ к службе через telnet.

Служба Dubbo устарела, что мне делать, если я не смогу повторить попытку?

  • Вы можете установить mock="return null" в dubbo:reference. Значение mock также можно изменить на true, а затем реализовать класс Mock по тому же пути, что и интерфейс.Правило именования — суффикс «имя интерфейса + Mock». Затем реализуйте собственную логику понижения версии в классе Mock.

С какими проблемами вы столкнулись при использовании Dubbo?

  • Соответствующая служба не может быть найдена в реестре, проверьте, добавил ли класс реализации службы аннотацию @service и не может подключиться к реестру, и проверьте правильность соответствующего тестового ip в файле конфигурации

RPC

Зачем нужен RPC

  • Интерфейс http — это метод связи, который часто используется на начальном этапе решения информационных островов, когда не так много интерфейсов и меньше межсистемных взаимодействий; его преимущества заключаются в простоте, непосредственности и простоте разработки. Используйте готовый протокол http для передачи. Однако, если это большой сайт со множеством внутренних подсистем и множеством интерфейсов, то преимущества RPC-фреймворка будут раскрыты: первое — это длинная ссылка, и нет необходимости каждый раз переходить на 3-стороннее рукопожатие типа http. связи., уменьшая нагрузку на сеть; во-вторых, структура RPC обычно имеет реестр с широкими возможностями мониторинга и управления; публикация, автономные интерфейсы, динамическое расширение и т. д. являются неосведомленными и унифицированными операциями для вызывающей стороны. Третье — безопасность. Последним является популярная в последнее время сервис-ориентированная архитектура и сервис-ориентированное управление.

  • Сокет — это просто способ сетевого взаимодействия.Он просто создает канал связи для обеих сторон.Чтобы реализовать функцию RPC, его необходимо инкапсулировать, чтобы реализовать больше функций.

  • RPC обычно сотрудничает с netty framework и spring пользовательскими аннотациями для написания облегченных фреймворков. Фактически, netty инкапсулирует сокеты. IO более нового jdk обычно является NIO, то есть неблокирующим вводом-выводом. На веб-сайтах с высокой степенью параллелизма преимущества RPC будут быть очевидным

что такое РПЦ

  • RPC (протокол удаленного вызова процедур) — это протокол для запроса услуг от удаленной компьютерной программы через сеть без знания базовой сетевой технологии. Короче говоря, RPC позволяет программам получать доступ к удаленным системным ресурсам точно так же, как они обращаются к локальным системным ресурсам. Некоторые из наиболее важных аспектов включают в себя: протокол связи, сериализацию, описание ресурса (интерфейса), структуру службы, производительность, языковую поддержку и т. д.

在这里插入图片描述

  • Проще говоря, RPC — это вызов функции или метода (которые в совокупности можно назвать службой) на другой машине (сервере) путем передачи параметров с одной машины (клиента) и получения возвращаемого результата.

Компоненты архитектуры КНР

  • Базовая архитектура RPC должна содержать как минимум следующие четыре компонента:

    1. Клиент (клиент): вызывающая служба (потребитель услуги)

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

    3. Серверная заглушка: получите сообщение запроса, отправленное клиентом, и распакуйте его, а затем вызовите локальную службу для обработки. 4. Сервер: реальный поставщик службы.

在这里插入图片描述

  • Конкретный процесс вызова:

    1. Потребитель службы (клиент-клиент) вызывает службу, которую необходимо использовать, вызывая локальную службу;

    2. После получения запроса на вызов клиентская заглушка отвечает за сериализацию (сборку) информации, такой как методы и входные параметры, в тело сообщения, которое может быть передано по сети;

    3. Клиентская заглушка находит адрес удаленного сервиса и отправляет сообщение на сервер по сети;

    4. Серверная заглушка декодирует сообщение (операция десериализации) после получения сообщения;

    5. Серверная заглушка вызывает локальную службу для соответствующей обработки в соответствии с результатом декодирования;

    6. Локальный сервис выполняет определенную бизнес-логику и возвращает результат обработки на сервер-заглушку;

    7. Сервер-заглушка переупаковывает возвращенный результат в сообщение (сериализация) и отправляет его потребителю по сети;

    8. Клиентская заглушка получает сообщение и декодирует (десериализует);

    9. Потребитель услуги получает конечный результат;

而RPC框架的实现目标则是将上面的第2-10步完好地封装起来,也就是把调用、编码/解码的过程给封装起来,让用户感觉上像调用本地服务一样的调用远程服务。

Разница между RPC и SOA, SOAP, REST

  • 1. ОТДЫХ

    Его можно рассматривать как прямое применение протокола HTTP.Он основан на JSON в качестве формата передачи по умолчанию.Он прост в использовании, имеет низкую стоимость обучения и высокую эффективность, но имеет низкий уровень безопасности.

  • 2. МЫЛО

    SOAP — это спецификация протокола обмена данными, которая представляет собой упрощенную и простую спецификацию протокола на основе XML. SOAP можно рассматривать как тяжеловесный протокол. Основанный на XML и SOAP, с точки зрения безопасности, WS-Security формируется с использованием XML-Security и XML-Signature для реализации контроля безопасности. В настоящее время он одобрен различными производителями. .

    Какие у него есть преимущества? Простое резюме: простой в использовании, гибкий, кросс-язычный, кросс-платформенный.

  • 3. СОА

    Сервис-ориентированная архитектура позволяет развертывать, комбинировать и использовать слабосвязанные крупномодульные компоненты приложений распределенным образом по сети в соответствии с требованиями. Сервисный уровень является основой SOA и может напрямую вызываться приложениями, тем самым эффективно контролируя искусственные зависимости взаимодействия с программными агентами в системе.

    SOA представляет собой крупнозернистую слабосвязанную сервисную архитектуру.Сервисы взаимодействуют через простые и точно определенные интерфейсы, не задействуя лежащие в их основе программные интерфейсы и коммуникационные модели. SOA можно рассматривать как естественное расширение модели B/S, XML (подмножество стандартного общего языка разметки)/технологии веб-сервисов.

  • 4. В чем разница между REST, SOAP и RPC?

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

Проблемы, которые должна решить структура RPC?

  • 1. Как определить протокол связи между клиентом и сервером?
  • 2. Как эффективнее вести сетевое общение?
  • 3. Как сервисы, предоставляемые сервером, доступны клиенту?
  • 4. Как клиент обнаруживает эти незащищенные службы?
  • 5. Как более эффективно сериализовать и десериализовать объекты запросов и результаты ответов?

Основа реализации RPC?

  • 1. Требуется очень эффективная сетевая связь, например, Netty обычно выбирается в качестве сетевой среды связи;
  • 2. Требуется более эффективная структура сериализации, такая как платформа сериализации Google Protobuf;
  • 3. Надежный режим адресации (в основном обеспечивающий обнаружение сервисов), например, Zookeeper можно использовать для регистрации сервисов и т.п.;
  • 4. Если это вызов RPC с сеансом (состоянием), то также требуется функция сохранения сеанса и состояния;

Какие ключевые технологии использует RPC?

  • 1. Динамический прокси

    При создании клиентской заглушки (клиентской заглушки) и серверной заглушки (серверной заглушки) вам необходимо использовать технологию динамического прокси Java.Вы можете использовать собственный механизм динамического прокси, предоставляемый JDK, или вы можете использовать открытый исходный код: прокси-сервер CGLib, генератор байт-кода Javassist технологии.

  • 2. Сериализация и десериализация

    В сети все данные будут преобразованы в байты для передачи, поэтому для обеспечения возможности передачи объектов параметров в сети эти параметры необходимо сериализовать и десериализовать.

    • Сериализация: Процесс преобразования объекта в последовательность байтов называется сериализацией объекта, то есть процессом кодирования. Десериализация: процесс восстановления последовательности байтов в объект называется десериализацией объекта, то есть процессом декодирования. В настоящее время более эффективные платформы сериализации с открытым исходным кодом: такие как Kryo, FastJson и Protobuf.
    • Десериализация: процесс восстановления последовательности байтов в объект называется десериализацией объекта, то есть процессом декодирования. В настоящее время более эффективные платформы сериализации с открытым исходным кодом: такие как Kryo, FastJson и Protobuf.
  • 3. Связь NIO

    Для рассмотрения параллельной производительности традиционный блокирующий IO явно не подходит, поэтому нам нужен асинхронный IO, а именно NIO. Java предоставляет решение NIO, а Java 7 также обеспечивает улучшенную поддержку NIO.2. Вы можете выбрать Netty или MINA для решения проблемы передачи данных NIO.

  • 4. Центр регистрации услуг

    Дополнительно: Redis, Zookeeper, Consul и т. д. Как правило, ZooKeeper используется для предоставления функций регистрации и обнаружения сервисов, а также для решения проблемы единой точки отказа и распределенного развертывания (центр реестра).

Каковы основные фреймворки RPC

  • 1. РМИ

    Использование пакета java.rmi для реализации на основе протокола удаленного метода Java (протокол удаленного метода Java) и собственной сериализации Java.

  • 2. Гессен

    Это легкий инструмент удаленного взаимодействия по http, который простым способом обеспечивает функциональность RMI. На основе протокола HTTP используется двоичный кодек.

  • 3. protobuf-rpc-pro

    Библиотека классов Java, предоставляющая платформу для удаленного вызова методов на основе протокола Google Protocol Buffers. На основе базовой технологии NIO Netty. Поддерживает повторное использование/поддержание активности TCP, шифрование SSL, операции отмены вызова RPC, встроенное ведение журнала и многое другое.

  • 4. Бережливость

    Это программная среда для масштабируемых межъязыковых сервисов. Он имеет мощный механизм генерации кода, который без проблем поддерживает C++, C#, Java, Python, PHP и Ruby. thrift позволяет определить файл описания, описывающий типы данных и сервисные интерфейсы. Из этого файла компилятор легко генерирует код связи между RPC-клиентом и сервером.

    Первоначально разработанный facebook для RPC-коммуникации между языками в системе, он был внесен в фонд apache facebook в 2007 году и теперь является одним из открытых исходных кодов под apache. Поддержка связи RPC между несколькими языками: клиент языка php может создавать объект, вызывать соответствующий метод службы для вызова языковой службы Java и выполнять вызовы C/S RPC на разных языках. Базовая связь основана на SOCKET.

  • 5. Авро

    По словам Дуга Каттинга, отца Hadoop, цель запуска Avro, когда Thrift уже довольно популярен, состоит не только в том, чтобы предоставить набор коммуникационного промежуточного программного обеспечения, аналогичного Thrift, но и в создании нового стандарта обмена данными и хранения данных в облачных вычислениях. . Поддержка двух протоколов HTTP, TCP.

  • 6. Даббо

    Dubbo — это высокопроизводительная и превосходная сервисная инфраструктура с открытым исходным кодом от Alibaba, которая позволяет приложениям реализовывать функции вывода и ввода служб с помощью высокопроизводительного RPC и может быть легко интегрирована с инфраструктурой Spring.

Схема принципиальной архитектуры реализации RPC

在这里插入图片描述

Другими словами, два сервера A и B, одно приложение развернуто на сервере A. Если вы хотите вызвать функцию/метод, предоставленный приложением на сервере B, поскольку он не находится в одном и том же пространстве памяти, его нельзя вызвать. напрямую. Он должен выражать семантику и функции вызова через сеть. Передает данные для вызова.

Например, сервер A хочет вызвать метод на сервере B:

  • 1. Установите связь

    Прежде всего, должна быть решена проблема связи: то есть, если машина А хочет позвонить машине В, она должна сначала установить коммуникационное соединение.

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

    Обычно это соединение может быть соединением по требованию (соединение устанавливается первым, когда его нужно вызвать, и сразу же разрывается после завершения звонка), или оно может быть долгосрочным соединением (клиент и сервер устанавливает соединение и поддерживает его в течение длительного времени, независимо от того, есть ли соединение в это время. Пакеты данных не отправляются, и механизм обнаружения сердцебиения может использоваться для регулярного определения того, является ли установленное соединение активным и действительным), и несколько удаленных вызовов процедур используют одно и то же соединение.

  • 2. Сервисная адресация

    Чтобы решить проблему адресации, то есть как приложение на сервере A сообщает базовой структуре RPC, как подключиться к серверу B (например, хосту или IP-адресу) и конкретному порту, каково имя метод.

    Обычно нам нужно указать машину B (имя хоста или IP-адрес) и конкретный порт, а затем указать имя вызываемого метода или функции, а также такую ​​информацию, как входные и выходные параметры, чтобы служба вызов можно завершить.

    Надежный режим адресации (главным образом обеспечивающий обнаружение сервисов) является краеугольным камнем реализации RPC, например, Redis или Zookeeper можно использовать для регистрации сервисов и т.д.

    • 2.1. С точки зрения поставщиков услуг:

      Когда поставщик услуг начинает работу, ему необходимо зарегистрировать предоставляемую им услугу в назначенном центре регистрации, чтобы потребитель услуги мог осуществлять поиск в центре регистрации услуг;

      Когда поставщик услуг останавливает услугу по разным причинам, ему необходимо отменить остановленную услугу в центре регистрации;

      Поставщику услуг необходимо периодически отправлять данные об обнаружении пульса в реестр служб. Если реестр служб не получает пульс от поставщика услуг в течение определенного периода времени, он считает, что поставщик услуг остановил службу и удаляет службу из реестра. .

    • 2.2. С точки зрения вызывающего абонента:

      Когда вызывающая сторона услуги начинает работу, она ищет в центре регистрации услуг такую ​​информацию, как адрес поставщика услуг в соответствии с услугой, на которую он подписан;

      Когда услуга, используемая вызывающим сервисом, переходит в режим онлайн или офлайн, реестр уведомляет вызывающего абонента об услуге;

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

  • 3. Передача по сети

    • 3.1 Сериализация

      Когда приложение на машине А инициирует вызов RPC, вызывающий метод и его входные параметры должны быть переданы на машину Б через базовый сетевой протокол, такой как TCP.Поскольку сетевой протокол основан на двоичном коде, все передаваемые данные параметров должны быть первым Сериализация или маршалирование в двоичную форму для передачи по сети. Затем сериализованные или упорядоченные двоичные данные отправляются на машину B посредством операций адресации и передачи по сети.

    • 3.2, десериализация

      Когда машина Б получает запрос от приложения машины А, ей нужно десериализовать полученные параметры и другую информацию (операция, обратная сериализации), то есть восстановить бинарную информацию в выражение в памяти, а затем найти соответствующий метод (часть адресации) и сделать локальный вызов (обычно путем создания прокси-сервера для вызова, Обычно есть динамические агенты JDK, динамические агенты CGLIB, технология генерации байт-кода Javassist и т. д.), а затем получают возвращаемое значение вызова.

  • 4. Сервисный вызов

    После того, как машина B делает локальный вызов (через прокси-сервер и вызов отражения), получается возвращаемое значение.В это время возвращаемое значение необходимо отправить обратно на машину A. Его также необходимо сериализовать, а затем двоичные данные отправляется обратно через сетевую передачу.Машина А, и когда машина А получает эти возвращаемые значения, она снова десериализует, восстанавливает его в выражение в памяти и, наконец, передает его приложению на машине А для соответствующей обработки (обычно бизнес-логика операции обработки).

通常,经过以上四个步骤之后,一次完整的RPC调用算是完成了,另外可能因为网络抖动等原因需要重试等。