您现在的位置是:首页 >学无止境 >微服务#1 注册中心eareka和nacos网站首页学无止境

微服务#1 注册中心eareka和nacos

guaiwu_ 2024-06-14 17:18:27
简介微服务#1 注册中心eareka和nacos

目录

注册中心: eureka

服务调用关系

eureka的作用

在Eureka架构中,微服务角色有两类

搭建EurekaServer服务, 服务注册和服务发现

Ribbon

负载均衡原理

​编辑

负载均衡策略

饥饿加载

 注册中心: nacos

nacos服务搭建, 服务注册和发现

nacos服务集群属性

NacosRule负载均衡策略

实例的权重控制

环境隔离 - namespace

nacos注册中心细节分析

nacos和eureka的共同点与区别

配置管理


注册中心: eureka

服务调用关系

  • 服务提供者: 暴露结构给其它微服务调用
  • 服务消费者: 调用其它微服务提供的接口
  • 提供者与消费者角色其实是相对

eureka的作用

消费者该如何获取服务提供者具体信息?

  • 服务提供者启动时向eureka注册自己的信息
  • eureka保存这些信息
  • 消费者根据服务名称向eureka拉取提供者信息

如果有多个服务提供者,消费者该如何选择?

  • 服务消费者利用负载均衡算法,从服务列表中挑选一个

消费者如何感知服务提供者健康状态?

  • 服务提供者会每隔30秒向EurekaServer发送心跳请求,报告健康状态
  • eureka会更新记录服务列表信息,心跳不正常会被剔除
  • 消费者就可以拉取到最新的信息

在Eureka架构中,微服务角色有两类

EurekaServer: 服务端,注册中心

  • 记录服务信息
  • 心跳监控

EurekaClient: 客户端

  • Provider:服务提供者,例如案例中的user-service
    • 注册自己的信息到EurekaServer
    • 每隔30秒向EurekaServer发送心跳
  • consumer: 服务消费者,例如案例中的 order-service
    • 根据服务名称从EurekaServer拉取服务列表
    • 基于服务列表做负载均衡,选中一个微服务后发起远程调用 

搭建EurekaServer服务, 服务注册和服务发现

搭建EurekaServer服务

  1. 创建项目,引入spring-cloud-starter-netflix-eureka-server的依赖
  2. 编写启动类,添加@EnableEurekaServer注解
  3. 添加application.yml文件,编写配置

服务注册

  1. 引入eureka-client依赖
  2. 在application.yml中配置eureka地址 

服务发现

  1. 引入eureka-client依赖
  2. 在application.yml中配置eureka地址
  3. 给RestTemplate添加@LoadBalanced注解
  4. 用服务提供者的服务名称远程调用

Ribbon

负载均衡原理

负载均衡策略

通过定义IRule实现可以修改负载均衡规则,有两种方式
代码方式: 在order-service中的OrderApplication类中,定义一个新的IRule:

配置文件方式:在order-service的application.yml文件中,添加新的配置也可以修改规则

饥饿加载

Ribbon默认是采用懒加载,即第一次访问时才会去创建LoadBalanceClient,请求时间会很长而饥饿加载则会在项目启动时创建,降低第一次访问的耗时,通过下面配置开启饥饿加载

ribbon:
  eager-load:
    enabled: true #开启饥饿加载
    clients: userservice #指定饥饿加载的服务名称

 注册中心: nacos

nacos服务搭建, 服务注册和发现

1.Nacos服务搭建

  • 下载安装包
  • 解压
  • 在bin目录下运行指令:startup.cmd -m standalone

2.Nacos服务注册或发现

  • 引入nacos.discovery依赖
  • 配置nacos地址spring.cloud.nacos.serveraddr

nacos服务集群属性

Nacos服务分级存储模型

  • 一级是服务,例如userservice
  • 二级是集群,例如广州或深圳
  • 三级是实例,例如广州机房的某台部署了userservice的服务器

如何设置实例的集群属性

  • 修改application.yml文件,添加spring.cloud.nacos.discovery.cluster-name属性即可
      cloud:
        nacos:
          server-addr: localhost:8848 #nacos服务地址
          discovery:
            cluster-name: GZ # 配置集群的名称,也是机房的位置,例如:GZ,广州

NacosRule负载均衡策略

  • 优先选择同集群服务实例列表
  • 本地集群找不到提供者,才去其它集群寻找,并且会报警告
  • 确定了可用实例列表后,再采用随机负载均衡挑选实例

实例的权重控制

  • Nacos控制台可以设置实例的权重值,0~1之间
  • 同集群内的多个实例,权重越高被访问的频率越高
  • 权重设置为0则完全不会被访问实例的权重控制

环境隔离 - namespace

Nacos中服务存储和数据存储的最外层都是一个名为namespace的东西,用来做最外层隔离

在对应的配置文件中添加

效果: 不在相同的环境下无法互相访问

nacos注册中心细节分析

默认是临时实例(临时实例: 服务停止会马上被剔除, 非临时实例则不会)可以在配置文件中进行更改

nacos和eureka的共同点与区别

1.Nacos与eureka的共同点

  • 都支持服务注册和服务拉取
  • 都支持服务提供者心跳方式做健康检测

2.Nacos与Eureka的区别

  • Nacos支持服务端主动检测提供者状态:临时实例采用心跳模式, 非临时实例采用主动检测模式
  • 临时实例心跳不正常会被剔除,非临时实例则不会被剔除
  • Nacos支持服务列表变更的消息推送模式,服务列表更新更及时
  • Nacos集群默认采用AP方式,当集群中存在非临时实例时,采用CP模式;Eureka采用AP方式

配置管理

统一配置管理

将配置交给Nacos管理的步骤

  • 在Nacos中添加配置文件
  • 在微服务中引入nacos的config依赖
    <!--nacos的配置管理依赖-->
            <dependency>
                <groupId>com.alibaba.cloud</groupId>
                <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
            </dependency>
  • 在微服务中添加bootstrap.yml,配置nacos地址
  • 当前环境、服务名称、文件后缀名。这些决定了程序
  • 启动时去nacos读取哪个文件

配置热更新

Nacos配置更改后,微服务可以实现热更新,方式

  • 通过@Value注解注入,结合@RefreshScope来刷新
  • 通过@ConfigurationProperties注入,自动刷新

注意事项:

  • 不是所有的配置都适合放到配置中心,维护起来比较麻烦
  • 建议将一些关键参数,需要运行时调整的参数放到nacos配置中心,一般都是自定义配置 

 多种配置的优先级:

服务名-profile.yaml > 服务名.yaml > 本地配置

 

 

 

 

 

风语者!平时喜欢研究各种技术,目前在从事后端开发工作,热爱生活、热爱工作。