山东大学软件学院项目实训-创新实训-基于大模型的旅游平台(二十二)- 微服务(2)

时间:2024-05-30 21:10:02

目录

4. Ribbon负载均衡

4.1 负载均衡流程

4.2 负载均衡策略

4.3 Ribbon饥饿加载

5. Nacos注册中心

5.1 服务注册到nacos

5.2 nacos服务分级存储模型

5.3 根据权重负载均衡

5.4 环境隔离--namespace


4. Ribbon负载均衡

4.1 负载均衡流程

4.2 负载均衡策略

默认实现是轮流循环策略,是ZoneAvoidanceRule

修改负载均衡规则 :

  1. 代码方式,在order-service启动类中添加(作用于全局,即order微服务访问任何微服务都遵循该策略),修改为随机策略 :

  
      @Bean
      public IRule randomRule(){
          return new RandomRule();
      }
  1. 配置文件方式 ,只针对某个服务(指定服务名,如下面的userservice), 在配置文件中 :

      
      userservice:
        ribbon:
          NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule     # 负载均衡规则

4.3 Ribbon饥饿加载

Ribbon默认是懒加载,只有在第一次访问时才去创建LoadBalanceClient,请求时间会很长,

饥饿加载会在项目启动时就创建,降低第一次访问耗时

饥饿加载的配置

在order-service 配置文件中 :

  
  ribbon:
    eager-load:
      enable: true   #  开启饥饿加载
      clients: 
        -userservice   # 指定饥饿加载的服务名称  可以是一个集合
        -xxxservice
        -xxxxservice

5. Nacos注册中心

启动nacos命令 :

管理员身份运行cmd到nacos安装的bin目录下

  
  startup.cmd -m standalone

访问页面 :

  
   http://192.168.142.1:8848/nacos/index.html

5.1 服务注册到nacos

引入依赖 在父工程中加入 :

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

在user-service中引入nacos服务发现依赖

  
          <!--nacos客户端依赖包-->
          <dependency>
              <groupId>com.alibaba.cloud</groupId>
              <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
          </dependency>

修改user-service的yml配置文件 order-service同理 把user-service服务发现到nacos

  
  spring:
    datasource:
      url: jdbc:mysql://localhost:3306/cloud_user?useSSL=false
      username: root
      password: 888888
      driver-class-name: com.mysql.jdbc.Driver
    application:
      name: userservice  # user服务的服务名称
    cloud:
      nacos:
        server-addr: localhost:8848    # nacos服务地址

5.2 nacos服务分级存储模型

​ user-serviced的配置文件添加

  
    cloud:
      nacos:
        server-addr: localhost:8848    # nacos服务地址
        discovery:
          cluster-name: HZ  # 集群名称   HZ代指杭州

开多端口方法 :

修改选项中点击添加VM选项,弹出提示框中添加 -Dserver.port=要开的新端口

结果演示 :

在order-service中加入同样配置,测试order在调用userservice是否优先选择本地集群,把order-service放在HZ,user-service两个分支一个在HZ,一个在SH

order-service的yml文件中同样配置

  
    cloud:
      nacos:
        server-addr: localhost:8848    # nacos服务地址
        discovery:
          cluster-name: HZ  # 集群名称   HZ代指杭州

在order-service的yml配置文件中修改对userservice的负载均衡规则 :

  
  userservice:
    ribbon:
      NFLoadBalancerRuleClassName: com.alibaba.cloud.nacos.ribbon.NacosRule     # 负载均衡规则

测试结果 : 在杭州集群的order-service只调用了在杭州集群的user-service而未调用在上海集群的user-service

NacosRule负载均衡规则 :

  1. 优先选择本地集群

  2. 本地集群找不到提供者,才去其他集群寻找

  3. 确定了可用实例列表后,再采用随机均衡负载挑选实例

5.3 根据权重负载均衡

通过修改权重控制访问频率,权重越大访问频率越高

5.4 环境隔离--namespace

在页面新建命名空间

修改order-service的yml文件,新增namespace指定命名空间的id

  
  spring:
    datasource:
      url: jdbc:mysql://localhost:3306/cloud_order?useSSL=false
      username: root
      password: 888888
      driver-class-name: com.mysql.jdbc.Driver
    application:
      name: orderservice  # order服务名称
    cloud:
      nacos:
        server-addr: localhost:8848    # nacos服务地址
        discovery:
          cluster-name: HZ  # 集群名称   HZ代指杭州
          namespace: 9d2976a6-9560-46b7-a680-260801971b01   #   命名空间的id

修改结果 :