服务注册Eureka原理及集群配置
来源:互联网 发布:网络之纵痕天下 编辑:程序博客网 时间:2024/05/02 15:03
基本原理
上图是来自eureka的官方架构图,这是基于集群配置的eureka;
- 处于不同节点的eureka通过Replicate进行数据同步
- Application Service为服务提供者
- Application Client为服务消费者
- Make Remote Call完成一次服务调用
服务启动后向Eureka注册,Eureka Server会将注册信息向其他Eureka Server进行同步,当服务消费者要调用服务提供者,则向服务注册中心获取服务提供者地址,然后会将服务提供者地址缓存在本地,下次再调用时,则直接从本地缓存中取,完成一次调用。
当服务注册中心Eureka Server检测到服务提供者因为宕机、网络原因不可用时,则在服务注册中心将服务置为DOWN
状态,并把当前服务提供者状态向订阅者发布,订阅过的服务消费者更新本地缓存。
服务提供者在启动后,周期性(默认30秒)向Eureka Server发送心跳,以证明当前服务是可用状态。Eureka Server在一定的时间(默认90秒)未收到客户端的心跳,则认为服务宕机,注销该实例。
Eureka的自我保护机制
在默认配置中,Eureka Server在默认90s没有得到客户端的心跳,则注销该实例,但是往往因为微服务跨进程调用,网络通信往往会面临着各种问题,比如微服务状态正常,但是因为网络分区故障时,Eureka Server注销服务实例则会让大部分微服务不可用,这很危险,因为服务明明没有问题。
为了解决这个问题,Eureka 有自我保护机制,通过在Eureka Server配置如下参数,可启动保护机制
eureka.server.enable-self-preservation=true
它的原理是,当Eureka Server节点在短时间内丢失过多的客户端时(可能发送了网络故障),那么这个节点将进入自我保护模式,不再注销任何微服务,当网络故障回复后,该节点会自动退出自我保护模式。
自我保护模式的架构哲学是宁可放过一个,决不可错杀一千
Eureka Server高可用集群
理论上来讲,因为服务消费者本地缓存了服务提供者的地址,即使Eureka Server宕机,也不会影响服务之间的调用,但是一旦新服务上线,已经在缓存在本地的服务提供者不可用了,服务消费者也无法知道,所以保证Eureka Server的高可用还是很有必要的。
在分布式系统中,任何的地方存在单点,整个体系就不是高可用的,Eureka 也一样,在上面的架构图中Eureka Server不是以单点存在的,而是以集群的方式对外提供服务。
这节我们说说如何将Eureka Server进行集群配置(在本地搭建一个伪集群)。
本地示例代码:discovery-cluster
- 配置系统的hosts(linux操作系统)
127.0.0.1 discovery1 discovery2
- 配置文件application.yml
spring: application: name: discovery-cluster---spring: profiles: discovery1server: port: 8761eureka: instance: hostname: discovery1 client: service-url: default-zone: http://discovery2:8762/eureka---spring: profiles: discovery2server: port: 8762eureka: instance: hostname: discovery2 client: service-url: default-zone: http://discovery1:8761/eureka
配置文件是通过两个Eureka Server互相注册,这里有三段配置,第一段配置为公共配置,配置了应用名称,第二段为名discovery1
的配置,第三段为discovery2
的配置。在项目启动可以通过 --spring.profiles.active={配置名称}
来启动不同的配置。
- 测试
1)在discovery-cluster目录下,使用mvn package打包项目
2)使用下面命令启动两个Eureka Server节点
java -jar discovery-cluster-0.0.1-SNAPSHOT.jar --spring.profiles.active=discovery1
java -jar discovery-cluster-0.0.1-SNAPSHOT.jar --spring.profiles.active=discovery2
3)在浏览器上分别输入http://discovery1:8761和http://discovery2:8762查看注册的服务。
- 客户端修改
客户端要把自己注册到集群中,只需在default-zone配置两个地址即可
eureka: client: service-url: default-zone:http://discovery1:8761/eureka,http://discovery2:8762/eureka
非Java服务注册到Eureak Server
作为服务注册中心,应该是语言无关的,使用其他语言的服务也可以通过调用Eureka Server的Rest API 注册服务,这里不详细展开。
- 服务注册Eureka原理及集群配置
- springcloud-eureka搭建高可用服务注册集群
- Eureka服务注册过程
- Eureka的服务集群
- spring-cloud之eureka注册中心及服务发布
- 《Spring Cloud Netflix》-- 服务注册和服务发现-Eureka的服务认证和集群
- 服务注册和服务发现-Eureka的服务认证和集群--Spring Cloud Netflix
- 《Spring Cloud Netflix》-- 服务注册和服务发现-Eureka的服务认证和集群
- Eureka手把手集群配置
- Eureka-服务注册于发现
- eureka官方示例--服务注册
- Spring Cloud Eureka-服务注册
- Eureka服务注册与发现
- Spring cloud Eureka服务注册及发现(二)创建注册服务
- Spring Cloud服务注册中心双节点集群,使用Eureka实现,以IP方式配置,基于Spring Cloud的Camden SR5版本
- Spring Cloud服务注册中心双节点集群,使用Eureka实现,以IP方式配置,基于Spring Cloud的Camden SR5版本
- Eureka简介及原理
- Spring cloud系列四 Eureka 之概述和服务注册中心集群
- 【SSH框架实现】Struts2【2】 传值 以及 validation 实现
- Spring cron 表达式
- 关于尺取法的一些例子
- 画图工具
- 写给后端的前端笔记:浮动(float)布局
- 服务注册Eureka原理及集群配置
- 【备忘】2017最新python教程老男孩Python14期视频教程下载
- Jmeter-BeanShell的使用介绍
- 澳洲医保与退休金可在超过10国享受
- LigerUI关于时间的小插件
- leetcode 58. Length of Last Word
- 导入sql文件到mysql数据库出现乱码
- 根据Url获取手机文件真实路径
- Ribbon负载均衡策略与自定义配置