Eureka、Ribbon、Nacos笔记

发布于:2022-07-24 ⋅ 阅读:(303) ⋅ 点赞:(0)

Eureka、Ribbon、Nacos

1. Eureka基础知识

一个服务既可以是消费者,也可以是提供者

Eureka服务注册与发现

  1. 什么是服务注册
    • Eureka采用CS的设计架构,Eureka Server作为服务注册功能的服务器,它是服务注册中心,而系统中的其他微服务,使用Eureka的客户端连接到Eureka Server并维持心跳连接,这样系统的维护人员就可以通过Eureka Server来监控各个微服务是否正常运行
    • 在服务注册于发现中,有一个注册中心,当服务器启动的时候,会把当前自己服务器的信息 比如 服务地址通讯地址等以别名方式注册到注册中心上。另一方(消费者|服务提供者),以该别名的方式去注册中心上获取到实际的通讯地址,然后在实现本地RPC调用框架核心设计思想:在于注册中心,因为使用注册中心管理每个服务与服务之间的一个依赖关系(服务治理理念)。在任何RPC远程框架中,都会有一个注册中心
  2. Eureka包含两个组件:Eureka Server和Eureka Client
    • Eureka Server提供服务注册服务
      • 各个微服务节点通过配置启动后,会在EurekaServer中注册,这样EurekaServer中的服务注册表中将会存储所有 可用服务节点的信息,服务节点的信息可以在界面中直观看到
    • Eureka Client通过注册中心进行访问
      • 是一个java客户端,用于简化Eureka Server的交互,客户端同时也具备一个内置的、使用轮询(round-robin)负载算法的负载均衡器。在应用启动后,将会向Eureka Server发送心跳(默认周期30s)。如果Eureka Server在多个心跳周期内没有接受到某个节点的心跳,Eureka Server将会从服务注册表中把这个服务节点移除(默认90s)

服务提供者:注册服务信息给注册中心

服务消费者:从注册中心中找到服务信息

其中注册中心实现负载均衡

2. Eureka注册中心:

2.1 搭建EurekaServer

·引入eureka-server依赖
·添加@EnableEurekaServer注解·在application.yml中配置eureka地址

2.2.服务注册

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

2.3.服务发现

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

多开:

-Dserver.port=8082

Ribbon

负载均衡

调整负载均衡,修改Application

调整为随机


@MapperScan("cn.itcast.user.mapper")
@SpringBootApplication
public class UserApplication {
    public static void main(String[] args) {
        SpringApplication.run(UserApplication.class, args);
    }

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


饥饿加载

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

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

    application.yml

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

Nacos注册中心

Nacos是阿里巴巴的产品,现在是SpringCloud中的一个组件。相比Eureka功能更加丰富,在国内受欢迎程度较高

1. 服务注册到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>

需要注释掉eureka的依赖

并添加nacos的依赖

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

nacos的配置属于Spring的配置,在application.yml中写在spring下

2. 服务多级存储模型

3.Nacos 集群负载均衡

需要给order-service设置集群属性

要修改nacos的负载均衡只需要修改配置:

userservice:  #要做配置的微服务名称
  ribbon:
    NFLoadBalancerRuleClassName: com.alibaba.cloud.nacos.ribbon.NacosRule

达到优先选择本地机群、且随机

4.Nacos服务实例的权重设置

根据权重负载均衡

使服务器好的承受更多的请求

而之前的配置是随机分配,不管服务器的好坏,有可能导致服务器奔溃

Nacos提供了根据权重配置来设置访问频率

在浏览器中修改权重

如果失败,报错五百则需要删除nacos目录下的data、log、status三个目录

5. Nacos 环境隔离

namespace

Nacos为了做数据的管理,添加了隔离的概念

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

内部有一个group的属性:

  • Service
  • Data
  • 集群、实例

我们的环境隔离就是对服务隔离

新建命名空间

将id配置进namespace

即可找到

此时已经将dev和public相分离,order不再能访问user

6.Nacos和Eureka的区别

nacos:

  • 非临时:主动询问一段时间进行检测,不会剔除,只会标记不健康(亲生的)
  • 临时:心跳检测,需要主动发送消息

配置方式:

spring:
	cloud:
		nacos:
			discovery:
				ephemeral: false #设置为非临时实例

关闭项目后,会报红,但是不会剔除

7. Nacos实现配置管理

7.1 统一配置管理

为什么要进行统一配置管理: 我们在微服务调整时,不可能挨个的修改服务器配置,同时,重启也会给我们造成极大的时间成本和风险,因此我们需要统一配置管理

  • 配置更改热更新

    +号添加配置,DataId即使名称

不是所有的配置都需要加入,只需要核心配置

项目启动--------->读取本地配置文件application.yml----------->创建spring容器---------->加载bean

当我们有nacos时:读取本地配置文件application.yml会合并

bootstrap.yml比application.yml更加优先

引入nacos的配置管理客户端依赖

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

在userservice中的resource目录添加一个bootstrap.yml文件,这个文件是引导文件

7.2 配置热更新

即:修改后立刻修改,微服务无需重启

方法一:需要在controller上添加@RefreshScope

方法二:使用@ConfigurationProperties注解(推荐!!!!!!!!!!)

@Data
@Component
@ConfigurationProperties(prefix = "pattern")
public class PatternProperties {
    private String dateformat;
}

7.3 配置共享

多环境配置共享:

微服务启动时会从nacos读取多个配置文件:

  • [spring-application.name]-[spring-profiles-active].yaml 例如: userservice-dev.yaml
  • [spring-application.name].yaml 例如: userservice.yaml

以nacos的配置为准,本地小于nacos配置

而服务名-profiles.yaml>服务名.yaml

7.4 搭建Nacos集群

Nacos生产环境下一定要部署为集群,满足生产需要

-application.name]-[spring-profiles-active].yaml 例如: userservice-dev.yaml

  • [spring-application.name].yaml 例如: userservice.yaml

以nacos的配置为准,本地小于nacos配置

而服务名-profiles.yaml>服务名.yaml

7.4 搭建Nacos集群

Nacos生产环境下一定要部署为集群,满足生产需要


网站公告

今日签到

点亮在社区的每一天
去签到