服务消费者找到服务提供者的这种机制称为服务发现,又或者服务注册。
不妨先思考一下,怎样才能让服务消费者总能找到服务提供者呢?或者说,怎样才能让服务消费者感知到服务提供者地址的变化呢?
服务发现机制非常简单,用大家熟悉的MySQL来类比
image.png
如图:
这样,服务消费者不就永远都能找到服务提供者了!当服务消费者想调用服务提供者接口时,只需向数据库发送SQL语句
SELECT * FROM registry where service_name='user' and status='UP'
即可找到服务提供者的所有实例!IP、端口,自己拼接一下,再去调用就行了!
这毕竟只是一个最简陋的服务发现原理。完整的服务发现要考虑的问题有很多,例如:
那么,一个完善的服务发现组件应该具备哪些能力呢?
服务发现原理深入
不妨来看一下使用服务发现组件后的架构图,如图所示。
image.png
服务提供者、服务消费者、服务发现组件这三者之间的关系大致如下:
综上所述,服务发现组件应具备以下功能。
综上,使用服务发现的好处是显而易见的。Spring Cloud为我们提供多种服务发现组件的支持,例如Eureka、Zookeeper、Aliaba Nacos等。