0


SpringCloud中Eureka和Nacos的区别和各自的优点

Eureka注册中心

Eureka作为一个注册中心,服务提供者把服务注册到注册中心,服务消费者去注册中心拉取信息, 然后通过负载均衡得到对应的服务器去访问。

服务提供者每隔30s向注册中心发送请求,报告自己的状态,当超过一定时间没有发送时,注册中心会认为该服务宕机,会把它剔除。

创建Eureka服务

需要自己手动编写这个程序和导入依赖

server:
  port: 10086 #端口设置

spring:
  application:
    name: eureka-server #服务名称

eureka:
  client:
    service-url:
      defaultZone: http://127.0.0.1:10086/eureka
    register-with-eureka: true # false表示不向注册中心注册自己。
    fetch-registry: false # false表示自己端就是注册中心,我的职责就是维护服务实例,并不需要去检索服务

    <dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
        </dependency>
    </dependencies>
创建服务注册

往服务提供者的依赖里面加入依赖

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>

在配置文件里面加入如下内容用于连接注册中心将并自己注册进去

spring:
  application:
    name: userservice
eureka:
  client:
    service-url:
      defaultZone: http://127.0.0.1:10086/eureka

服务拉取和负载均衡

将直连方式改成使用服务名进行连接,会根据负载均衡策略进行选择服务提供者

@LoadBalanced是Spring Cloud中提供的一个注解,它用于将一个RestTemplate对象标记为支持负载均衡的,从而可以针对服务名称进行REST调用。

负载均衡

轮询、权重、区域划分、随机,最小连接数、最少负载等

注意:不能有两种负载均衡方式,会出现不知道匹配哪一个方式而报500错误

自定义负载均衡

IRule是负载均衡的核心算法类,若未定义是用什么算法,默认使用轮询RoundRobinRule
里面包括7种算法提供使用(若不想使用这7种算法,可以自定义算法)

可以通过javaBean,也可以通过配置文件

通过javaBean是全局配置,通过配置文件是指定某一个服务配置

@Bean
public IRule randomRule(){
    return new RandomRule();
}

写在服务调用者中

userservice: # 给某个微服务配置负载均衡规则,这里是userservice服务
  ribbon:
    NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule # 负载均衡规则 
饥饿加载

Ribbon默认是采用懒加载,即第一次访问时才会去创建LoadBalanceClient,请求时间会很长。

而饥饿加载则会在项目启动时创建,降低第一次访问的耗时,通过下面配置开启饥饿加载:

ribbon:
  eager-load:
    enabled: true
    clients: userservice # 指定被调用微服务饥渴加载

Ribbon是什么

Ribbon是基于Netflix Ribbon实现的一套客户端负载均衡的框架。

Nacos注册中心

相比于Eureka在市面上更流行

在父工程中引入阿里巴巴的依赖

通过导入此依赖,你在项目中直接使用Spring Cloud Alibaba的其他组件时,只需声明组件的groupId和artifactId,而无需指定版本号,因为版本管理已经由这个BOM统一处理。

<dependencyManagement>
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-alibaba-dependencies</artifactId>
    <version>2.2.6.RELEASE</version>
    <type>pom</type>
    <scope>import</scope>
</dependency>

在需要被注入的工程中加入这个依赖

该依赖包含了自动配置的类,可以在Spring Boot应用中自动配置Nacos作为服务发现的组件。这意味着你无需手动编写大量的配置代码,Spring框架会在应用启动时自动读取Nacos的配置信息,帮助你的服务注册到Nacos服务列表中,并能够发现和调用其他已注册的服务。

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

在被注册到nacos中的工程添加配置信息

spring:
  cloud:
    nacos:
      server-addr: localhost:8848

集群策略

能访问同集群下的服务,则不会访问其他集群下的服务,只有该集群下没有服务,才会访问其他的集群下的服务

集群访问方式有两种方式

一种是配置文件进行配置

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

一种是全局配置(使用java代码进行配置)

  @Bean
    public IRule nacosRule(){
        return new NacosRule();
    }

但是NacosRule是同集群内随机挑选,不会考虑机器的性能问题。

因此,Nacos提供了权重配置来控制访问频率,权重越大则访问频率越高。

环境隔离

  • nacos中可以有多个namespace
  • namespace下可以有group、service等
  • 不同namespace之间相互隔离,例如不同namespace的服务互相不可见

创建命名空间

给微服务配置命名空间,将服务调用者设置到另一个命名空间,两个命名空间相互隔离,因此,服务调用者调用不到另一个命名空间的服务提供者了

spring:
  cloud:
    nacos:
      server-addr: localhost:8848
      discovery:
        cluster-name: HZ
        namespace: 492a7d5d-237b-46a1-a99a-fa8e98e4b0f9 # 命名空间,填ID

结果

Nacos与Eureka的区别

Nacos的服务实例分为两种l类型:

  • 临时实例:如果实例宕机超过一定时间,会从服务列表剔除,默认的类型。
  • 非临时实例:如果实例宕机,不会从服务列表剔除,也可以叫永久实例。
spring:
  cloud:
    nacos:
      discovery:
        ephemeral: false # 设置为非临时实例

非临时服务实例宕机后,不会从nacos中进行删除

Nacos的整体过程

1. Nacos与eureka的共同点
    • 都支持服务注册和服务拉取- 都支持服务提供者心跳方式做健康检测
2. Nacos与Eureka的区别
    • Nacos支持服务端主动检测提供者状态:临时实例采用心跳模式,非临时实例采用主动检测模式- 临时实例心跳不正常会被剔除,非临时实例则不会被剔除- Nacos支持服务列表变更的消息推送模式,服务列表更新更及时- Nacos集群默认采用AP方式,当集群中存在非临时实例时,采用CP模式;Eureka采用AP方式
Nacos的集群采用的模式:

Nacos是Alibaba的产品,支持AP和CP模型,Nacos集群默认采用AP方式,当集群中存在非临时实例时,采用CP模式;

AP和CP仅存在于微服务中

AP指的是可用性,指的是在节点N1上进行写操作的时候,N2可以继续进行其他操作,但是这样的话就违背了一致性

CP指的是一致性,指的是在节点N1上进行写操作的时候,N2可以不继续进行其他操作,必须保持数据一致,因此就违背了可用性。


本文转载自: https://blog.csdn.net/qq_63749263/article/details/139886894
版权归原作者 媪姝 所有, 如有侵权,请联系我们删除。

“SpringCloud中Eureka和Nacos的区别和各自的优点”的评论:

还没有评论