Eureka服务注册与发现
spring cloud是很多技术的合集,比如Spring-Cloud Euraka是Spring Cloud集合中一个组件,它是对Euraka的集成,用于服务注册和发现。
Spring Cloud封装了Netlix 公司开发的Eureka模块来实现服务治理,管理服务于服务之间依赖关系,可以实现服务调用、负载均衡、容错等,实现服务发现与注册。
Eureka是Netflix中的一个开源框架。
它和 zookeeper、Consul一样,都是用于服务注册管理的,同样,Spring-Cloud 也集成了Zookeeper和Consul。
在项目中使用Spring Cloud Euraka的原因是它可以利用Spring Cloud Netfilix中其他的组件,如zull等,因为Euraka是属于Netfilix的。
服务注册与发现
eureka在微服务的体系中,主要的功能是实现服务治理,服务注册与发现
- 我们知道,微服务就是将项目中的模块按照业务来拆分,每个业务模块就是一个单独的服务,可以根据需要把某个服务部署多个,然后服务之间还会相互调用。
- 但是,A服务想调用B服务,而B服务部署了多个,那么A怎么知道B服务1和B服务2的地址?如果临时又增加了B3,那么怎么告诉A,B3的地址?
- 又或者B服务1宕机了,这时候A服务不知道,依然选择使用B1,就会服务调用失败。那么怎么把B1宕机的消息及时告诉其他服务?
解决方式就是:引入服务管理者,也就是服务治理
服务治理的管理者叫做注册中心
服务注册:每个服务在启动的时候,告诉注册中心自己的位置信息
服务发现:A服务想调用B服务,就得先去注册中心拿到所有服务的位置信息,然后找到B的地址,发起调用
心跳机制:服务启动之后,每过30秒向注册中心发一个消息,告诉注册中心自己还存活。
如果注册中心长时间没有收到某个服务的心跳,那么就会认为该服务宕机,然后把该服务从注册列表中删除。
默认是3个心跳周期,也就是90秒。
Eureka 组件
在Eureka的架构中,分为 Eureka Server 和 Eureka client。
Eureka 注册中心 Eureka Server
-
Eureka Server 作为服务注册功能的服务器,也是服务注册中心。
-
提供服务注册服务,在各节点启动之后,会在Eureka Server 中进行注册。
这样Eureka Server 中的服务注册表中将会存储所有可用服务节点的信息,
服务节点的信息可以在界面中直接看到(监控页面) -
系统中的其他微服务,使用eureka的客户端连接到eureka server并维持心跳连接。
这样系统的维护人员就可以通过eureka server来监控那个系统中各个微服务是否正常运行。
Eureka 客户端 Eureka Client
-
eureka client是一个Java客户端,用于简化eureka server的交互
-
客户端也具备一个内置的,使用轮询负载算法的负载均衡器
- 在应用启动后,会向eureka server发送心跳(默认周期30秒)
- 如果eureka server在多个心跳周期(默认3个心跳周期,90秒)中没有收到某个节点的心跳,就认为它死亡,eureka server就会从服务注册表中把这个服务节点移除
- eureka client会缓存服务注册表中的信息。
这种方式可以降低eureka server的压力,
即使所有的eureka server宕机,服务调用方依然可以完成调用