Eureka简介

Eureka是Netflix开发的一个Service Discovery组件,spring cloud将其整合用来做服务注册中心,Eureka包括两部分Eureka Server 和 Eureka Client

  • Eureka Server:服务注册中心,治理注册到eureka server的服务
  • Eureka Client:用来和eureka server交互,注册服务

Eureka中有下面几种概念:

  • 心跳机制:eureka client定期向eureka server通信,表明自己的存活状态,默认时间30s
  • 续约:eureka client 通过心跳机制向注册中心续租,避免自己被eureka server剔除注册信息,可以理解为心跳,说法不一样
  • 同步:eureka集群中,server节点会提取其他节点注册信息,保证每个server节点数据一致
  • 服务下线:eureka server会定期清理过期服务,也就是在指定时间内没能发送心跳的eureka client
  • 自我保护机制:eureka server为了保护服务注册信息的一种处理方式。

默认情况下,如果Eureka Server在一定时间内没有接收到某个微服务实例的心跳,Eureka Server将会注销该实例(默认90秒)。但是当网络分区故障发生时,微服务Eureka Client与Eureka Server之间无法正常通信,也就是心跳机制不能正常进行,但实际上微服务是处于可用状态,这种情况是不应该删除服务注册列表该服务的注册信息。

Eureka server通过自我保护机制来解决这种问题,当Eureka Server节点在短时间内丢失过多客户端时(可能发生了网络分区故障,默认15分钟内85%的丢失率,可以自定义配置),那么这个节点就会进入自我保护模式,Eureka Server就会保护服务注册表中的信息,不再删除服务注册表中的数据(也就是不会注销任何微服务),自我保护期间某个eureka server节点新注册的服务不会被同步到其他节点,当网络故障恢复后,Eureka client可以通过心跳机制续约,该Eureka Server节点会自动退出自我保护模式。

Eureka自我保护机制是一种应对网络异常的安全保护措施,即使同时保留所有微服务(健康的微服务和不健康的微服务都会保留),也不随便注销任何健康的微服务,自我保护机制,可以保证Eureka集群的高可用,CAP三大定理中,与Zookeeper使用的CP不同,Eureka选择保留了AP原则。

Eureka Standalone Mode

eureka的单机模式,在pom引入spring-cloud-starter-netflix-eureka-server依赖

<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>

在application.yml做如下配置

eureka:
instance:
hostname: localhost
client:
#不注册自己到eureka serve
registerWithEureka: false
#不提取注册中心的消息
fetchRegistry: false
serviceUrl:
defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/

启动eureka一段时间后,如果没有服务注册,会有提示

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 Cluster

作为微服务的服务注册中心,首先要保证自己的高可用,如果服务中心挂掉,整个微服务系统都会处于瘫痪状态,eureka在集群中server既是server也是client,server之间会相互注册,复制其他节点的数据,保证eureka的高可用。

eureka的集群模式,在pom引入spring-cloud-starter-netflix-eureka-server依赖

<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>

搭建eureka集群时为了便于区分不同的节点,在hosts文件中做如下映射

# eureka erver
127.0.0.1 eureka-7901
127.0.0.1 eureka-7902
127.0.0.1 eureka-7903

在application.yml做如下配置

spring:
application:
name: eureka-cluster
---
spring:
profiles: eureka-7901
server:
port: 7901
eureka:
instance:
#eureka server通讯地址
hostname: eureka-7901
#显示在注册中心的微服务名称
instance-id: eureka1
#是否显示IP地址
prefer-ip-address: true
#client发送心跳间隔时间 默认30s
lease-renewal-interval-in-seconds: 30
#表示eureka server至上一次收到client的心跳之后,等待下一次心跳的超时时间,在这个时间内若没收到次心跳,则将移除该instance
lease-expiration-duration-in-seconds: 90
client:
#是否提取服务端注册信息
fetch-registry: true
#是否注册自己
register-with-eureka: true
#eureka server自身作为client时将要注册到的服务端地址
service-url:
defaultZone: http://eureka-7902:7902/eureka/,http://eureka-7903:7903/eureka/
server:
#自我保护机制
enable-self-preservation: true
#eureka server清理无效节点的时间间隔,默认60000毫秒
eviction-interval-timer-in-ms: 60000
---
spring:
profiles: eureka-7902
server:
port: 7902
eureka:
instance:
hostname: eureka-7902
lease-renewal-interval-in-seconds: 30
lease-expiration-duration-in-seconds: 90
instance-id: eureka2
prefer-ip-address: true
client:
fetch-registry: true
register-with-eureka: true
service-url:
defaultZone: http://eureka-7901:7901/eureka/,http://eureka-7903:7903/eureka/
server:
enable-self-preservation: true
eviction-interval-timer-in-ms: 6000
---
spring:
profiles: eureka-7903
server:
port: 7903
eureka:
instance:
hostname: eureka-7903
lease-renewal-interval-in-seconds: 30
lease-expiration-duration-in-seconds: 90
instance-id: eureka3
prefer-ip-address: true
client:
fetch-registry: true
register-with-eureka: true
service-url:
defaultZone: http://eureka-7901:7901/eureka/,http://eureka-7902:7902/eureka/
server:
enable-self-preservation: true
eviction-interval-timer-in-ms: 6000

在idea中启动时,指定启动参数

注意:两个配置启动参数的地方配置一个就可以了

启动ar包可以使用命令

java -jar  eureka-server.jar  --spring.profiles.active=eureka-7901

在application.yml中register-with-eureka: true将自身注册为eureka server,在defdeaultZone中指定其余eureka server指定除自己外的所有节点,互相注册,每个节点在启动过程中会去请求连接其他节点,因此在初始启动阶段会报错,等所有节点启动稳定后,就会相互注册。

访问http://eureka-7901:7901,可以看到eureka-7901中注册了eureka-7902,eureka-7903,表明互相注册成功

Eureka配置项

Eureka的配置项还是比较多的,如果不明白其中的含义,也就没有办法配置合适的环境,Eureka的配置可以分为三大部分,分别是clieninstanceserver,下面列出每一部分常用的配置项说明列表。

Eureka Client

Eureka Instance

Eureka Server

Spring Cloud Netflix Eureka(注册中心)的更多相关文章

  1. 如何优化Spring Cloud微服务注册中心架构?

    作者: 石杉的架构笔记 1.再回顾:什么是服务注册中心? 先回顾一下什么叫做服务注册中心? 顾名思义,假设你有一个分布式系统,里面包含了多个服务,部署在不同的机器上,然后这些不同机器上的服务之间要互相 ...

  2. spring cloud(二)服务(注册)中心Eureka

    Eureka是Netflix开源的一款提供服务注册和发现的产品,它提供了完整的Service Registry和Service Discovery实现.也是springcloud体系中最重要最核心的组 ...

  3. Spring Cloud之服务注册中心搭建Eureka Server服务注册中⼼

    Spring Cloud并不与Spring MVC类似是一个开源框架,而是一组解决问题的规范(个人理解).解决哪些问题呢?如下: 1)服务管理:⾃动注册与发现.状态监管 2)服务负载均衡 3)熔断 4 ...

  4. Spring Cloud Netflix Eureka源码导读与原理分析

    Spring Cloud Netflix技术栈中,Eureka作为服务注册中心对整个微服务架构起着最核心的整合作用,因此对Eureka还是有很大的必要进行深入研究. 本文主要分为四部分,一是对项目构建 ...

  5. spring cloud(服务注册中心及服务提供者——初学一)

    Eureka是Netflix开源的一款提供服务注册和发现的产品,它提供了完整的Service Registry和Service Discovery实现.也是springcloud体系中最重要最核心的组 ...

  6. 微服务架构 | 3.1 Netflix Eureka 注册中心

    目录 前言 1. Eureka 基础知识 1.1 Eureka 模型中的服务器与客户端 1.2 Eureka 的 30s 启动机制 1.3 Eureka 为什么注册服务的 IP ,而不是主机名 1.4 ...

  7. Spring Cloud Netflix Eureka client源码分析

    1.client端 EurekaClient提供三个功能: EurekaClient API contracts are:* - provide the ability to get Instance ...

  8. 【系统架构理论】一篇文章精通:Spring Cloud Netflix Eureka

    是官方文档的总结 http://spring.io/projects/spring-cloud-netflix#overview 讲解基于2.0.2版本官方文档 https://cloud.sprin ...

  9. Spring Cloud--搭建Eureka注册中心服务

    使用RestTemplate远程调用服务的弊端: Eureka注册中心: Eureka原理: 搭建Eureka服务 引pom 启动类: 启动类上要加上@EnableEurekaServer注解: 配置 ...

随机推荐

  1. c++ 获取文件创建时间、修改时间、访问时间、文件内容长度

    int GetFileInfo(string& strPath, int& iCreateTime, int& iModifyTime, int& iAccessTim ...

  2. C++ Win 32 使用原始套接字获取所有ip数据包并分析(包括ping包)

    /*页面编码:GBK 开发环境 VS2019 */ #define _WINSOCK_DEPRECATED_NO_WARNINGS#include <iostream>#include&l ...

  3. JS实现鼠标移入水波效果

    前言 最近比较沉迷JS,所以我现在来做个鼠标的交互效果 HTML <div style="border-radius;position:relative;width:800px;hei ...

  4. spring与struts2整合出现错误HTTP Status 500 - Unable to instantiate Action

    在进行spring和struts2整合的时候因为大意遇到了一个问题,费了半天神终于找到了问题所在,故分享出来望广大博友引以为戒!! 我们都知道在spring和struts2整合时,spring接管了a ...

  5. JS 计算日期相减得天数

    言简意赅不呼哨直接懂,可以封装的可以根据自己的需求封装一下 var date1="2020-10-23";var date2="2020-10-26";var ...

  6. 爬虫在linux下启动selenium-安装谷歌浏览器和驱动(傻瓜式教程)

    一.升级yum(防止不必要的麻烦) yum update -y yum -y groupinstall "Development tools" yum install openss ...

  7. 手把手教你搭建SVN服务

    参考一下地址 https://blog.csdn.net/marstonyjiang/article/details/52033916

  8. Redis集群环境搭建实践

    0 Redis集群简介 Redis集群(Redis Cluster)是Redis提供的分布式数据库方案,通过分片(sharding)来进行数据共享,并提供复制和故障转移功能.相比于主从复制.哨兵模式, ...

  9. 【新阁教育】基于ModbusTCP实现西门子1200PLC定位控制案例

    1. 引言 今天新阁教育给大家分享一个<基于ModbusTCP实现西门子1200PLC定位控制案例>,从PLC输入输出及步进电机接线开始,到PLC运动控制程序编写,再到后续的ModbusT ...

  10. 2018noip游记

    2018noip游记 相隔一年多才想起可以弄一篇博客纪念一下我的首次比赛, 以现在的水平回望过去,发现很好玩很有纪念意义, 于是这篇博客诞生了 \(T1\) 当时的我刚学会什么是字符串,但仍然很不熟练 ...