微服务-服务注册与发现

1.服务注册与发现基础架构spring

注册中心:
接受服务提供者的注册、存储服务提供者的服务信息 ,好比ip 端口号 服务名这些信息;
而且与微服务保持心跳,若是心跳不能保持则注销该实例。
因此注册中心主要提供服务提供者信息的存储,另外与服务提供者保持心跳以监控服务提供者的存活。
服务提供者:
向注册中心提供服务信息,以及一些健康状态。
服务消费者:
按期向注册中心发送查询请求,以获取服务提供者的信息,获取信息以后就向服务提供者发起服务调用。
当服务提供者向注册中心 ,注册或者注销时,它能够接收到来自注册中心的变动通知。经过变动通知,服务消费者能够实时得到服务提供者的信息。
 
2.Eureka的简介
Eureka分为Eureka server和Eureka client ,Eureka server能够部署在不一样的区域当中,他们能够进行两两注册,他们之间保持服务注册表数据之间的同步,以达到数据的最终一致性。Eureka client嵌入到各个应用当中,服务提供者借助Eureka client实现注册、续约、注销的操做。
续约就是持续发送心跳。
服务消费者经过获取服务的注册信息,经过get register,来发起远程调用。
有三点要注意:
  1).Eureka server支持跨机房的高可用,不一样区域的Eureka server能够同步注册,同一区域也能够两两注册来达到高可用。
  2).Eureka server数据一致性的级别是最终一致性,它相比强一致性的区别在于,最终一致性会保证将来的某一时刻数据保持一致
  3).Eureka client会对注册表进行缓存,从而减轻了server的压力,即便服务宕机也能够从缓存中获取服务信息,这种方式进一步加强了Eureka的高可用
 
3.服务治理的机制
Eureka Server集群:
有两个Eureka Server互相进行注册,每一个Eureka Server都有一个服务注册表,是来自于服务提供者的一些实例信息。
evitTimer每隔一段时间都会扫描服务注册表,去扫描全部的服务是否持续发送心跳,若是没有持续发送心跳,就会从服务注册表中移除服务。
自我保护的模式开关:当服务的存活实例低于默认的85%就会开启自我保护开关,就会影响剔除任务,evictTimer就会中止服务,致使全部的服务再也不进行注销操做。
 
服务提供者:
向Eureka Serve提供三个操做:register/renew/cancel
register:在开启服务的时候会将服务的实例信息同步给Eureka Server,EurekaServer.instance的信息,好比续约心跳的间隔时间和过时时间。
renew:按期发一个renew,也就是续约操做
cancel:服务关闭时会发送注销操做
heartbeat:定时发送续约心跳
instanceReplicate:同步instance信息
 
服务消费者的服务注册表包括Eureka Server全部的服务信息
服务注册表会缓存,当Eureka Server不可用时,会取缓存当中的信息(一样保证了高可用)
 
4.搭建一个Eureka服务架构的步骤
  1)建立一个Eureka server(服务注册中心)
    
  2)建立服务提供者
  
  3)建立服务消费者
  
 
接下来咱们作一个Eureka自我保护欧式的实验:
启动注册中心和和服务提供者,而后ctl+C,关闭服务

 

这时服务提供者会向注册中心发送一个注销的请求。缓存

 

instance就会消失。
 
再次重启用户,执行kill -9  进程号  命令,强制关闭服务实例,这时不会触发shutdown钩子。
这时发现服务实例还在,说明注册中心没有及时发现服务实例已经下线,如今咱们等待十秒中。
咱们得出如下几个结论:
1.当咱们进程平滑中止时,服务会向注册中心发送注销请求,  服务注册中心收到注销请求后会将关联的实例注册状态置位down
2.当咱们执行kill -9的时候不会触发注销操做,这就模拟了断电和进程忽然退出的状况。
以前咱们说过,服务注册到Eureka Server以后,会维护一个心跳链接,告诉Eureka Server本身还活着。
Eureka在运行期间会统计心跳失败的比例低于咱们设定的阈值的时候,它将进入保护模式,而不注销任何服务实例。
可是,在这段期间内实例若出现问题,那么客户端很容易拿到实际已经不存在的服务实例,会出现调用失败的状况,因此客户端必需要有容错机制,好比可使用请求重试、断路器等。
 
5.高可用的注册中心
Eureka的服务治理设计中,全部的节点既是服务提供方,也是服务消费方,服务注册中心也不例外。
Eureka Server的高可用实际上就是将本身所为服务向其余注册中心注册本身,这样就能够造成一组相互注册的服务注册中心,以实现服务清单的互相同步,达到高可用的目的。
实现的方法就是配置两个服务实例文件(在实际生产中开启两个项目,只是配置文件不一样),——application-peer1.properties  application-peer2.properties  
server.port=8777
spring.application.name=eureka-server
eureka.instance.hostname=peer1

#留存的服务实例低于多少比例进入保护模式,保护模式。服务提供者和服务注册中心保持心跳,若是发现没法提供服务,就注销该实例。
#当进入保护模式的状况下,注册中心不会注销服务,以兼容分区故障
eureka.server.renewal-percent-threshold=0.5

#是否开启保护模式
eureka.server.enable-self-preservation=true

#是否注册eureka,高可用的清况下使用
eureka.client.register-with-eureka=true
#是否启用获取服务注册信息
eureka.client.fetch-registry=true
#注册和查询都须要依赖该地址,多个以逗号分隔
eureka.client.serviceUrl.defaultZone=http://peer2:8666/eureka/
View Code
server.port=8666
spring.application.name=eureka-server
eureka.instance.hostname=peer2

#留存的服务实例低于多少比例进入保护模式,保护模式。服务提供者和服务注册中心保持心跳,若是发现没法提供服务,就注销该实例。
#当进入保护模式的状况下,注册中心不会注销服务,以兼容分区故障
eureka.server.renewal-percent-threshold=0.5

#是否开启保护模式
eureka.server.enable-self-preservation=true

#是否注册eureka,高可用的清况下使用
eureka.client.register-with-eureka=true
#是否启用获取服务注册信息
eureka.client.fetch-registry=true
#注册和查询都须要依赖该地址,多个以逗号分隔
eureka.client.serviceUrl.defaultZone=http://peer1:8777/eureka/
View Code

 

6.Eureka的核心特性
 1)经过相互注册与复制支持高可用
 2)支持用户认证
 3)支持注册表缓存(容错机制)
 4)保护模式(解决网络分区故障)
 5)服务提供方上报健康检查
 6)支持Restful API
相关文章
相关标签/搜索