Eureka 是为微服务提供服务注册和发现的产品?

本文涉及的产品
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
简介: Eureka 是为微服务提供服务注册和发现的产品?

Eureka

1、Eureka 是为微服务提供服务注册和发现的产品

2、为什么要用eureka

多个服务间,如订单中心调用库存中心,如果没有eureka,那订单中心就要写死一个URL来访问库存中心接口。这期间,如果商品中心又加了一台机器呢?那订单中心岂不是要加一个URL然后轮询去调用,所以才会用eureka提供服务注册和发现

3、使用场景

db2152540702f8029afd57fefcd85f2.png4、Eureka有两类

一类是 eureka-server ,一类是 eureka-client ,eureka-server是单独一个服务,专门用来发现其它服务的,可通过浏览器访问。eureka-client其实就是项目中拆分出来的每个服务,需要被eureka-server发现的

5、Eureka-server集群,eureka这么重要的服务注册中心,不可能是单点的,如果挂了就完蛋了

6、Eureka-server初始化的过程

de6e9f3c7eb089cfd1cc57addbe89a5.png

  1. 首先 erueka-server启动时会读取eureka-server.properties配置文件,初始化eureka-server的运行环境
  2. 然后会读取eureka-client.properties配置文件,构造服务实例信息。eureka-server初始化也要读取eureka-client配置文件的原因是,eureka-server把自己本身也当成了一个服务实例,因为要组成eureka-server集群,它也要向其他的eureka-server去注册
  3. 构造一个registry,eureka-server的注册表,其它服务过来注册的注册信息都放在这里
  4. 然后构造一个eureka-server的集群信息,叫peerEurekaNode,负责委会eureka-server的集群信息
  5. 然后基于上面4个组件,构造出一个eurekaServerContext,eureka-server的上下文
  6. 然后这个eureka-server就会从其他几点拷贝注册表
  7. 将自己作为一个服务实例,注册到其他eureka-server
  8. 这就是eureka-server初始化的过程

7、eureka-client初始化

9b737361b69889f8ccf2519c84efccd.png

  1. 首先从eureka-client.properties 中读取服务实例的配置
  2. 根据读取到的配置信息构造服务实例信息InstanceInfo
  3. 然后初始化网络通信组件 EurekaTransport(给eureka-server发送请求用的)
  4. 去eureka-server抓取全量注册表
  5. 然后启动2个定时任务

1.每隔30s抓取一次增量注册表

2.每隔30s给eureka-server发送心跳

  1. 最后把自己注册到eureka-server上

8、eureka-client 增量抓取注册表

ddf65490721f09b37f7f8110aa6c882.png

  1. eureka-client每隔30s向eureka-server拉去一次增量注册表
  2. eureka-server返回两部分数据,增量注册表和全量初测表的hash值
  3. 通过对比本地hash值判断自己的注册表是否是最新的
  4. 如果不是最新的,就重新全量获取注册表

9、eureka-server注册表的多级缓存机制

65261e6c9d0a1683b6eeee4924b32d7.png

  1. 前面不是说 eureka-client每隔30s发送一次心跳给eureka-server么,并且每隔30s会抓取一次增量注册表
  2. 然后,其实eureka-server内部在给eureka-client注册表时,是有一个多级缓存机制的,一共三层,registry、ReadWriteCacheMap、ReadOnlyCacheMap (画图)
  3. 然后这个registry,会接收来自eureka-client发送的心跳。当eureka-client3次心跳未发送,那registry就会认为这个节点挂了。然后每隔60s会清理一次这些挂了的服务
  4. 当registry 清理挂了的节点后,会实时同步到ReadWriteCacheMap中
  5. ReadWriteCacheMap缓存的过期时间为180s,过期后从registry拉去全量注册表
  6. ReadWriteCacheMap每隔30s会向ReadOnlyCacheMap同步数据
  7. 所以,当一个服务非正常下线,系统最多要经过240s才能发现这个服务挂了 90 + 60 + 30 + 30 + 30(ribbon)
  8. 如何避免这种情况

1.kill服务的时候,使用kill - 15 让服务释放资源,别用-9

2.设置可以直接从ReadWriteCacheMap中读取

3.设置readOnlyCacheMap的同步时间

4.设置清理未续约节点的时间

5.设置心跳的间隔

  1. 为什么要用缓存,猜测

1.因为eureka优先保证可用性,不能保证强一致性,cap理论,这两点是无法同时满足的。registry使用的事concurrentHashmap,是线程同步的,如果不用缓存,那总有那么一瞬间eureka-client是读取不到数据的,因为这时registry可能正在干别的事,如同步集群间的注册表,如果用缓存可以保证只要erueka-client来读取,肯定能读取到,不会有等待的情况,优先保证可用性。(猜测)

10、Eureka-server 的自我保护机制

a3632de1f6c956dcba295e218148ab3.png

  1. 自我保护模式,有期望心跳数,一分钟内的
  2. 计算逻辑:期望心跳数 = 服务实例数 * 2 * 0.85
  3. 这里有个bug,源码里写死了一个 “2”,因为统计的是1分钟的心跳数,然后每隔30s发送一次心跳,60/30=2,源码是写死了
  4. 如果配置60s发送一次心跳,那一分钟后,所有节点都正常的情况下,直接进入自我保护模式
  5. 然后就不摘除任何服务实例,这个很坑,生产环境我们不用这个功能,都是关闭的

11、eureka 整体架构图

画整体架构图前,要先把前面几个画了,要不面试官估计都不知道你在说啥

747f676550856ed05e152fd8f8d3db2.png

目录
相关文章
|
25天前
|
Java API 微服务
【Spring Boot系列】通过OpenAPI规范构建微服务服务接口
【4月更文挑战第5天】通过OpenAPI接口构建Spring Boot服务RestAPI接口
|
2月前
|
消息中间件 监控 API
在Python中如何实现微服务架构,及相关的服务间通信方案?
Python微服务架构涉及服务划分、注册发现、通信协议选择(如HTTP、gRPC、消息队列)及服务间通信实现。每个服务应自治,有独立数据库和部署流程,并需考虑容错(如分布式事务、重试、熔断)和监控日志。API网关用于请求管理和路由。实际操作需根据需求和技术栈调整,并关注服务拆分和数据一致性。
25 5
|
2月前
|
SpringCloudAlibaba Java 网络架构
【Springcloud Alibaba微服务分布式架构 | Spring Cloud】之学习笔记(七)Spring Cloud Gateway服务网关
【Springcloud Alibaba微服务分布式架构 | Spring Cloud】之学习笔记(七)Spring Cloud Gateway服务网关
123 0
|
12天前
|
负载均衡 Java API
构建高效微服务架构:API网关与服务熔断策略
【5月更文挑战第2天】 在微服务架构中,确保系统的高可用性与灵活性是至关重要的。本文将深入探讨如何通过实施有效的API网关和设计合理的服务熔断机制来提升分布式系统的鲁棒性。我们将分析API网关的核心职责,包括请求路由、负载均衡、认证授权以及限流控制,并讨论如何利用熔断器模式防止故障传播,维护系统的整体稳定性。文章还将介绍一些实用的技术和工具,如Netflix Zuul、Spring Cloud Gateway以及Hystrix,以帮助开发者构建一个可靠且高效的微服务环境。
|
17天前
|
敏捷开发 运维 监控
【专栏】微服务架构,以敏捷、灵活著称,通过拆分大型应用为小型自治服务,简化开发运维
【4月更文挑战第27天】微服务架构,以敏捷、灵活著称,通过拆分大型应用为小型自治服务,简化开发运维。本文探讨其基本概念、起源,核心优势(如敏捷开发、高可伸缩性)及挑战(系统复杂度、数据一致性),并分享实施策略(服务划分、技术选型、CI/CD)与实践案例(Netflix、Uber、Spotify),展示微服务如何重塑软件开发,并成为未来复杂应用系统的基础。
|
19天前
|
Java 数据安全/隐私保护 Sentinel
微服务学习 | Spring Cloud 中使用 Sentinel 实现服务限流
微服务学习 | Spring Cloud 中使用 Sentinel 实现服务限流
|
1月前
|
监控 Sentinel 微服务
微服务的防御之道:服务雪崩、服务熔断、服务降级
微服务的防御之道:服务雪崩、服务熔断、服务降级
29 1
|
1月前
|
SpringCloudAlibaba Java Nacos
SpringCloud Alibaba微服务 -- Nacos使用以及注册中心和配置中心的应用(保姆级)
SpringCloud Alibaba微服务 -- Nacos使用以及注册中心和配置中心的应用(保姆级)
|
2月前
|
自然语言处理 运维 Cloud Native
云原生技术专题 | 探索云原生化的服务架构体系的技术风向,攻克云原生化微服务架构的痛点和特性
云原生技术专题 | 探索云原生化的服务架构体系的技术风向,攻克云原生化微服务架构的痛点和特性
51 0
|
2月前
|
Cloud Native Dubbo 应用服务中间件
【Dubbo3高级特性】「微服务云原生架构」带你从零基础认识搭建公司内部服务用户中心体系(实战指南-序章)
【Dubbo3高级特性】「微服务云原生架构」带你从零基础认识搭建公司内部服务用户中心体系(实战指南-序章)
64 0