Реализация балансировки нагрузки в Spring Boot: концепции, функции и реализация
Реализация балансировки нагрузки в Spring Boot: концепции, функции и реализация

1. Введение концепции

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

  1. Балансировка нагрузки на стороне сервера:развертыватьсуществовать Балансировщик нагрузки на стороне сервера,Такие как NGINX и HAProxy.
  2. Балансировка клиентской нагрузки:клиентом(Такие как микросервисы)самоходныйвыполнить,Обычно используется в микросервисной архитектуре.

В Spring Boot мы можем реализовать балансировку нагрузки клиента, представив Spring Cloud LoadBalancer или Netflix Ribbon. В этой статье будут представлены эти два решения и подробно объяснено, как реализовать балансировку нагрузки в Spring Boot.

2. Функция балансировки нагрузки

К основным функциям балансировки нагрузки относятся:

  • распределение трафика:Равномерно распределяйте трафик между несколькими экземплярами службы.,чтобы избежать перегрузки в одной точке.
  • аварийное переключение:Когда экземпляр службы недоступен,Автоматически перенаправлять трафик на другие доступные инстансы.
  • проверка здоровья:Регулярно проверяйте состояние работоспособности экземпляров службы.,Убедитесь, что запросы перенаправляются только к исправным экземплярам.
  • Сохранение сеанса:Убедитесь, что запросы для одного и того же сеанса направляются в один и тот же экземпляр службы.(если необходимо)。

3. Внедрите Spring Cloud LoadBalancer

3.1 Введение зависимостей

существовать Maven проект pom.xml Добавить в файл Spring Cloud LoadBalancer Соответствующие зависимости:

Язык кода:javascript
копировать
xmlкопироватькод<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-loadbalancer</artifactId>
</dependency>
3.2 Настройка LoadBalancerClient

Создайте класс конфигурации для определения политики балансировки нагрузки:

Язык кода:javascript
копировать
javaкопировать импорт org.springframework.cloud.loadbalancer.annotation.LoadBalancerClient;
импортировать org.springframework.cloud.loadbalancer.core.ServiceInstanceListSupplier;
импортировать org.springframework.cloud.loadbalancer.core.RoundRobinLoadBalancer;
импортировать org.springframework.cloud.loadbalancer.support.LoadBalancerClientFactory;
импортировать org.springframework.context.annotation.Bean;
импортировать org.springframework.context.annotation.Configuration;

@Конфигурация
@LoadBalancerClient (имя = «мой-сервис», конфигурация = MyLoadBalancerConfiguration.class)
общественный класс MyLoadBalancerConfiguration {

    @Бин
    public RoundRobinLoadBalancer roundRobinLoadBalancer(LoadBalancerClientFactory clientFactory) {
        вернуть новый RoundRobinLoadBalancer(clientFactory.getLazyProvider("мой-сервис", ServiceInstanceListSupplier.class), "мой-сервис");
    }
}
3.3 Использование LoadBalancerClient

существоватьв контроллереиспользовать LoadBalancerClient Чтобы выбрать экземпляр службы и отправить запрос:

Язык кода:javascript
копировать
javaкопировать импорт кода org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cloud.client.ServiceInstance;
import org.springframework.cloud.loadbalancer.annotation.LoadBalancerClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;

@RestController
public class MyController {

    @Autowired
    private LoadBalancerClient loadBalancerClient;

    @Autowired
    private RestTemplate restTemplate;

    @GetMapping("/invokeService")
    public String invokeService() {
        ServiceInstance serviceInstance = loadBalancerClient.choose("my-service");
        String url = serviceInstance.getUri().toString() + "/endpoint";
        return restTemplate.getForObject(url, String.class);
    }
}
3.4 Настройка RestTemplate

Конфигурация RestTemplate отправить HTTP просить:

Язык кода:javascript
копировать
javaкопировать импорт кода org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.client.RestTemplate;

@Configuration
public class MyConfiguration {
    
    @Bean
    public RestTemplate restTemplate() {
        return new RestTemplate();
    }
}

4. Внедрить ленту Netflix

Обратите внимание,что Нетфликс Ribbon ужесуществовать Spring Cloud Hoxton Устарело после версии 1, рекомендуется использовать Spring Cloud LoadBalancer заменять.

4.1 Введение зависимостей

существовать Maven проект pom.xml Добавить в файл Ribbon Соответствующие зависимости:

Язык кода:javascript
копировать
xmlкопироватькод<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-ribbon</artifactId>
</dependency>
4.2 Настройка ленты

существовать application.yml или application.properties в файле Конфигурация Ribbon:

Язык кода:javascript
копировать
yamlкопировать код my-service:
  лента:
    эврика:
      включено: ложь
    listOfServers: локальный хост: 8081, локальный хост: 8082
4.3 Использование LoadBalancerClient

существоватьв контроллереиспользовать LoadBalancerClient Чтобы выбрать экземпляр службы и отправить запрос:

Язык кода:javascript
копировать
javaкопировать импорт кода org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cloud.client.ServiceInstance;
import org.springframework.cloud.client.loadbalancer.LoadBalancerClient;
import org.springframework.cloud.netflix.ribbon.RibbonClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;

@RestController
@RibbonClient(name = "my-service")
public class MyController {

    @Autowired
    private LoadBalancerClient loadBalancerClient;

    @Autowired
    private RestTemplate restTemplate;

    @GetMapping("/invokeService")
    public String invokeService() {
        ServiceInstance serviceInstance = loadBalancerClient.choose("my-service");
        String url = serviceInstance.getUri().toString() + "/endpoint";
        return restTemplate.getForObject(url, String.class);
    }
}
4.4 Настройка RestTemplate

Конфигурация RestTemplate отправить HTTP просить:

Язык кода:javascript
копировать
javaкопировать импорт кода org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.client.RestTemplate;

@Configuration
public class MyConfiguration {
    
    @Bean
    public RestTemplate restTemplate() {
        return new RestTemplate();
    }
}

5. Резюме

Балансировка нагрузки — ключевая технология, обеспечивающая высокую доступность и производительность в современных распределенных системах. существуют Spring Boot, мы можем использовать Spring Cloud LoadBalancer или Netflix Ribbon. нагрузка.

  • Spring Cloud LoadBalancer:легкий、Легко интегрировать,Рекомендуется для новых проектов.
  • Netflix Ribbon:虽уже弃用,Но существование по-прежнему доступно при сохранении старых проектов.

Внедряя эти компоненты балансировки нагрузки, разработчики могут легко реализовать такие функции, как распределение трафика, аварийное переключение и проверки работоспособности, тем самым улучшая стабильность и масштабируемость системы. Я надеюсь, что эта статья поможет вам лучше понять и реализовать балансировку нагрузки в Spring Boot.

Я участвую в последнем конкурсе эссе для специального учебного лагеря Tencent Technology Creation 2024.,Приходите и разделите приз со мной!

boy illustration
Углубленный анализ переполнения памяти CUDA: OutOfMemoryError: CUDA не хватает памяти. Попыталась выделить 3,21 Ги Б (GPU 0; всего 8,00 Ги Б).
boy illustration
[Решено] ошибка установки conda. Среда решения: не удалось выполнить первоначальное зависание. Повторная попытка с помощью файла (графическое руководство).
boy illustration
Прочитайте нейросетевую модель Трансформера в одной статье
boy illustration
.ART Теплые зимние предложения уже открыты
boy illustration
Сравнительная таблица описания кодов ошибок Amap
boy illustration
Уведомление о последних правилах Points Mall в декабре 2022 года.
boy illustration
Даже новички могут быстро приступить к работе с легким сервером приложений.
boy illustration
Взгляд на RSAC 2024|Защита конфиденциальности в эпоху больших моделей
boy illustration
Вы используете ИИ каждый день и до сих пор не знаете, как ИИ дает обратную связь? Одна статья для понимания реализации в коде Python общих функций потерь генеративных моделей + анализ принципов расчета.
boy illustration
Используйте (внутренний) почтовый ящик для образовательных учреждений, чтобы использовать Microsoft Family Bucket (1T дискового пространства на одном диске и версию Office 365 для образовательных учреждений)
boy illustration
Руководство по началу работы с оперативным проектом (7) Практическое сочетание оперативного письма — оперативного письма на основе интеллектуальной системы вопросов и ответов службы поддержки клиентов
boy illustration
[docker] Версия сервера «Чтение 3» — создайте свою собственную программу чтения веб-текста
boy illustration
Обзор Cloud-init и этапы создания в рамках PVE
boy illustration
Корпоративные пользователи используют пакет регистрационных ресурсов для регистрации ICP для веб-сайта и активации оплаты WeChat H5 (с кодом платежного узла версии API V3)
boy illustration
Подробное объяснение таких показателей производительности с высоким уровнем параллелизма, как QPS, TPS, RT и пропускная способность.
boy illustration
Удачи в конкурсе Python Essay Challenge, станьте первым, кто испытает новую функцию сообщества [Запускать блоки кода онлайн] и выиграйте множество изысканных подарков!
boy illustration
[Техническая посадка травы] Кровавая рвота и отделка позволяют вам необычным образом ощипывать гусиные перья! Не распространяйте информацию! ! !
boy illustration
[Официальное ограниченное по времени мероприятие] Сейчас ноябрь, напишите и получите приз
boy illustration
Прочтите это в одной статье: Учебник для няни по созданию сервера Huanshou Parlu на базе CVM-сервера.
boy illustration
Cloud Native | Что такое CRD (настраиваемые определения ресурсов) в K8s?
boy illustration
Как использовать Cloudflare CDN для настройки узла (CF самостоятельно выбирает IP) Гонконг, Китай/Азия узел/сводка и рекомендации внутреннего высокоскоростного IP-сегмента
boy illustration
Дополнительные правила вознаграждения амбассадоров акции в марте 2023 г.
boy illustration
Можно ли открыть частный сервер Phantom Beast Palu одним щелчком мыши? Супер простой урок для начинающих! (Прилагается метод обновления сервера)
boy illustration
[Играйте с Phantom Beast Palu] Обновите игровой сервер Phantom Beast Pallu одним щелчком мыши
boy illustration
Maotouhu делится: последний доступный внутри страны адрес склада исходного образа Docker 2024 года (обновлено 1 декабря)
boy illustration
Кодирование Base64 в MultipartFile
boy illustration
5 точек расширения SpringBoot, супер практично!
boy illustration
Глубокое понимание сопоставления индексов Elasticsearch.
boy illustration
15 рекомендуемых платформ разработки с нулевым кодом корпоративного уровня. Всегда найдется та, которая вам понравится.
boy illustration
Аннотация EasyExcel позволяет экспортировать с сохранением двух десятичных знаков.