SpringCloud, что непрофессионалам понятно, пропустил кровопотерю!

Java Spring Java EE балансировки нагрузки

Введение

Только лысина может стать сильнее

Друзья, которые меня знают, возможно, знают, что я уже некоторое время прохожу стажировку. Компания, в которую я ходил, сказала, что я использовал SpringCloud (но я не думаю, что сила его использования очень сильна~~)...

Поэтому в этой статье в основном рассказывается о некоторых базовых знаниях о SpringCloud. (Сейчас я учусь и продаю, в основном, как свои заметки для изучения SpringCloud!) Конечно, мой уровень ограничен, и могут быть некоторые неправильно понятые концепции/очки знаний, пожалуйста, не стесняйтесь исправлять меня в области комментариев Ах~~

SpringCloud GitHub Demo (студенты, прочитавшие статью, могут практиковаться и играть самостоятельно):

Схема структуры проекта:

2. Что такое кластер/распределенный/микросервис/SOA?

Для такого технического новичка, как я, увидев эти слова (集群/分布式/微服务/SOA), кажется недосягаемым (высокие технологии!!). Это как когда я только изучал объектно-ориентированную Java, когда листал информацию на форуме, я не ожидал увидеть "Аспектно-ориентированное программирование", и думал, что это недосягаемо (благородная технология! !).

Но когда я действительно столкнулся с «Аспектно-ориентированным программированием», я обнаружил, что это так, и это не имеет большого значения. Но меня в свое время обмануло его название...

Я не знаю, если вы новичок в этих именах集群/分布式/微服务/SOAКогда вы были, вы были обмануты? ?

  • Ниже я будуПростойскажи мне, что означают эти существительные

2.1 Что такое кластер

Следующий контент взят из Википедии:

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

Технические характеристики кластера:

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

В Википедии это довольно ясно, позвольте мне привести примерпримерБар.

  • Сяо Чжоу пишет Java-программы в компании, но бизнес компании развивается.слишком занят, Сяо Чжоу иногда приходитсясделать перерыв. Поэтому я пригласил 3y пойти тудаЗанимайтесь Java-разработкой вместе. Xiaozhou и 3y обычно пишут программы на Java, но 3y можетчто-тоВозвращаюсь в школу. Ничего страшного, в компании все еще есть Сяо Чжоу, занимающийся разработкой Java, и разработка компании может продолжаться.
    • 3y и Сяо ЧжоуЗанимаетесь Java-разработкой.
    • 3 года уже здесь, работа Сяо Чжоу может быть выполненаПоделитьсяНемного.
    • 3й в отпуске, а Сяо Чжоу все еще здесь.

Я написал удобный веб-сайт 910 и разместил его на сервере. Сейчас к нему обращается все больше и больше людей, и доступ немного медленный. Что мне делать? ? ? Очень просто, (сильнее можно стать только за деньги), добавить конфигурацию (добавить процессор, добавить памяти). После обновления конфигурации количество посетителей увеличивается, поэтому я обнаружил, что это не отключено. Добавление конфигурации на этой машине не может решить эту проблему. Что мне делать? ? ? Все очень просто, (сильнее можно стать только заряжая деньги), яКупите другой сервер и опубликуйте 910 Convenience Network на недавно купленном сервере..

Функции:

  • Оба сервера работаютта же система---> Сеть удобства 910

выгода:

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

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

2.2 Что распространяется

Следующий контент взят из Википедии:

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

Позвольте мне привести пример для иллюстрации:

  • Сейчас в компании Сяо Чжоу и 3y вместе работают над разработкой Java.Для разработки Java можно немного написать общий jQuery и AJAX, поэтому все эти задачи выполняются нами. Однако 3й не очень хорошо знаком с фронтендом, и иногда его долго нельзя настроить после отладки. Босс думает, что 3 года - настоящее блюдо! Так пусть Сяо ЧжоуПредназначен для обработки передней частивещь. Так что 3й будет счастлив, вы можетеСконцентрируйтесь на написании собственной Java, передний конецспециализированныйСяо Чжоу должен быть главным. Итак, Сяо Чжоу и 3y сталиСовместная разработка.
    • 3й не знаком с фронтендом (может написать), но может занять много времени при отладке
    • Сяо Чжоулайспециализируюсь на фронтендевещь, 3 года можетСосредоточьтесь на написании собственных программ на Java.
    • Это все для нормальной работы и итерации проекта.

Моя удобная сеть 910 развернута на двух серверах, но ее посещает все больше и больше людей. Теперь я больше не могу этого выносить. Что нам теперь делать? ? Затем продолжать брать деньги, чтобы стать сильнее? ? Как здравомыслящий я, я должен выяснить, что не так. Сейчас есть несколько модулей 910 Convenience Network, все они закинуты в тот же Tomcat.

На самом деле доступ к некоторым модулям очень низок (типа фонового управления), так что можно сделать так: поставить каждый модульДобыча независимаяВыходит, на хорошие сервера устанавливаются модули, которые имеют большой доступ, а модули, которые мало кто посещает, устанавливаются на плохие сервера. Плюсы этого: 1.Ресурсы используются разумно(Модули, к которым никто не обращается, используют серверы с низкой производительностью, а модули, к которым обращаются многоУлучшить производительность в одиночкуДостаточно). два,Сцепление уменьшено: Каждый модуль независим и занимается своим делом (профессионалы занимаются профессиональными делами), которое легко расширить.

Функции:

  • Сеть удобства 910Разделение функций, независимое между модулями, а затем используйте этиОбъединение независимых модулейЭто просто система.

выгода:

  • Модули независимы, каждый делает свое дело,Простота расширения и возможность повторного использования
  • высокая пропускная способность. Задача требует, чтобы одна машина работала в течение 10 часов, и задача выполняется распределенной по 10 машинам (разделите задачу на 10 небольших задач), и она может выполняться за 2 часа.

распределенный: бизнес разделен на несколько подбизнесов и развернут на разных серверах (разные серверы, работающие под разными кодами, для одной и той же цели).

2.3 Кластерный/распределенный

Кластеризация и распределенность не конфликтуют, может бытьРаспределенный кластер

Теперь компания 3y выросла в размерах: 5 парней пишут Java, 4 парня пишут интерфейс, 2 парня занимаются тестированием и 1 парень занимается администрированием баз данных.

  • Отношения между Java, Frontend, Test, DBA рассматриваются как распределенные.
  • 5 Java рассматриваются как кластеры (front-end, то же самое верно и для тестирования)...

2.4 Распределенные/микросервисы/SOA

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

Использованная литература:

3. Теория CAP

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

  • Вообще говоря, подбизнес, который мы называемузел.

Если вы знакомы с некоторыми базовыми концепциями распределения, вы, должно быть, слышали о теории CAP. Например, если вы узнали о механизме хранения MySQL InnoDB, вы наверняка слышали о ACID!

Во-первых, давайте посмотрим, что означает CAP:

  • C: согласованность данных (непротиворечивость)
    • всеУзел имеет последнюю версию данных
  • А: доступность
    • Данные очень доступны
  • P: допуск разделения (допуск разделения)
    • Терпеть сетевые разделы, сеть между разделами недоступна.

Ниже находятся три узла (они сгруппированы), и все три узла в этот момент могут взаимодействовать друг с другом:

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

  • Данные разбросаны по этим несвязанным областям, что называетсяраздел

Теперь, когда есть сетевой раздел, есть запрос на регистрацию аккаунта.

В это время мыNode 1 и Node 3 не обмениваются данными, есть выбор:

  • еслипозволятьТекущий пользователь регистрирует учетную запись, и зарегистрированные данные записи в это время будут только в узле 1 и узле 2 или узле 2 и узле 3.Синхронизировать, так как записи узла 1 и узла 3 не могут быть синхронизированы.
    • Эта ситуация фактически является выбором доступности (доступности), отказом от непротиворечивости данных (непротиворечивости)
  • еслине допускаетсяТекущий пользователь регистрирует учетную запись (т. е.Подожди покаУзел 1 и Узел 3 возобновляют связь). Как только узел 1 и узел 3 возобновят связь, мы можемУбедитесь, что данные, принадлежащие узлу, являются последней версией.
    • Эта ситуация фактически означает отказ от доступности и выбор согласованности данных.

3.1 Еще раз повторите теорию CAP

Вообще говоря, в распределенной системе P:partition-tolerance (раздел-толерантность) этообязательныйДа, он существует объективно.

CAP нельзя полностью учитывать, как видно из вышеприведенного примера, мы можем выбрать AP или CP. Однако, чтобыПожалуйста, имейте в виду: Это не значит, что если вы выберете AP, C будет полностью заброшен. Это не значит, что если вы выберете CP, A будет полностью заброшена!

В теории CAP,Согласованность, представленная буквой C, является сильной согласованностью.(данные каждой ноды — последняя версия), на самом деле существуют и другие уровни согласованности:

  • Слабая согласованность: Слабая согласованность относится к строгой согласованности, она не гарантирует, что всегда можно получить самое последнее значение;
  • Конечная согласованность: ослабьте требования ко времени, и в определенный момент времени после того, как корректировка завершит ответ операции, данные нескольких узлов, которые необходимо настроить, наконец, достигнут консенсуса.

Диапазон доступности можно определить какНепрерывный интервал от 0 до 100%.

так,Теория CAP фактически определяет, что при условии терпимости к сетевому разделу «строгая согласованность» и «экстремальная доступность» не могут быть достигнуты одновременно..

Использованная литература:

Дальнейшее чтение:

В-четвертых, SpringCloud настолько прост

Я считаю, что после прочтения этого у вас уже есть определенное представление о распределенных/микросервисах, На самом деле это очень легко понять только из концепции. Его просто можно обмануть своим названием.

Теперь я расскажу о SpringCloudсамый простойзнание~

4.1 Зачем вам нужен SpringCloud?

Как упоминалось ранее, с точки зрения распределенных/микросервисов: это должно объединить нас.Большойс проект,аварияна несколькомаленькиймодуль. Эти небольшие модули объединяются для выполнения функции.

Приведу пример, который может быть неуместен (реальность может и не так расколота, но смысл на месте):

После разделения нескольких модулей появитсяРазнообразиепроблема, в то время как SpringCloud предоставляетмножестворешение!

  • Примечание. Эти модулинезависимыйв подсистему (разные хосты).

Спрингклаудосновные функции:

  • Управление услугами: Spring Cloud Eureka
  • Балансировка нагрузки клиента: лента Spring Cloud
  • Защита отказоустойчивости сервисов: Spring Cloud Hystrix
  • Декларативный вызов службы: Spring Cloud Feign
  • Служба шлюза API: Spring Cloud Zuul
  • Распределенный центр конфигурации: Spring Cloud Config

Расширенные возможности SpringCloud (не рассмотренные в этой статье):

  • Шина сообщений: Spring Cloud Bus
  • Микросервисы, управляемые сообщениями: Spring Cloud Stream
  • Трассировка распределенных служб: Spring Cloud Sleuth

Пять, привести к Эврике

Так что же может пойти не так? ? В первую очередь ложится удар между подсистемамикоммуникацияпроблема. Подсистема и подсистема не находятся в одной среде, тогда нужноудаленный вызов. Удаленные вызовы могут быть реализованы с помощью таких технологий, как httpClient, WebService и т. д.

Поскольку это удаленный вызов, мы должны знать IP-адрес.У нас могут быть следующие сценарии.

  • Реализация функции 1: службе A необходимо вызвать службу B
    • Вызов услуги B в коде услуги A,Явно вызывается по IP-адресу:http://123.123.123.123:8888/java3y/3
  • Реализация функции 2: служба A вызывает службу B, служба B вызывает службу C, а служба C вызывает службу D.
    • Вызовите службу B в коде службы A и явно вызовите ее через IP-адрес:http://123.123.123.123:8888/java3y/3, (аналогично) B->C, C->D
  • Реализация функции три: служба D вызывает службу B, служба B вызывает службу C
    • Вызовите службу B в коде службы D и явно вызовите ее через IP-адрес:http://123.123.123.123:8888/java3y/3, (аналогично) B->C
  • .....И т.д., и т.д.

В случае, если мыIP-адрес службы B изменился, подумайте, что может пойти не так: А сервис, D сервис (и т.д.) нуженРучное обновлениеАдрес службы Б

  • В случае многих сервисов поддерживать эти статические конфигурации вручную — кошмар!

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

В Spring Cloud наша структура управления услугами обычно использует Eureka.

Наши вопросы:

  • Теперь есть четыре службы A, B, C и D, и они будут звонить друг другу (и IP-адрес, скорее всего, изменится).Как только IP-адрес службы изменится, код в службе должен быть изменен соответствующим образом. Вручную поддерживать эти статические конфигурации (IP) очень сложно!

Эврика решает описанную выше ситуацию следующим образом:

  • Создайте службу E и поместите информацию о четырех службах A, B, C и D.регистрДля службы E служба E поддерживает зарегистрированную информацию

Доступны все четыре услуги A, B, C и D.получитьЭврика (сервис E) поделитьсяКонтрольный список регистрации. Четыре службы A, B, C и D вызывают друг друга больше не через определенные IP-адреса, азвонить по названию службы!

  • Получите список регистрации ---> в списке регистрации есть имя службы ---> естественно, вы можете получить конкретное местоположение (IP) службы.
  • На самом деле все просто: код проходитИмя службы для поиска соответствующего IP-адреса(IP-адрес изменится, но имя службы, как правило, не изменится)

5.1 Детали Эврики

Eureka специально используется для регистрации других служб, называемых Eureka Server (реестр служб), а остальные службы, зарегистрированные на Eureka Server, называются Eureka Client.

В Eureka Server мы обычно настраиваем это так:


    register-with-eureka: false     #false表示不向注册中心注册自己。
    fetch-registry: false     #false表示自己端就是注册中心,我的职责就是维护服务实例,并不需要去检索服务

Eureka ClientДелятся на поставщиков услуг и потребителей услуг..

  • Но скорее всего сервисИ поставщик услуг, и потребитель услуг.

Если вы видите SpringCloud онлайнНе удивляйтесь, если конфигурация службы не «зарегистрирована» в Eureka-Server.(Но можно получить список услуг Эврика)

  • Вполне вероятно, что автор просто идентифицировал службу какчистые потребители услуг, потребителям чистых услуг не нужно предоставлять внешние услуги, поэтому им не нужно регистрироваться в Eureka.

eureka:
  client:
    register-with-eureka: false  # 当前微服务不注册到eureka中(消费端)
    service-url: 
      defaultZone: http://eureka7001.com:7001/eureka/,http://eureka7002.com:7002/eureka/,http://eureka7003.com:7003/eureka/  

Ниже приведен механизм управления Eureka:

  • поставщики услуг
    • Регистрация службы:При запуске он отправляет запрос REST наЗарегистрируйтесь на Eureka Server, и принести некоторые метаданные своего собственного сервиса.
    • **Продление услуги:** После регистрации в службеПоставщик услуг поддерживает пульсациюИспользуется, чтобы постоянно говорить Eureka Server: «Я все еще жив»,
    • Сервис офлайн:Когда экземпляр службы выполняет корректное завершение работы, онИнициировать запрос REST для службы в автономном режимеДля сервера Eureka скажите реестру службы: «Я ухожу в автономный режим».
  • потребители услуг
    • Получить услугу:когда мыЗапустите потребителя службы, он отправит запрос REST в реестр служб, чтобы получить список служб, зарегистрированных выше.
    • Сервисный звонок:После того, как потребитель услуг получает список услуг,наименование услугиМожно получить имя экземпляра конкретной предоставленной услуги и метаданные экземпляра. При вызове службы поддержкиПриоритетный доступ к поставщикам услуг в той же зоне.
  • Eureka Server (сервисный реестр):
    • **Отказ: **Интервал по умолчанию (по умолчанию – 60 секунд) будет истекать по тайм-ауту в текущем манифесте (по умолчанию – 90 секунд).Услуги, которые не продлеваются, исключаются.
    • Самозащита:. Во время работы EurekaServer будет подсчитывать, будет ли частота отказов сердцебиения ниже 85% в течение 15 минут (обычно это вызвано нестабильностью сети). Eureka Server преобразует текущийИнформация о регистрации инстанса защищена, чтобы срок действия этих экземпляров не истекал, насколько это возможнозащитить эти регистрации.

В итоге имеем вот такую ​​картинку:

Например:

  • 3y ходил по магазинам со своей подругой в Dongfang Baotai на Восточном вокзале, но он не знал, какое веселье было в Dongfang Baotai. так что идиимуществоискалСписок восточных баотайских торговцев, нашел Uniqlo на первом этаже, Starbucks на втором этаже и McDonald's на третьем этаже.
  • Рядом с Uniqlo находится недавно открывшийся KFC с большим логотипом на стене «Добро пожаловать в KFC».поселилсяВосточный Баотай».
  • Бизнесу нужно времяОплатить имущественный сборк собственности.
  • обслуживание имуществаСтабильность Восточного Баотая. Если компания не хочет работать в Дунфан Баотае, сообщите об этом администрации. Собственность, естественно, удалит его из списка восточных купцов Баотай.

Отличный пост в блоге:

Шесть, ведут к RestTemplate и Ribbon

Через структуру управления услугами Eureka мы можем получить местоположение (IP) конкретного экземпляра службы через имя службы. Обычно при использовании SpringCloudНет необходимости создавать вручнуюHttpClient для совершения удаленных вызовов.

Может быть упакован с SpringRestTemplateКласс инструмента, его очень просто использовать:


	// 传统的方式,直接显示写死IP是不好的!
    //private static final String REST_URL_PREFIX = "http://localhost:8001";
	
	// 服务实例名
    private static final String REST_URL_PREFIX = "http://MICROSERVICECLOUD-DEPT";

    /**
     * 使用 使用restTemplate访问restful接口非常的简单粗暴无脑。 (url, requestMap,
     * ResponseBean.class)这三个参数分别代表 REST请求地址、请求参数、HTTP响应转换被转换成的对象类型。
     */
    @Autowired
    private RestTemplate restTemplate;

    @RequestMapping(value = "/consumer/dept/add")
    public boolean add(Dept dept) {
        return restTemplate.postForObject(REST_URL_PREFIX + "/dept/add", dept, Boolean.class);
    }

для обслуживанияВысокая доступность, мы можем поставитькластер поставщика услуг. Например, сейчас разработана и готова к работе система seckill. Для поддержки параллелизма 11 ноября мы открыли несколько компьютеров для поддержки параллелизма.

Теперь хочу эти три системы шиповизрядная доляЗапрос пользователя (профессионал занимается балансировкой нагрузки), вы можете подумать о nginx.

На самом деле SpringCloud также поддерживает функцию балансировки нагрузки, но онаБалансировка клиентской нагрузки, реализация этой функции — Ribbon!

Существует два типа балансировки нагрузки:

  • Балансировка нагрузки клиента (лента)
    • экземпляр службыманифест на стороне клиента, клиент выполняет распределение алгоритма балансировки нагрузки.
    • (Мы уже знаем из приведенных выше знаний: клиент может получить список услуг от сервера Eureka, и передать алгоритм балансировки нагрузки при отправке запроса,Выберите между несколькими серверами для доступа)
  • Балансировка нагрузки сервера (Nginx)
    • экземпляр службысписок на сервере, сервер выполняет распределение алгоритма балансировки нагрузки

Итак, наш график можно нарисовать так:

6.1 Детали ленты

Лента поддерживает балансировку нагрузки. Стратегия балансировки нагрузки по умолчанию — циклическая. Мы также можем настроить стратегию балансировки нагрузки в соответствии с нашими фактическими потребностями.


@Configuration
public class MySelfRule
{
	@Bean
	public IRule myRule()
	{
		//return new RandomRule();// Ribbon默认是轮询,我自定义为随机
		//return new RoundRobinRule();// Ribbon默认是轮询,我自定义为随机
		
		return new RandomRule_ZY();// 我自定义为每台机器5次
	}
}

Это также очень просто реализовать: унаследовать класс AbstractLoadBalancerRule, переписатьpublic Server choose(ILoadBalancer lb, Object key)Вот и все.

SpringCloud выбирает AP в теории CAP, а также может быть настроен в ленте.механизм повторной попытки(Заинтересованные студенты могут отправиться в Сосо)~

Например:

  • 3y отправился в Dongfang Baotai через несколько месяцев со своей девушкой. Из-за плохой памяти я пошел в отель, чтобы получить список торговцев Дунфан Баотай.
  • На этот раз я увидел, как Дунфан Баотай открыл еще один McDonald's, один на втором этаже, другой на третьем. Выяснилось, что бизнес очень хороший, для удобства пользователей его разместили на втором этаже.Откройте дополнительный Макдональдс.
  • В это время 3y спросил свою девушку: "Какой Макдональдс лучше? Как насчет того, чтобы подкинуть монетку и решить?" Девушка 3y сказала: "Ты дура, ты должна пойти в ближайший".

Отличный пост в блоге:

Семь, выведи Хайстрикс

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

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

существуетВысокий параллелизмслучае, из-за задержки одной услуги, это может привести кВсе запросы отложены, даже через несколько секунд сервис находится в состоянии насыщения нагрузки, а ресурсы истощаются до недоступности, что в итоге приводит к недоступности данной распределенной системы, что является «лавиной».

В ответ на вышеуказанные проблемы Spring Cloud Hystrix реализуетавтоматический выключатель, резьбовая изоляцияИ ряд сервисных функций защиты.

  • Аварийный режим (быстрый возврат при отказе): при отказе сервисного блока (аналогично короткому замыканию в электроприборе) контроль неисправности автоматического выключателя (аналогично перегоранию предохранителя),Вернуть ответ об ошибке вызывающему абоненту вместо того, чтобы долго ждать. Таким образом, поток не будет долго занят и не освобожден из-за вызова неисправного сервиса.избегатьсбои в распределенных системахраспространять.
  • Изоляция ресурсов/зависимостей (изоляция пула потоков): будетСоздайте отдельный пул потоков для каждой зависимой службы, так что даже если задержка зависимой службы слишком велика, это повлияет только на вызов зависимой службы, иНе замедляет другие зависимые службы.

Hystrix предоставляет несколько ключевых параметров для фьюзинга:滑动窗口大小(20)、 熔断器开关间隔(5s)、错误率(50%)

  • Всякий раз, когда 50% из 20 запросов терпят неудачу, автоматический выключатель будет включен, и повторный вызов этой службы в это время будетвернуть отказ напрямую, больше не вызывать удаленные службы.
  • Через 5 с повторно обнаруживается условие триггера,Определите, закрывать ли предохранитель или продолжать размыкать.

Hystrix также имеет мощные функции, такие как слияние запросов и кеширование запросов.Я не буду подробно объяснять это здесь.Заинтересованные студенты могут продолжить углубленное изучение~

7.1Панель управления Hystrix

Hystrix Dashboard: в основном используется дляМониторинг различных показателей Hystrix в режиме реального времени. Информация, получаемая в режиме реального времени от Hystrix Dashboard, может помочь нам быстро найти проблемы в системе и принять своевременные контрмеры.

Страница при запуске:

Служба мониторинга заказовстраница:

Наш текущий сервис выглядит следующим образом:

В дополнение к странице мониторинга, которая может открывать один экземпляр, также есть конечная точка мониторинга./turbine.streamправдакластерв использовании. Из именования конечных точек можно ввести Turbine, через которуюСовокупная информация мониторинга, и предоставить сводную информацию в HystrixDashboard дляЦентрализованное отображение и мониторинг.

Например:

  • 3y и его подруга решили пойти поиграть в Ванду. Когда они пошли на стоянку Ванды, они обнаружили, что на отрицательном этаже: «Отрицательный первый этаж заполнен, пожалуйста, спуститесь на отрицательный второй этаж. Там 100 свободных парковочных мест. места на отрицательном втором этаже!"
  • В это время 3й сказал своей девушке: "Парковка Ванда делает хорошую работу, если она ненепосредственныйСкажи мне, что первый этаж занят, может быть, я пойду на первый этаж, чтобы найти место. Если много людей пойдут на первый этаж и не смогут найти место для парковки, я боюсь, что она будет заблокирована». 3й продолжил: "Посмотрите на стоянку. Состояние биты тоже хорошее, выше есть парковочное местоИндукция (мониторинг), если он красный, значит, он был припаркован, если зеленый, значит, парковочное место пусто».
  • Подруга 3y пренебрежительно сказала: «Ты слишком много говоришь».

Использованная литература:

Восемь, выведите Feign

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

заупрощатьПоявилась наша разработка Spring Cloud Feign! Он основан на реализации Netflix Feign,ИнтегрироватьПомимо интеграции мощных функций Spring Cloud Ribbon и Spring Cloud Hystrix, он также предоставляет предложенныйдекларативный вызов службы(Больше не через RestTemplate).

Feign — это декларативный шаблонный HTTP-клиент. Используя Feign в Spring Cloud, мы можем добиться того же опыта кодирования, что и вызов локального метода при использовании HTTP для запроса удаленной службы.Разработчик совершенно не знает, что это удаленный метод, не говоря уже о HTTP-запросе.

Вот краткий обзор того, как Feign элегантно реализует удаленные вызовы:

Привязка службы:


// value --->指定调用哪个服务
// fallbackFactory--->熔断器的降级提示
@FeignClient(value = "MICROSERVICECLOUD-DEPT", fallbackFactory = DeptClientServiceFallbackFactory.class)
public interface DeptClientService {


    // 采用Feign我们可以使用SpringMVC的注解来对服务进行绑定!
    @RequestMapping(value = "/dept/get/{id}", method = RequestMethod.GET)
    public Dept get(@PathVariable("id") long id);

    @RequestMapping(value = "/dept/list", method = RequestMethod.GET)
    public List<Dept> list();

    @RequestMapping(value = "/dept/add", method = RequestMethod.POST)
    public boolean add(Dept dept);
}

Фьюзы используются в Feign:


/**
 * Feign中使用断路器
 * 这里主要是处理异常出错的情况(降级/熔断时服务不可用,fallback就会找到这里来)
 */
@Component // 不要忘记添加,不要忘记添加
public class DeptClientServiceFallbackFactory implements FallbackFactory<DeptClientService> {
    @Override
    public DeptClientService create(Throwable throwable) {
        return new DeptClientService() {
            @Override
            public Dept get(long id) {
                return new Dept().setDeptno(id).setDname("该ID:" + id + "没有没有对应的信息,Consumer客户端提供的降级信息,此刻服务Provider已经关闭")
                        .setDb_source("no this database in MySQL");
            }

            @Override
            public List<Dept> list() {
                return null;
            }

            @Override
            public boolean add(Dept dept) {
                return false;
            }
        };
    }
}

перечислить:

9. Знакомство с Зуулом

Основываясь на вышеизложенном, наша текущая архитектура, вероятно, будет разработана следующим образом:

Такая архитектура будет иметь две неприятные проблемы:

  1. Правила маршрутизации и обслуживание экземпляров службы: требуется для внешней балансировки нагрузки (nginx)поддерживатьСписок всех экземпляров службы (OpenService на схеме)
  2. Проверка подписи, проблема избыточности проверки входа: Для обеспечения безопасности внешних сервисов интерфейсы микросервисов, которые мы реализуем на стороне сервера, часто имеют определенныеМеханизм проверки разрешений, но наш сервис независим, мыТакой набор логики проверки должен быть реализован в этих приложениях., что вызовет избыточность в логике проверки.

Давайте нарисуем картинку, чтобы понять это:

Каждый сервис имеет свой IP-адрес, и если Nginx хочет корректно перенаправлять запросы к сервису, он долженПоддерживает адрес каждого экземпляра службы!

  • Что еще более катастрофично, так это то, что IP-адреса этих экземпляров службы могут измениться, и, вероятно, изменится разделение между службами.

http://123.123.123.123

http://123.123.123.124

http://123.123.123.125

http://123.123.123.126

http://123.123.123.127

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

Чтобы решить эти распространенные архитектурные проблемы, описанные выше,Шлюз APIпоявилось понятие. Компонент шлюза API на основе Netflix Zuul предоставляется в SpringCloud.Spring Cloud Zuul.

Spring Cloud Zuul решает две вышеупомянутые проблемы таким образом:

  • SpringCloud Zuul интегрируется со SpringCloud Eureka, регистрирует себя как приложение под управлением сервиса Eureka и получает информацию об экземплярах всех других микросервисов от Eureka.Внешние вызовы должны проходить через шлюз API., так чтоРабота по обслуживанию экземпляров службы передается структуре управления службами для автоматического выполнения..
  • Выполните унифицированный вызов службы шлюза API, чтобыПредварительная фильтрация интерфейса микросервиса, реализовать интерфейс для микросервисовперехват и проверка.

Zuul по своей сути имеет изоляцию потоков и самозащиту прерывателя цепи, а также балансировку нагрузки на стороне клиента для вызовов службы. Это:Zuul также поддерживает Hystrix и Ribbon..

О Зууле еще много очков знаний (из-за проблем с местом я не буду здесь вдаваться в подробности):

  • Сопоставление маршрутов (динамический маршрут)
  • реализация фильтра (динамический фильтр)
  • По умолчанию файлы cookie и конфиденциальные заголовки HTTP отфильтровываются (дополнительная настройка).

9.1 Возможные вопросы о Зууле

Zuul поддерживает Ribbon и Hystrix, а также может выполнять балансировку клиентской нагрузки. Разве наш Feign не реализует также балансировку нагрузки на стороне клиента и Hystrix? Теперь, когда Зуул смог этого добиться, нужна ли еще наша Имитация?

Или это можно понять так:

  • Zuul — единственный интерфейс, открытый внешнему миру, что эквивалентно маршрутизации запроса контроллера, в то время как Ribbonhe и Fegin маршрутизируют запрос службы.
  • Zuul выполняет балансировку нагрузки самых внешних запросов, в то время как Ribbon и Fegin выполняют балансировку нагрузки сервисных вызовов различных микросервисов в системе.

С Zuul вам все еще нужен Nginx? Можно ли их использовать вместе?

  • Насколько я понимаю: Zuul и Nginx можно использовать вместе (ведь наш Zuul тоже можно кластеризовать для достижения высокой доступности), использовать ли его вместе зависит от сложности архитектуры (бизнеса)~~~

Использованная литература:

10. Представьте Spring Cloud Config

С расширением бизнеса наши услуги будут все больше и больше, больше и больше. У каждой службы есть свой файл конфигурации.

Поскольку это файл конфигурации, дайте нам что-нибудь для настройки, а затемНеизбежно будут некоторые измененияиз.

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

В распределенной системе при изменении некоторой базовой служебной информации всеСкорее всеговызовет серию обновлений и перезагрузок

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

  • Проще говоря, использование Spring Cloud Config заключается в размещении файлов конфигурации вЕдиное управление местоположением(например, GitHub), клиент получает эти файлы конфигурации через интерфейс.
  • Когда файл конфигурации изменяется на GitHub, приложение загружает измененный файл конфигурации.

Другие знания о SpringCloud Config:

  • На стороне сервера Spring Cloud Config значение по умолчанию для репозитория конфигурацииРеализовано с помощью Git, мы также можем настроить SVN.
  • Информация в конфигурационном файлеШифровать и расшифровывать
  • Изменил файл конфигурации, надеюсь перезагружать не нужноКонфигурация динамического обновления, используется с Spring Cloud Bus~

Возможные вопросы об использовании SpringCloud Config: разница между application.yml и bootstrap.yml

Суммировать

В этой статье в основном описаны базовые знания о SpringCloud, надеюсь, вы сможете помочь после ее прочтения~

Существует также много информации о SpringCloud. Я собрал некоторые из них, которые я считаю лучшими. Студенты, которые хотят углубиться, могут захотеть взглянуть на ресурсы ниже~~~

Ссылки на статьи серии SpringCloud:

Справочная литература:

  • «Микросервисы Spring Cloud на практике»

Демонстрация SpringCloud GitHub (Студенты, прочитавшие статью, могут практиковаться и играть самостоятельно и написали ReadMe):

Проект с открытым исходным кодом, охватывающий все точки знаний о бэкэнде Java (уже 5,8 тыс. звезд):GitHub.com/Zhongf UC очень…

если ты хочешьв реальном времениЕсли вы обратите внимание на мои обновленные статьи и галантерейные товары, которыми я делюсь, поищите в WeChat.Java3y.

Содержимое PDF-документоввсе вручную, если вы ничего не понимаете, вы можете напрямуюспросите меня(В официальном аккаунте есть мои контактные данные).