尚未崩坏 发表于 2025-1-3 21:29:51

负载平衡的意义什么?思维导图 代码示例(java 架构)

负载平衡(Load Balancing)是分布式体系中用于优化资源利用、最大化吞吐量、最小化响应时间以及避免任何单一节点过载的关键技术。通过在多个服务器实例之间分配传入的网络流量,负载平衡器确保了体系的高可用性和可靠性。
负载平衡的意义


[*] 提高可用性

[*]通过将请求分发到多个后端服务器,即使某些服务器出现故障,其他康健的服务器仍旧可以处理请求,从而包管服务的持续可用。

[*] 提拔性能

[*]分散流量可以淘汰单个服务器的压力,使每个服务器可以或许更高效地处理请求,进而提拔整体体系的响应速度和吞吐量。

[*] 加强扩展性

[*]随着业务增长,可以通过简朴地添加更多的服务器来水平扩展体系容量,而不必要对现有架构举行重大改动。

[*] 容错本领

[*]当一个或多个服务器发生故障时,负载平衡器可以或许自动检测并绕过这些不可用的服务器,继续将请求发送给正常工作的服务器。

[*] 会话长期性

[*]某些应用必要保持用户会话状态,在这种情况下,负载平衡器可以根据特定规则(如 IP 地址、cookie 等)将来自同一用户的请求始终路由到同一个服务器。

[*] 地理分布

[*]对于跨国企业来说,负载平衡可以帮助根据用户的地理位置选择最近的数据中心,低落延迟并改善用户体验。

[*] 安全性和合规性

[*]可以配置负载平衡器执行 SSL/TLS 终止、Web 应用防火墙等功能,提供额外的安全防护层。

思维导图结构

Load Balancing Significance
├── 提高可用性
│   └── 分散风险, 保证服务持续可用
├── 提升性能
│   └── 减少单个服务器压力, 提高响应速度
├── 增强扩展性
│   └── 简单添加更多服务器实现水平扩展
├── 容错能力
│   └── 自动绕过故障服务器, 继续服务
├── 会话持久性
│   └── 根据特定规则保持用户会话状态
├── 地理分布
│   └── 根据地理位置选择数据中心, 改善用户体验
└── 安全性和合规性
    └── 执行SSL/TLS终止, Web应用防火墙等
示例代码:基于 Ribbon 的客户端负载均衡

Ribbon 是 Netflix 开源的一个客户端负载均衡库,它允许我们在没有专用硬件设备的情况下实现负载均衡功能。以下是怎样在一个 Spring Cloud 应用步调中集成 Ribbon 来举行客户端负载均衡的示例。
添加依赖项 (pom.xml)

<dependencies>
    <dependency>
      <groupId>org.springframework.cloud</groupId>
      <artifactId>spring-cloud-starter-netflix-ribbon</artifactId>
    </dependency>
    <!-- 如果使用 Eureka 作为服务发现 -->
    <dependency>
      <groupId>org.springframework.cloud</groupId>
      <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
    </dependency>
</dependencies>
主应用步调类 (Application.java)

package com.example.loadbalancer;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.client.loadbalancer.LoadBalanced;
import org.springframework.context.annotation.Bean;
import org.springframework.web.client.RestTemplate;

@SpringBootApplication
@EnableDiscoveryClient // 启用服务发现
public class Application {

    public static void main(String[] args) {
      SpringApplication.run(Application.class, args);
    }

    @Bean
    @LoadBalanced // 启用负载均衡
    RestTemplate restTemplate() {
      return new RestTemplate();
    }
}
创建 REST 客户端 (HelloService.java)

package com.example.loadbalancer.service;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.web.client.RestTemplate;

@Service
public class HelloService {

    private final RestTemplate restTemplate;

    @Autowired
    public HelloService(RestTemplate restTemplate) {
      this.restTemplate = restTemplate;
    }

    public String sayHello() {
      // 使用服务名代替硬编码的 URL
      return restTemplate.getForObject("http://hello-service/hello", String.class);
    }
}
在这个例子中,我们创建了一个名为 hello-service 的微服务,并且通过 RestTemplate 和 @LoadBalanced 注解实现了客户端负载均衡。这意味着当调用 sayHello() 方法时,Ribbon 会自动从注册中心获取所有可用的服务实例列表,并根据其内置的算法选择一个实例来举行 HTTP 请求。
利用 Ribbon 配置自定义负载均衡策略

如果你想要自定义负载均衡策略,可以在配置文件中指定差别的规则。例如,下面是怎样设置轮询(Round Robin)策略:
配置文件 (application.yml)

hello-service:
ribbon:
    NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RoundRobinRule # 设置为轮询策略
大概你可以编写本身的负载均衡规则类,并在配置文件中引用它。好比:
package com.example.loadbalancer.config;

import com.netflix.loadbalancer.IRule;
import com.netflix.loadbalancer.RandomRule;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class RibbonConfig {

    @Bean
    public IRule ribbonRule() {
      // 返回你想要使用的规则实例,这里以随机选择为例
      return new RandomRule();
    }
}
然后在配置文件中指定该配置类:
hello-service:
ribbon:
    NFLoadBalancerRuleClassName: com.example.loadbalancer.config.RibbonConfig$RandomRule
结论

负载平衡对于构建高性能、可扩展且可靠的分布式体系至关重要。通过合理利用像 Ribbon 这样的工具,开发者可以在不依赖昂贵的硬件设备的情况下轻松实现这一目的。上述代码展示了怎样在一个 Spring Cloud 应用步调中集成 Ribbon 来举行客户端负载均衡,并提供了几种常见的负载均衡策略供参考。根据具体的应用场景和技术栈的差别,你可以进一步调解和优化这些基础概念。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页: [1]
查看完整版本: 负载平衡的意义什么?思维导图 代码示例(java 架构)