The microservice architectural style is an approach to developing a single application as a suite of small services, each running in its own process and communicating with lightweight mechanisms, often an HTTP resource API. These services are built around business capabilities and independently deployable by fully automated deployment machinery. There is a bare minimum of centralized management of these services , which may be written in different programming languages and use different data storage technologies.
Прежде всего, не существует официального определения микросервисов. Трудно дать прямое описание микросервисов. Мы можем понять, что такое микросервисы, сравнив их с традиционными веб-приложениями.
Ядро традиционных веб-приложений разделено на бизнес-логику, адаптеры и API или веб-интерфейсы, доступ к которым осуществляется через пользовательский интерфейс. Бизнес-логика определяет бизнес-процессы, бизнес-правила и объекты предметной области. Адаптеры включают компоненты доступа к базе данных, компоненты сообщений и интерфейсы доступа.
Хотя они разрабатываются по модульному принципу, в конечном итоге они упаковываются и развертываются как монолитные приложения. Например, приложения Java будут упакованы в WAR и развернуты на Tomcat или Jetty.
Такое единое приложение больше подходит для небольших проектов. Преимущества:
Его недостатки также весьма очевидны, особенно для интернет-компаний:
В настоящее время в основных проектах обычно используется микросервисная архитектура. Идея состоит не в том, чтобы разработать огромное монолитное приложение, а в том, чтобы разбить его на небольшие взаимосвязанные микросервисы. Микросервис выполняет определенную функцию, например управление пассажирами и управление заказами. Каждый микросервис имеет свою бизнес-логику и адаптеры. Некоторые микросервисы также предоставляют интерфейсы API для использования другими микросервисами и клиентами приложений.
Преимущества микросервисной архитектуры
Недостатки микросервисов
Исходные сервисы можно вызывать индивидуально, но теперь они разбиты на независимые сервисы по функциям и становятся самостоятельным Java-процессом. Как клиентский пользовательский интерфейс получает к нему доступ? В фоновом режиме работает N служб, и служба регистрации должна помнить об управлении N службами. Если служба отключена/обновлена/модернизирована, стойка регистрации должна быть перераспределена. Это явно не соответствует нашей концепции разделения. Стойка регистрации — мобильное приложение. Бизнес обычно меняется быстрее. Кроме того, вызов N небольших сервисов также приводит к значительным издержкам сети. В системе также есть общие микросервисы, которые обычно не сохраняют состояние. Лучше всего иметь единую локальную систему обслуживания и управления (OAuth) для информации для входа в систему и управления разрешениями.
так,в целомсуществовать За кулисамиNиндивидуальный СлужитьиUIмеждув целомвстречаодининдивидуальныйактерское мастерствоили Кто звонитAPI Gateway
,онизделатьиспользоватьвключать
Насколько я понимаю, этот API-шлюз может быть реализован разными способами. Это может быть блок, объединяющий программное и аппаратное обеспечение, простую структуру MVC или даже сервер Node.js. Их наиболее важная роль — обеспечить агрегацию фоновых сервисов для внешнего интерфейса (обычно мобильных приложений), предоставить единый сервисный выход и разделить их. Однако шлюз API также может стать единой точкой отказа или узким местом производительности.
Поскольку все микросервисы представляют собой независимые процессы Java, работающие на независимых виртуальных машинах, связь между службами осуществляется посредством IPC (межпроцессное взаимодействие), и уже существует множество зрелых решений. В основном есть два наиболее распространенных способа.
Как правило, синхронные вызовы относительно просты и имеют строгую согласованность, но склонны к проблемам с вызовами и имеют низкую производительность, особенно при наличии большого количества уровней вызовов. Сравнение RESTful и RPC также является очень интересной темой. Как правило, REST основан на HTTP, который проще реализовать и более приемлем. Технология реализации на стороне сервера также более гибка. Она может поддерживаться различными языками и может пересекаться с клиентами. Никаких особых требований к клиенту не предъявляется. Пока SDK инкапсулирует HTTP, его можно вызывать, поэтому он относительно широко используется. У RPC также есть свои преимущества: протокол передачи более эффективен, а безопасность более контролируема. Если в компании существует единая спецификация разработки и единая структура обслуживания, ее преимущество в эффективности разработки будет более очевидным. Все зависит от реальных условий собственного технического накопления и их собственного выбора. Метод асинхронного обмена сообщениями особенно широко используется в распределенных системах. Он может не только уменьшить связь между вызывающими службами, но также действовать как буфер между вызовами, гарантируя, что очередь сообщений не перегружает вызываемого абонента и в то же время гарантирует, что поток сообщений не будет перегружен. вызывающая сторона. Вы можете улучшить качество обслуживания и продолжать делать то, что должны делать, не замедляя фоновую производительность. Однако цена, которую вам придется заплатить, — это ослабление согласованности и необходимость принять конечную согласованность данных. Кроме того, фоновой службе обычно необходимо достичь идемпотентности, поскольку отправка сообщений обычно повторяется из соображений производительности (чтобы гарантировать); что сообщение получено и получение его только один раз является большим испытанием на производительность); наконец, необходимо ввести независимого брокера. Если внутри компании нет накопления технологий, это также станет большой проблемой для распределенного управления брокером.
В микросервисной архитектуре каждая служба обычно имеет несколько копий для балансировки нагрузки. Служба может отключиться в любое время, или могут быть добавлены новые узлы службы, чтобы справиться с временной нагрузкой на доступ. Как сервисы узнают друг друга? Как осуществляется управление услугами? Это проблема обнаружения сервисов. Обычно существует два типа подходов, каждый из которых имеет свои преимущества и недостатки. По сути, распределенное управление регистрационной информацией службы осуществляется с помощью Zookeeper и других подобных технологий. Когда услуга подключается к сети, поставщик услуг регистрирует информацию о своей услуге в ZK (или аналогичной системе), поддерживает длинные ссылки посредством тактовых импульсов и обновляет информацию о ссылках в режиме реального времени. Вызывающие службы используют адресацию ZK для поиска службы на основе настраиваемого алгоритма, а также могут локально кэшировать информацию о службе для повышения производительности. Когда сервис отключится, ZK отправит в сервис уведомление.
клиент.
Как упоминалось ранее, большой риск при монолитной разработке — положить все яйца в одну корзину, и оба будут процветать и проиграют. Самая большая особенность распределенной сети заключается в ее ненадежности. Этот риск можно снизить за счет разделения микросервисов, но без специальной защиты результат определенно будет кошмаром. Мы только что столкнулись с онлайн-сбоем, связанным с очень незаметной функцией подсчета SQL. Когда количество посещений увеличилось, нагрузка на базу данных значительно увеличилась, что повлияло на производительность приложения и, таким образом, повлияло на все интерфейсные приложения, которые вызывают эту службу приложения. Поэтому, когда наша система состоит из ряда цепочек вызовов служб, мы должны гарантировать, что проблемы в любом звене не повлияют на общее звено. Существует множество соответствующих средств:
Распространение означает разделение огромной системы на несколько модулей. Это то же самое, что и микросервисы. Это требует разделения системы и развертывания ее на разных машинах, поскольку одна машина может не выдержать такого большого объема доступа, или в другом. Другими словами, чтобы поддерживать такое огромное давление доступа, вам необходимо приобрести сервис со сверхвысокой производительностью. Сервер, его финансовая стоимость очень высока. С такими бюджетами можно приобрести множество обычных серверов. Каждый модуль распределенной системы взаимодействует с данными через интерфейсы. По сути, распределенная — это тоже своего рода микросервис, поскольку модули разбиты на независимые. устройства предоставляют интерфейсы для вызова, в чем же их существенное отличие? Их существенное различие отражено в «цели». Что такое цель? Это означает, используете ли вы распределенную архитектуру или архитектуру микросервиса. Какова ваша конечная цель и какую цель вы хотите достичь? Какова цель распределенной архитектуры? Это означает, что количество посещений слишком велико для одной машины, или из-за проблем с затратами для завершения развертывания службы необходимо использовать несколько машин; И какова цель микросервисов? Просто позвольте каждому модулю быть разделенным и не влиять друг на друга. Например, обновления модулей, ошибки или реконструкции не должны влиять на другие модули. Микросервисы могут быть развернуты на одной машине; Однако: распределенный — это тоже тип микросервиса, и микросервис тоже распределен;
Микросервис — это просто метод архитектуры проекта, архитектурная концепция или концепция, как и наша архитектура MVC, тогда Spring Cloud — это техническая реализация этого метода архитектуры;
Микросервисы — это всего лишь метод архитектуры проекта и архитектурная концепция, поэтому любая технология может реализовать эту архитектурную концепцию, но в архитектуре микросервисов есть много проблем, которые нам необходимо решить, таких как: балансировка нагрузки, регистрация и обнаружение сервисов, вызов сервисов, сервис. маршрутизация, сервисный выключатель и ряд других вопросов. Если реализовать архитектурную концепцию микросервисов с нуля, у вас выпадут волосы. Итак, Spring Cloud помогает нам делать эти вещи, а Spring Cloud справится с этими проблемами. упакован, нам просто нужно использовать его прямо из коробки;
Официальное объяснение: Spring Cloud — это упорядоченный набор серии фреймворков. Он использует удобство разработки Spring Boot, чтобы разумно упростить разработку инфраструктуры распределенной системы, такой как регистрация обнаружения служб, центр конфигурации, шина сообщений, балансировка нагрузки, автоматические выключатели, мониторинг данных и т. д., и все это можно сделать с помощью Стиль разработки Spring Boot для запуска и развертывания в один клик. Spring Cloud не изобретает велосипед. Он просто объединяет более зрелые и практичные сервисные платформы, разработанные различными компаниями, и повторно инкапсулирует их с помощью стиля Spring Boot, чтобы защитить сложные принципы конфигурации и реализации, и, наконец, предоставляет разработчикам возможности, созданные автором. набор инструментов для разработки распределенных систем, которые легко понять, легко развернуть и легко поддерживать.
преимущество:
недостаток:
В целом преимущества перевешивают недостатки. В настоящее время кажется, что Spring Cloud представляет собой очень полную распределенную среду. В настоящее время многие предприятия начинают использовать микросервисы. Поэтому для студентов, которые хотят изучать микросервисную архитектуру, изучение Spring Cloud — хороший выбор.
Pring Cloud назван в честь станции метро в Лондоне, Англия, и выпускает повторяющиеся версии в виде букв названия станции метро от A до Z и так далее. SpringCloud — это комплексный проект, состоящий из множества подпроектов, каждый из которых имеет свой ритм выпуска. Чтобы управлять зависимостями версий между Spring Cloud и каждым подпроектом, публикуется список, который включает версию подпроекта, соответствующую определенной версии Spring Cloud. Чтобы избежать путаницы между номерами версий SpringCloud и номерами версий подпроектов, версии SpringCloud называются именами, а не номерами версий. Имена этих версий названы в честь станций лондонского метрополитена и соответствуют хронологическому порядку версий в соответствии с номерами версий. порядок алфавита. Например, Angel — это первая версия, а Brixton — вторая версия. Когда содержимое выпуска SpringCloud достигнет критической точки или будет устранена серьезная ошибка, будет выпущена версия «служебных выпусков», называемая версией SRX. Например, Greenwich.SR2 — это вторая версия SRX версии Greenwich. выпущен SpringCloud.
Официальные зависимости между версиями можно найти на официальном сайте: https://spring.io/projects/spring-cloud#overview. Более подробную версию можно найти: https://start.spring.io/actuator/info.
Spring Cloud | Dubbo | |
---|---|---|
Метод вызова службы | Rest APi | RPC |
Регистрационный центр | Eureka、Zookeeper、Nacos、Consul | Zookeeper |
сервисный шлюз | Zuul、GateWay | Сторонняя интеграция |
Spring Cloud инкапсулирует модуль Eureka, разработанный Netflix для реализации управления сервисами. В традиционной структуре удаленных вызовов RPC сложнее управлять зависимостями между каждой службой и управлением. Поэтому необходимо использовать управление службами для управления зависимостями между службами и достижения вызова службы, балансировки нагрузки и отказоустойчивости. и т. д., чтобы реализовать обнаружение и регистрацию услуг.
Eureka принимает архитектуру дизайна CS, Eureka Server как Служить Функция регистрациииз Служитьустройство,это Служить Регистрационный центр. И из других микросервисов в системе makeuse Клиент Eureka подключается к Eureka Сервер и поддерживать пульсирующее соединение. Таким образом, персонал по техническому обслуживанию системы может пройти Eureka Server Чтобы отслеживать, нормально ли работает каждый микросервис в системе. существуют Служитьрегистрациииобнаружено, что существует Регистрационный центр. Когда сервер Служить запускается, он сохраняет текущий файл Служить. например Служить адрес, почтовый адрес и т. д. регистрируются в Регистрационный как псевдоним. центр вкл. Другая сторона (потребитель|Служить провайдеру) обращается к Регистрационному по этому псевдониму. Получите фактический адрес связи в центре, а затем реализуйте локальную настройку RPC. центр,Потому что это делаетиспользовать Регистрационный центр управляет отношениями зависимости между каждым Служитьи Служить (концепция управления Служить). В любой удаленной среде RPC будет существовать Регистрационный центр (хранилище Служить связанной с адресом информацией (адрес интерфейса))
Создайте кластерную среду и зарегистрируйте сервисы друг с другом.
Получено Служить Откройте для себя из пути,автоматическая сборкаDiscoveryClient
,Просто настройте метод inuse
//Получить все
List<String> services = discoveryClient.getServices();
//Укажите имя Служить, чтобы получить соответствующую информацию
List<ServiceInstance> instances = discoveryClient.getInstances("XIAOBEAR-CLOUD-PAYMENT-SERVICE");
По умолчанию, если EurekaServer не получает контрольный сигнал экземпляра микросервиса в течение определенного периода времени, EurekaServer выйдет из экземпляра (по умолчанию 90 секунд). Однако при возникновении сбоя сетевого раздела (задержка, задержка, перегрузка) микросервис и EurekaServer не могут нормально взаимодействовать, и описанное выше поведение может стать очень опасным, поскольку сам микросервис на самом деле работоспособен и его не следует использовать в это время. микросервис должен быть отключен. Eureka решает эту проблему через «режим самозащиты» — когда узел EurekaServer теряет слишком много клиентов за короткий промежуток времени (может произойти сбой сетевого раздела), то этот узел переходит в режим самозащиты. В режиме самозащиты, Эврика Сервер защитит информацию в реестре служб и больше не будет отключать экземпляры служб. Философия его дизайна заключается в том, чтобы скорее сохранять ошибочную информацию о регистрации службы, чем слепо отключать любые потенциально исправные экземпляры службы. Одно предложение, чтобы объяснить: лучше жить, чем умереть. Подводя итог, можно сказать, что режим самозащиты — это мера безопасности для борьбы с сетевыми аномалиями. Его архитектурная философия заключается в том, чтобы сохранить все микросервисы одновременно (сохраняются как работоспособные, так и неработоспособные микросервисы), а не слепо отключать любые работоспособные микросервисы. Использование режима самозащиты может сделать кластер Eureka более надежным и стабильным.
Чтобы предотвратить нормальную работу EurekaClient, но сеть заблокирована от EurekaServer, EurekaServer не будет немедленно удалять службу EurekaClient.
По умолчанию механизм самозащиты включен.
Его можно отключить через файл конфигурации👇
eureka:
instance:
hostname: eureka7001.com #eurekaСервериз Имя экземпляра
client:
register-with-eureka: false #falseВыразить неодобрение Регистрационный центр Зарегистрируйтесь.
fetch-registry: false #false означает, что вы Регистрационный центр, моя обязанность — поддерживать экземпляр Служить, нет необходимости извлекать Служить
service-url:
defaultZone: http://eureka7002.com:7002/eureka/
#SETUPи Эврика Взаимодействие с сервером при запросе адреса Служить регистрации Служить необходимо полагаться на этот адрес.
server:
#Закройте механизм самозащиты, чтобы исключить возможность использования Служить вовремя
enable-self-preservation: false
eviction-interval-timer-in-ms: 1000
Consul — это система обнаружения и управления конфигурациями распределенных сервисов с открытым исходным кодом, разработанная HashiCorp с использованием языка Go. Обеспечивает управление услугами, центр конфигурации, шину управления и другие функции в микросервисной системе. Каждую из этих функций можно использовать индивидуально по мере необходимости или использовать вместе для создания комплексной сети служб. Короче говоря, Consul предоставляет комплексное решение сети служб. У него много преимуществ. В том числе: на основе протокола raft, относительно простой; поддерживает проверку работоспособности, поддерживает протоколы HTTP и DNS; поддерживает кластер WAN между центрами обработки данных, обеспечивает кросс-платформенный интерфейс, поддерживает Linux, Mac, Windows;
Eureka | Consul | Zookeeper | |
---|---|---|---|
язык | Java | Go | Java |
CAP | AP | CP | CP |
Проверка работоспособности сервиса | Настраиваемая поддержка | поддерживать | поддерживать |
Внешний интерфейс | HTTP | HTTP/DNS | клиент |
Spring Cloud | Может быть интегрирован | Может быть интегрирован | Может быть интегрирован |
Spring Cloud Лента основана на Netflix Ribbonвыполнитьизнаборклиентбалансировка нагрузкиизинструмент。 Проще говоря, Ribbon — это проект с открытым исходным кодом, выпущенный Netflix. Его основная функция — обеспечение балансировки клиентского программного обеспечения. алгоритм нагрузки и Служитьиспользовать. Компонент Ribbonклиент предоставляет ряд полных элементов конфигурации, таких как тайм-аут соединения, повтор и т. д. Проще говоря, Load указан в существующем файле конфигурации. Для всех машин, находящихся за балансировщиком (сокращенно LB), Ribbon автоматически поможет вам подключиться к этим машинам на основе определенных правил (таких как простой опрос, случайные соединения и т. д.).
Проще говоря, запросы пользователя равномерно распределяются по нескольким сервисам для достижения системы HA (высокая доступность).
Лента — это балансировка нагрузки + вызов RestTemplate.
Алгоритм балансировки нагрузки: Количество запросов к остальному интерфейсу % Общее количество кластеров серверов = Фактический индекс местоположения вызывающего сервера. Отсчет оставшегося интерфейса начинается с 1 после каждого перезапуска службы.
List<ServiceInstance> instances = discoveryClient.getInstances("XIAOBEAR-CLOUD-PAYMENT-SERVICE");
нравиться: List [0] instances = 127.0.0.1:8002
List [1] instances = 127.0.0.1:8001
8001+ 8002 объединены в кластер. Всего у них 2 машины и общее количество кластеров 2. По принципу алгоритма опроса:
Когда общее количество запросов равно 1: 1% 2 =1 и соответствующая позиция индекса равна 1, то полученный адрес службы равен 127.0.0.1:8001.
Когда общее количество запрошенных цифр равно 2:2%2=0 и соответствующая позиция индекса равна 0, то полученный адрес службы равен 127.0.0.1:8002.
Когда общее количество запросов равно 3:3%2=1 и соответствующая позиция индекса равна 1, то полученный адрес службы равен 127.0.0.1:8001.
Когда общее количество запрошенных цифр равно 4: 4% 2 =0 и соответствующая позиция индекса равна 0, то полученный адрес службы равен 127.0.0.1:8002.
И так далее...
Лента позволяет использоватьdiscoveryClient для чтения целевой информации из Регистрационного центра.,Подсчет запросов для одного и того же интерфейса,Используйте алгоритм «использовать% остатка» для получения целевого индекса Служитькластер.,Вернитесь, чтобы получить информацию о цели Служить.
Feign — это декларативный веб-сервис. Использование Feign позволяет писать веб-страницы. Сервисклиент проще. Способ использования — определить интерфейс Служить, а затем добавить к нему аннотации. Feign также поддерживает подключаемые кодеры и декодеры. Весна Облако инкапсулирует Feign, делая его поддерживающим Spring. Стандартные аннотации MVC и HttpMessageConverters. Feign можно комбинировать с Eureka и Ribbon, чтобы использовать с поддержкой балансировки. нагрузки
Feign | OpenFeign |
---|---|
Притворись да Весна Компонент Cloud представляет собой облегченный RESTful HTTP-сервис. Feign имеет встроенную ленту и используется для клиентбалансировки; нагрузки,идтинастраиватьиспользовать Служить Регистрационный центриз Служить. Способ использования Feigniz: используйте аннотацию Feigniz для определения интерфейса, настройте спользовать Этот интерфейс можно настроить Использовать Служить Регистрационный центриз Служить | OpenПритворись да Весна Cloud СуществующийFeignиз основан на подтверждении с помощью аннотаций SpringMVC, таких как @RequesMapping и т. д. OpenFeignиз@FeignClient может анализировать интерфейс из аннотации SpringMVC из@RequestMapping и генерировать класс реализации через динамический прокси-сервер. Выполнять балансировку в классе реализации. нагрузкиинастраиватьиспользовать Чтоон Служить。 |
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-feign</artifactId></dependency> | <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-openfeign</artifactId></dependency> |
По умолчанию Feignклиент ждет только одну секунду.,Но обработка Сервера занимает более 1 секунды,Потому что Feignклиент больше не хочет ждать,Возврат напрямую Сообщить об ошибке。
Чтобы избежать такой ситуации, иногда нам нужно установить контроль Feignклиентизтайм-аут.
#Set feignклиенттайм-аут время (лента поддержки OpenFeign по умолчанию)
ribbon:
# относится к времени подключения Учреждать, что подходит для времени, когда оба конца подключены при нормальных условиях сети.
ReadTimeout: 5000
# относится к моменту, когда Учреждать подключено и прочитано с устройства Служить в доступный ресурсиспользоватьиз
ConnectTimeout: 5000
Hystrix — это библиотека с открытым исходным кодом для борьбы с задержкой и отказоустойчивостью в распределенных системах.,существовать в распределенной системе,Многие зависимости неизбежно потерпят неудачу,напримертайм-аут、Аномалии и т.д.,Hystrix может гарантировать, что если зависимость пойдет не так,,Не приводит к общему отказу Служить,Избегайте каскадных сбоев,Повысить гибкость распределенных систем.
существоватьмикросервисыв архитектуре,Очень часто запрос требует передачи нескольких сообщений. Нравится клиент посетите АСлужить,иAСлужитьнуждатьсянастраиватьиспользоватьBСлужить,BСлужитьнуждатьсянастраиватьиспользоватьCСлужить,По сетевым причинам и собственным причинам человека,Если BSлужили или CSлужить не могут ответить вовремя,АСлужить будет заблокировано,Пока не ответит BCлужитьCCлужить. Если в это время большой наплыв запросов,,Ресурсы контейнера и потоков будут израсходованы.,Вызывает паралич Служить. Служитьи Служитьиззависимости,Неудачи распространяются,вызвать цепную реакцию,Это вызовет катастрофические и серьезные последствия для всей системы.,Вот и вседа Служить Винаиз“лавина”эффектотвечать。 Причины лавинного эффекта:
так называемый даунгрейд,Вот тогда тает некий Служить,Устройство «Служить» больше не будет настраиватьиспользовать,В это время клиент может самостоятельно подготовить локальный обратный вызов.,返回одининдивидуальный Значение по умолчанию。Это также можно понимать как метод сокрытия。 Понижение рейтинга произойдет
После того, как аналоговый предохранитель достигает максимального доступа к службе, он напрямую запрещает доступ, отключает питание, а затем вызывает метод понижения уровня обслуживания и возвращает дружественное приглашение. Это эквивалентно предохранителю, сервис деградирует -----> а потом перегорает -----> вызывающий канал восстанавливается
Ограничение тока можно рассматривать как тип ухудшения качества обслуживания. Ограничение тока предназначено для ограничения входного и выходного трафика системы для достижения цели защиты системы. Вообще говоря, пропускную способность системы можно измерить. Чтобы обеспечить стабильную работу системы, после достижения порога, который необходимо ограничить, необходимо ограничить трафик и принять небольшой объем мер. достичь цели ограничения трафика. Например: отсрочка урегулирования, отказ от решения или частичный отказ от решения и т. д. Строго запрещены такие операции, как мгновенное уничтожение и высокий параллелизм. Скопление в виде пчелиного рая строго запрещено. Очередь выполняется упорядоченно. N элементов в секунду выполняются упорядоченно.
серийный номер | действовать |
---|---|
1 | создавать HystrixCommand (использоватьсуществоватьзависимостьиз Служить возвращает результат одной операции за раз) или HystrixObserableCommand (использоватьсуществоватьзависимостьиз Служить возвращает несколько результатов срабатывания раз) объект. |
2 | Команда выполнена. в HystrixComand Первые два метода выполнения, приведенные ниже, реализованы и HystrixObservableCommand Реализованы два последних метода выполнения: выполнить(): синхронное выполнение, возвращающее один объект результата из зависимой службы; или — это исключение, вызываемое при возникновении ошибки. очередь(): асинхронное выполнение, Возврат напрямую объект будущего, Он содержит Служить для возврата единственного результата в конце выполнения объекта.observe(): return Observable объект, он представляет собой действие из нескольких результатов, это Hot Наблюдаемый(независимо от «Источник событий» Есть «Абонент» опубликует мероприятие после того, как существусоздавать, так что для Hot Observable каждого «Абонент» Все это могло быть от «Источник событий» начал с половины пути и, вероятно, просто увидел весь частичный процесс). toObservable(): также вернет Observable объект, также представляет собой действие из нескольких результатов, но возвращает холодный Наблюдаемый (нет «Абонент» Событие не будет опубликовано, но будет ждать, пока не появится «Абонент» Событие будет опубликовано позже, поэтому для Cold Observable из подписчиков гарантированно будет виден весь процесс операции с самого начала). |
3 | Если функция кэширования запросов текущей команды включена и кэш команд задействован, кэшированный результат будет немедленно возвращен в форме объекта Observable. |
4 | Убедитесь, что автоматический выключатель разомкнут. Если автоматический выключатель разомкнут, Hystrix не выполнит команду и вместо этого будет перенаправлен на fallback логика обработки (раздел 8 шаг); если автоматический выключатель выключен, проверьте ресурс «Есть доступное использование» для выполнения команды (п. 5 шаг). |
5 | пул потоков/очередь запросов/Сумма сигналада Он полный?。Если команда зависит от Служитьиз Собственныйпул потоковиочередь запросов,Семафор (если пул потоков не используется) уже заполнен., Так Hystrix Не выполнит команду, Вместо этого он пересылается на fallback логика обработки (раздел8шаг). |
6 | Hystrix Метод запроса зависимых служб будет определен на основе написанного нами метода. HystrixCommand.run() : возвращает один результат или выдает исключение. HystrixObservableCommand.construct(): возвращает Observable Объект для выдачи нескольких результатов или через onError Отправить уведомление об ошибке. |
7 | Hystrix сообщит автоматическому выключателю об «успехе», «неуспехе», «отклонении», «тайм-ауте» и другой информации, а автоматический выключатель будет поддерживать набор счетчиков для подсчета этих данных. Автоматический выключатель будет использовать эту статистику, чтобы решить, следует ли размыкать автоматический выключатель для «выключения/короткого замыкания» запросов на зависимую услугу. |
8 | Если выполнение команды не удалось, Hystrix войдет fallback Попробуйте откатить обработку, Мы также обычно называем это действием «Понижение уровня сервиса». Следующие ситуации могут привести к ухудшению качества обслуживания: Шаг 4: Текущая команда находится в состоянии «предохранитель/короткое замыкание», а автоматический выключатель разомкнут. Шаг 5: Пул потоков текущей команды, Запросить очередь или Или когда семафор заполнен. Шаг 6: HystrixObservableCommand.construct() или HystrixCommand.run() Когда генерируется исключение. |
9 | При успешном выполнении команды Hystrix Он обработает результат Возврат напрямуюилидакObservable вернуться в форму. |
tips:Если у нас нет командывыполнить Логика перехода на более раннюю версиюили ВОЗсуществовать В логике обработки перехода на более раннюю версию возникло исключение., Hystrix все равно вернет Observable объект, Но он не выдает никаких данных о результатах, но через onError Метод уведомляет команду о необходимости немедленно прервать запрос и отправляет исключение, вызвавшее сбой команды, вызывающей стороне через метод onError().
Zuul — это продуманное решение для маршрутизации, предоставляемое Spring Cloud. В зависимости от пути запроса шлюз находит указанный микросервис и пересылает запрос на различные интерфейсы микросервиса. Он скрывает реальный адрес интерфейса микросервиса извне. Три важных понятия: динамическая таблица маршрутизации, позиционирование маршрута, обратный прокси.
Внешнее воздействие, проверка разрешений, агрегирование сервисов, аудит журналов
Шлюз анализирует и фильтрует запросы для всех служб, а фильтр анализирует и фильтрует запросы для одной службы.
Zuul — это Java-языковая реализация.,В основном предоставляет шлюз Служить для javaСлужить,В частности, существующая архитектура микросервисов может быть более гибкой и работать со шлюзом. Nginx реализован с использованием использованияCязык.,Лучшая производительность, чем Zuul,Но для реализации пользовательского действия вам необходимо быть знакомым с luayazyk.,Высокие требования к программистам,Можно использовать Nginx для Zuul Cluster.
Spring Cloud Gateway как Spring Cloud Шлюз в экосистеме, нацеленный на замену Зуул, весной Cloud В версиях 2.0 и выше нет поддержки новых версий Zuul. Для интеграции с последней высокопроизводительной версией 2.0 или выше по-прежнему используется Zuul. 1.x Старая версия режима без реактора. Чтобы улучшить производительность шлюза, SpringCloud Шлюз реализован на основе платформы WebFlux, а нижний уровень платформы WebFlux использует высокопроизводительную структуру связи в режиме Reactor Netty. Spring Cloud Цель Gateway — предоставить единый метод маршрутизации, основанный на Filter Цепной метод обеспечивает основные функции шлюза, такие как: безопасность, мониторинг/индикаторы и ограничение тока.
клиент К Spring Cloud Gateway Сделайте запрос. затем в Gateway Handler Mapping Найдите маршрут, соответствующий запросу, и отправьте его по адресу Gateway Web Handler。 Handler Затем отправьте запрос нашему фактическому сервису через указанную цепочку фильтров для выполнения бизнес-логики, а затем вернитесь. Пунктирная линия между фильтрами связана с тем, что фильтры могут выполнять бизнес-логику до («до») или после («после») отправки прокси-запросов. Фильтры типа «pre» могут выполнять проверку параметров, проверку разрешений, мониторинг трафика, вывод журналов, преобразование протоколов и т. д. В фильтре типа «пост» вы можете изменять содержимое ответа и заголовки ответа, вывод журнала, мониторинг трафика и т. д., что играет очень важную роль. основная логика:Переадресация маршрутов + цепочка фильтров выполнения
RouteLocator
изBean
@Configuration public class GateWayConfig { @Bean public RouteLocator customRouteLocator(RouteLocatorBuilder routeBuilder){ return routeBuilder.routes().route("xiaobear-config",r -> r.path("/spring-cloud-gateway-configuration").uri("https://www.bilibili.com/video/BV18E411x7eT")).build(); } }Для остальных посетите официальный сайт: https://docs.spring.io/spring-cloud-gateway/docs/current/reference/html/#gateway-request-predicates-factories.
Подвести итог:Predicate
Сразудадлявыполнитьодин组匹配规则,Пусть запрос найдет нужноеотвечатьизRoute
Процесс
Фильтры маршрутизации можно использовать для изменения входящих HTTP-запросов и возвращаемых HTTP-ответов. Фильтры маршрутизации могут указывать только маршруты для использования. Spring Cloud Gateway имеет множество встроенных фильтров маршрутизации, каждый из которых генерируется фабричным классом GatewayFilter.
Классификация по жизненному циклу
Pre
Post
Классифицировано по типу
Настроитьобщая ситуацияфильтрустройство
Global Filters
В основном для реализации двух интерфейсовimplements GlobalFilter,Ordered
В конкретных случаях см.: Пример руководства.
SpringCloud Config обеспечивает централизованную внешнюю настройку в архитектуре микросервисов, Конфигуратор обеспечивает централизованную внешнюю настройку для всех сред различных микросервисных приложений. SpringCloud Configразделен наСервериклиентдве части。
/{application}/{profile}[/{label}]
/{application}-{profile}.yml
/{label}/{application}-{profile}.yml
/{application}-{profile}.properties
/{label}/{application}-{profile}.properties
в“отвечатьиспользоватьпрограмма”какSpringApplication
серединаизspring.config.name
инъекция(то есть рутинаSpring Bootотвечатьиспользоватьпрограммасередина Обычно“отвечатьиспользоватьпрограмма”),«Профиль» — активный профиль (или список атрибутов, разделенных запятыми).,«label» — необязательная метка изgit (по умолчанию — «master»)
метка: филиал
имя: имя службы
профили: среда (dev/test/prod)
Сотрудничать
Spring Cloud Bus
выполнить Конфигурацияиздинамичныйизобновить
Spring Cloud Шина соединяет распределенные системы и узлы с облегченными брокерами сообщений. Это можно использовать для широковещательной передачи изменений состояния (например, изменений конфигурации) или других команд управления. Ключевая идея заключается в том, что Bus похож на расширение Spring. Bootотвечатьиспользоватьпрограммаизраспределенное выполнениеустройство,Но его также можно использовать как канал связи между соответствующими программами. Единственная текущая реализация — включить использование брокера AMQP в качестве транспорта.,Но тот же самый базовый набор функций (есть некоторые возвращаться в зависимости от трансмиссии) существуют и другие трансмиссии из дорожной карты.
рекомендую:второйиндивидуальный思想更合适один点,Первый не подходит по следующим причинам:
Я не хочу уведомлять обо всех обновлениях, а просто хочу обновить часть конфигурации. Формула следующая👇. http://localhost:Номер порта центра конфигурации/актуатора/bus-refresh/{назначение} Запросы на шину/обновление больше не отправляются конкретным экземплярам службы, а для настройки сервер и указать необходимость обновления конфигурации из Служили экземпляру через класс параметров назначения Пример. В качестве примера возьмем обновление клиента конфигурации, работающего на порту 3355.
Скрывает различия в базовом промежуточном программном обеспечении сообщений, снижает затраты на переключение и унифицирует модель программирования сообщений; облегченную управляемую событиями структуру микросервисов, которая может использовать простую декларативную модель для отправки и получения сообщений, в основном реализованную как Apache Kafka и RabbitMQ;
существуют без понятия связующего из футляра,Мы из SpringBoot должны использовать непосредственно промежуточное программное обеспечение для обмена сообщениями.,Поскольку каждое промежуточное программное обеспечение сообщений создается с разными первоначальными намерениями,,Будут большие различия в деталях их реализации при определении связующего в качестве среднего слоя.,идеальновыполнить ПонятноДолжны быть изолированы между деталями программы и промежуточного программного обеспечения сообщений.。通过Котвечатьиспользоватьпрограмма暴露统одинизChannelряд,делатьотвечатьиспользоватьпрограмма不нуждаться再考虑各种不同изинформациясерединапромежуточное программное обеспечениевыполнить。Определив связующее Binderкак средний слой,Реализована изоляция между прикладной программой и деталями промежуточного программного обеспечения сообщений.
Добавить атрибуты группы
Group
,микросервисыотвечатьиспользовать放置于同одининдивидуальныйGroup
середина,Это гарантирует, что сообщение будет использовано одним из приложений только один раз. Различные группы могут потреблять,Соревнования будут проводиться внутри одной группы.,Только один из них можно съесть.
Spring Cloud Sleuth предоставляет комплексное решение для отслеживания. Он предоставляет решения для отслеживания в распределенных системах и совместим с zipkin.
Хорошо, на этом сегодняшний рассказ закончен. Я запомнил еще кое-что. Вот краткое изложение колонки вопросов для собеседования.