百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 热门文章 > 正文

SpringCloud微服务架构篇4:深入了解Eureka

bigegpt 2024-10-20 04:28 3 浏览

1、服务注册及相关原理

分布式领域CAP定理(布鲁尔定理)

  • 一致性(Consistency):同一个数据在集群中的所有结点,同一时间的值是否相同。
  • 可用性(Aavilability):集群中一部分节点故障后,集群整体是否正常处理请求。
  • 分区容忍性(Partition tolerance):是否允许集群汇中的节点之间无法通信。


在任何分布式系统中都不可能同时满足,最多同时满足其中两个,比如涉及数据存储的场景,数据一致性是要必须的。如Zookeeper就是采用CP原则,任何时刻对Zookeeper的访问请求都能得到一致的数据结果,同时系统对网络分割具备容错性,但是它不能保证每次服务请求的可用性。

对于微服务的治理来说,其核心主要就是服务的注册和发现,可用性比数据一致性更重要。因此Eureka的设计原则采用的是AP原则。


服务注册(Register)

启动时,会调用Eureka所提供的服务注册相关方法,向Eureka服务器注册自己的信息。同时,在Eureka服务器会维护一个已注册的服务列表。

服务列表数据结构是一个HashMap,第一层为应用名称和对应的服务实例;第二层是服务实例机器对应的注册信息,包括宿主服务IP地址、服务端口、运行状况指示符、URL等数据。

当服务实例状态发生变化时,就会想Eureka服务器更新自己的服务状态,同时用replicateToPeers()向其他Eureka服务器节点做状态同步。

当我们在配置文件中将eureka.client.register-with-eureka属性配置为false时,则不进行注册。


服务续约(Renew)

当服务启动并成功注册到Eureka服务器后,Eureka客户端会默认以每30s的频率向Eureka服务器发送心跳,也可以修改配置文件中的eureka.instance.lease-renewal-interval-in-seconds修改属性。

发送心跳的目的就是执行服务续约操作,避免自己的注册信息被Eureka服务器剔除。续约的处理逻辑和服务注册逻辑基本一致:更新自身状态,然后同步到其他Eureka服务器节点。


对于Eureka服务器来说,在默认的时间内(90s),连续3次没有收到客户端的心跳,则会将该服务实例从所维护的服务注册表中剔除,禁止流向该实例的流量,eureka.instance.lease-expiration-duration-in-seconds。

如果当Eureka服务器处于自我保护模式,则不会清楚该服务实例信息。


服务下线与剔除

当服务实例关闭时,服务实例会先向Eureka服务器发送服务下线请求。该服务实例信息将从Eureka服务器的实例注册表中删除。


获取服务

Eureka客户端在启动时会从Eureka服务器中获取注册表信息,并缓存在本地。Eureka客户端会使用该信息查找相应的服务,进行调用。该注册列表信息每30s从Eureka服务器进行同步。


2、Eureka自我保护模式

在自我保护模式下,Eureka服务器会保护服务注册表中的信息,不会注销任何服务实例。当开启自我保护模式时,会以红色字体显示以下告警信息。

Eureka服务器自我保护模式开启的条件是:当Eureka服务器每分钟收到的心跳续约数量低于一个阈值,就会触发。当收到的心跳数恢复到阈值以上,则会自动退出自我保护模式。

可以通过eureka.server.enable_selft_preservation=false禁用。


3、注册一个服务实例需要的时间

三处缓存处理和一处延迟处理:

  • Eureka服务器对服务注册列表进行缓存,默认时间为30s。
  • Eureka客户端对注册的服务信息进行缓存,默认时间为30s。
  • Ribbon负载均衡会从Eureka客户端获取服务列表,并将负载均衡后的结果缓存30s。
  • 服务实例在启动时,不是立即向Eureka服务器注册。而是在一个延迟时间(默认40s)之后才向Eureka服务器注册。


4、Eureka高可用集群及示例

对于Eureka服务器可以通过运行多个实例来构建集群,解决单点问题,提高可用率。由于Eureka服务器采用的是Peer to Peer对等通信,一种去中心化的架构,没有master和slave之分,每个节点都是对等的。

实现Eureka服务高可用,必须让Eureka服务器之间能够互相复制、同步所注册服务的实例信息。


5、多网卡及IP指定

eureka.instance.prefer-ip-address=true,设置服务在注册时使用IP地址注册,而不是主机名称。服务消费者就会通过IP地址来调用相关的服务,而不是主机名称。(单机或Docker部署情况下)

eureka.instance.ip-address=127.0.0.1,手动指定IP。


6、Eureka服务访问安全

增加Eureka服务器用户认证,增加对应的pom依赖包。

无需任何配置,SpringSecurity已经帮你进行了简单的配置,你重新运行项目的时候会发现在控制台有一串随机的密码。

当再次访问的Eureka注册界面的时候。

默认用户名是user,密码则是在启动时,随机生成的密码。

相关推荐

Java 泛型大揭秘:类型参数、通配符与最佳实践

引言在编程世界中,代码的可重用性和可维护性是至关重要的。为了实现这些目标,Java5引入了一种名为泛型(Generics)的强大功能。本文将详细介绍Java泛型的概念、优势和局限性,以及如何在...

K8s 的标签与选择器:流畅运维的秘诀

在Kubernetes的世界里,**标签(Label)和选择器(Selector)**并不是最炫酷的技术,但却是贯穿整个集群管理与运维流程的核心机制。正是它们让复杂的资源调度、查询、自动化运维变得...

哈希Hash算法:原理、应用(哈希算法 知乎)

原作者:Linux教程,原文地址:「链接」什么是哈希算法?哈希算法(HashAlgorithm),又称为散列算法或杂凑算法,是一种将任意长度的数据输入转换为固定长度输出值的数学函数。其输出结果通常被...

C#学习:基于LLM的简历评估程序(c# 简历)

前言在pocketflow的例子中看到了一个基于LLM的简历评估程序的例子,感觉还挺好玩的,为了练习一下C#,我最近使用C#重写了一个。准备不同的简历:image-20250528183949844查...

55顺位,砍41+14+3!季后赛也成得分王,难道他也是一名球星?

雷霆队最不可思议的新星:一个55号秀的疯狂逆袭!你是不是也觉得NBA最底层的55号秀,就只能当饮水机管理员?今年的55号秀阿龙·威金斯恐怕要打破你的认知了!常规赛阶段,这位二轮秀就像开了窍的天才,直接...

5分钟读懂C#字典对象(c# 字典获取值)

什么是字典对象在C#中,使用Dictionary类来管理由键值对组成的集合,这类集合被称为字典。字典最大的特点就是能够根据键来快速查找集合中的值,其键的定义不能重复,具有唯一性,相当于数组索引值,字典...

c#窗体传值(c# 跨窗体传递数据)

在WinForm编程中我们经常需要进行俩个窗体间的传值。下面我给出了两种方法,来实现传值一、在输入数据的界面中定义一个属性,供接受数据的窗体使用1、子窗体usingSystem;usingSyst...

C#入门篇章—委托(c#委托的理解)

C#委托1.委托的定义和使用委托的作用:如果要把方法作为函数来进行传递的话,就要用到委托。委托是一个类型,这个类型可以赋值一个方法的引用。C#的委托通过delegate关键字来声明。声明委托的...

C#.NET in、out、ref详解(c#.net framework)

简介在C#中,in、ref和out是用于修改方法参数传递方式的关键字,它们决定了参数是按值传递还是按引用传递,以及参数是否必须在传递前初始化。基本语义对比修饰符传递方式可读写性必须初始化调用...

C#广义表(广义表headtail)

在C#中,广义表(GeneralizedList)是一种特殊的数据结构,它是线性表的推广。广义表可以包含单个元素(称为原子),也可以包含另一个广义表(称为子表)。以下是一个简单的C#广义表示例代...

「C#.NET 拾遗补漏」04:你必须知道的反射

阅读本文大概需要3分钟。通常,反射用于动态获取对象的类型、属性和方法等信息。今天带你玩转反射,来汇总一下反射的各种常见操作,捡漏看看有没有你不知道的。获取类型的成员Type类的GetMembe...

C#启动外部程序的问题(c#怎么启动)

IT&OT的深度融合是智能制造的基石。本公众号将聚焦于PLC编程与上位机开发。除理论知识外,也会结合我们团队在开发过程中遇到的具体问题介绍一些项目经验。在使用C#开发上位机时,有时会需要启动外部的一些...

全网最狠C#面试拷问:这20道题没答出来,别说你懂.NET!

在竞争激烈的C#开发岗位求职过程中,面试是必经的一道关卡。而一场高质量的面试,不仅能筛选出真正掌握C#和.NET技术精髓的人才,也能让求职者对自身技术水平有更清晰的认知。今天,就为大家精心准备了20道...

C#匿名方法(c#匿名方法与匿名类)

C#中的匿名方法是一种没有名称只有主体的方法,它提供了一种传递代码块作为委托参数的技术。以下是关于C#匿名方法的一些重要特点和用法:特点省略参数列表:使用匿名方法可省略参数列表,这意味着匿名方法...

C# Windows窗体(.Net Framework)知识总结

Windows窗体可大致分为Form窗体和MDI窗体,Form窗体没什么好细说的,知识点总结都在思维导图里面了,下文将围绕MDI窗体来讲述。MDI(MultipleDocumentInterfac...