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

目录
相关文章
|
1月前
|
弹性计算 API 持续交付
后端服务架构的微服务化转型
本文旨在探讨后端服务从单体架构向微服务架构转型的过程,分析微服务架构的优势和面临的挑战。文章首先介绍单体架构的局限性,然后详细阐述微服务架构的核心概念及其在现代软件开发中的应用。通过对比两种架构,指出微服务化转型的必要性和实施策略。最后,讨论了微服务架构实施过程中可能遇到的问题及解决方案。
|
11天前
|
Cloud Native API 微服务
微服务引擎 MSE 及云原生 API 网关 2024 年 12 月产品动态
微服务引擎 MSE 及云原生 API 网关 2024 年 12 月产品动态。
|
17天前
|
运维 Cloud Native 应用服务中间件
阿里云微服务引擎 MSE 及 云原生 API 网关 2024 年 12 月产品动态
阿里云微服务引擎 MSE 面向业界主流开源微服务项目, 提供注册配置中心和分布式协调(原生支持 Nacos/ZooKeeper/Eureka )、云原生网关(原生支持Higress/Nginx/Envoy,遵循Ingress标准)、微服务治理(原生支持 Spring Cloud/Dubbo/Sentinel,遵循 OpenSergo 服务治理规范)能力。API 网关 (API Gateway),提供 APl 托管服务,覆盖设计、开发、测试、发布、售卖、运维监测、安全管控、下线等 API 生命周期阶段。帮助您快速构建以 API 为核心的系统架构.满足新技术引入、系统集成、业务中台等诸多场景需要
107 12
|
1月前
|
Cloud Native API 微服务
微服务引擎 MSE 及云原生 API 网关 2024 年 11 月产品动态
微服务引擎 MSE 及云原生 API 网关 2024 年 11 月产品动态。
|
1月前
|
NoSQL 前端开发 测试技术
👀探秘微服务:从零开启网关 SSO 服务搭建之旅
单点登录(Single Sign-On,简称SSO)是一种认证机制,它允许用户只需一次登录就可以访问多个应用程序或系统。本文结合网关和SaToken快速搭建可用的Session管理服务。
107 8
|
1月前
|
运维 Cloud Native 应用服务中间件
阿里云微服务引擎 MSE 及 云原生 API 网关 2024 年 11 月产品动态
阿里云微服务引擎 MSE 面向业界主流开源微服务项目, 提供注册配置中心和分布式协调(原生支持 Nacos/ZooKeeper/Eureka )、云原生网关(原生支持Higress/Nginx/Envoy,遵循Ingress标准)、微服务治理(原生支持 Spring Cloud/Dubbo/Sentinel,遵循 OpenSergo 服务治理规范)能力。API 网关 (API Gateway),提供 APl 托管服务,覆盖设计、开发、测试、发布、售卖、运维监测、安全管控、下线等 API 生命周期阶段。帮助您快速构建以 API 为核心的系统架构.满足新技术引入、系统集成、业务中台等诸多场景需要
|
2月前
|
弹性计算 持续交付 API
构建高效后端服务:微服务架构的深度解析与实践
在当今快速发展的软件行业中,构建高效、可扩展且易于维护的后端服务是每个技术团队的追求。本文将深入探讨微服务架构的核心概念、设计原则及其在实际项目中的应用,通过具体案例分析,展示如何利用微服务架构解决传统单体应用面临的挑战,提升系统的灵活性和响应速度。我们将从微服务的拆分策略、通信机制、服务发现、配置管理、以及持续集成/持续部署(CI/CD)等方面进行全面剖析,旨在为读者提供一套实用的微服务实施指南。
|
1月前
|
弹性计算 Kubernetes API
构建高效后端服务:微服务架构的深度剖析与实践####
本文深入探讨了微服务架构的核心理念、设计原则及实现策略,旨在为开发者提供一套系统化的方法论,助力其构建灵活、可扩展且易于维护的后端服务体系。通过案例分析与实战经验分享,揭示了微服务在提升开发效率、优化资源利用及增强系统稳定性方面的关键作用。文章首先概述了微服务架构的基本概念,随后详细阐述了其在后端开发中的应用优势与面临的挑战,最后结合具体实例,展示了如何从零开始规划并实施一个基于微服务的后端项目。 ####
|
2月前
|
Java 网络安全 Nacos
Nacos作为流行的微服务注册与配置中心,其稳定性与易用性广受好评
Nacos作为流行的微服务注册与配置中心,其稳定性与易用性广受好评。然而,“客户端不发送心跳检测”是使用中常见的问题之一。本文详细探讨了该问题的原因及解决方法,包括检查客户端配置、网络连接、日志、版本兼容性、心跳检测策略、服务实例注册状态、重启应用及环境变量等步骤,旨在帮助开发者快速定位并解决问题,确保服务正常运行。
61 5
|
2月前
|
监控 持续交付 数据库
构建高效的后端服务:微服务架构的深度解析
在现代软件开发中,微服务架构已成为提升系统可扩展性、灵活性和维护性的关键。本文深入探讨了微服务架构的核心概念、设计原则和最佳实践,通过案例分析展示了如何在实际项目中有效地实施微服务策略,以及面临的挑战和解决方案。文章旨在为开发者提供一套完整的指导框架,帮助他们构建出更加高效、稳定的后端服务。