Заполните пробелы: пройдите интервью SpringCloud в 2020 году (включая ответы и интеллект-карты)

Java

предисловие

Spring Cloud — это упорядоченный набор из серии фреймворков. Он использует удобство разработки Spring Boot для тонкого упрощения разработки инфраструктуры распределенной системы, такой как регистрация обнаружения служб, центр конфигурации, шина сообщений, балансировка нагрузки, автоматический выключатель, мониторинг данных и т. д., все из которых можно сделать в Стиль разработки Spring Boot для запуска и развертывания одним щелчком мыши. Spring Cloud не повторяет производство колес, а просто сочетает в себе зрелые и практичные сервисные фреймворки, разработанные различными компаниями, и реинкапсулирует сложные принципы настройки и реализации в стиле Spring Boot.Автор оставил набор инструментов для разработки распределенных систем. которые легко понять, легко развернуть и легко поддерживать.

Spring Cloud имеет следующие особенности:

  • Соглашение о конфигурации;
  • Подходит для различных сред. Разработка и развертывание ПК-сервера или различных облачных сред (таких как Alibaba Cloud, AWS и т. д.);
  • Скрывает сложность компонентов и предоставляет декларативный метод настройки без XML;
  • Из коробки, быстрый старт;
  • Легкие компоненты. Большинство компонентов, интегрированных в Spring Cloud, относительно легкие. Например, Eureka, Zuul и т. д. являются облегченными реализациями в соответствующих областях;
  • Богатые компоненты и полные функции. Spring Cloud обеспечивает очень полную поддержку микросервисной архитектуры. Например, управление конфигурацией, обнаружение сервисов, автоматические выключатели, шлюзы микросервисов и т. д.;
  • Выбор нейтральный и богатый. Например, Spring Cloud поддерживает обнаружение сервисов с помощью Eureka, Zookeeper или Consul;
  • гибкий. Компоненты Spring Cloud разделены, и разработчики могут гибко выбирать технологические параметры по мере необходимости.

Знания об архитектуре микросервисов Spring Cloud обобщают ментальную карту, которой можно поделиться с вами.

Вопросы интервью Spring Cloud

1. Что такое Spring Cloud?
2. Каковы преимущества использования Spring Cloud?
3. Что означает регистрация и обнаружение службы? Как реализовано Spring Cloud?
4. В чем разница между Spring Cloud и dubbo?
5. В чем разница между SpringBoot и SpringCloud?
6. В чем смысл балансировки нагрузки?
7. Что такое Хайстрикс? Как достигается отказоустойчивость?
8. Что такое автоматический выключатель Hystrix? оно нам нужно?
9. Что такое Netflix Feign? Каковы его преимущества?
10. Что такое Spring Cloud Bus? оно нам нужно?
11. Роль автоматических выключателей Spring Cloud
12. Что такое Spring CloudConfig?
13. Весенний облачный шлюз?

1. Что такое Spring Cloud?

Стартер приложения потоковой передачи в облаке Spring — это приложение интеграции Spring на основе Spring Boot, которое обеспечивает интеграцию с внешними системами. Spring cloud Task — недолговечная среда микросервисов для быстрого создания приложений, выполняющих ограниченную обработку данных.

2. Каковы преимущества использования Spring Cloud?

При разработке распределенных микросервисов с помощью Spring Boot мы сталкиваемся со следующими проблемами.
(1) Сложность, связанная с распределенными системами — эти накладные расходы включают проблемы с сетью, задержки, проблемы с пропускной способностью, проблемы с безопасностью.
(2) Обнаружение служб. Инструменты обнаружения служб управляют тем, как процессы и службы в кластере находят и взаимодействуют друг с другом. Он включает каталог служб, в котором службы зарегистрированы, а затем могут находить службы в этом каталоге и подключаться к ним.
(3) Избыточность — проблемы избыточности в распределенных системах.
(4) Балансировка нагрузки. Балансировка нагрузки улучшает распределение рабочих нагрузок между несколькими вычислительными ресурсами, такими как компьютеры, компьютерные кластеры, сетевые каналы, центральные процессоры или диски.
(5) Проблемы с производительностью Проблемы с производительностью из-за различных операционных накладных расходов.
(6) Сложность развертывания — требования к навыкам DevOps.

3. Что означает регистрация и обнаружение службы? Как реализовано Spring Cloud?

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

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

(1) Метод вызова службы dubbo — это RPC springcloud Rest Api.
(2) Реестр, даббо — это смотритель зоопарка, весеннее облако — это эврика или смотритель зоопарка.
(3) Сервисный шлюз, сам dubbo не реализован и может быть интегрирован только с помощью других сторонних технологий. Springcloud имеет шлюз маршрутизации Zuul, который действует как сервер маршрутизации для распределения запросов потребителей. Springcloud поддерживает автоматические выключатели и отлично интегрируется с git Файл конфигурации поддерживает версию Ряд элементов микросервисной архитектуры, таких как управление, обновление файла конфигурации реализации шины транзакций и автоматическая сборка сервиса.

5. В чем разница между SpringBoot и SpringCloud?

SpringBoot фокусируется на быстрой и простой разработке отдельного микросервиса.
SpringCloud — это глобальная структура координации и управления микросервисами, которая объединяет и управляет отдельными микросервисами, разработанными SpringBoot.
Предоставлять услуги интеграции между различными микросервисами, такими как управление конфигурацией, обнаружение сервисов, автоматический выключатель, маршрутизация, микроагент, шина событий, глобальная блокировка, кампания по принятию решений, распределенный сеанс и т. д.
SpringBoot может использовать проекты разработки независимо от SpringCloud, но SpringCloud неотделим от SpringBoot, который относится к отношениям зависимости.
SpringBoot фокусируется на быстрой и удобной разработке отдельного микросервиса, а SpringCloud фокусируется на глобальной структуре управления сервисами.

6. В чем смысл балансировки нагрузки?

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

7. Что такое Хайстрикс? Как достигается отказоустойчивость?

Hystrix — это отказоустойчивая и отказоустойчивая библиотека, предназначенная для изоляции точек доступа к удаленным системам, службам и сторонним библиотекам, прекращения каскадных сбоев, когда сбои неизбежны, и обеспечения отказоустойчивости в сложных распределенных системах.
Как правило, для систем, разработанных с использованием архитектуры микросервисов, вовлечены многие микросервисы. Эти микросервисы сотрудничают друг с другом.
Рассмотрим следующие микросервисы
Предположим, что если микросервис 9 на приведенной выше диаграмме выйдет из строя, то, используя традиционный подход, мы будем распространять исключение. Но это все равно крашит всю систему.
Эта проблема усложняется по мере увеличения количества микросервисов. Количество микросервисов может достигать 1000. Здесь на помощь приходит hystrix. В этом случае мы будем использовать функцию резервного метода Hystrix. У нас есть два сервиса employee-consumer, использующие сервис, предоставленный employee-consumer.
Упрощенная схема показана ниже
Теперь предположим, что по какой-то причине служба, представленная сотрудником-производителем, выдает исключение. В этом случае мы определяем резервный метод, используя Hystrix. Этот резервный метод должен иметь тот же тип возвращаемого значения, что и открытая служба. Если в предоставленной службе есть исключение, резервный метод вернет некоторое значение.

8. Что такое автоматический выключатель Hystrix? оно нам нужно?

По какой-то причине сотрудник-потребитель, предоставляющий услугу, выдает исключение. Используя Hystrix в этом случае, мы определяем резервный метод. Резервный метод возвращает некоторое значение по умолчанию, если в предоставленной службе возникает исключение.
Если исключение в методе firstPage() продолжает возникать, схема Hystrix разорвется, и потребитель-служащий пропустит метод firstPage целиком и вызовет резервный метод напрямую. Назначение прерывателя цепи — дать время методу первой страницы или другим методам, которые может вызвать метод первой страницы, и вызвать восстановление исключения. Что может случиться, так это то, что проблема, вызвавшая исключение, имеет больше шансов на восстановление при меньшей нагрузке.

9. Что такое Netflix Feign? Каковы его преимущества?

Feign — это связыватель на стороне клиента Java, вдохновленный Retrofit, JAXRS-2.0 и WebSocket.
Первая цель Feign — унифицировать сложность знаменателя ограничений для http API, независимо от их стабильности.
В примере «сотрудник-потребитель» мы использовали службу REST, предоставленную сотрудником-производителем с использованием шаблона REST.
Но нам нужно написать много кода, чтобы выполнить следующие шаги.
(1) Используйте ленту для балансировки нагрузки.
(2) Получите экземпляр службы, а затем получите базовый URL-адрес.
(3) Используйте шаблон REST для использования службы. Предыдущий код выглядит следующим образом
@Controller
public class ConsumerControllerClient {
    @Autowired
    private LoadBalancerClient loadBalancer;
    public void getEmployee() throws RestClientException, IOException {
        ServiceInstance serviceInstance=loadBalancer.choose("employee-producer");
        System.out.println(serviceInstance.getUri());
        String baseUrl=serviceInstance.getUri().toString();
        baseUrl=baseUrl+"/employee";
        RestTemplate restTemplate = new RestTemplate();
        ResponseEntity<String> response=null;
        try{
            response=restTemplate.exchange(baseUrl,
                        HttpMethod.GET, getHeaders(),String.class);
        }
        catch (Exception ex)
            {
            System.out.println(ex);
        }
        System.out.println(response.getBody());
    }
Предыдущий код с возможностью исключений, таких как NullPointer, не был оптимальным. Мы увидим, как использовать Netflix Feign, чтобы сделать звонки проще и чище. Feign также позаботится о балансировке нагрузки по умолчанию, если зависимость ленты Netflix также находится в пути к классам.

10. Что такое Spring Cloud Bus? оно нам нужно?

Рассмотрим следующую ситуацию: у нас есть несколько приложений, которые используют Spring Cloud Config для чтения свойств, и Spring Cloud Config считывает эти свойства из GIT.
В приведенном ниже примере несколько модулей производителей сотрудников получают свойство регистрации EUREKA из модуля конфигурации сотрудников.

Что произойдет, если предположим, что свойство реестра Eureka в GIT изменено, чтобы указать на другой сервер Eureka. В этом случае нам придется перезапустить службу, чтобы получить обновленные свойства.
Есть еще один способ использовать конечную точку/обновление актуатора. Но нам придется вызывать этот URL отдельно для каждого модуля. Например, если Employee Producer1 развернут на порту 8080, вызовите http://localhost:8080/refresh. То же самое для Employee Producer2 http://localhost:8081/refresh и так далее. Это опять хлопотно. Здесь в игру вступает Spring Cloud Bus.
Spring Cloud Bus предоставляет возможность обновлять конфигурацию в нескольких экземплярах. Итак, в приведенном выше примере, если мы обновим Employee Producer1, все остальные необходимые модули будут обновлены автоматически. Это особенно полезно, если у нас запущено и работает несколько микросервисов. Это достигается подключением всех микросервисов к одному брокеру сообщений. Всякий раз, когда экземпляр обновляется, это событие подписывается на все микросервисы, прослушивающие этого брокера, и они также обновляются. Обновление любого отдельного экземпляра может быть достигнуто с помощью endpoint/bus/refresh.

11. Роль прерывателя цепи весеннего облака

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

12. Что такое Spring CloudConfig?

В распределенной системе из-за огромного количества сервисов для облегчения унифицированного управления и обновления файлов конфигурации сервисов в режиме реального времени требуется компонент распределенного центра конфигурации. В Spring Cloud есть компонент распределенного центра конфигурации spring cloud config, который поддерживает размещение службы конфигурации в памяти службы конфигурации (т.е. локальной), а также в удаленном репозитории Git. В компоненте конфигурации весеннего облака есть две роли: одна — сервер конфигурации, а другая — клиент конфигурации.
использовать:
(1) Добавить зависимость pom
(2) Добавьте соответствующую конфигурацию в файл конфигурации
(3) Добавьте аннотацию @EnableConfigServer в класс запуска.

13. Весенний облачный шлюз?

Spring Cloud Gateway — это платформа шлюза второго поколения, официально запущенная Spring Cloud, заменяющая шлюз Zuul. Как и трафик, шлюз играет очень важную роль в системе микросервисов.Общие функции шлюза включают маршрутизацию и пересылку, проверку разрешений и управление ограничением тока.
Компонент RouteLocatorBuilder используется для создания маршрутов. Помимо создания маршрутов, RouteLocatorBuilder позволяет добавлять различные предикаты и фильтры. Значение утверждений предикатов, как следует из названия, обрабатывается конкретными маршрутами в соответствии с определенными правилами запросов. Фильтры бывают разные фильтры.Он используется для вынесения различных суждений и модификаций запроса.

Приглашаю всех обратить внимание на мой публичный аккаунт [Программист в погоне за ветром].В 2019 году многие компании собрали более 1000 400-страничных pdf-документов для вопросов на собеседовании по Java.

Наконец

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