服务发现定义
服务发现是微服务架构中的一个关键概念,它指的是在分布式系统中动态地发现和识别可用的服务实例。
服务发现即通过注册中心,获取到注册到其中的服务实例的信息,通过这些信息去请求它们提供的服务。
如下图所示:
ServiceA去注册中心获取服务实例的信息,这就是服务发现。
服务发现作用
在传统的单体应用中,通常会使用硬编码的方式来指定服务的位置和地址。
而在微服务架构中,由于服务数量多、实例动态变化,硬编码的方式不再适用,因此需要引入服务发现机制。
服务发现的作用:是使服务能够自动注册、注销和发现其他服务的实例,以便实现动态的服务调用和负载均衡。
服务发现原理
服务发现的原理主要基于以下几个关键步骤:
1.注册
当一个服务实例启动时,它会向注册中心注册自己的信息,包括IP地址、端口号、服务名称、健康状态等。注册中心将这些信息存储在自己的注册表中。
2.发现
当需要调用其他服务时,服务消费方会向注册中心发送查询请求,请求指定服务的可用实例列表。
注册中心根据注册表信息,返回满足条件的可用实例列表给服务消费方。
3.负载均衡
服务消费方从注册中心获取到可用实例列表后,根据负载均衡算法选择一个实例进行调用。
负载均衡算法可以根据实例的负载情况、权重等因素进行选择,以实现请求的分发和负载均衡。
4.监测与健康检查
注册中心会定期发送心跳检查请求到服务实例,用于检测实例的健康状态。
如果一个实例长时间没有响应心跳或被标记为不可用,注册中心会将其从可用实例列表中移除,保证服务消费方只获取到可用的实例信息。
5.动态更新
当服务实例的状态发生变化(如启动、关闭、下线、上线等),它会及时向注册中心发送注册或注销请求,以便更新注册表信息。
注册中心会根据实时的变化动态地更新可用实例列表,保证服务消费方获取到最新的服务实例信息。
服务发现框架
以下是一些常见的服务发现框架:
- Netflix Eureka:Eureka开源的服务发现组件,提供了服务注册与发现的功能。
- Apache ZooKeeper:Zookeeper一个分布式协调服务,可以用作服务注册中心。
- Consul:Consul一个开源的服务发现和配置工具,支持服务注册、健康检查和服务发现等功能。
- Etcd:Etcd一个分布式键值存储系统,也可以用作服务注册中心。
陈睿mikechen
10年+大厂架构经验,资深技术专家,就职于阿里巴巴、淘宝、百度等一线互联网大厂。
关注「mikechen」公众号,获取更多技术干货!
后台回复【面试】即可获取《史上最全阿里Java面试题总结》,后台回复【架构】,即可获取《阿里架构师进阶专题全部合集》