如何解决Nacos上修改服务实例的权重不生效问题

本文介绍如何解决Nacos上修改服务实例的权重不生效问题。

问题现象

在MSE控制台上添加或修改服务实例时,设置了对应实例的权重并希望按照权重比例进行负载均衡。但实际调用流量时,流量分配未按照预期权重进行分配。

问题原因

  • 您使用的应用框架不支持按权重分配流量负载均衡。

  • 您使用的应用框架有自身的负载均衡配置方式,不使用Nacos的权重属性进行负载均衡。

  • 您的应用未使用权重值进行地址选择。

解决方案

Nacos中服务实例的权重仅为实例的一个属性。当修改权重值后,权重值会伴随实例信息被推送到Nacos客户端。实际使用时由于使用方式的不同,可能会导致权重属性被忽略。

  • 若您所使用的应用框架不支持按权重分配流量。例如Spring Cloud Alibaba等框架,此类框架仅识别流量值为0(不引入流量)非0(引入流量),不支持按照Nacos实例中的流量值进行流量负载均衡。您可以按照以下方法解决。

    • 查看所使用的应用框架是否支持此功能的扩展,若支持扩展可以按照扩展方式使用。

    • 更换其他应用框架。

  • 您使用的应用框架有自身的负载均衡配置方式,不支持使用Nacos的权重属性。如DubboSpring Cloud Alibaba + Loadbalance等。

    您可以在社区中询问或根据对应框架文档查看如何配置负载均衡。

  • 您可能未使用应用框架进行开发,但是应用在处理时未使用权重值进行地址选择。

    • 应用在获取到实例列表后,根据其中的weight字段实现自定义的选择逻辑。

    • 使用Nacos客户端默认的selectOneHealthyInstance方法进行选择。更多信息,请参见Nacos Java SDK