负载均衡|nacos 负载均衡ribbon 轮询策略 权重2种方式

NACOS.一个易于使用的动态服务发现、配置和服务管理平台,用于构建云原生应用程序
负载均衡ribbon

1.什么是Ribbon
目前主流的负载方案分为以下两种:
集中式负载均衡,在消费者和服务提供方中间使用独立的代理方式进行负载,有硬件的(比如 F5),也有软件的(比如Nginx)。
客户端根据自己的请求情况做负载均衡,Ribbon 就属于客户端自己做负载均衡。
Spring Cloud Ribbon是基于Netflix Ribbon 实现的一套客户端的负载均衡工具,Ribbon客户端组件提供一系列的完善的配置,如超
时,重试等。通过Load Balancer获取到服务提供的所有机器实例,Ribbon会自动基于某种规则(轮询,随机)去调用这些服务。Ribbon也可以实现我们自己的负载均衡算法。

公司看项目 注意点
springCloud alibaba 版本

ideal 配置nacos pom导入包
#properties 写入下面版本 2.3.2.RELEASE Hoxton.SR9 2.2.6.RELEASE ? ? #导入dependency依赖 org.springframework.cloud spring-cloud-dependencies ${spring-cloud.version} pom import com.alibaba.cloud spring-cloud-alibaba-dependencies ${spring-cloud-alibaba.version} pom import

配置yum
server: port: 12000 spring: application: name: stockserv cloud: nacos: discovery: server-addr: 192.168.64.200:8848 username: nacos password: nacos namespace: public

导入子项目依赖
com.alibaba.cloud spring-cloud-starter-alibaba-nacos-discovery

编写订单的配置文件
@Configuration public class RemoteConfig { @Bean public RestTemplate getAjax(){ return new ResTemplate; } } 浏览器输入地址http://localhost:1201/order-server/addorder

负载均衡

http://localhost:1201/order-server/addorder

轮询策略
轮询 区域轮询 区域分区 从事轮询 线性轮询

方式1
#Application中上面加这个注解 @RibbonClients(value=https://www.it610.com/article/{ @RibbonClient(name="stockserv",configuration= RibbonRule.class) }) ? ? #不在applicaiton目录下 新建实体类RibbonRule @Configuration public class RibbonRule { //手动权重 @Bean public IRule iRule(){ return new NacosRule(); } }

方式二
yum里面配置 stockserv: ribbon: NFloadBalancerRuleClassName: com.alibaba.cloud.nacos.ribbon.NacosRule

--------------注意2种方法不能一起写*--------------
实例
#类似规则引擎。。。。。。。 #自定义负载策略 ? public class MyNacosRule extends AbstractLoadBalancerRule { ? @Autowired private NacosDiscoveryProperties nacosDiscoveryProperties; ? @Override public void initWithNiwsConfig(IClientConfig iClientConfig) { ? } ? @Override public Server choose(Object o) { //从注册中心上获取动态服务列表 DynamicServerListLoadBalancer lb= (DynamicServerListLoadBalancer)getLoadBalancer(); //获取服务名 String serverName = lb.getName(); //构建服务名实例 NamingService ns = nacosDiscoveryProperties.namingServiceInstance(); //nacos基于权重的算法 try { Instance instance = ns.selectOneHealthyInstance(serverName); //放入服务器 return new NacosServer(instance); } catch (NacosException e) { e.printStackTrace(); } //如果出现问题 则返回用户null return null; } } ?

【负载均衡|nacos 负载均衡ribbon 轮询策略 权重2种方式】配置yum
stockserv: ribbon: NFloadBalancerRuleClassName: com.kgc.mynacos.rrules.custrules.MyNacosRule

权重 controller配置权重
#1 controller配置系统权重 ? #controller层 注意(configuration= RibbonRule.class 中修改为RibbonRule) # @SpringBootApplication //@RibbonClients(value=https://www.it610.com/article/{ //@RibbonClient(name="stockserv",configuration= RibbonRule.class) //}) public class OrderApplication { public static void main(String[] args) { SpringApplication.run(OrderApplication.class,args); } } ? #rules层 提供系统自带的权重 rules的位置不要和application一级 ? @Configuration public class RibbonRule { //手动权重 @Bean public IRule iRule(){ //return new NacosRule(); //自动权重 return new RandomRule(); } } ? ? ? #2 controller配置自定义权重 #controller层 注意(configuration= MyNacosRule.class 中修改为MyNacosRule) # @SpringBootApplication //@RibbonClients(value=https://www.it610.com/article/{ //@RibbonClient(name="stockserv",configuration= MyNacosRule.class) //}) public class OrderApplication { public static void main(String[] args) { SpringApplication.run(OrderApplication.class,args); } } ? #rules层 #提供自定义的权重 rules的位置不要和application一级 #----------------------------- public class MyNacosRule extends AbstractLoadBalancerRule { ? @Autowired private NacosDiscoveryProperties nacosDiscoveryProperties; ? ? ? @Override public Server choose(Object o) { //从注册中心上获取动态服务列表 DynamicServerListLoadBalancer lb= (DynamicServerListLoadBalancer)getLoadBalancer(); //获取服务名 String serverName = lb.getName(); //构建服务名实例 NamingService ns = nacosDiscoveryProperties.namingServiceInstance(); //nacos基于权重的算法 try { Instance instance = ns.selectOneHealthyInstance(serverName); //放入服务器 return new NacosServer(instance); } catch (NacosException e) { e.printStackTrace(); } //如果出现问题 则返回用户null return null; } ? @Override public void initWithNiwsConfig(IClientConfig iClientConfig) { ? } }

yml配置权重
#1 yum 中配置系统权重(这个暂时不能用 ) 注意(RibbonRule类别写错 NFLoadBalancerRuleClassName 这个注意大小写) stockserv: ribbon: NFLoadBalancerRuleClassName: com.kgc.mynacos.rrules.custrules.RibbonRule#rules层 提供系统自带的权重 rules的位置不要和application一级 ? @Configuration public class RibbonRule { //手动权重 @Bean public IRule iRule(){ //return new NacosRule(); //自动权重 return new RandomRule(); } } ? ? #2 yum 中配置自定义权重 注意(MyNacosRule类别写错 NFLoadBalancerRuleClassName 这个注意大小写) stockserv: ribbon: NFLoadBalancerRuleClassName: com.kgc.mynacos.rrules.custrules.MyNacosRule ? #rules层 #提供自定义的权重 rules的位置不要和application一级 #----------------------------- public class MyNacosRule extends AbstractLoadBalancerRule { ? @Autowired private NacosDiscoveryProperties nacosDiscoveryProperties; ? ? ? @Override public Server choose(Object o) { //从注册中心上获取动态服务列表 DynamicServerListLoadBalancer lb= (DynamicServerListLoadBalancer)getLoadBalancer(); //获取服务名 String serverName = lb.getName(); //构建服务名实例 NamingService ns = nacosDiscoveryProperties.namingServiceInstance(); //nacos基于权重的算法 try { Instance instance = ns.selectOneHealthyInstance(serverName); //放入服务器 return new NacosServer(instance); } catch (NacosException e) { e.printStackTrace(); } //如果出现问题 则返回用户null return null; } ? @Override public void initWithNiwsConfig(IClientConfig iClientConfig) { ? } }

如果不配置就走轮询策略!!!

    推荐阅读