Spring-cloud 基础学习

Spring-cloud-eureka 基础架构:

核心要素:

服务注册中心: Eureka提供的服务端,提供服务注册和发现的功能

服务提供者: 提供服务的应用,它将自己的服务注册到eureka,以供其他应用发现
  (
  服务注册:
    服务提供者在启动的时候 会通过Rest请求的方式将自己注册到Eureka Server上,同时带上了自身服务的一
    些元数据信息.Eureka Server接收到这个Rest请求之后,将元数据信息存储在一个双层结构MAP中,其中第一层
    的key是服务名,第二层的key是具体服务的实例名.

    通过 client.register-with-eureka 参数来判断是否需要注册到注册中心 这个参数默认为true
    在源码中,服务注册的逻辑在if(clientConfig.shouldRegisterWithEureka())中,在该分支中,创建了一个InstanceInfoReplicator
    的实例,它会执行一个定时任务,真正触发调用注册的逻辑在discoveryClient.register();服务的注册是通过Rest的方式去进行的,
    在发起注册请求的时候,会传递一个instanceInfo的对象,这个就是客户端给服务端注册服务的元数据.
    在服务注册的时候,会调用publishEvent函数,将该新服务注册的事件传播出去,然后调用父类的注册实现,将instantInfo的元数据
    存储在一个ConcurrentHashMap对象中.注册中心储存了两层map结构,第一层的key存储服务名:instantInfo中的appName属性,第二层
    的key存储实例名:instanceInfo中的instanceId属性



  服务同步:
    当两个服务提供者分别注册到了不同的服务注册中心上,也就是说,它们的信息分别被两个服务注册中心所维护.
    由于服务注册中心之间因互相注册为服务,当服务提供者发送注册请求到一个服务注册中心时,它会将请该求
    转发给集群中相连的其他注册中心,从而实现注册中心之间的服务同步。通过服务同步,两个服务提供者的信息
    就可以通过这两台服务注册中心的任意一台获取到。

  服务续约:
    在注册完服务之后,服务提供者会维护一个心跳用来持续告诉Eureka Server,以防止Eureka Server的剔除任务
    将该服务实例从服务列表中排除出去,我们称该操作为服务续约
    服务注册到Eureka Server之后,需要一个心跳去续约,防止被剔除。对于服务续约相关的时间控制参数为
      eureka.instance.lease-renewal-interval-in-seconds = 30
      eureka.instance.lease-expiration-duration-in-seconds = 30

  )
服务消费者: 消费者应用从服务注册中心获取服务列表,从而使消费者可以知道去何处处理调用其所需要的服务
(实现方式: Ribbon Feign)
  获取服务:
    当我们启动服务消费者的时候,它会发送一个Rest请求给服务注册中心,来获取上面注册的服务清单。为了性能考虑,
    Eureka Server会维护一份只读的清单来返还给客户端,同时该缓存清单会30秒更新一次
  服务调用:
    服务消费者在获取服务清单后,通过服务名可以获取具体提供服务的实例名和该实例的元数据信息。
    因为有这些服务实例的详细信息,所以客户端可以根据自己的需要决定具体调用哪个实例,在Ribbon中会采用轮询的方式
    进行调用,从而实现客户端的负载均衡。



Eureka注册类配置项: 客户端的配置都是以eureka.client为前缀

  指定注册中心(当构建高可用的服务注册中心集群时,我们可以为参数的value配置为多个地址,用逗号隔开):
    eureka.client.serviceUrl.defaultZone = http://localhost:9011/eureka/
  启用eureka客户端 默认为true
    eureka.client.enabled = true
  是否从eureka服务端获取注册信息
    eureka.client.fetch-register = true

Eureka实例类配置项: 实例类的配置都以eureka.instance为前缀
  元数据:
    eureka客户端在向服务注册中心发送注册请求的时候,会把例如:服务名称,实例Ip,实例端口等用于服务
    治理的重要信息;以及一些用于负载均衡策略或是其他特殊用途的自定义元数据信息
    在使用eureka的时候,所有的配置信息都由EurekaInstanceConfigBean进行加载,但在正在进行服务注册的时候,
    还是会包装成instanceInfo对象发送给服务端

posted @ 2019-03-28 14:20  高级开发彭瑜  阅读(140)  评论(0)    收藏  举报