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

2 篇文章 0 订阅
1 篇文章 0 订阅
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方式通信。
(通俗点讲:单机结构就是一个人在完成一个工作;集群就是两个一模一样的人完成同样的工作,如果一个人不幸累死了另一个就接着顶替上去;分布式结构就是一个工作由不同的几个人分工合作来完成。)
    

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值