赞
踩
SPRING-CLOUD注册中心:EUREKA
参考URL: https://zhuanlan.zhihu.com/p/36492112
SpringCloud是基于springBoot的一整套实现微服务的框架.Eureka为springCloud架构中首选推荐的服务治理组件。
Eureka,古希腊词语,英文读音[juə’ri:kə],意思是“我找到了!我发现了!”。
Eureka包含两个组件:Eureka Server和Eureka Client。
Eureka提供了客户端缓存机制,即使所有的Eureka Server都挂掉,客户端依然可以利用缓存中的信息为消费者提供服务发现功能。不过,此时不再接受服务注册,因为Eureka Server已经全部挂掉了。这就是AP原则的体现。
Eureka在CAP理论中属于AP,只要有一台Eureka还在,就能保证注册服务可用(保证可用性),只不过查到的信息可能不是最新的(不保证强一致性)。
其实2、3 是一样的,都是Eureka Client,注册自己到Eureka Server。
spring-cloud-eureka是spring-cloud-nettfix微服务套件中的一部分, 它基于nettfix-eureka做了二次封装,主要负责微服务架构中的服务治理功能。
服务治理一般都会有两个功能:服务注册、服务发现。通常会有一个注册中心,每个服务单元向注册中心登记自己信息,比如提供的服务,ip, 端口以及一些附加信息等。注册中心会将新的服务实例发送给其它依赖此服务的实例。
原理解析
eureka提供的EndPoint
注册服务 :POST /eureka/apps/appId
服务启动时,向注册中心发起注册请求。申请向注册中心注册,最终由注册中心维护一个服务注册表
删除服务 :DELETE /eureka/apps/appId/instanceId
更新服务 :PUT /eureka/apps/appId/instanceId
服务发现 :GET /eureka/apps/appId
消费者根据服务名称,向注册中心查找对应的IP:PORT列表
………
客户端和注册中心所有的交互都是根据endpoint来的。
Eureka的缓存
客户端拉去服务列表时,注册中心会从缓存中拿,并不是每次都去服务注册表中获取。默认30秒
客户端会缓存服务列表。默认30秒
负载均衡器Ribbon会缓存服务列表
参考URL: https://blog.csdn.net/sinat_38843093/article/details/80222277
Spring Cloud 基于Spring Boot 2.x的服务注册与发现(Eureka)
参考URL: https://blog.csdn.net/yy1098029419/article/details/80405345
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-eureka-server</artifactId>
</dependency>
server: port: 8081 context-path: /eureka-server # eureka server 启动时会创建一个定时任务,每隔一段时间(默认60s)将当前清单中超时(默认90s)没有续约的服务剔除出去 # 自我保护 : # 在信息面板中可能会出现这样的红色警告 EMERGENCY! EUREKA MAY BE INCORRECTLY CLAIMING INSTANCES ARE UP WHEN THEY'RE NOT. RENEWALS ARE LESSER THAN THRESHOLD AND HENCE THE INSTANCES ARE NOT BEING EXPIRED JUST TO BE SAFE. # 该警告就是触发了eureka的自我保护机制,服务注册到eureka server后会维护一个心跳连接.eureka server在运行期间,会统计心跳失败的比例在15分钟内是否低于85%. # 如果低于,会将当前的实例注册信息保护起来,让这些实例不会过期.可以配置 eureka.server.enable-self-preservation=false 来关闭保护机制 # 关闭保护机制,信息面板中会显示 THE SELF PRESERVATION MODE IS TURNED OFF.THIS MAY NOT PROTECT INSTANCE EXPIRY IN CASE OF NETWORK/OTHER PROBLEMS. eureka: server: enable-self-preservation: false instance: # hostname不配置的话,会根据操作系统的主机名来获取 hostname: localhost # 注册服务之后,服务提供者会维护一个心跳用来持续告诉eureka server服务正常,以防止eureka server的剔除任务将该服务实例从服务列表中排除出去,该操作称为服务续约 # lease-renewal-interval-in-seconds: 30 定义服务续约任务的调用间隔时间(默认30s,官方不推荐修改) # lease-expiration-duration-in-seconds: 90 定义服务失效的时间(默认90s,官方不推荐修改) client: # 在默认设置下,该服务注册中心也会将自己作为客户端来尝试注册它自己,所以我们需要禁用它的客户端注册行为 # 配置register-with-eureka: false 和 fetch-registry: false 来表明自己是一个eureka server register-with-eureka: false fetch-registry: false # 为了性能考虑,eureka server 会维护一份只读的服务清单返回给客户端,同时该缓存清单会每隔30s更新一次(可通过registry-fetch-interval-seconds进行修改) # registry-fetch-interval-seconds: 30
@EnableEurekaServer
@SpringBootApplication
public class EurekaServerApplication {
public static void main(String[] args) {
SpringApplication.run(EurekaServerApplication.class, args);
}
}
使用actuator监控,需要关闭权限验证,否则访问某些端点会报401
management.security.enabled=false
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-eureka</artifactId>
</dependency>
server:
port: 8082
context-path: /eureka-client
eureka:
client:
service-url:
# 配置服务注册中心集群时,此处可以配置多个地址(通过逗号隔开)
defaultZone: http://localhost:8081/eureka-server/eureka/
# spring.application.name,这个很重要,在以后的服务与服务之间相互调用一般都是根据这个name
spring:
application:
name: eureka-client
【推荐-作者写的比较全面】Eureka Server之注册实例自我保护机制
链接:https://www.jianshu.com/p/9cf099dd9d55
Eureka 自我保护模式、健康检查机制、Eureka 元数据
参考URL: https://blog.csdn.net/wangmx1993328/article/details/88565342
1、什么是 Eureka Server 自我保护?
当Eureka Server节点在短时间内丢失过多客户端时(可能发生了网络分区故障),那么这个节点就会进入自我保护模式。一旦进入该模式,Eureka Server就会保护服务注册表中的信息,不再删除服务注册表中的数据(也就是不会注销任何微服务)。当网络故障恢复后,该Eureka Server节点会自动退出自我保护模式。
如果 Eureka Server 在 15 分钟内有超过 85% 的 Eureka Client 都没有正常的发送心跳过来(单机模式时尤为明显),那么 Eureka Server 就认为注册中心与客户端出现了网络故障,Eureka Server 自动进入自我保护机制。
这也就是为什么平时使用一个 Eureka Server 与一个 Eureka Client 时,即使手动关闭了 Eureka Client,但是 Eureka Server 主页中“Instances currently registered with Eureka”下面 status 栏仍然显示为 UP。
总结:当注册中心,某一时段内收不到大部分服务的心跳。会默认自身出了问题,并不会将这些服务踢出注册表
自我保护的原则是:宁可放过,不可杀错!自我保护模式是一种针对网络异常波动的安全保护措施,能使 Eureka 集群更加的健壮、稳定的运行。
SpringCloud实践(三) 高可用的Eureka注册中心
参考URL: https://blog.csdn.net/csolo/article/details/80540359?depth_1-utm_source=distribute.pc_relevant.none-task&utm_source=distribute.pc_relevant.none-task
可以,消费端会缓存服务端的IP:PORT,注册中心宕机,只是不能更新已经缓存的IP集合。所以还是可以通信的。但此时如果客户端宕机,客户端感知不到。由此也可以看出,注册中心只是服务注册和发现的作用,并不会干预服务间的调用。
Eureka Server设计(转载 石杉的架构笔记)
参考URL: https://www.cnblogs.com/daiwei1981/p/10040272.html
推荐阅读原作者链接,作者分析了Eureka 原理。一句话概括:维护注册表、拉取注册表、更新心跳时间,全部发生在内存里!这是Eureka Server非常核心的一个点。
作者假设你一共部署了2000个服务实例。
每个服务实例内部都有一个Eureka Client组件,它会每隔30秒请求一次Eureka Server,拉取变化的注册表。
此外,每个服务实例上的Eureka Client都会每隔30秒发送一次心跳请求给Eureka Server。
那么大家算算,Eureka Server作为一个微服务注册中心,每秒钟要被请求多少次?一天要被请求多少次?
按标准的算法,每个服务实例每分钟请求2次拉取注册表,每分钟请求2次发送心跳
这样一个服务实例每分钟会请求4次,2000个服务实例每分钟请求8000次
换算到每秒,则是8000 / 60 = 133次左右,我们就大概估算为Eureka Server每秒会被请求150次
那一天的话,就是8000 * 60 * 24 = 1152万,也就是每天千万级访问量。
总结:根据作者描述,2000个服务实例,每天才是千万级访问量。Eureka 可以承受每天千万级的访问量。
个人总结: 感觉生产环境一般使用2台Eureka 做高可用即可。
Eureka性能测试
参考URL: http://springcloud.cn/view/31
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。