SpringCould_Eureka 集群、分布式(服务发现框架)

Eureka是Netflix开发的服务发现框架,用于定位运行在AWS域的中间层服务,实现负载均衡和故障转移。它包括EurekaServer和EurekaClient,服务提供者注册心跳,服务消费者获取服务列表。服务提供者每30秒发送一次心跳,90秒无心跳会被剔除。Eureka有自我保护机制,防止因网络问题误删服务。高可用的Eureka Server可通过集群实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.什么是 Eureka?
    eureka是Netflix开发的服务发现框架,本身是一个基于REST的服务,主要用于定位运行在AWS域的中间层服务,以达到负载均衡和中间层服务故障转移的目的。
            eureka包含两组件:Eureka Server 和Eureka Client
            Eureka Server 提供服务注册服务,各个节点启动后,会在Eureka Server 中进行注册,这样Eureka Server 中的服务注册表中将会存储所有可用服务节点的信息,服务节点的姓洗可以在界面中直观的看到。
            Eureka Client是一个java客户端,用于简化Eureka service的交互,客户端同时也就是一个内置的,使用轮询 (round-robin)负载算法的负载均衡器。
            在应用启动后,将会向Eureka Server 发送心跳,默认周期30秒,若Eureka Server在各个心跳周期内没有接受到某个节点的心跳,Eureka Server将会从服务注册表中把这个服务节点移出(默认90秒)    
            除此之外,eureka client 还具有缓存功能,它能够从eureka server查询当前注册的服务信息并缓存到本地,这样即使eureka server宕机,eureka client 也依然可以利用缓存中的信息调用服务。
            综上所述,eureka 正是通过心跳检查,缓存更新等机制,确保系统具有高可用性,灵活性和可伸缩性。
通俗点讲:eureka就好比是滴滴,负责管理、记录服务提供者的信息。服务调用者无需自己寻找服务,而是把自己的需求告诉eureka,然后eureka会吧符合你需求的服务考诉你。
2.基本原理图
  • eureka:就是服务注册中心(可以是一个集群),对外暴露自己的地址
  • 提供者:启动后向eureka注册自己信息(地址,提供什么服务)
  • 消费者:向eureka订阅服务,eureka会将对应服务的所有提供者地址列表发送给消费者,并且定期更新
  • 心跳(续约):提供者定期通过http方式向eureka刷新自己的状 (定时向EurekaServer发起Rest请求)
    (ps:默认情况下每隔30秒服务会向注册中心发送心跳一次,证明自己还活着。如果超过90秒没有发送心跳,eurekaServer就会认为该服务宕机,会从服务列表中移除。)
3.服务提供者与服务消费者
  1. 服务提供者:eureka client启动后,服务提供者会通过rest请求将自己注册在eureka server中,并维护一个心跳(默认30秒发送一次心跳)进行服务续约,告诉eurekaserver “我还活着”,防止eureka server 将该服务从服务列表中剔除。
  2. 服务消费者:用于获取eureka server注册的服务清单,并且该服务清单默认每隔30秒更新一次。服务消费者获取到服务清单后,能够根据自己的需求调用那个服务,默认采用轮询的方式调用,从而实现eureka client 的负载均衡。
(ps:服务提供者和服务消费者是可以互相转换的,因此一个服务既可能是服务消费者,又可能是服务提供者。例如在传统的企业应用三层架构中,服务层会调用数据访问岑的接口进行数据操作,它本身也会提供服务给控制层使用。)
4.心跳机制
     eureka 是通过心跳的方式来实现对各个服务实例的健康检测。在eureka的服务续约与剔除机制下, 客户端的健康状态从注册到注册中心开始都会处于UP状态,除非心跳终止一段时间后,服务注册中心将其剔除。心跳机制可以有效检查客户端进程是否正常运作。
    服务启动后,eureka client实例将会向eureka server发送周期性的心跳,默认30s,可以通过如下代码修改:
eureka:
    instance:
    leaseRenewalIntervalInSeconds:30
    eureka server如果在一定期限内没有接收到eureka client实例的心跳,就会将该实例从注册中心剔除调,其他客户端将无法访问这个实例。(默认90s)
eureka:
    instance:
        leaseRenewalIntervalInSeconds:30
        leaseExpirationDurationInSeconds:90
5.eureka基础架构
eureka架构中的三个核心角色:
  • 服务注册中心
eureka的服务端应用,提供服务注册和发现功能。
  • 服务提供者
提供服务的应用,可以是springboot应用,也可以是其他人以技术实现,只要对外提供的是rest风格服务即可。
  • 服务消费者
消费用用从注册中心获取服务列表,从而得治每个服务方的信息,知道去哪里调用服务方。
  • 服务续约
在注册服务完成以后,服务提供者会维持一个心跳,告诉EurekaServer:“我还活着”。这个我们称为服务的续约(renew)
服务续约的两个重要属性:
服务续约任务的调用间隔时间,默认为30秒
eureka.instance.lease-renewal-interval-in-seconds=30
服务失效的时间,默认为90秒。
eureka.instance.lease-expiration-duration-in-seconds=90
6.失效剔除和自我保护
  • 失效剔除
有时候,我们的服务提供方并不一定会正常下线(相当于服务提供者的“服务续约”操作),可能因为内存溢出、网络故障等原因导致服务无法正常工作,eureka server需要将这样的服务剔除服务列表。因此它会开启一个定时任务,每隔60秒就会将当前清单中(默认90s)没有续约的服务剔除,这个操作被称为失效剔除。
  • 自我保护
    eureka 的自我保护机制是为了防止出现“误杀”服务的情况。eureka注册中心和服务中心都有发生故障的可能。如果eureka server注册中心发生故障,eureka client服务就有可能不正常续约,而这个时候服务是正常的,但是注册中心会将超过90s未续约的服务剔除造成误杀服务这个情况。
    eureka server通过判断是否存在大量续约失败的服务,从而确定是否开启自我保护。默认请款下,eureka server配置的自我保护阈值(临界值)是0.85、如果eureka server运行期间根据心跳比例接收到的服务续约低于阈值,eureka server就开启自我保护,不再剔除注册列表的信息。
    但是,如果在eureka server保护期间发生了服务下线的情况,这时eureka server维护的服务清单就不那么准确了。此时可以关闭保护机制,确保服务中心不可用的服务实例被及时剔除。
我们关停一个服务,就会在eureka面板看到一条警告:
这是触发了eureka的自我保护机制。当一个服务未按时进行心跳续约时,eureka会统计最近15分钟心跳失败的服务实列的比例是否超过了85%。再生产环境下,因为网络延迟等原因,心跳失效实例的比例很有可能超标,但是此时就把服务剔除列表并不妥当,因为服务可能没有宕机。eureka就会把当前实例的注册信息保护起来,不予剔除。生产环境下这很有效,保证了大多数服务依然可用。
但是这给我们的开发带来了麻烦,因此开发阶段我们都会关闭自我保护模式。
在eureka的yml文件中配置:
7.高可用的eureka server
高可用:是分布式系统架构设计中必须考虑的因素之一,它通常是指,通过设计减少系统不能提供服务的时间。(就算是在极端环境下,也可以正常提供服务,哪怕是网线坏了。)
如何是实现高可用
8.什么是集群,分布式
  • 单机结构:一个系统业务量很小的时候所有的代码都放在一个项目中,然后这个项目部署在一台服务器上,整个项目所有的服务都由这台服务器提供,这就是单机结构。
  • 集群单机处理达到瓶颈的时候,就把单机复制几份,这样就构成了一个“集群”。集群中每台服务器就叫作这个集群的一个“节点”,所有的节点构成了一个集群。每个节点都提供相同的服务,这样,系统的处理能力就相当于提升了好几倍。
  • 分布式结构:就是将一个完整的系统,按照业务功能或者代码,拆分成一个个独立的子系统,在分布式结构中,每个子系统就被成为“服务”。这些子系统能够独立运行在web容器中,它们之间通过RPC方式通信。
(通俗点讲:单机结构就是一个人在完成一个工作;集群就是两个一模一样的人完成同样的工作,如果一个人不幸累死了另一个就接着顶替上去;分布式结构就是一个工作由不同的几个人分工合作来完成。)
    

### Charles 工具的功能介绍与使用教程 Charles 是一款功能强大的抓包工具,广泛应用于网络调试和性能分析。以下是关于 Charles 的功能介绍及其使用方法的详细说明。 #### 一、Charles 的基本功能 Charles 提供了多种功能以满足开发者在网络调试中的需求,包括但不限于以下内容: - **界面介绍**:Charles 的界面设计直观,主要由会话列表、请求详情和配置选项组成[^1]。 - **弱网模拟**:通过设置网络延迟和带宽限制,开发者可以模拟不同的网络环境,从而测试应用在不同网络条件下的表现[^1]。 - **请求编辑**:支持对 HTTP/HTTPS 请求进行修改,允许用户更改请求头、参数或正文内容,以便测试不同的场景[^1]。 - **请求重发**:可以重新发送已捕获的请求,便于重复测试某些特定的网络行为。 #### 二、Charles 的安装与基本设置 在使用 Charles 前,需要完成以下基本设置: - **下载与安装**:访问 Charles 的官网(https://www.charlesproxy.com/),根据操作系统选择合适的版本进行下载和安装[^2]。 - **代理配置**:启动 Charles 后,确保设备的网络代理设置正确指向 Charles 的本地代理地址(通常是 `127.0.0.1` 和端口 `8888`)[^2]。 #### 三、SSL 抓包配置 为了捕获 HTTPS 流量,需要进行 SSL 代理设置: - 打开 Charles 的菜单栏,依次选择 `Proxy > SSL Proxying Settings`。 - 在弹出的窗口中,添加需要抓取的域名,并将 Charles 自带的 CA 证书导入到目标设备或浏览器中[^4]。 - 导入证书后,确保设备信任该证书,以便正常解密 HTTPS 数据流。 #### 四、高级功能 除了基础功能外,Charles 还提供了许多高级功能: - **带宽限制**:通过模拟低速网络,评估应用在不同网络条件下的性能[^3]。 - **断点调试**:允许用户暂停请求并手动修改其内容后再继续发送[^3]。 - **映射功能**:支持将某个 URL 的请求重定向到本地文件或其他服务器地址,便于开发和测试[^3]。 #### 五、注意事项 在使用 Charles 时需要注意以下几点: - 确保目标设备已正确配置代理,并导入了 Charles 的 CA 证书。 - 如果遇到证书不被信任的问题,可能需要手动将证书添加到系统的受信任证书列表中。 ```python # 示例代码:验证 Charles 的代理设置是否生效 import requests proxies = { "http": "http://127.0.0.1:8888", "https": "http://127.0.0.1:8888" } response = requests.get("https://www.example.com", proxies=proxies) print(response.status_code) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值