博客引用处(以下内容在原有博客基础上进行补充或更改,谢谢这些大牛的博客指导):
基于Eureka的服务治理
服务发现和注册和Eureka
服务的注册与发现
关系调用说明:
- 服务生产者启动时,向服务注册中心注册自己提供的服务
- 服务消费者启动时,在服务注册中心订阅自己所需要的服务
- 注册中心返回服务提供者的地址信息个消费者
- 消费者从提供者中调用服务
Eureka简介
Eureka是Spring Cloud Netflix微服务套件中的一部分,可以与Springboot构建的微服务很容易的整合起来。Eureka包含了服务器端和客户端组件。服务器端,也被称作是服务注册中心,用于提供服务的注册与发现。Eureka支持高可用的配置,当集群中有分片出现故障时,Eureka就会转入自动保护模式,它允许分片故障期间继续提供服务的发现和注册,当故障分片恢复正常时,集群中其他分片会把他们的状态再次同步回来。
客户端组件包含服务消费者与服务生产者。在应用程序运行时,Eureka客户端向注册中心注册自身提供的服务并周期性的发送心跳来更新它的服务租约。同时也可以从服务端查询当前注册的服务信息并把他们缓存到本地并周期性的刷新服务状态。
Ps:
- 每30s发送心跳检测重新进行租约,如果客户端不能多次更新租约,它将在90s内从服务器注册中心移除。
- 客户端还可以缓存一些服务实例信息,比如服务提供者地址,所以即使Eureka全挂掉,客户端也是可以定位到服务地址的
Eureka服务端:
通过服务名发起服务的调用请求,然后再从服务清单中获取服务实例的列表清单,通过指定的负载均衡策略取出一个服务实例位置来进行服务调用。
Eureka服务端支持集群模式部署,当集群中有分片发生故障的时候,Eureka会自动转入自我保护模式。它允许在分片发生故障的时候继续提供服务的发现和注册,当故障分配恢复时,
集群中的其他分片会把他们的状态再次同步回来。
注意:集群中的的不同服务注册中心通过“异步模式”互相复制各自的状态,这也意味着在给定的时间点每个节点关于所有服务的状态可能存在不一致的现象。
Eureka客户端(不是注册中心里面的了)
主要处理服务的注册和发现。客户端服务通过注册和参数配置的方式,嵌入在客户端应用程序的代码中。在应用程序启动时,Eureka客户端向服务注册中心注册自身提供的服务,
并周期性的发送心跳来更新它的服务租约。同时,他也能从服务端查询当前注册过的服务的相关信息,并把它们缓存到本地然后进行周期行的刷新动作更新服务状态。
注册中心:
注册中心按照服务名分类组织服务清单
服务注册表
是一个记录当前可用服务实例的网络信息的数据库,是服务发现机制的核心。服务注册表提供查询API和管理API,使用API 获得可用的服务实例,使用管理API实现注册和注销。
服务发现的方式
- 客户端发现
它的主要特点是客户端决定服务实例的网络位置,并且对请求进行负载均衡。客户端查询服务注册表(可用服务实例数据库),使用负载均衡算法选择一个实例,并发出请求。典型代表Eureka或者ZK
客户端发现模式的优缺点
优点:
不需要很多的网络跳转
缺点:
客户端和服务注册表耦合
需要为应用程序每一种编程语言、框架等建立客户端发现逻辑,比如 Netflix Prana就为非JVM客户端提供一套基于HTTP代理服务发现方案
- 服务器端发现
向某一服务发送请求,客户端会通过向运行位置已知的路由器或者负载均衡器发送请求。他们会查询服务注册表,并向可用的服务实例转发该请求。典型代表Consul + Nginx
服务器端发现模式优缺点:
优点:
客户端无需实现发现功能,只需要向路由器或者负载均衡器发送请求即可
缺点:
除非成为云环境的一部分,否则该路由机制必须作为另一系统组件进行安装与配置。为实现可用性和一定的接入能力,还需要为其配置一定数量的副本。
相较于客户端发现,服务器端发现机制需要更多的网络跳转。
Ps:
- 服务注册在Eureka上并且每30秒发送心跳来续租。如果一个客户端在多次出现应该发送心跳的情况下没有发送没有刷新心跳的情况,它将在大约90秒(移除需要的时间)内被移出服务器注册表。然后更新服务器注册表信息,之后新的注册表信息会在整个eureka集群的节点进行复制。(心跳检测的方式去监测清单中的服务是否可用,若不可用需要从服务清单中剔除,以达到排除故障服务的效果。)
- 由于Eureka客户端有注册表缓存信息,即使所有的eureka服务器都挂了,服务也能正常运行。