Ribbon负载均衡+Nacos服务搭建

Ribbon负载均衡

流程

首先通过RibbonLoadBalanceerClient获取服务名,并传给DynamicServerListLoadBalancer——>通过EureKa-server获取服务名对应服务列表(也就是被注册到EureKa中的服务,可能包括不同端口的),然后我们会根据IRule中的服务负载均衡->选择某个服务,然后修改url发送请求;

在这里插入图片描述

具体实现

Ribbon的负载均衡是一个叫IRule的接口来定义的,每一个子接口对应一个规则
在这里插入图片描述

负载均衡策略:

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
负载均衡配置的两种方式

1.一种是在配置类中注入bean,返回一个IRule规则——>具体是什么样的规则(RandomRule啥的)自己定义;

2.第二种再yaml中进行配置:定义目标服务,以及对应的负载均衡策略

区别:第一个范围是此服务中的所有服务,范围是全局,第二个指定了具体服务;

在这里插入图片描述

饥饿加载:

如果用懒加载:就是它不会像饥饿那种,类一加载,就全创建好了(在类加载的准备阶段就整好了),而是调用方法,也就是需要创建的时候,它才会创建;——>耗时较长

在这里插入图片描述

Nacos服务搭建

在这里插入图片描述
在这里插入图片描述

里面可以对服务进行注册与发现

在这里插入图片描述

对于EureKa的改动,我们需要修改依赖,并且注释原本在order-service以及user-service服务中的原有的EureKa-client依赖,并添加nacos依赖

服务注册到Nacos步骤

1.首先在父工程中导入alibaba的cloud依赖

  <!--nacos管理依赖-->
            <dependency>
                <groupId>com.alibaba.cloud</groupId>
                <artifactId>spring-cloud-alibaba-dependencies</artifactId>
                <version>2.2.5.RELEASE</version>
            </dependency>

2.然后在服务项目中配置Nacos注册依赖(注册发现服务的依赖)

 <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
            <version>2.2.5.RELEASE</version>
        </dependency>

3.在yaml中进行配置,配置映射,服务名称,以及对应的Nacos服务端口

 application:
    name: orderservice # user的服务名称
  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848 # nacos服务地址

在这里插入图片描述

配置搭建总结

在这里插入图片描述

服务多级存储(给服务的实例配置集群):

引:为了给服务减轻压力,我们可以给服务的实例们(8081、8082…)配置集群->杭州集群,上海集群等等…

给服务实例配置集群

在这里插入图片描述
1.修改yaml文件,给Nacos的配置加上cluster节点名称即可

cloud:
    nacos:
      discovery:
        server-addr: localhost:8848 # nacos服务地址
        cluster-name: hangzhou # 集群名称

2.然后给对应的实例进行启动即可,(不要启动错了,不然会覆盖之前的集群名称)

在这里插入图片描述
在这里插入图片描述

集群调用问题:

服务调用尽可能选择本地集群的服务,不然延迟会很高

在这里插入图片描述

Nacos负载均衡-实现集群优先

在这里插入图片描述
步骤:

在yaml文件中对需要调用服务采用Nacos负载均衡策略,然后重启即可

userservice: #指定服务
  ribbon: # 配置负载均衡策略
    NFLoadBalancerRuleClassName: com.alibaba.cloud.nacos.ribbon.NacosRule

策略:优先本地集群,如果没有的话,就随机;

在这里插入图片描述
在这里插入图片描述

如果没有本地集群,说明只能跨集群调用服务——>(耗时较长,毕竟调用的服务在另一个地方),会出现警告

在这里插入图片描述

服务实例权重的配置

在这里插入图片描述
直接在Nacos页面对服务实例修改权重即可

在这里插入图片描述

场景:服务怎样做到用户不下线,还能升级服务?

在产品更新时,我们可以对一个服务实例的权重降到很低,那么用户请求就很难请求到这个服务上了,那么我们就可以对其进行升级,升级完毕后,再将权重慢慢调大,这样就可以满足用户,也可以满足服务;

nacos环境隔离

没设置命名空间的时候,默认是public;

如果环境设置不一样,那么服务之间就不能进行访问;(实例找不到->也就是userservice服务实例);

每个namespace的id是唯一的;

配置方法:

1.在yaml配置文件加上namespace命名空间即可(先得在Nacos中创建环境)

  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848 # nacos服务地址
        cluster-name: Hangzhou # 实例集群
        namespace:xxxx

在这里插入图片描述
在这里插入图片描述

Nacos和EureKa的总结区别:

共同:它们都是向注册中心拉取服务信息,但是第一次会将服务信息放到服务的列表缓存中,下次拉取就直接从服务列表缓存中拿就行了,速度较快;

在这里插入图片描述
Nacos:

临时实例:采用心跳检测,服务实例主动向注册中心汇报自己饿的情况(这里Nacos和EureKa都差不多,但是Nacos速度较快);
(个人认为 不管是临时实例还是非临时实例挂了 Nacos都会将健康状态发送给消费者 ,,,个人猜测 也没找到资料 有大佬知道的话可以指出来 谢谢)

非临时实例:*Nacos会主动询问实例是否还存在(如果不存在)——>Nacos注册中心会立即主动推送变更消息:效率非常高;——>坏处:服务器压力会大,因为总是对服务进行访问

在这里插入图片描述
区别:
Nacos支持服务端主动检测服务提供者状态:临时实例采用心跳模式,非临时实例采用服务器主动访问模式;
临时实例心跳不正常会被踢出,非临时实例则不会被剔除;
Nacos支持服务列表消息推送模式,即时更新;

**补充(6/1)nacos、EureKa涉及ap、cp模式**

cp和ap 是什么 有什么区别

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值