You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何不借助HAProxy等外部服务实现gRPC客户端侧负载均衡?

gRPC-Node 客户端侧负载均衡实现(无需外部服务)

内置策略快速实现

gRPC-JS 内置了round_robin负载均衡策略,无需依赖外部服务,直接传入多服务地址并指定策略即可实现基础负载均衡:

const grpc = require('@grpc/grpc-js');
const protoLoader = require('@grpc/proto-loader');

// 加载proto文件
const packageDef = protoLoader.loadSync('your_service.proto');
const serviceProto = grpc.loadPackageDefinition(packageDef);

// 配置多服务地址与轮询策略
const client = new serviceProto.YourService(
  'grpc-server-1:50051,grpc-server-2:50051,grpc-server-3:50051',
  grpc.credentials.createInsecure(),
  {
    'grpc.lb_policy_name': 'round_robin'
  }
);

客户端会自动在多个地址间轮询分发请求,满足简单场景的负载均衡需求。

自定义解析器实现动态地址管理

如果需要动态增减服务实例,可以通过自定义解析器来管理地址列表:

1. 实现自定义解析器类

const grpc = require('@grpc/grpc-js');

class DynamicResolver extends grpc.Resolver {
  constructor(target, listener, options) {
    super(target, listener, options);
    this.addressList = [];
    // 初始化服务地址
    this.updateAddresses(['grpc-server-1:50051', 'grpc-server-2:50051']);
  }

  // 更新地址并通知客户端
  updateAddresses(newAddresses) {
    this.addressList = newAddresses.map(addr => ({
      address: addr,
      type: grpc.AddressType.IPv4
    }));
    this.listener.onSuccessfulResolution(this.addressList, {
      serviceConfig: { loadBalancingConfig: [{ round_robin: {} }] }
    });
  }

  // 实现必要的抽象方法
  startResolution() {}
  refreshResolution() {}
  cancelResolution() {}
}

2. 注册并使用自定义解析器

// 注册自定义解析器工厂
grpc.registerResolverFactory('dynamic', {
  createResolver: (target, listener, options) => new DynamicResolver(target, listener, options)
});

// 创建客户端时使用自定义协议前缀
const client = new serviceProto.YourService(
  'dynamic:///service-target',
  grpc.credentials.createInsecure()
);

// 后续可动态更新地址(比如从本地配置或内部服务获取新地址)
// client.getChannel().getResolver().updateAddresses(['new-grpc-server:50051']);

关键注意点

  • 所有服务实例必须提供完全一致的gRPC服务接口,否则会导致调用失败
  • 内置round_robin是基于连接的轮询,若需按请求权重、负载状态等精细化控制,可扩展自定义负载均衡策略
  • 无需依赖外部服务发现组件,硬编码地址或自定义解析器管理地址即可完成客户端侧负载均衡

内容的提问来源于stack exchange,提问作者pxffluvluv

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 20:22:41