我是靠谱客的博主 生动荷花,最近开发中收集的这篇文章主要介绍SpringCloud Netflix---Eureka服务注册Eureka注册中心介绍与使用,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

在这里插入图片描述
       如上图所示,常见的微服务应用包括以上各个方面:网关控制,服务配置中心,服务注册中心,服务熔断降级,负载均衡,消息队列等,而SpringCloud Netflix针对以上问题,都有一个相对应的组件来处理相关问题,如:Eureka,Zuul等等。

Eureka注册中心介绍与使用

练习代码gitee地址: https://gitee.com/longjiamou/spring-cloud-netflix.git

1. 什么是Eureka

       Eureka是NetFilx的一个子模块,也是核心模块之一。Eureka是一个基于REST的服务,用于定位服务,实现服务的发现和故障转移,服务注册与发现对于微服务来说是非常重要的,它可以使我们通过服务的标识符(如:服务名等)来访问其他的服务,不需要修改服务调用的相关配置文件。总之,Eureka就是一个服务统一管理的中心,我们可以将我们开发的服务都注册到里面,然后就可以通过相关的标识符来访问其他服务。

2. Eureka原理

在这里插入图片描述

        基本架构: Eureka采用了CS的架构设计,EurekaServer作为服务注册功能的服务器,可以设置为注册中心,其实他本身也是一个我们自己搭建的服务,我们也可以将它注册,就是自己注册自己,但普遍不这么用。而系统中的其他微服务,我们可以将它看为EurekaClient,将其他微服务注册到EurekaServer(也就是注册中心)并维持心跳连接。这样子我们就可以监控系统的各个服务状况。

        CS架构: Eureka包含俩个组件,分别是Eureka Server和Eureka Client。

  • Eureka Server:Eureka Server提供服务注册,各个节点(服务)启动后,会在Eureka Server中进行注册,我们可以在注册中心中查看所有启动节点的相关信息。
  • Eureka Client:Eureka Client是一个java客户端,用于简化EurekaServer的交互,客户端同时具备一个内置的轮询负载均衡器,可以简单的实现一下负载均衡。在应用启动后,Eureka Client将想Eureka Server发送心跳(默认30秒一周期)。如果server在多个心跳周期中没有接收到某个节点的心跳,那么注册中心将会将这个节点移除掉(默认90秒)。所以,当我们的服务宕机后,注册中心并不会立刻将我们的服务节点删除,而是在等心跳机制,心跳机制后,如果服务还没有重新启动,注册中心才会将相关节点移除。

        角色: Eureka Server:提供服务的注册与发现,Eureka Provider:将自身服务注册到Eureka中,方便消费者能够找到,Eureka Consumer:服务消费,从注册中心中找到相关的服务提供者。

3. Eureka原则

       原则信息: Eureka遵循原则信息和我们的数据库的原则信息类似,都是:ACID,CPA等等

       ACID: ACID泛指原子性,一致性,隔离性和持久性。

  • A(Atomicity):原子性是指事务中的所有操作都是一个整体,里面的操作要么都成功,要么都失败。
  • C(Consistency):执行前后的数据必须保持一致
  • I(Isolation):隔离性是针对多个事务而言的,事务之间不能相互干扰,要隔离开来
  • D(Durability):提交之后,对数据库中的数据的改变时永久性的,接下来即使数据库发生故障也不会影响

       CAP: CAP泛指强一致性,可用性和分区容错性,在分布式系统中,不可能同时很好的满足以上三个条件,普遍采取三进二的原则,如:CP,CA,AP,在目前大多数的分布式系统中,因为要保证分区容错性,所以大多数都是在A和C之间选择,但在传统的一些服务来看,如:银行,就必须要保证一致性。

  • C(Consistency):更新操作成功并返回客户端后,所有节点在同一时间的数据完全一致
  • A(Availability):服务一直可用,而且是正常响应时间
  • P(Partition Tolerance):分布式系统在遇到某节点或网络分区故障的时候,仍然能够对外提供满足一致性和可用性的服务,就是说,当一个服务挂掉之后,系统的其他服务还能使用,而不是整个系统不可用。

        Eureka采用原则:Eureka采用的是AP原则,优先保证可用性。Eureka各个节点都是平等的,几个节点挂掉都不会影响其他节点的正常工作,没有挂掉的节点依然可用提供注册和服务查询。在Eureka Client在向某个Eureka注册时,如果发现连接失败,客户端会自动切换到另一个节点注册,只要还有一个服务端的存在,客户端都可以完成注册,只不过查到的信息可能不是最新的。除此之外,Eureka还有一种自我保护机制,如果在15分钟内超过85%的节点都没有心跳的话,那么Eureka则会认为客户端和注册中心出现了网络故障,此时Eureka会做出以下行为:

  1. Eureka不再从注册列表中移除因为长时间没收到心跳而应该过期的服务

  2. Eureka仍然会接收新服务的注册,但是不会同步到其他节点上

  3. 当网络稳定时,当前实例新的注册信息(新服务)重新同步到其他节点上

       因此,Eureka可以很好的应对因网络故障导致部分节点失去联系的情况,而不会像zookeeper那样子使整个注册服务崩掉。

        zookeeper采用原则:zookeeper采用的是CP原则,优先保证强一致性。在zookeeper中,当master主节点因为网络故障与其他的节点失去联系时,剩余节点会重新进行leader选举。在选举的过程中,由于所需的时间过长,大概是30~120秒,在这个时间段zookeeper集群是不可用的,所以会导致整个分布式系统出现网络故障问题,直到选举成功出现新的master节点。由于在分布式系统中,因为网络而导致集群失去master主节点是很大概率会发生的事情,所以zookeeper的CP原则也存在很大的弊端。

4. 简单使用

4.1 非集群搭建:

  1. 准备好相关的服务
    在这里插入图片描述
           Eureka-8081:作为服务的注册中心,提供服务注册管理,server-provider-8083:服务提供者,也可以是消费者,在注册中心注册。

  2. 配置Eureka-8081相关配置

    //pom文件,导入相关依赖
    <dependency>
       <groupId>org.springframework.cloud</groupId>
       <artifactId>spring-cloud-starter-eureka-server</artifactId>
       <version>1.4.6.RELEASE</version>
    </dependency>
    
    #配置yam文件
    server:
      port: 8081
    
    eureka:
      instance:
        hostname: localhost				#服务注册中心主机名
      client:
        register-with-eureka: false		#声明不注册自身
        fetch-registry: false			#声明该服务作为注册中心使用
        service-url:					#声明界面访问地址
          defaultZone: http://localhost:8081/eureka/
    
    //启动类添加相关注解
    @SpringBootApplication
    @EnableEurekaServer
    public class Eureka8081Application {
        public static void main(String[] args) {
            SpringApplication.run(Eureka8081Application.class, args);
        }
    }
    
    1. 配置server-provider-8083配置
//pom文件,导入相关依赖
<dependency>
	<groupId>org.springframework.cloud</groupId>
	<artifactId>spring-cloud-starter-eureka</artifactId>
	<version>1.4.6.RELEASE</version>
</dependency>
#配置yam文件
server:
  port: 8083

eureka:
  client:
    service-url:			#配置注册中心地址,需要Eureka-8081提供的一样,且尾端要为/eureka/
      defaultZone: http://localhost:8081/eureka/
spring:
  application:
    name: server-provider-8083
//启动类配置注解
@SpringBootApplication
@EnableEurekaClient
public class ServerProvide8083Application {
    public static void main(String[] args) {
        SpringApplication.run(ServerProvide8083Application.class, args);
    }
}
  1. 启动俩个服务后,访问注册中心客户端地址:http://localhost:8081/eureka/
    在这里插入图片描述

4.2集群搭建:

       在上面的基础上,多新建一个注册中心Eureka-8082,Eureka-8082和Eureka-8081的配置基本相同,只不过端口和互相映射的路径有差别。

​ Eureka的集群配置其实原理很简单,主要将俩个注册中心产生连接关系就可以了。

  1. Eureka-8082相关配置:
//pom文件,导入相关依赖
<dependency>
   <groupId>org.springframework.cloud</groupId>
   <artifactId>spring-cloud-starter-eureka-server</artifactId>
   <version>1.4.6.RELEASE</version>
</dependency>
#配置yam文件
server:
  port: 8082

eureka:
  instance:
  	#服务注册中心主机名(访问路径和localhost一样,这里写127.0.0.1主要是用来区分的)
    hostname: 127.0.0.1	
  client:
    register-with-eureka: false		
    fetch-registry: false			
    service-url:					
      #映射Eureka-8081注册中心,将访问路径设置为Eureka-8081的路径(重点)
      defaultZone: http://localhost:8081/eureka/
//启动类添加相关注解
@SpringBootApplication
@EnableEurekaServer
public class Eureka8082Application {
    public static void main(String[] args) {
        SpringApplication.run(Eureka8082Application.class, args);
    }
}

2.修改Eureka-8081的yam文件

server:
  port: 8081

eureka:
  instance:
    hostname: localhost
  client:
    register-with-eureka: false
    fetch-registry: false
    service-url:
    #将映射地址修改为Eureka-8082的路径(重点)
      defaultZone: http://127.0.0.1:8082/eureka/

3.修改server-provider的yaml文件

server:
  port: 8083

eureka:
  client:
    service-url:
    #将注册中心设置为俩个
      defaultZone: http://localhost:8081/eureka/,http://12.0.0.1:8082/eureka/
spring:
  application:
    name: server-provider-8083

4.启动Eureka-8081,Eureka-8082和server-provider三个服务,分别访问http://localhost:8081/eureka/和http://localhost:8082/eureka/可得出:
在这里插入图片描述
在这里插入图片描述

       所以,如果想要建立有三个注册中心以上的集群,可以通过配置yaml文件里面的映射路径,使三个注册中心产生联系,然后在服务注册时向三个注册中心都注册即可。

最后

以上就是生动荷花为你收集整理的SpringCloud Netflix---Eureka服务注册Eureka注册中心介绍与使用的全部内容,希望文章能够帮你解决SpringCloud Netflix---Eureka服务注册Eureka注册中心介绍与使用所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(50)

评论列表共有 0 条评论

立即
投稿
返回
顶部