LoadBalancer配置

1.配置

# app1-service.yaml
apiVersion: v1
kind: Service
metadata:
  name: app1-service
spec:
  selector:
    app: app1
  ports:
    - protocol: TCP
      port: 80
      targetPort: 80
  type: LoadBalancer # 类型为LoadBalancer
---
# app2-service.yaml  
apiVersion: v1
kind: Service
metadata:
  name: app2-service
spec:
  selector:
    app: app2
  ports:
    - protocol: TCP
      port: 80
      targetPort: 80
  type: LoadBalancer # 类型为LoadBalancer
---
# api-service.yaml
apiVersion: v1
kind: Service
metadata:
  name: api-service
spec:
  selector:
    app: api
  ports:
    - protocol: TCP
      port: 80
      targetPort: 80
  type: LoadBalancer # 类型为LoadBalancer
  1. 三个独立的公网IP:云平台会为每个LoadBalancer Service分配一个唯一的外部IP。

    • app1-service -> 11.22.33.44

    • app2-service -> 55.66.77.88

    • api-service -> 99.00.11.22

  2. 访问方式

    • 访问App1: http://11.22.33.44 或 http://app1.com (需将域名app1.com解析到11.22.33.44)

    • 访问App2: http://55.66.77.88 或 http://app2.com (需将域名app2.com解析到55.66.77.88)

    • 访问API: http://99.00.11.22 或 http://api.app1.com (需将域名api.app1.com解析到99.00.11.22)

  3. 核心问题

    • 成本高:在公有云上,每个负载均衡器都是一个独立的收费资源,价格不菲。

    • 管理复杂:需要管理三个外部IP和三个负载均衡器。

    • 浪费资源:每个服务哪怕流量很小,也需要独占一个负载均衡器。

### 如何配置 Spring Cloud LoadBalancer 实现负载均衡 #### 使用默认策略 Spring Cloud LoadBalancer 默认提供两种负载均衡策略:`RandomLoadBalancer` 和 `RoundRobinLoadBalancer`。其中,随机分配策略 (`RandomLoadBalancer`) 是默认选项[^1]。 为了使用这些默认策略,在应用程序的依赖项中加入相应的 Starter 即可: ```xml <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-loadbalancer</artifactId> </dependency> ``` 对于大多数场景,默认的行为已经足够满足需求。如果希望切换到轮询方式,则可以在应用配置文件 (application.yml 或 application.properties) 中指定: ```yaml spring: cloud: loadbalancer: algorithm: round-robin ``` 此设置将改变默认行为,使服务调用按照顺序依次访问各个实例[^2]。 #### 自定义负载均衡算法 当内置的选择无法完全适应特定业务逻辑时,可以创建自定义的负载均衡器。这通常涉及编写一个新的 Java 类并将其注册为 Bean 来覆盖现有的选择机制。具体来说,可以通过扩展 `AbstractLoadBalancingClient` 并重写相应的方法来完成这一过程[^3]。 下面是一个简单的例子展示如何实现这一点: ```java import org.springframework.cloud.client.ServiceInstance; import org.springframework.cloud.loadbalancer.core.RandomLoadBalancer; import org.springframework.cloud.loadbalancer.core.ReactorServiceInstanceLoadBalancer; import reactor.core.publisher.Mono; public class CustomLoadBalancer extends AbstractLoadBalancer<ServiceInstance> { @Override public Mono<Response<ServiceInstance>> choose(Request request) { List<ServiceInstance> instances = getAvailableInstances(request.getServiceName()); // 这里可以根据自己的规则挑选合适的instance ServiceInstance instance = selectBestInstance(instances); return Mono.just(new DefaultResponse(instance)); } private ServiceInstance selectBestInstance(List<ServiceInstance> instances){ // Implement custom selection logic here. return null; // Placeholder implementation } } ``` 之后还需要通过配置类将这个新的负载均衡器注入到上下文中以便被框架识别和使用。 最后一步是在配置文件中启用新加载平衡器: ```yaml spring: cloud: loadbalancer: ribbon.enabled: false # 关闭旧版Ribbon支持 ``` 以上就是有关于如何配置 Spring Cloud LoadBalancer 的基本介绍以及一些高级定制化方法[^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

skyQAQLinux

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值