SpringCloud Eureka注册中心的应用与原理

前言

我们知道,在微服务架构中,每个微服务都是以集群的形式存在的,我们要做负载的话,需要知道这些服务的ip地址和端口号,在之前的两篇文章中,在学习Ribbon的时候,我们的每个服务的ip地址都是写死在application.properties文件中,如图所示
在这里插入图片描述
这样在节点比较少的情况下可能还可以,但是如果节点特别多的话,如果都用文件配置的话,可维护性太差,并且,这种方式并不能支持服务的上下线动态感知。

怎么办的?这时候,就该用到注册中心了。

1.Eureka是什么?

Spring-Cloud Eureka是Spring Cloud集合中一个组件,它是对Eureka的集成,用于服务注册和发现。Eureka是Netflix中的一个开源框架。它和 zookeeper、Consul一样,都是用于服务注册管理的,同样,Spring-Cloud 还集成了Zookeeper和Consul。

Eureka由多个instance(服务实例)组成,这些服务实例可以分为两种:Eureka Server和Eureka Client。为了便于理解,我们将Eureka client再分为Service Provider和Service Consumer。

  • Eureka Server 提供服务注册和发现
  • Service Provider 服务提供方,将自身服务注册到Eureka,从而使服务消费方能够找到
  • Service Consumer 服务消费方,从Eureka获取注册服务列表,从而能够消费服务

2.Eureka与Zookeeper比较

首先介绍下CAP原理

  • P:Partition tolerance:网络分区容错。类似多机房部署,保证服务稳定性。
  • A: Availability:可用性。
  • C:Consistency :一致性(强一致性)。

CAP定理:CAP三个属性对于分布式系统不能同时做到。只能做到如AP/CP/AC。

Eureka与Zookeeper比较:

  • Zookeeper是CP,分布式协同服务,突出一致性。对ZooKeeper的的每次请求都能得到一致的数据结果,但是无法保证每次访问服务可用性。如请求到来时,zookeer正在做leader选举,此时不能提供服务,即不满足A可用性。

  • Eureka是AP,高可用与可伸缩的Service发现服务,突出可用性。相对于Zookeeper而言,可能返回数据没有一致性,但是保证能够返回数据,服务是可用的。

这里有篇文章介绍为什么服务发现使用Eureka,而不是Zookeeper。
http://dockone.io/article/78

3.Eureka简单的原理图

在这里插入图片描述

4.Eureka的简单使用

先创建一个eureka微服务
在这里插入图片描述
添加eureka的依赖
在这里插入图片描述
application.properties配置

# 应用名称
spring.application.name=eureka-server

server.port=8761
#指向服务注册中心的地址
eureka.client.service-url.defaultZone=http://localhost:8761/eureka

主入口

@EnableEurekaServer
@SpringBootApplication
public class EurekaServerApplication {

    public static void main(String[] args) {
        SpringApplication.run(EurekaServerApplication.class, args);
    }

}

访问浏览器:localhost:8761
在这里插入图片描述
eureka注册中心已经有了,下面需要将服务注册上去
order微服务中,添加eureka依赖

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
    <version>2.2.3.RELEASE</version>
</dependency>

配置文件

# 应用名称
spring.application.name=order-service
# 应用服务 WEB 访问端口
server.port=8080

# 将服务注册到注册中心
eureka.client.service-url.defaultZone=http://localhost:8761/eureka

启动项目
在这里插入图片描述
服务已经注册上去
接下来,user-service(服务调用者)也要注册到注册中心去
添加pom依赖(同上),配置文件做修改

# 应用名称
spring.application.name=user-service
# 应用服务 WEB 访问端口
server.port=8088

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

# 用了注册中心后,下面写死的配置不需要了
# 配置制定服务的提供者地址列表
#order-service.ribbon.listOfServers=\
#  localhost:8080,localhost:8082

大功告成,重启user-service,访问localhost:8088/test 发现可以调用,大功告成!

5 Eureka 的集群

在这里插入图片描述
在这个图上 Eureka通过Replicate进行数据同步 不同Eureka Server之间的节点地位均等(扁平化,去中心化)节点间集群的形成 通过置顶的serviceUrl相互注册 高可用节点的可用性得到提高

若集群中某个节点失效 client自动切换到其他server上(每个server节点相互同步) Eureka连接方式 不建议单线连接(1->2->3 此时1也会和3互相同步) 可以指定多个注册地址(这样配置serviceUrl 1->2 1->3)

Eureka分区:
1.region->地理上的不同区域
2.zone->具体的机房

5.2 eureka集群的搭建

非常简单,建立一个一模一样的eureka服务,然后改一下配置即可。两个服务相互注册

eureka1配置

# 应用名称
spring.application.name=eureka-server

server.port=8761
#指向服务注册中心的地址
eureka.client.service-url.defaultZone=http://localhost:8762/eureka

eureka2配置

# 应用名称
spring.application.name=eureka-server

server.port=8762
#指向服务注册中心的地址
eureka.client.service-url.defaultZone=http://localhost:8761/eureka

这样集群就配好了

然后微服务这样配置,写两个地址就行

# 应用名称
spring.application.name=user-service
# 应用服务 WEB 访问端口
server.port=8088

# 配置制定服务的提供者地址列表
#order-service.ribbon.listOfServers=\
#  localhost:8080,localhost:8082


eureka.client.service-url.defaultZone=http://localhost:8761/eureka,http://localhost:8762/eureka

6 Eureka自我保护机制

在默认配置中,Eureka在运行过程,会统计心跳失败的比例在15分钟之内,低于85%的节点,Eureka server会认为这个实例出现了网络故障,直接剔除这个有问题的服务。

但是如果开启了保护机制,则:

  • eureka server 不会剔除因为长时间没有收到心跳数据的过期服务
  • eureka server 仍然能够接受新的服务的注册和查询

这个机制,减少了在网络抖动或者网络不稳定的情况下,误删除情况的发生。

7 Eureka的原理

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值