Eureka架构图

springcloud 手动注册服务 springcloud服务注册中心eureka_Server

一、Eureka简介

1、Spring Cloud Netflix的核心子模块,包含Eureka Server和Eureka Client:

1)Eureka Server提供服务注册服务,存储所有可用服务节点

2)Eureka Client用于简化与Eureka Server之间的通讯复杂度,同时也是一个内置的、使用轮询(round-robin)负载算法的负载均衡器

2、Eureka依赖配置

1)Eureka Server:

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

#properties:
server:
    port: 8761

eureka:
    instance:
        hostname: localhost
        prefer-ip-address: true
    client:
        register-with-eureka: false
        fetch-registry: false
    service-url:
        defaultZone: http://localhost:8761/eureka/

//启动类:
@EnableEurekaServer

2)Eureka Client:

<!--pom dependency-->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>

#properties:
server:
    port: 8201

eureka:
    client:
        service-url:
            defaultZone: http://localhost:8761/eureka/

//启动类:
@EnableDiscoveryClient

3)给服务起别名

spring:
    application:
        name: xxx

@EnableDiscoveryClient与@EnableEurekaClient的区别:

@EnableDiscoveryClient:可以集成大部分注册中心

@EnableEurekaClient:只对Eureka使用

3、获取服务

private LoadBalancerClient eurekaClient;

ServiceInstance choose = eurekaClient.choose(“服务名”);

二、核心特性

1、服务注册(register)

Eureka Client在第一次心跳时向Eureka Server注册(注册时是有时间差的)

注册时会提供诸多自身元数据:主机号、端口、健康指标、URL等

2、服务续约(renew)

Eureka Client通过发送心跳进行续约

默认情况下每30秒发送一次心跳

如果90秒内Eureka Server未收到续约,则进行服务剔除

3、服务下线(cancel)

Eureka Client优雅退出时会发送cancel命令

Eureka Server收到cancel命令是会删除该节点

4、获取注册列表信息

Eureka Client会缓存由Server获取的注册表信息

Eureka Client会定期更新注册表信息(默认30秒)

Eureka Client会处理注册表的合并等内容

三、多注册中心比较(理论、特性、应用)

1、一致性(强一致性、弱一致性、最终一致性):Consistency

2、可用性:Availability

3、分区容错性:Partition tolerance

常见注册中心:Eureka、Zookeeper等

Eureka主要保证AP特性

Zookeeper是典型的CP特性

四、Eureka慢注册

Eureka注册慢的根本原因在于Eureka的AP特性(即统一扫描、统一放行)

Eureka Client延迟注册,默认30秒

Eureka Server的响应缓存,默认30秒

Eureka Server的缓存刷新,默认30秒

服务注册慢的解决方案:可以修改eureka.instance.leaseRenewalIntervalInSeconds配置加快客户端连接到其他服务的过程

注意:在生产中,最好坚持使用默认值,因为在服务器内部有一些计算对服务续约做出假设

五、Eureka的自我保护

Eureka Server会自动更新续约更新阈值

Eureka Server续约更新频率低于阈值则进入保护模式

自我保护下Eureka Server不会剔除任何注册信息