• 微服务学习笔记(二)


    Spring Cloud Eureka

    1.Spring Cloud Eureka 简介

    注册发现中心
    Eureka 来源于古希腊词汇,意为“发现了”。在软件领域, Eureka 是 Netflix 在线影片公司开源的一个服务注册与发现的组件,和其他 Netflix 公司的服务组件(例如负载均衡、熔断器、网关等) 一起,被 Spring Cloud 社区整合为 Spring Cloud Netflix 模块。Eureka 是 Netflix 贡献给 Spring Cloud 的一个框架!Netflix 给 Spring Cloud 贡献了很多框架,后面我们会学习到!

    2.Spring Cloud Eureka 和 Zookeeper 的区别

    2.1 什么是 CAP 原则(面试)

    在分布式 微服务里面 CAP 定理
    问:为什么 zookeeper 不适合做注册中心
    CAP 原则又称 CAP 定理,指的是在一个分布式系统中,
    一致性(Consistency)
    可用性(Availability)
    分区容错性(Partition tolerance)(这个特性是不可避免的)
    CAP 原则指的是,这三个要素最多只能同时实现两点,不可能三者兼顾。

    2.2 分布式特征

    在这里插入图片描述
    C : 数据的一致性 (A,B,C 里面的数据是一致的)
    Zk 注重数据的一致性。
    Eureka 不是很注重数据的一致性!
    A: 服务的可用性(若 zk 集群里面的 master 挂了怎么办)Paxos(多数派)
    在 zk 里面,若主机挂了,则 zk 集群整体不对外提供服务了,需要选一个新的出来(120s左右)才能继续对外提供服务!
    Eureka 注重服务的可用性,当 Eureka 集群只有一台活着,它就能对外提供服务
    P:分区的容错性(在集群里面的机器,因为网络原因,机房的原因,可能导致数据不会里面同步),它在分布式必须需要实现的特性!

    Zookeeper 注重数据的一致性,CP zk(注册中心,配置文件中心,协调中心)
    Eureka 注重服务的可用性 AP eureka (注册中心)

    3.Spring Cloud 其他注册中心

    Spring Cloud 还有别的注册中心 Consul ,阿里巴巴提供 Nacos 都能作为注册中心,我们的选择还是很多。

    3.1 Consul

    https://spring.io/projects/spring-cloud-consulConsul
    在这里插入图片描述

    3.2 Nacos

    https://nacos.io/zh-cn/
    在这里插入图片描述
    但是我们学习还是选择 Eureka ,因为它的成熟度很高。面试时候问的也是它,不是别人!
    eureka nacos

    4.Spring Cloud Eureka 快速入门

    在这里插入图片描述

    4.1 搭建 Eureka-server

    4.1.1创建Maven工程

    里面创建一个eureka-server的spring boot工程,添加eureka-server依赖。
    在这里插入图片描述

    4.1.2修改配置文件

    在这里插入图片描述

    4.1.3添加注解

    在这里插入图片描述

    4.1.4访问测试

    在这里插入图片描述

    4.1.5分析端口8761

    Eureka-Server 不仅提供让别人注册的功能,它也能注册到别人里面,自己注册自己
    所以,在启动项目时,默认会注册自己,我们也可以关掉这个功能。

    在这里插入图片描述

    4.2 搭建 Eureka-client

    4.2.1 创建项目 client-a选择依赖

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

    在这里插入图片描述

    4.2.2修改配置

    在这里插入图片描述

    修改启动类添加注解
    在这里插入图片描述

    4.2.3访问测试

    在这里插入图片描述

    4.2.4再创建项目client-b选择依赖

    同client-a一样方式,注意修改配置文件即可
    在这里插入图片描述

    4.2.5访问测试

    在这里插入图片描述

    4.3 同一个服务(客户端)启动多台

    4.3.1 IDEA 启动多台服务操作

    在这里插入图片描述

    在这里插入图片描述

    4.3.2测试访问

    在这里插入图片描述

    4.4 注册中心的状态认识

    UP: 服务是上线的,括号里面是具体服务实例的个数,提供服务的最小单元
    DOWN: 服务是下线的
    UN_KONW: 服务的状态未知

    4.4.1 服务的实例名称

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

    4.5 常用配置文件设置

    在这里插入图片描述

    4.5.1 server 中常用的配置
    server:
    	port: 8761
    spring:
    	application:
    		name: eureka-server
    eureka:
    	client:
    		service-url: #eureka 服务端和客户端的交互地址 , 集群用 , 隔开
    			defaultZone: http://localhost:8761/eureka
    		fetch-registry: true # 是否拉取服务列表
    		register-with-eureka: true # 是否注册自己(单机 eureka 一般关闭注册自己 , 集群注意打开)
    server:
    	eviction-interval-timer-in-ms: 30000 # 清除无效节点的频率 ( 毫秒 )-- 定期删除
    	enable-self-preservation: true #server 的自我保护机制,避免因为网络原因造成误剔除 , 生产环境建议打开
    	renewal-percent-threshold: 0.85 #85% ,如果在一个机房的 client 端, 15 分钟内有 85% 的 client 没有续约,那么则可能是
    	网络原因,认为服务实例没有问题,不会剔除他们,宁可放过一万,不可错杀一个,确保高可用
    instance:
    	hostname: localhost # 服务主机名称
    	instance-id: ${eureka.instance.hostname}:${spring.application.name}:${server.port} # 实例 id
    	prefer-ip-address: true # 服务列表以 ip 的形式展示
    	lease-renewal-interval-in-seconds: 10 # 表示 eureka client 发送心跳给 server 端的频率
    	lease-expiration-duration-in-seconds: 20 # 表示 eureka server 至上一次收到 client 的心跳之后,等待下一次心跳的超时时
    间,在这个时间内若没收到下一次心跳,则将移除该实例
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    4.5.2 client 中常用的配置
    server:
    	port: 8080
    spring:
    	application:
    		name: eureka-client
    eureka:
    	client:
    		service-url: #eureka 服务端和客户端的交互地址 , 集群用 , 隔开
    			defaultZone: http://localhost:8761/eureka
    		register-with-eureka: true # 注册自己
    		fetch-registry: true # 拉取服务列表
    		registry-fetch-interval-seconds: 5 # 表示 eureka-client 间隔多久去拉取服务注册信息
    instance:
    	hostname: localhost # 服务主机名称
    	instance-id: ${eureka.instance.hostname}:${spring.application.name}:${server.port} # 实例 id
    	prefer-ip-address: true # 服务列表以 ip 的形式展示
    	lease-renewal-interval-in-seconds: 10 # 表示 eureka client 发送心跳给 server 端的频率
    	lease-expiration-duration-in-seconds: 20 # 表示 eureka server 至上一次收到 client 的心跳之后,等待
    下一次心跳的超时时间,在这个时间内若没收到下一次心跳,则将移除该实例
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19

    5.构建高可用的 Eureka-Server 集群

    在这里插入图片描述

    5.1 对刚才的 eureka-server 修改配置文件

    5.1.1 修改server-1的配置文件

    配置文件

    server:
      port: 8761
    spring:
      application:
        name: eureka-server
    eureka:
      client:
        fetch-registry: true #是否拉去服务
        register-with-eureka: true #是否注册自己
        service-url:
          defaultZone: http://localhost:8762/eureka/,http://localhost:8763/eureka/
      server:
        eviction-interval-timer-in-ms: 90000
      instance:
        lease-expiration-duration-in-seconds: 90
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    5.1.2 创建server-b/server-c

    在这里插入图片描述配置文件和server大同小异,不同的是注册的地址和端口号。

    5.1.3访问测试

    在这里插入图片描述发现并没有出现集群信息,只是同一个服务 server 启动了多台 没有数据交互 不是真正意义上的集群

    5.1.4原因分析
    http://localhost:8761/eureka/,http://localhost:8762/eureka/
    这样写,eureka 认为只有一个机器,就是 localhost
    所以这里面不能写成一样
    修改 hosts 文件: C:\Windows\System32\drivers\etc
    如果你修改了 hosts 文件 发现没有生效 记得在 cmd 里面刷新一下
    
    • 1
    • 2
    • 3
    • 4
    • 5

    修改hosts的配置文件
    映射地址
    在这里插入图片描述

    5.1.5 重新修改配置文件

    在这里插入图片描述
    server-b和server-c一样的配置 修改好即可

    5.1.6 访问测试最终的集群信息

    在这里插入图片描述

    5.2 集群的使用

    5.2.1 改造 eureka-client-a 的配置文件
    server:
      port: 8081
    spring:
      application:
        name: eureka-client-a
    
    eureka:
      client:
        service-url:
          defaultZone: http://peer1:8761/eureka/,http://peer2:8761/eureka/,http://peer3:8761/eureka/
        register-with-eureka: true
        fetch-registry: true
      instance:
        instance-id: ${spring.application.name}:${server.port}
        lease-expiration-duration-in-seconds: 30
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    5.2.3终极方案

    server端
    修改IDE的服务,修改端口号,启动三台机器即可。

    server:
      port: 8761
    spring:
      application:
        name: eureka-server
    eureka:
      client:
        fetch-registry: true #是否拉去服务
        register-with-eureka: true #是否注册自己
        service-url:
          defaultZone: http://peer1:8761/eureka,http://peer2:8762/eureka,http://peer3:8763/eureka
      instance:
        instance-id: ${spring.application.name}:${server.port}
        prefer-ip-address: true
        lease-expiration-duration-in-seconds: 5
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    client端
    但凡有一个挂掉都没事,其他的还存活。

    server:
      port: 8081
    spring:
      application:
        name: eureka-client-a
    
    eureka:
      client:
        service-url:
          defaultZone: http://peer1:8761/eureka/,http://peer2:8761/eureka/,http://peer3:8761/eureka/
        register-with-eureka: true
        fetch-registry: true
      instance:
        instance-id: ${spring.application.name}:${server.port}
        lease-expiration-duration-in-seconds: 30
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    5.2.2 测试

    不管哪一台 server 都注册成功了
    在这里插入图片描述

    在这里插入图片描述

    6.Eureka 概念的理解

    6.1 服务的注册

    当项目启动时(eureka 的客户端),就会向 eureka-server 发送自己的元数据(原始数据)(运行的 ip,端口 port,健康的状态监控等,因为使用的是 http/ResuFul 请求风格),eureka-server 会在自己内部保留这些元数据(内存中)。(有一个服务列表)(restful 风格,以 http 动词的请求方式,完成对 url 资源的操作)

    6.2 服务的续约

    项目启动成功了,除了向 eureka-server 注册自己成功,还会定时的向 eureka-server 汇报自己,心跳,表示自己还活着。(修改一个时间)

    6.3 服务的下线(主动下线)

    当项目关闭时,会给 eureka-server 报告,说明自己要下机了。

    6.4 服务的剔除(被动下线,主动剔除)

    当项目超过了指定时间没有向 eureka-server 汇报自己,那么 eureka-server 就会认为此节点死掉了,会把它剔除掉,也不会放流量和请求到此节点了。

  • 相关阅读:
    RabbitMQ 消息丢失 重复消费 集群部署
    zabbix 钉钉&微信&企微告警(动作&操作&消息内容模板)
    2-egg-TS-通用后端管理注册系统-普通、邮箱和手机注册校验
    网盘项目分析
    Softing WireXpert 500产品荣获2023布线安装和维护创新奖
    【2023年11月第四版教材】第16章《采购管理》(第一部分)
    【前端】 Vscode 搭建基础开发环境
    Mac M2/M3 芯片环境配置以及常用软件安装-前端
    2023年海南省职业院校技能大赛(高职组)应用软件系统开发赛项规程
    力扣两数之和
  • 原文地址:https://blog.csdn.net/qq_52166656/article/details/127966157