eureka底层原理详解_微服务架构有哪些[通俗易懂]

eureka底层原理详解_微服务架构有哪些[通俗易懂]Java提供了对象序列化机制,允许把任何对象写入输出流中或从输入流中读取

什么是Eurake

      简单来说就是一个服务注册与发现的中间组件,解决的问题很明显,通过用实例名称来替换IP,防止服务所在节点的IP变化之后,其它服务无法调用的问题。

      在Eureka的基本架构中主要有以下三种角色

  • Register Service :服务注册中心,它是一个Eureka Server ,提供服务注册和发现的功能。
  • Provider Service :服务提供者,它是一个Eureka Client ,提供服务,同时它也可以是一个服务消费者
  • Consumer Service :服务消费者,它是一个Eureka Cient ,消费服务,同时它也可以是一个服务提供者。

      使用Eurake后,服务间的调用方式发生了一些细微的变化,服务在启动时会向Eureka Server注册自我信息(主要是服务名、IP),当想访问其它服务时,需要先通过服务名从Eurake Server获取对应服务的IP,然后通过IP重新请求。

Eureka相关特性说明

  1. 集群:作为服务注册中心,Eureka Server通常以集群模式部署,集群之间相互注册,以异步的方式互相复制各自的状态,所以也就存在某时间点,节点间数据临时不一致的情况。
  2. 客户端缓存:为了避免每次请求都出现两次网络I/O,Eureka Client客户端通常会缓存一份Eurake Server上的服务列表。Client端在注册自身信息的同时,会启动一个定时任务,该任务每隔30秒从Eureka Server上拉取一次服务列表,更新本地缓存。此外为了保证IP变化能被及时发现,Eureka Client会与Eurake Server保持一定的心跳频率,上报自己最新的信息。
  3. 服务剔除:默认情况下,Eureka Client每隔30秒会向Eureka Server发起一次心跳。如果Eureka Client连续90秒没有向Eureka Server发送心跳,Eureka Server会认为该服务不可用,从而将该服务实例从服务注册列表删除。
  4. 自我保护机制:如果Eureka Server发现某个服务的连接时断时续,它会认为这可能是网络波动,而因为网络的原因剔除了服务是不合适的。为了应对这种情况,Eureka提供了自我保护机制,如果在短时间内丢失太多的节点,节点会进入自我保护模式。进入保护模式Server保护注册表中的信息,不会去删除服务。网络恢复之后会退出保护模式。使用eureka.server.enable-self-preservation= false 可以禁止自我保护模式。

基于Spring Cloud搭建Eureka集群
        集群原理说明:Eureka Server在启动时默认会注册自己成为一个服务,所以Eureka Server也是一个客户端。所以通过配置多个Eureka Server,让他们之间相互注册,就形成了一个集群。当服务提供者向其中一个Eureka注册服务时,这个服务就会被共享到其他Eureka上,这样所有的Eureka都会有相同的服务。
        Step01:由于每一个server即是服务端也是客户端,所以需要同时添加client和server依赖

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

       Step02:先看一下单节点下的配置。

spring:
  application:
    name: peer1
  
server:
  port: 7001
  
eureka:
  #仪表盘相关配置
  environment: local-test
  datacenter: local-cloud
  dashboard:
    path: /dashboard     #仪表盘访问地址
    enabled: true        #默认为true,启用仪表盘
    
  #instance相关配置  
  instance:
      perfer-ip-address: true
      instance-id: ${spring.application.name}:${spring.cloud.client.ip-address}:${server.port}
      
  #client相关配置    
  client:                   
    serviceUrl:
      defaultZone: http://localhost:7001/eureka/   # 注册链接
    register-with-eureka: false #是否向Eureka Server注册当前服务,默认为true会注册自己。
    fetch-registry: false       #是否检查其它Eureka Server节点    
    initial-instance-info-replication-interval-seconds: 40  #最初复制实例信息到eureka服务器延迟的时间,默认为40秒
    instance-info-replication-interval-seconds: 30      #复制实例信息到eureka服务器的间隔时间,默认为30秒
    registry-fetch-interval-seconds: 30                 #从eureka服务器获取注册信息的间隔时间,默认为30秒

    集群情况下,只需要修改上面配置的以下地方:

  • 将defaultZone地址指向其它Eureka Server注册中心
  • 将register-with-eureka设置为true(默认就是true,所以可以去掉)
  • 将fetch-registry设置为true  (同上)
  • 如果是单机伪集群模式,需要修改端口号
client:                   
    serviceUrl:
      defaultZone: http://localhost:7002/eureka/,http://localhost:7003/eureka/   # 注册链接 

  类似如下:
eureka底层原理详解_微服务架构有哪些[通俗易懂]

  Step03:在启动类上添加@EnableEurekaServer注解,依次启动所有节点。结果如下

eureka底层原理详解_微服务架构有哪些[通俗易懂]

Eureka Server的5种事件监听    

  • EurekaInstanceCanceledEvent:服务下线事件
  • EurekaInstanceRegisteredEvent:服务注册事件
  • EurekaInstanceRenewedEvent:服务续约事件
  • EurekaRegistryAvaiableEvent: 注册中心启动事件,该事件会在Eureka Server启动完以后马上发布。
  • EurekaServerStartedEventEureka:服务端启动事件,该事件会在Eureka Server启动完以后马上发布。
    eureka底层原理详解_微服务架构有哪些[通俗易懂]

  一个简单的监听如下:

@Component
public class EurekaEventListener {

	private final static Logger logger = LoggerFactory.getLogger(EurekaEventListener.class);

    @EventListener
    public void listen(EurekaInstanceCanceledEvent event) {
        logger.warn("---服务{}下线", event.getAppName());
        //...
    }

    @EventListener
    public void listen(EurekaInstanceRegisteredEvent event) {
        InstanceInfo instanceInfo = event.getInstanceInfo();
        logger.info("----服务{}注册", instanceInfo.getAppName() + instanceInfo.getHostName() +"  "+ instanceInfo.getIPAddr() +"  "+ instanceInfo.getPort());
    }

    @EventListener
    public void listen(EurekaInstanceRenewedEvent event) {
        logger.info("---服务{}续约", event.getServerId() +"  "+ event.getAppName());
    }

    @EventListener
    public void listen(EurekaRegistryAvailableEvent event) {
        logger.info("----注册中心启动,{}", System.currentTimeMillis());
    }

    @EventListener
    public void listen(EurekaServerStartedEvent event) {
        logger.info("----注册中心服务端启动,{}", System.currentTimeMillis());
    }
}

   结果如下

eureka底层原理详解_微服务架构有哪些[通俗易懂]

今天的文章eureka底层原理详解_微服务架构有哪些[通俗易懂]分享到此就结束了,感谢您的阅读。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:http://bianchenghao.cn/75599.html

(0)
编程小号编程小号

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注