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

本文涉及的产品
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
云原生网关 MSE Higress,422元/月
注册配置 MSE Nacos/ZooKeeper,118元/月
简介: 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

目录
相关文章
|
9天前
|
监控 负载均衡 安全
微服务(五)-服务网关zuul(一)
微服务(五)-服务网关zuul(一)
|
2月前
|
开发框架 IDE .NET
【Azure 微服务】Service Fabric中微服务在升级时,遇见Warning - System.Collections.Generic.KeyNotFoundException 服务无法正常运行
【Azure 微服务】Service Fabric中微服务在升级时,遇见Warning - System.Collections.Generic.KeyNotFoundException 服务无法正常运行
|
7天前
|
消息中间件 Kafka 数据库
微服务架构中,如何确保服务之间的数据一致性
微服务架构中,如何确保服务之间的数据一致性
|
11天前
|
消息中间件 缓存 NoSQL
构建高效后端服务:微服务架构的深度实践
本文旨在探讨如何通过采用微服务架构来构建高效的后端服务。我们将深入分析微服务的基本概念、设计原则以及在实际项目中的应用案例,揭示其在提升系统可维护性、扩展性和灵活性方面的优势。同时,本文还将讨论在实施微服务过程中可能遇到的挑战,如服务治理、分布式事务和数据一致性等问题,并分享相应的解决策略和最佳实践。通过阅读本文,读者将能够理解微服务架构的核心价值,并具备将其应用于实际项目的能力。 ##
|
8天前
|
Java API 对象存储
微服务魔法启动!Spring Cloud与Netflix OSS联手,零基础也能创造服务奇迹!
这段内容介绍了如何使用Spring Cloud和Netflix OSS构建微服务架构。首先,基于Spring Boot创建项目并添加Spring Cloud依赖项。接着配置Eureka服务器实现服务发现,然后创建REST控制器作为API入口。为提高服务稳定性,利用Hystrix实现断路器模式。最后,在启动类中启用Eureka客户端功能。此外,还可集成其他Netflix OSS组件以增强系统功能。通过这些步骤,开发者可以更高效地构建稳定且可扩展的微服务系统。
24 1
|
19天前
|
Cloud Native API
微服务引擎 MSE 及云原生 API 网关 2024 年 8 月产品动态
微服务引擎 MSE 及云原生 API 网关 2024 年 8 月产品动态。
|
21天前
|
存储 搜索推荐 数据库
MarkLogic在微服务架构中的应用:提供服务间通信和数据共享的机制
随着微服务架构的发展,服务间通信和数据共享成为关键挑战。本文介绍MarkLogic数据库在微服务架构中的应用,阐述其多模型支持、索引搜索、事务处理及高可用性等优势,以及如何利用MarkLogic实现数据共享、服务间通信、事件驱动架构和数据分析,提升系统的可伸缩性和可靠性。
22 5
|
23天前
|
运维 Cloud Native 应用服务中间件
阿里云微服务引擎 MSE 及 云原生 API 网关 2024 年 08 月产品动态
阿里云微服务引擎 MSE 面向业界主流开源微服务项目, 提供注册配置中心和分布式协调(原生支持 Nacos/ZooKeeper/Eureka )、云原生网关(原生支持Higress/Nginx/Envoy,遵循Ingress标准)、微服务治理(原生支持 Spring Cloud/Dubbo/Sentinel,遵循 OpenSergo 服务治理规范)能力。API 网关 (API Gateway),提供 APl 托管服务,覆盖设计、开发、测试、发布、售卖、运维监测、安全管控、下线等 API 生命周期阶段。帮助您快速构建以 API 为核心的系统架构.满足新技术引入、系统集成、业务中台等诸多场景需要
|
25天前
|
XML Java 数据库
在微服务架构中,请求常跨越多个服务,涉及多组件交互,问题定位因此变得复杂
【9月更文挑战第8天】在微服务架构中,请求常跨越多个服务,涉及多组件交互,问题定位因此变得复杂。日志作为系统行为的第一手资料,传统记录方式因缺乏全局视角而难以满足跨服务追踪需求。本文通过一个电商系统的案例,介绍如何在Spring Boot应用中手动实现日志链路追踪,提升调试效率。我们生成并传递唯一追踪ID,确保日志记录包含该ID,即使日志分散也能串联。示例代码展示了使用过滤器设置追踪ID,并在日志记录及配置中自动包含该ID。这种方法不仅简化了问题定位,还具有良好的扩展性,适用于各种基于Spring Boot的微服务架构。
31 3
|
28天前
|
自然语言处理 Java 网络架构
解锁跨平台微服务新纪元:Micronaut与Kotlin联袂打造的多语言兼容服务——代码、教程、实战一次打包奉送!
【9月更文挑战第6天】Micronaut是一款轻量级、高性能的Java框架,适用于微服务开发。它支持Java、Groovy和Kotlin等多种语言,提供灵活的多语言开发环境。本文通过创建一个简单的多语言兼容服务,展示如何使用Micronaut及其注解驱动特性实现REST接口,并引入国际化支持。无论是个人项目还是企业应用,Micronaut都能提供高效、一致的开发体验,成为跨平台开发的利器。通过简单的配置和代码编写,即可实现多语言支持,展现其强大的跨平台优势。
33 2
下一篇
无影云桌面